<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于PIC單片機(jī)的測(cè)速系統(tǒng)設(shè)計(jì)

          基于PIC單片機(jī)的測(cè)速系統(tǒng)設(shè)計(jì)

          作者: 時(shí)間:2012-01-07 來(lái)源:網(wǎng)絡(luò) 收藏

          0 引言

          在現(xiàn)代工業(yè)測(cè)量系統(tǒng)中, 位移量和的測(cè)量是關(guān)鍵環(huán)節(jié)。早期的測(cè)量系統(tǒng), 雖然技術(shù)比較成型, 但一般是采用分立元件構(gòu)成的, 其結(jié)果是測(cè)量精度低, 穩(wěn)定性差, 成本高, 抗干擾能力差等。隨著電子技術(shù)和計(jì)算機(jī)技術(shù)的發(fā)展, 測(cè)量系統(tǒng)也逐步向智能化轉(zhuǎn)化。本文利用PIC實(shí)現(xiàn)了的實(shí)時(shí)測(cè)量,通過(guò)推導(dǎo)多倍周期法的測(cè)量誤差算法,得出了一種有效的確定多倍周期法中周期倍數(shù) N的方法,使之在高、低速測(cè)量時(shí)均有很小的誤差。本設(shè)計(jì)硬件結(jié)構(gòu)設(shè)計(jì)簡(jiǎn)單,測(cè)量速度快,精度高,運(yùn)行可靠,可以滿(mǎn)足人們愈來(lái)愈高的對(duì)速度準(zhǔn)確性和實(shí)時(shí)性的要求。

          1 系統(tǒng)主要性能特點(diǎn)

          (1) 硬件結(jié)構(gòu)設(shè)計(jì)簡(jiǎn)單,測(cè)量速度快,精度高,運(yùn)行可靠。

          (2) 采用帶有EEPROM的PIC,設(shè)計(jì)了簡(jiǎn)單可靠的掉電保護(hù)功能。

          (3) 兩種測(cè)量模式:測(cè)和測(cè)速度(測(cè)速度時(shí)要預(yù)先通過(guò)按鍵輸入轉(zhuǎn)盤(pán)的周長(zhǎng))。

          (4) 有上下限報(bào)警功能,適用于對(duì)速度或轉(zhuǎn)速有限制的場(chǎng)合。

          (5) 有3個(gè)獨(dú)立的按鍵,可方便的設(shè)置上下限報(bào)警值、測(cè)量模式以及轉(zhuǎn)盤(pán)周長(zhǎng)。

          2 系統(tǒng)硬件設(shè)計(jì)


          圖(1) 系統(tǒng)體系結(jié)構(gòu)

          PIC16F874A是由美國(guó)Microchip公司生產(chǎn)的8位 Flash型,具有低功能、低工作電壓、高性能、高速度、全靜態(tài)、較強(qiáng)的引腳直接驅(qū)動(dòng)能力等特點(diǎn)。由于采用哈佛(Harvard)雙總線(xiàn)和兩級(jí)指令流水線(xiàn)結(jié)構(gòu),使指令執(zhí)行和取指操作同步進(jìn)行,因而可達(dá)到很高的執(zhí)行速度。該系列單片機(jī)只有35條單字節(jié)指令,除跳轉(zhuǎn)指令是2周期指令外,其它指令都是單周期指令。這與其它的8位單片機(jī)相比節(jié)省了1/2的程序空間,并且具有4∶1的速度優(yōu)勢(shì)。PIC16F874A有4K×14的程序存儲(chǔ)器,192個(gè)字節(jié)的通用寄存器,128字節(jié)的EEPROM,33個(gè)I/O口,3個(gè)定時(shí)/計(jì)數(shù)器及2個(gè)捕捉/比較/PWM模塊,2個(gè)串行口,A/D轉(zhuǎn)換器具有5路模擬量輸入端, 還有時(shí)鐘、復(fù)位、看門(mén)狗定時(shí)器等。由于該單片機(jī)具有非常豐富的資源,使硬件電路得到簡(jiǎn)化,從而降低成本。

          2.1 信號(hào)輸入電路

          在此部分電路設(shè)計(jì)時(shí)采用的器件是夏普公司生產(chǎn)的OPTC光斷續(xù)器,事實(shí)上用其他的器件也是可以的,只要能產(chǎn)生讓單片機(jī)檢測(cè)到的脈沖信號(hào)就可以了。該光斷續(xù)器將發(fā)光部分的GaAs紅外發(fā)光二極管和感光部分的光電二極管以及信號(hào)處理電路(放大器,施密特觸發(fā)器及穩(wěn)壓電路等)集成在一塊芯片上。這種光斷續(xù)器具有下列特點(diǎn):

          (1) 體積小,可靠性高;

          (2) 外圍電路少;

          (3) 能與TTL 、LSTTL、CMOS器件直接連接;

          (4) 工作電壓范圍大(Vcc=4.5­—16V)

          2.2 掉電保護(hù)電路

          單片機(jī)在工作時(shí),困某種原因造成突然掉電,將會(huì)丟失數(shù)據(jù)存儲(chǔ)器(RAM)里的數(shù)據(jù),沖掉前期工作的所有信息。雖然單片機(jī)主電源里有太容量濾波電容器,當(dāng)?shù)綦姇r(shí),單片機(jī)靠貯存在電容器里的能量,一般能維持工作1Oms左右。為此,要求一旦市電發(fā)生瞬問(wèn)斷電時(shí),必須要在小于 10ms的時(shí)間內(nèi)將RAM中的數(shù)據(jù)及時(shí)的轉(zhuǎn)存到EEPROM數(shù)據(jù)寄存器中,在下次上電工作時(shí)將數(shù)據(jù)從EEPROM中調(diào)出來(lái)確保單片機(jī)系統(tǒng)能正常運(yùn)行。由于在PIC16F874A單片機(jī)中集成了128個(gè)字節(jié)的EEPROM這就使得保護(hù)電路非常簡(jiǎn)單,具體電路見(jiàn)圖(2)。其工作原理如下: PIC單片機(jī)B口的RB4—RB7引腳在設(shè)為輸入模式下,當(dāng)輸入電平由高到低或者由低到高發(fā)生電平變化時(shí),可以使單片機(jī)產(chǎn)生中斷,這就是通常所說(shuō)的引腳狀態(tài)變化中斷。當(dāng)12V電源電壓在正常范圍內(nèi)時(shí),單片機(jī)RB4引腳的電平為高電平;而當(dāng)12V電源被切斷時(shí),由于二極管D1的單向?qū)ㄐ宰柚沽藶V波電容C3 的回路,使得RB4引腳上的分壓迅速的下降到足以觸發(fā)RB4引腳內(nèi)部電路發(fā)生電平反轉(zhuǎn),引發(fā)中斷,在中斷程序中完成對(duì)需要保護(hù)的數(shù)據(jù)燒寫(xiě)到EEPROM 中。在燒寫(xiě)的瞬間,單片機(jī)的工作電源依靠電源濾波電容維持即可夠用。


          3 檢測(cè)方法和誤差處理

          通常對(duì)于轉(zhuǎn)速或速度的測(cè)量可轉(zhuǎn)化為對(duì)信號(hào)頻率(或周期)的檢測(cè),對(duì)信號(hào)頻率的檢測(cè)最常采用的三種方法是:記數(shù)法、周期法和多倍周期法。其中記數(shù)法適合測(cè)高頻,測(cè)低頻時(shí)所需時(shí)間較長(zhǎng)故誤差較大;周期法適合測(cè)低頻,測(cè)高頻信號(hào)時(shí)要求的參考脈沖的頻率高故誤差大;這兩種方法共同的優(yōu)點(diǎn)是實(shí)現(xiàn)比較簡(jiǎn)單。而多倍周期法在一定程度上可以解決高低頻之間的矛盾,但實(shí)現(xiàn)相對(duì)困難。因?yàn)槎啾吨芷诜ㄒA(yù)先確定一個(gè)恰當(dāng)?shù)谋稊?shù)N,而N的預(yù)先確定是比較困難的。如果N確定不當(dāng),同樣會(huì)使檢測(cè)的時(shí)間增長(zhǎng)或高頻時(shí)有較大的誤差。在實(shí)際設(shè)計(jì)中,本文對(duì)多倍周期法進(jìn)行了一定的改進(jìn),并提出了一個(gè)簡(jiǎn)單確定N 的算法,即可自動(dòng)地確定恰當(dāng)?shù)腘,又可滿(mǎn)足高低頻信號(hào)的檢測(cè)要求。

          多倍周期法由周期法改進(jìn)而來(lái),周期法在測(cè)量信號(hào)的周期時(shí),由一個(gè)固定頻率的參考脈沖作為加法計(jì)數(shù)器的時(shí)鐘信號(hào)。在被測(cè)信號(hào)一個(gè)周期的開(kāi)始啟動(dòng)加法計(jì)數(shù)器;然后,到這個(gè)周期的結(jié)束停止計(jì)數(shù),假設(shè)這時(shí)候計(jì)數(shù)器的值為M ,參考脈沖的周期為T(mén)m ,則M、Tm 與被測(cè)信號(hào)周期T有如下的關(guān)系:

          T = M * Tm 轉(zhuǎn)速 n = 60/T = 60/(M * Tm) (轉(zhuǎn)/min)

          在這一節(jié)只討論轉(zhuǎn)速的檢測(cè)方法和誤差處理,因?yàn)檗D(zhuǎn)速和速度的檢測(cè)方法和誤差處理是相似的。轉(zhuǎn)速n與速度v的關(guān)系為:v = n * L/ 60 (米/秒) (其中L為轉(zhuǎn)盤(pán)周長(zhǎng))

          一個(gè)Tm 周期對(duì)應(yīng)的轉(zhuǎn)速為: n/M = 60/(M * M * Tm)

          根據(jù)圖(3)所示,最大的誤差有2 * n/M,即最大誤差 = 2 * n/M = 120/(M * M * Tm)。


          圖(3)參考脈沖信號(hào)與被檢測(cè)信號(hào)之間的關(guān)系

          這樣就得到了為什么周期法適合于測(cè)量低頻信號(hào)的原因。從誤差關(guān)系式可看出,當(dāng)n大時(shí),則誤差大;當(dāng)n小時(shí),則誤差小。,從上式也可得到減少誤差n 的兩個(gè)方法:一個(gè)是增加M;另一個(gè)是增加Tm。對(duì)于一臺(tái)確定的檢測(cè)儀而言,Tm是一個(gè)固定的常數(shù)。這樣只有增加M值。但是,對(duì)于一個(gè)轉(zhuǎn)速n,一個(gè)周期內(nèi)的M也是一個(gè)相對(duì)固定的值。因此,要增加M值就只有增加檢測(cè)的周期數(shù),即由一個(gè)周期內(nèi)的測(cè)量擴(kuò)大到多個(gè)周期的測(cè)量。如果假設(shè)N個(gè)周期內(nèi)的計(jì)數(shù)值為Mn,則有:

          可見(jiàn)這兩式是相互矛盾的。要減少誤差就必須增加N,而這時(shí)測(cè)量時(shí)間就相應(yīng)增加;要減少測(cè)量時(shí)間就要減少N,而這時(shí)的誤差就相應(yīng)增加。顯然,要預(yù)先確定一個(gè)恰當(dāng)?shù)腘值是比較困難的。因?yàn)?,不同的轉(zhuǎn)速對(duì)應(yīng)不同的N值。

          針對(duì)N值難以確定這個(gè)問(wèn)題,本文采取了一種比較合理的確定N值的方法。對(duì)于單片機(jī)而言,它的計(jì)數(shù)器的位數(shù)是有限的,假設(shè)為P位。對(duì)一個(gè)轉(zhuǎn)速n而言,當(dāng)計(jì)數(shù)器達(dá)到滿(mǎn)刻度時(shí),對(duì)應(yīng)的誤差是最小的。因此,為使檢測(cè)的誤差最小,就可以以計(jì)數(shù)器是否達(dá)到滿(mǎn)刻度為標(biāo)準(zhǔn)來(lái)確定一個(gè)轉(zhuǎn)速n 對(duì)應(yīng)的N值。假設(shè)單片機(jī)指令執(zhí)行周期為T(mén)m,計(jì)數(shù)器溢出時(shí)間為T(mén)n,檢測(cè)到的信號(hào)次數(shù)為N,此時(shí)的轉(zhuǎn)速為n,就有如下關(guān)系式:

          Tn = ( ) Tm 誤差: n = 120/[( )( ) Tm/N]

          轉(zhuǎn)速: n = 60N/ ( ) Tm (轉(zhuǎn)/min)

          從n與N的關(guān)系式中可以看出,這時(shí)侯不同的n有不同的N值。為求計(jì)數(shù)器達(dá)到滿(mǎn)刻度時(shí)的N值,具體做法是:用單片機(jī)的計(jì)數(shù)器1來(lái)計(jì)時(shí),再用設(shè)計(jì)一個(gè)計(jì)數(shù)器對(duì)被測(cè)信號(hào)進(jìn)行計(jì)數(shù)。當(dāng)計(jì)數(shù)器1溢出以后,取該計(jì)數(shù)器的值就可計(jì)算得到要求的N值。這樣就不要象通常的多倍周期法那樣,預(yù)先確定一個(gè)N值。

          4 測(cè)速算法與系統(tǒng)實(shí)現(xiàn)程序

          本文采用PIC單片機(jī)實(shí)現(xiàn)測(cè)速系統(tǒng),在PIC中檔系列單片機(jī)中,定時(shí)器TMR1是一個(gè)標(biāo)準(zhǔn)配置,它是一個(gè)16位的定時(shí)器/計(jì)數(shù)器。如圖(2)所示,我們將檢測(cè)信號(hào)輸入到單片機(jī)INT端。利用定時(shí)器1的定時(shí)和INT的中斷功能來(lái)實(shí)現(xiàn)測(cè)量。

          4.1 主程序流程圖見(jiàn)圖(4)

          (1)初始化程序:初始化定時(shí)器1、INT1及各輸入輸出口設(shè)置,清顯示緩沖區(qū)等。

          (2) 按鍵掃描程序:當(dāng)掃描到有按鍵按下時(shí)做出相應(yīng)的響應(yīng),用來(lái)設(shè)置上下限報(bào)警值、測(cè)量模式以及被測(cè)轉(zhuǎn)盤(pán)周長(zhǎng)。

          (3) 測(cè)量值比較與報(bào)警:用顯示緩沖區(qū)的值與預(yù)設(shè)在EEPROM中的上下限報(bào)警值逐個(gè)比較,當(dāng)大于上限值或小于下限值時(shí)報(bào)警。

          (4)顯示程序:將顯示緩沖區(qū)的BCD碼經(jīng)查表譯碼后送七段數(shù)碼管顯示。

          4.2 中斷服務(wù)程序流程圖見(jiàn)圖(5)

          (1)中斷類(lèi)型判斷:當(dāng)TMR1中斷時(shí),計(jì)數(shù)器1溢出次數(shù)W =W+1;當(dāng)INT中斷時(shí),被檢測(cè)信號(hào)周期數(shù)N =N+1;當(dāng)RB4電平變化中斷時(shí),保存需要掉電保護(hù)的數(shù)據(jù)到EEPROM中;

          (2)轉(zhuǎn)速n的計(jì)算公式為:,其中Tm為指令執(zhí)行周期;速度的計(jì)算公式為:v=n*L/60(米/秒)其中L為轉(zhuǎn)輪周長(zhǎng)。

          圖(5)中斷程序流程圖


          周期;速度的計(jì)算公式為:v =n*L/60(米/秒) 其中L為轉(zhuǎn)輪周長(zhǎng)。

          圖(4)系統(tǒng)主流程圖


          5 結(jié)語(yǔ)

          本文介紹了一種利用單片機(jī)為核心器件實(shí)現(xiàn)高精度轉(zhuǎn)速和速度測(cè)量的系統(tǒng)。經(jīng)過(guò)對(duì)測(cè)速系統(tǒng)的誤差分析,論證了該方法的可行性和實(shí)用性,并成功的利用該系統(tǒng)實(shí)現(xiàn)了對(duì)卷?yè)P(yáng)機(jī)速度的測(cè)量,測(cè)試中各項(xiàng)功能正常,運(yùn)行可靠,使用方便,效果好,達(dá)到了設(shè)計(jì)的要求。

          本文作者創(chuàng)新:采用了以單片機(jī)定時(shí)器溢出為準(zhǔn)來(lái)確定多倍周期法倍數(shù)N的方法,成功的解決了倍數(shù)N難以確定的難點(diǎn);設(shè)計(jì)了測(cè)轉(zhuǎn)速和測(cè)速度兩種測(cè)量模式,有上下限報(bào)警功能使得該系統(tǒng)具有更加廣泛的應(yīng)用前景。

          參考文獻(xiàn)

          [1]姜慶明、楊旭、甘永梅、王曉鈺、王兆安。一種基于光電編碼器的高精度測(cè)速和測(cè)加速度方法[J]。微計(jì)算機(jī)信息,2004,6:48-50。

          [2]張明峰。PIC單片機(jī)入門(mén)與實(shí)踐。北京航空航天大學(xué)出版社,2004年第1版。



          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();