目錄: 1、摘要------------------------------------------------------------------------------------------------------3 2、系統(tǒng)結(jié)構(gòu)----------------------------------------------------------------------------------------------3 3、獲取脈沖信號(hào)的方法----------------------------------------------------------------------------4 3、1霍爾傳感器-------------------------------------------------------------4 3、2 光電傳感器-------------------------------------------------------------5 3.3光電編碼器-------------------------------------------------------------6 4、硬件連接圖及原理------------------------------------------------------------------------------6 5、實(shí)驗(yàn)程序及分析-----------------------------------------------------------------------------------8 6.仿真-----------------------------------------------------------------15 7、PROTEL DXP原理圖-------------------------------------------------------------------16 8、PCB圖-------------------------------------------------------------------------------------------------16 9、硬件調(diào)試結(jié)果與分析-------------------------------------------------------------------------17 10、謝詞---------------------------------------------------------------------------------------------------17 11、參考文獻(xiàn)--------------------------------------------------------------------------------------------18 1.摘要 測(cè)速是工農(nóng)業(yè)生產(chǎn)中經(jīng)常遇到的問(wèn)題,學(xué)會(huì)使用單片機(jī)技術(shù)設(shè)計(jì)測(cè)速儀表具有很重要的意義。
要測(cè)速,首先要解決是采樣的問(wèn)題。在使用模擬技術(shù)制作測(cè)速表時(shí),常用測(cè)速發(fā)電機(jī)的方法,即將測(cè)速發(fā)電機(jī)的轉(zhuǎn)軸與待測(cè)軸相連,測(cè)速發(fā)電機(jī)的電壓高低反映了轉(zhuǎn)速的高低。使用單片機(jī)進(jìn)行測(cè)速,可以使用簡(jiǎn)單的脈沖計(jì)數(shù)法。只要轉(zhuǎn)軸每旋轉(zhuǎn)一周,產(chǎn)生一個(gè)或固定的多個(gè)脈沖,并將脈沖送入單片機(jī)中進(jìn)行計(jì)數(shù),即可獲得轉(zhuǎn)速的信息。 2.系統(tǒng)結(jié)構(gòu) 本文主要針對(duì)電機(jī)的轉(zhuǎn)速進(jìn)行測(cè)量,然后用數(shù)碼管把電機(jī)的轉(zhuǎn)速顯示出來(lái)! 本裝置主要有兩部分構(gòu)成。1光電測(cè)速部分。2測(cè)得的脈沖處理處理和顯示部分! 光電測(cè)速部分主要由光電傳感器構(gòu)成!脈沖處理部分主要經(jīng)施密特觸發(fā)器對(duì)接收到的脈沖進(jìn)行波形校正,由單片機(jī)的T1口輸入,經(jīng)80C51處理后顯示輸出電機(jī)的轉(zhuǎn)速 下面我們來(lái)了解一下光電測(cè)速部分! 。 3、脈沖信號(hào)的獲得
可以有多種方式來(lái)獲得脈沖信號(hào),這些方法有各自的應(yīng)用場(chǎng)合。下面逐一進(jìn)行分析。
3.1霍爾傳感器
霍爾傳感器是對(duì)磁敏感的傳感元件,常用于開(kāi)關(guān)信號(hào)采集的有CS3020、CS3040等,這種傳感器是一個(gè)3端器件,外形與三極管相似,只要接上電源、地,即可工作,輸出通常是集電極開(kāi)路(OC)門(mén)輸出,工作電壓范圍寬,使用非常方便。如圖1所示是CS3020的外形圖,將有字面對(duì)準(zhǔn)自己,三根引腳從左向右分別是Vcc,地,輸出。
圖1 CS3020外形圖
使用霍爾傳感器獲得脈沖信號(hào),其機(jī)械結(jié)構(gòu)也可以做得較為簡(jiǎn)單,只要在轉(zhuǎn)軸的圓周上粘上一粒磁鋼,讓霍爾開(kāi)關(guān)靠近磁鋼,就有信號(hào)輸出,轉(zhuǎn)軸旋轉(zhuǎn)時(shí),就會(huì)不斷地產(chǎn)生脈沖信號(hào)輸出。如果在圓周上粘上多粒磁鋼,可以實(shí)現(xiàn)旋轉(zhuǎn)一周,獲得多個(gè)脈沖輸出。在粘磁鋼時(shí)要注意,霍爾傳感器對(duì)磁場(chǎng)方向敏感,粘之前可以先手動(dòng)接近一下傳感器,如果沒(méi)有信號(hào)輸出,可以換一個(gè)方向再試。 這種傳感器不怕灰塵、油污,在工業(yè)現(xiàn)場(chǎng)應(yīng)用廣泛。
3.2.光電傳感器
光電傳感器是應(yīng)用非常廣泛的一種器件,有各種各樣的形式,如透射式、反射式等,基本的原理就是當(dāng)發(fā)射管光照射到接收管時(shí),接收管導(dǎo)通,反之關(guān)斷。以透射式為例,如圖2所示,當(dāng)不透光的物體擋住發(fā)射與接收之間的間隙時(shí),開(kāi)關(guān)管關(guān)斷,否則打開(kāi)。為此,可以制作一個(gè)遮光葉片如圖3所示,安裝在轉(zhuǎn)軸上,當(dāng)扇葉經(jīng)過(guò)時(shí),產(chǎn)生脈沖信號(hào)。當(dāng)葉片數(shù)較多時(shí),旋轉(zhuǎn)一周可以獲得多個(gè)脈沖信號(hào)。
圖2光電傳感器的原理圖
圖3遮光葉片
3.3.光電編碼器
光電編碼器的工作原理與光電傳感器一樣,不過(guò)它已將光電傳感器、電子電路、碼盤(pán)等做成一個(gè)整體,只要用連軸器將光電傳感器的軸與轉(zhuǎn)軸相連,就能獲得多種輸出信號(hào)。它廣泛應(yīng)用于數(shù)控機(jī)床、回轉(zhuǎn)臺(tái)、伺服傳動(dòng)、機(jī)器人、雷達(dá)、軍事目標(biāo)測(cè)定等需要檢測(cè)角度的裝置和設(shè)備中。如圖4所示,是某光電編碼器的外形。
圖4 成品光電編碼器 這次課設(shè)我選的是光電傳感器,采用穿透法測(cè)量電機(jī)轉(zhuǎn)速。光電傳感器的原理上面有詳細(xì)的介紹。 當(dāng)不透光的物體擋住發(fā)射與接收之間的間隙時(shí),開(kāi)關(guān)管關(guān)斷,否則打開(kāi)。為此,可以制作一個(gè)遮光葉片如圖3所示,安裝在轉(zhuǎn)軸上,當(dāng)扇葉經(jīng)過(guò)時(shí),產(chǎn)生脈沖信號(hào)。當(dāng)葉片數(shù)較多時(shí),旋轉(zhuǎn)一周可以獲得多個(gè)脈沖信號(hào)。 這里我們才用轉(zhuǎn)10個(gè)孔的方式!在一分鐘的時(shí)間內(nèi),假如產(chǎn)生了10000脈沖,則電機(jī)的轉(zhuǎn)速就為1000r/min. 4、硬件連接
測(cè)速的方法決定了測(cè)速信號(hào)的硬件連接,測(cè)速實(shí)際上就是測(cè)頻,因此,頻率測(cè)量的一些原則同樣適用于測(cè)速。
通常,可以用計(jì)數(shù)法、測(cè)脈寬法和等精度法來(lái)進(jìn)行測(cè)試。所謂計(jì)數(shù)法,就是給定一個(gè)閘門(mén)時(shí)間,在閘門(mén)時(shí)間內(nèi)計(jì)數(shù)輸入的脈沖個(gè)數(shù);測(cè)脈寬法是利用待測(cè)信號(hào)的脈寬來(lái)控制計(jì)數(shù)門(mén),對(duì)一個(gè)高精度的高頻計(jì)數(shù)信號(hào)進(jìn)行計(jì)數(shù)。由于閘門(mén)與被測(cè)信號(hào)不能同步,因此,這兩種方法都存在±1誤差的問(wèn)題,第一種方法適用于信號(hào)頻率高時(shí)使用,第二種方法則在信號(hào)頻率低時(shí)使用。等精度法則對(duì)高、低頻信號(hào)都有很好的適應(yīng)性。
這里為簡(jiǎn)化討論,僅采用計(jì)數(shù)法來(lái)進(jìn)行測(cè)試。
如上圖:因?yàn)楣怆妭鞲衅鞑缓梅抡妫@里我們采用了555芯片構(gòu)成一個(gè)施密特觸發(fā)器,由光電傳感器得到的脈沖由2,5腳輸入,經(jīng)3腳輸出接到單片機(jī)的T1(P3.5).。經(jīng)89C51編程處理后由P1口輸出通過(guò)數(shù)碼管顯示出轉(zhuǎn)速! 5、實(shí)驗(yàn)程序及分析
測(cè)量轉(zhuǎn)速,使用光電傳感器,被測(cè)電機(jī)帶動(dòng)紙片旋轉(zhuǎn),我們?cè)诩埰祥_(kāi)了10小孔,電機(jī)每旋轉(zhuǎn)一周就會(huì)產(chǎn)生10個(gè)脈沖,產(chǎn)生12個(gè)脈沖,要求將轉(zhuǎn)速值(轉(zhuǎn)/分)顯示在數(shù)碼管上。 實(shí)驗(yàn)程序如下: #include <REG52.H> #define uchar unsigned char #define uint unsigned int #define ulong unsigned long #define LED_DAT P1 sbit LED_SEG0 = P0^3; sbit LED_SEG1 = P0^2; sbit LED_SEG2 = P0^1; sbit LED_SEG3 = P0^0; //sbit pin_SpeedSenser = P3^5; //光電傳感器信號(hào)接在T1上 #define TIME_CYLC 100 //12M晶振,定時(shí)器10ms 中斷一次 我們1秒計(jì)算一次轉(zhuǎn)速 // 1000ms/10ms = 100 #define PLUS_PER 10 //碼盤(pán)的齒數(shù) ,這里假定碼盤(pán)上有10個(gè)齒,即傳感器檢測(cè)到10個(gè)脈沖,認(rèn)為1圈 #define K 100.0 //校準(zhǔn)系數(shù) unsigned char code table[]= {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; uchar data Disbuf[4];// 顯示緩沖區(qū) uint Tcounter = 0; //時(shí)間計(jì)數(shù)器 bit Flag_Fresh = 0; // 刷新標(biāo)志 bit Flag_clac = 0; //計(jì)算轉(zhuǎn)速標(biāo)志 bit Flag_Err = 0; //超量程標(biāo)志 //在數(shù)碼管上顯示一個(gè)四位數(shù) void DisplayFresh(); //計(jì)算轉(zhuǎn)速,并把結(jié)果放入數(shù)碼管緩沖區(qū) void ClacSpeed(); //初始化定時(shí)器T0 void init_timer0(); //初始化定時(shí)器T1 void init_timer1(); //延時(shí)函數(shù) void Delay(uint ms); void it_timer0() interrupt 1 /* interrupt address is 0x000b */ { TF0 = 0; //d定時(shí)器 T0用于數(shù)碼管的動(dòng)態(tài)刷新 // TH0 = 0xC0; /* init values */ TL0 = 0x00; Flag_Fresh = 1; Tcounter++; if(Tcounter>TIME_CYLC) { Flag_clac = 1;//周期到,該重新計(jì)算轉(zhuǎn)速了 } } void it_timer1() interrupt 3 /* interrupt address is 0x001b */ { TF1 = 0; //定時(shí)器T1用于單位時(shí)間內(nèi)收到的脈沖數(shù) //要速度不是很快,T1永遠(yuǎn)不會(huì)溢出 Flag_Err = 1; //如果速度很高,我們應(yīng)考慮另外一種測(cè)速方法,:脈沖寬度算轉(zhuǎn)速 } void main(void) { Disbuf[0] = 0; //開(kāi)機(jī)時(shí),初始化為0000 Disbuf[1] = 0; Disbuf[2] = 0; Disbuf[3] = 0; init_timer0(); init_timer1(); while(1) { if(Flag_Fresh) { Flag_Fresh = 0; DisplayFresh(); // 定時(shí)刷新數(shù)碼管顯示 } if(Flag_clac) { Flag_clac = 0; ClacSpeed(); //計(jì)算轉(zhuǎn)速,并把結(jié)果放入數(shù)碼管緩沖區(qū) Tcounter = 0;//周期定時(shí) 清零 TH1=TL1 = 0x00;//脈沖計(jì)數(shù)清零 } if(Flag_Err) //超量程處理 { //數(shù)碼管顯示字母'EEEE' Disbuf[0] = 0x9e; //開(kāi)機(jī)時(shí),初始化為0000 Disbuf[1] = 0x9e; Disbuf[2] = 0x9e; Disbuf[3] = 0x9e; while(1) { DisplayFresh();//不再測(cè)速 等待復(fù)位i } } } } //在數(shù)碼管上顯示一個(gè)四位數(shù) void DisplayFresh() { P2 |= 0xF0; LED_SEG0 = 0; LED_DAT = table[Disbuf[0]]; Delay(1); P2 |= 0xF0; LED_SEG1 = 0; LED_DAT = table[Disbuf[1]]; Delay(1); P2 |= 0xF0; LED_SEG2 = 0; LED_DAT = table[Disbuf[2]]; Delay(1); P2 |= 0xF0; LED_SEG3 = 0; LED_DAT = table[Disbuf[3]]; Delay(1); P2 |= 0xF0; } //計(jì)算轉(zhuǎn)速,并把結(jié)果放入數(shù)碼管緩沖區(qū) void ClacSpeed() { uint speed ; uint PlusCounter; PlusCounter = TH1*256 + TL1; speed = K*(PlusCounter/PLUS_PER)/60;//K是校準(zhǔn)系數(shù),如速度不準(zhǔn),調(diào)節(jié)K的大小 Disbuf[0] = (speed/1000)%10; Disbuf[1] = (speed/100)%10; Disbuf[2] = (speed/10)%10; Disbuf[3] = speed%10; } //初始化定時(shí)器T0 void init_timer0() { TMOD &= 0xf0; //定時(shí)10毫秒 /* Timer 0 mode 1 with software gate */ TMOD |= 0x01; /* GATE0=0; C/T0#=0; M10=0; M00=1; */ TH0 = 0xC0; /* init values */ TL0 = 0x00; ET0=1; /* enable timer0 interrupt */ EA=1; /* enable interrupts */ TR0=1; /* timer0 run */ } //延時(shí)函數(shù) void Delay(uint ms) { uchar i; while(ms--) for(i=0;i<100;i++); } //初始化定時(shí)器T1 void init_timer1() { TMOD &= 0x0F; /* Counter 1 mode 1 with software gate */ TMOD |= 0x50; /* GATE0=0; C/T0#=1; M10=0; M00=1; */ TH1 = 0x00; /* init values */ TL1 = 0x00; ET1=1; /* enable timer1 interrupt */ EA=1; /* enable interrupts */ TR1=1; /* timer1 run */ }
6.軟件仿真:
如上圖:光電傳感器測(cè)得脈沖由555的2或5腳輸入,由555的三腳輸出,接入AT9C51的P3.5口。P2.4---P2.7為數(shù)碼管的位選端口,p1為數(shù)據(jù)端口。 7.用protel DXP畫(huà)出原理圖如下:
8、根據(jù)原理圖得到的PCB:
9、硬件調(diào)試結(jié)果: 這次課程設(shè)計(jì),主要對(duì)電機(jī)進(jìn)行測(cè)速,在電機(jī)的碼盤(pán)上轉(zhuǎn)了10個(gè)孔, 沒(méi)10ms 對(duì)電機(jī)測(cè)量一次轉(zhuǎn)速!由于工具不太足,做硬件的時(shí)候遇到了不少的困難! 總體來(lái)說(shuō)能夠?qū)崿F(xiàn)其基本功能!電機(jī)轉(zhuǎn)速700---1500r/min.
|