轉速測量儀

摘要:本系統是基於Freescale HC08GP32單片機主控制器的轉速測量系統,該系統採用兩個高靈敏度的紅外反射光傳感器,對圓盤覆銅和圓盤白色部分進行檢測,將檢測的數據送入單片機進行處理,單片機將處理結果送到LCD顯示。在LCD上能直觀的看到轉動方向,圓盤的轉速,功耗和圓盤轉速變化曲線。

Abstract: The system is based on Freescale HC08GP32 MCU speed measurement system that uses two high-sensitivity infrared reflective photoelectric sensor, on the copper disc and the white part of the disc to detect, the test data into the single chip processor, microcontroller will handle the results sent to the LCD display. In the LCD,can directly see the disk rotation speed,rotation direction and the disk rotational speedc curve.

本系統設計的主要特色:

採用穩定可靠的Freescale HC08GP32單片機。

使用能顯示中文的OCMJ5x10B液晶LCD。

優化的軟件算法,智能化的自動控制,定位精確度高。

1.方案的選擇與論證

1.1、控制器模塊選擇

方案1:採用可編程邏輯器件CPLD 作爲控制器。CPLD可以實現各種複雜的邏輯功能、規模大、密度高、體積小、穩定性高、IO資源豐富、易於進行功能擴展。採用並行的輸入輸出方式,提高了系統的處理速度,適合作爲大規模控制系統的控制核心。但本系統不需要複雜的邏輯功能,且CPLD計算能力差,不能滿足計算要求。且從使用及經濟的角度考慮我們放棄了此方案。

方案2:採用飛思卡爾公司的HC08GP32單片機,具有體積小、可靠性高、穩定可靠、中斷處理能力強、處理速度快等特點。有兩個輸入捕捉功能方便檢測轉盤速度,完全能實現轉盤的測速。

綜合各方面因素,我們最終選擇了方案2。

1.2、轉速傳感器模塊選擇

方案1:可見光發光二極管與光敏二極管組成的發射-接收電路。這種方案的缺點在於其他環境光源會對光敏二極管的工作產生很大幹擾,一旦外界光亮條件改變,很可能造成誤判和漏判;雖然採取超高亮度發光管可以降低一定的干擾,但這又增加額外的功率損耗。

方案2:採用反射式光電傳感器 ITR20001/T ,ITR20001/T傳感器是一種集發射與接收於一體的光電傳感器,可用於圓盤覆銅和圓盤白色部分的檢測。ITR20001/T傳感器受可見光干擾小,輸出信號爲開關量,信號處理簡單,使用非常方便。此模塊不需外部電路,我們只要加入一個10K和100歐姆的上拉電阻便可使其工作正常。

基於以上情況,我們選擇了方案2。

1.3、電源模塊選擇

方案1:採用4節5號乾電池供電。此方案價格便宜,安裝簡單。但是我們發現乾電池電量消耗很快,導致不能提供持續的工作電流。

方案2:採用直流穩壓電源轉換器,將220V的電壓轉換成5V的電壓,且電壓穩定,簡單方便。

對比方案1和方案2我們選擇了案2。

1.4、小結

經過幾番仔細的論證和比較,我們決定了本系統主要模塊方案如下:

主控制器:飛思卡爾公司的HC08GP32單片機。

轉速傳感器模塊:收發一體的反射式光電傳感器 ITR20001/T

電源模塊:直流穩壓電源轉換器。

2、理論分析與計算

2.1圓盤轉速的測量方法

測量轉速的方法有測頻和測周法。本文選用兩路輸入捕捉配合測周法,即兩個固定位置(角度固定)的傳感器分別檢測的下降沿的時間差值來計算旋轉速度

2.2圓盤轉動方向測量

如下圖所示在圓盤上方10mm內有兩個光電傳感器1和2,在圓盤順時針轉動時,傳感器1的電平先由高到低,然後傳感器2的電平再由高到底;圓盤逆時針轉動時,傳感器2的電平先由高到低,然後傳感器1的電平再由高到底。

clip_image004

1和2爲圓盤上邊的光電傳感器

2.3低功耗分析

每隔十分之八秒開啓一次檢測,檢測時長十分之二秒,這樣一節省功耗百分之八十。

3、系統硬件設計與實現

3.1 單片機最小系統設計

本系統由兩個光電傳感器對圓盤的轉速和方向進行檢測,單片機處理光電傳感器檢測的結果,再送到LCD上顯示。其系統整體框圖如圖1所示:

圖1 系統整體框圖

單片機最小系統原理圖如圖2所示:

clip_image002[4]

圖2 單片機最小系統電路原理圖

3.2 轉速模塊設計

我們採用收發一體的反射式光電傳感器 ITR20001/T,驅動電路原理圖如圖3,ITR20001/T可在+5V下正常工作,在沒有探測到覆銅時,傳感器輸出保持高電平。當檢測到覆銅時,輸出立刻由高調變到低。在圓盤的轉動過程中,可使傳感器的高低電平不斷的變化。輸入到單片機上進行處理。

圖3 光電檢測電路原理圖

4、系統軟件設計

控制電路主要由單片機實現,主要負責對路面的軟件檢測與糾錯,車速檢測,電機驅動,光源檢測,聲光提示。

4.1軟件的主要特色

軟件在設計時,採用C語言和彙編。底層採用彙編語言編寫,而在高層則採用C語言進行編寫。這樣不僅使程序更加簡潔,更加提高了程序的可靠性。

4.2軟件流程圖如圖6

圖6 軟件流程圖

5、系統測試

5.1測試儀器

示波器

5.2測試方法

用示波器測試實驗板上的接收光電信號的IO口的工作頻率,根據測得的工作頻率可以算出電機的轉速。

5.3測試結果(如下表)

項目

第一次

第二次

第三次

第四次

第五次

示波器顯示頻率(HZ)

1.7

3.2

4.7

6.8

8.8

LCD顯示的轉速(r/min)

101

191

280

410

525

算得電機實際轉速(r/min)

102

192

282

408

528

5.4測試結果和誤差分析

我們測試多組數據,用多種數據進行比較,能計算出電機測速的誤差爲多少,由於實驗環境和光電傳感器在圓盤上的角度的影響,會影響LCD顯示電機轉速。

6、參考文獻

[1]全國大學生電子設計競賽組委會. 全國大學生電子設計競賽獲獎作品選編[M] .北京理工大學出版社,2003

[2]王宜懷、劉曉升. 嵌入式技術基礎與實踐 清華大學出版社 2007

[3]夏路易、石宗義 電路原理圖與電路板設計教程 北京希望電子出版社 2002

[4]譚浩強 C語言程序設計 清華大學出版社 2005

7、附錄

附1:部分元器件清單

電阻:47歐姆,10M,150K,10K,470歐姆的電阻

電容:0.47uf,0.01uf,20pf,15pf,0.1uf的電容

晶振:大小爲32.768

其他:LM358集成芯片,9012三極管,ITR20001/T的光電傳感器,電位器,按鍵

2.部分程序清單(判斷方向與計算轉速程序)

/* 代碼段一*/

if((flag0==1)&&(flag1==1))

{

if(time0>time1)

{

temptime = (time0-time1);

temptime = 250000/temptime; //計算

if(xcount<=120) //未超出邊界

{

pset(20 + xcount, 40 - temptime);

}

else if(xcount > 120)

{

xcount = 1;

lineinit();

pset(20 + xcount, 40 - temptime);

}

}

else if(time0

{

temptime = (time1-time0);

temptime = 250000/temptime;

if(xcount <= 120) //未超出邊界

{

pset(20 + xcount, 40 + temptime);

}

else if(xcount > 120)

{

xcount = 1;

lineinit();

pset(20 + xcount, 40 + temptime);

}

}

xcount++;

t1counter = 0;

flag0 = flag1 = 0;

T1Ch0init(); //定時器1通道0初始化

T1Ch1init(); //定時器1通道1初始化

EnableT1Ch0InInt(); // 允許定時器1通道0的輸入捕捉中斷

EnableT1Ch1InInt(); // 允許定時器1通道1的輸入捕捉中斷

T1start();

}

/* 代碼段二*/

if((flag0==1)&&(flag1==1))

{

if(time0>time1)

{

#ifdef lvbo

if(dir != 0)//方向已經不是順時針

{

dir = 0; //重新設置方向爲順時針

temptime = 0; //重新開始累加

addcounter = 0; //累加次數置零

}

if(addcounter <= 5) //累加次數小於5次

{

temptime += (time0-time1); //繼續累加

addcounter++; //累加次數遞增

}

else //累加次數等於5次

{

temptime/=addcounter; //求時間差的平均值

#endif

temptime = (time0-time1);

temptime = (2500000/temptime) * 6;//根據參數計算速度

speed[3] = temptime%10 + '0';

temptime/=10;

speed[2] = temptime%10 + '0';

temptime/=10;

speed[1] = temptime%10 + '0';

temptime/=10;

speed[0] = temptime%10 + '0';

hz_tran(4,1,"逆時針");

asc_tran(8,32,speed);

asc_tran(8,48,consum);

#ifdef lvbo

}

#endif

}

else if(time0

{

#ifdef lvbo

if(dir != 1)

{

dir = 1;

temptime = 0;

addcounter = 0;

}

if(addcounter <= 5)

{

temptime += (time1-time0);

addcounter++;

}

else

{

temptime/=addcounter; //求平均值並顯示

#endif

temptime = (time1-time0);

temptime = (2500000/temptime) * 6;

speed[3] = temptime%10 + '0';

temptime/=10;

speed[2] = temptime%10 + '0';

temptime/=10;

speed[1] = temptime%10 + '0';

temptime/=10;

speed[0] = temptime%10 + '0';

hz_tran(4,1,"順時針");

asc_tran(8,32,speed);

asc_tran(8,48,consum);

#ifdef lvbo

}

#endif

}

flag0 = flag1 = 0;

t1counter = 0;

T1Ch0init(); //定時器1通道0初始化

T1Ch1init(); //定時器1通道1初始化

EnableT1Ch0InInt(); // 允許定時器1通道0的輸入捕捉中斷

EnableT1Ch1InInt(); // 允許定時器1通道1的輸入捕捉中斷

//EnableT1OVInt();

Delay(500);

T1start();

2.:實物圖

image

沒有工作時

 

image

 

工作時

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章