鄭均輝++甘泉
摘 要: 在低速狀態(tài)下經(jīng)LPC2136普通單片機(jī)利用UART通信技術(shù),通過對(duì)光電編碼器的正交信號(hào)分析,來模擬正交編碼器的硬件設(shè)計(jì)與軟件設(shè)計(jì),實(shí)現(xiàn)對(duì)電機(jī)轉(zhuǎn)向及精確定位的數(shù)字化顯示,為編碼器應(yīng)用在低速的自動(dòng)智能控制領(lǐng)域提供了一個(gè)很好的解決方案。測(cè)試證實(shí)該設(shè)計(jì)對(duì)光電編碼器的計(jì)數(shù)與標(biāo)準(zhǔn)記測(cè)器的計(jì)數(shù)值在低速旋轉(zhuǎn)條件下非常準(zhǔn)確。
關(guān)鍵詞: 光電編碼; LPC2136; 接口設(shè)計(jì); UART通信技術(shù)
中圖分類號(hào): TN710?34 文獻(xiàn)標(biāo)識(shí)碼: A 文章編號(hào): 1004?373X(2015)10?0042?03
0 引 言
在工業(yè)控制精度要求相對(duì)較高的領(lǐng)域,比如發(fā)動(dòng)機(jī)的轉(zhuǎn)速測(cè)量控制等自動(dòng)化控制應(yīng)用中,通常需要用正交編碼器對(duì)各種位移、速度、角度等進(jìn)行精確測(cè)量[1]。目前,在一些高級(jí)ARM處理器中,如Cortex?M3內(nèi)核的STM32F系列、周立功的LM3S601/608微控制器[2]等已經(jīng)集成了編碼器接口。但是在實(shí)際工作中出于成本的考慮,需要使用價(jià)格比較低的微控制器,而它們的缺陷是沒有編碼器接口,因此就需要通過常規(guī)的控制器來仿真編碼器接口以滿足應(yīng)用需求。
本文以NXP公司的LPC2136處理器為對(duì)象,研究其在低速轉(zhuǎn)動(dòng)中模擬光電編碼器接口顯示編碼器正反轉(zhuǎn),記錄轉(zhuǎn)動(dòng)圈數(shù),對(duì)其轉(zhuǎn)動(dòng)定位進(jìn)行標(biāo)注,然后完成對(duì)JVH?10BM?E5光電編碼器的精確控制,將獲得的數(shù)據(jù)進(jìn)行分析處理后通過GPIO模擬SPI方式發(fā)送到7段碼顯示,得到準(zhǔn)確直觀的數(shù)字化顯示結(jié)果,同時(shí)通過UART口把數(shù)據(jù)送到PC在串口助手顯示。
1 光電編碼器簡(jiǎn)介
編碼器(Encoder)作為傳感產(chǎn)品的一大重要分支[3],能將信號(hào)或數(shù)據(jù)編制并轉(zhuǎn)換為可用以通信、傳輸和存儲(chǔ)之形式的設(shè)備。編碼器最重要的應(yīng)用就是定位,目前其已經(jīng)越來越廣泛地被應(yīng)用于各種工控場(chǎng)合[4]。如機(jī)床工具、航空航天、鐵道交通、新能源及港口機(jī)械等行業(yè),都在使用著大量的編碼器產(chǎn)品[5]。而光電編碼器,是一種通過光電轉(zhuǎn)換將輸出軸上的機(jī)械幾何位移量轉(zhuǎn)換成脈沖或數(shù)字量的傳感器。這是目前應(yīng)用最多的傳感器,光電編碼器是由光柵盤和光電檢測(cè)裝置組成。光柵盤是在一定直徑的圓板上等分地開通若干個(gè)長(zhǎng)方形孔[6]。由于光電碼盤與電動(dòng)機(jī)同軸,電動(dòng)機(jī)旋轉(zhuǎn)時(shí),光柵盤與電動(dòng)機(jī)同速旋轉(zhuǎn),經(jīng)發(fā)光二極管等電子元件組成的檢測(cè)裝置檢測(cè)輸出若干脈沖信號(hào)。光電編碼器的正反轉(zhuǎn)判斷信號(hào)如圖1所示。A、B兩相信號(hào)是相差[14]周期,如果A提前[B 14]周期則表明順時(shí)針旋轉(zhuǎn),若B提前[A 14]周期則表明逆時(shí)針旋轉(zhuǎn)。
2 硬件系統(tǒng)設(shè)計(jì)
LPC2136微控制器是一個(gè)基于支持實(shí)時(shí)仿真和嵌入式跟蹤的16/32 位ARM7TDMI?S CPU,帶有256 KB嵌入的高速FLASH存儲(chǔ)器。其內(nèi)部具有2個(gè)32位可編程定時(shí)/計(jì)數(shù)器,均具有4路捕獲、4路比較匹配并輸出電路。定時(shí)器對(duì)外設(shè)時(shí)鐘(Pclk)周期進(jìn)行計(jì)數(shù),可選擇產(chǎn)生中斷或根據(jù)4個(gè)匹配寄存器的設(shè)定,在到達(dá)指定的定時(shí)值時(shí)執(zhí)行其他動(dòng)作(輸出高/底電平、反轉(zhuǎn)或者無動(dòng)作)。4個(gè)捕獲輸入,用于在輸入信號(hào)發(fā)生跳變時(shí)捕獲定時(shí)器值并產(chǎn)生中斷。
圖1 光電編碼器信號(hào)示意圖
本設(shè)計(jì)采用型號(hào)為JVH?10BM?E5的光電編碼器,有A、B、Z三條信號(hào)線,在它內(nèi)部光柵盤共有100個(gè)柵格,即每旋轉(zhuǎn)3.6°就能發(fā)出一個(gè)沿變信號(hào)。硬件電路中使用了LPC2136中的P0.16,P0.17,P0.18引腳分別連接光電編碼器的信號(hào)線A,B,Z。使用其GPIO口P0.2,P0.3,P0.4來模擬SPI總線對(duì)數(shù)碼管的數(shù)據(jù)傳輸顯示,各個(gè)數(shù)碼管之間共陰極顯示,通過P0.6~P0.13控制數(shù)碼管段位,用74HC595模擬SPI來選通控制哪一個(gè)顯示。硬件系統(tǒng)原理如圖2所示。
圖2 硬件系統(tǒng)原理框架
設(shè)計(jì)使用12 MHz外部晶振,通過LPC2136定時(shí)器1的捕獲功能來獲取光電編碼器信號(hào)A,Z的信號(hào),通過配置P0.10的CAP1.0通過捕獲A信號(hào)的下降沿從而產(chǎn)生中斷。光電編碼器在正向旋轉(zhuǎn)時(shí),信號(hào)A的波形比信號(hào)B的波形提前90°。通過對(duì)A,B信號(hào)序列研究發(fā)現(xiàn),當(dāng)在信號(hào)A下降沿到來那一刻,如果信號(hào)B是高電平,則能判斷光電編碼器是在順時(shí)針旋轉(zhuǎn),反之,則能判斷光電編碼器是逆時(shí)針旋轉(zhuǎn)。因此,把LPC2136的P0.17設(shè)置成GPIO的輸入模式連接光電編碼器的信號(hào)B端,通過檢測(cè)信號(hào)A下降沿產(chǎn)生中斷的那一刻信號(hào)B的高低電平就能判斷出編碼器的正反轉(zhuǎn),通過4個(gè)數(shù)碼管與上位機(jī)同步顯示。
數(shù)碼管顯示時(shí)使用SPI接口的串行時(shí)鐘線(SCK)、主機(jī)輸入/從機(jī)輸出數(shù)據(jù)線MISO、主機(jī)輸出/從機(jī)輸入數(shù)據(jù)線MOSI等3條線來發(fā)送數(shù)據(jù)給74HC595使其不斷刷新,刷新頻率小于24 Hz的時(shí)候會(huì)使人感覺發(fā)光閃爍,因此,刷新每個(gè)數(shù)碼管的時(shí)間間隔不能大于10 ms,刷新頻率越高顯示亮度越大。
UART是一種通用串行數(shù)據(jù)總線,一般使用3條線,GND、RxD和TxD用于異步通信。該總線雙向通信,可以實(shí)現(xiàn)全雙工傳輸和接收。在本次嵌入式設(shè)計(jì)中,UART0用來與PC進(jìn)行通信,波特率設(shè)為9 600 b/s,8個(gè)數(shù)據(jù)位,1個(gè)停止位。UART首先將接收到的并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)來傳輸。消息幀從一個(gè)低位起始位開始,后面是7個(gè)或8個(gè)數(shù)據(jù)位,一個(gè)可用的奇偶位和一個(gè)或幾個(gè)高位停止位。接收器發(fā)現(xiàn)開始位時(shí)它就知道數(shù)據(jù)準(zhǔn)備發(fā)送,并嘗試與發(fā)送器時(shí)鐘頻率同步。如果選擇了奇偶,UART就在數(shù)據(jù)位后面加上奇偶位。奇偶位可用來幫助錯(cuò)誤校驗(yàn)。在接收過程中,UART從消息幀中去掉起始位和結(jié)束位,對(duì)進(jìn)來的字節(jié)進(jìn)行奇偶校驗(yàn),并將數(shù)據(jù)字節(jié)從串行轉(zhuǎn)換成并行。UART也產(chǎn)生額外的信號(hào)來指示發(fā)送和接收的狀態(tài)。
3 軟件系統(tǒng)設(shè)計(jì)
設(shè)計(jì)使用ADS1.2開發(fā)環(huán)境,EasyJtag在線調(diào)試下載工具,使用串口助手來接收LPC2136發(fā)送過來的編碼器數(shù)據(jù)。首先對(duì)LPC2136進(jìn)行初始化,配置I/O口P0.17、P0.18引腳為數(shù)據(jù)輸入, 配置UART0波特率為9 600 b/s,采用查詢方式來獲取接收或發(fā)送完成時(shí)狀態(tài)。定時(shí)器1的P0.10為下降沿捕獲端口。模擬SPI時(shí)定義P0.2為CLK時(shí)鐘信號(hào),P0.3為DATA數(shù)據(jù)信號(hào),發(fā)送1 B數(shù)據(jù)循環(huán)8次,P0.4 LATCH鎖存信號(hào),等接收到8位數(shù)據(jù)后通過鎖存信號(hào)不斷復(fù)位或置位進(jìn)行位接收字節(jié)接收發(fā)送,通過不斷掃描來點(diǎn)亮數(shù)碼管。在使用I/O模擬SPI時(shí)序發(fā)送數(shù)據(jù)時(shí)需要一定的時(shí)鐘周期來延時(shí),由于數(shù)碼管動(dòng)態(tài)顯示需要不斷刷新,故延時(shí)函數(shù)需調(diào)用點(diǎn)亮數(shù)碼管的語句,否則,多處使用延時(shí)函數(shù)數(shù)碼管就會(huì)產(chǎn)生閃爍。軟件設(shè)計(jì)流程如圖3所示。
程序初始化之后開在捕獲中斷程序中設(shè)置變量flag_int = 0xaa,在主函數(shù)不斷循環(huán)當(dāng)判斷到flag_int為0xaa后來判斷P0.10的電平即正交編碼器B信號(hào)的輸出電平,如果為高,則編碼器順時(shí)針旋轉(zhuǎn),編碼器位置計(jì)數(shù)(程序中使用變量count)值加1;如果P0.10的電平為低,則編碼器逆時(shí)針旋轉(zhuǎn),編碼器位置計(jì)數(shù)值減1。由于使用的光電編碼器旋轉(zhuǎn)一周計(jì)數(shù)值為100,故在count=100時(shí),需對(duì)count清零,同時(shí)對(duì)光電編碼器的旋轉(zhuǎn)圈數(shù)加1。
圖3 MCU主流程圖
正交編碼器低速仿真接口設(shè)計(jì)的主要算法如下。
void __irq Timer1_CapInt (void) //下降沿捕獲中斷函數(shù)
{
T1IR = 1 << 4; //清除CAP1.0中斷標(biāo)志
flag_int=0xaa;
VICVectAddr = 0x00; // 向量中斷處理結(jié)束
}
if(flag_int==0xaa)
//判斷正反轉(zhuǎn)及對(duì)光電編碼器的轉(zhuǎn)動(dòng)角度計(jì)數(shù)
{
if(((IO0PIN&0x00000400)==0x00000400))
//P0.10為高正轉(zhuǎn)
{
flag_int=0x00;
count++; //記錄轉(zhuǎn)動(dòng)的位置
if(count==0x65) //360°記100個(gè)數(shù)
count=0;
UART0_SendByte (count); //串口助手顯示
}
else if(((IO0PIN&0x00000200)==0x00000000))
{
flag_int=0x00;
count??;
if(count==0xff)
count=0x64;
UART0_SendByte (count);
}
}
If(count==0x64) //輸出編碼器Z軸信號(hào)即編碼器旋轉(zhuǎn)圈數(shù)
{
Encoder_Cycle ++;
UART0_SendByte(Encoder_Cycle);
}
4 結(jié) 語
本文介紹了編碼器的工作原理、LPC2136 MCU的部分外設(shè)功能以及在低速狀態(tài)下如何通過普通單片機(jī)來模擬正交編碼器接口的硬件設(shè)計(jì)與軟件設(shè)計(jì)的流程。通過單片機(jī)來模擬正交編碼器的設(shè)計(jì)為編碼器應(yīng)用在低速的自動(dòng)智能控制領(lǐng)域提供了一個(gè)很好的解決方案。把編碼器信號(hào)同時(shí)輸入到創(chuàng)思杰ZN96系列智能記測(cè)器進(jìn)行對(duì)比測(cè)試,證實(shí)本設(shè)計(jì)對(duì)光電編碼器的計(jì)數(shù)與標(biāo)準(zhǔn)記測(cè)器計(jì)數(shù)值在低速旋轉(zhuǎn)條件下非常準(zhǔn)確。由于系統(tǒng)沒有對(duì)實(shí)際應(yīng)用中的各種機(jī)械干擾信號(hào)進(jìn)行濾波,因此就需要在工業(yè)應(yīng)用中進(jìn)一步增加硬件濾波或者軟件濾波消除誤差。同時(shí),如何在濾波成本與濾波性能之間取得較好的性價(jià)比,也需要進(jìn)一步探索研究。
參考文獻(xiàn)
[1] 蔡尚峰.自動(dòng)控制理論[M].北京:機(jī)械工業(yè)出版社,1980.
[2] 賀玲玲.一種用旋轉(zhuǎn)電子編碼器檢測(cè)絕對(duì)角度位置的方法與實(shí)現(xiàn)[J].重慶工商大學(xué)學(xué)報(bào):自然科學(xué)版,2009,26(5):472?476.
[3] 王明順,沈謀全.虛擬編碼器設(shè)計(jì)與轉(zhuǎn)速測(cè)量[J].儀器儀表學(xué)報(bào),2008,29(6):1300?1305.
[4] 權(quán)超健,劉獻(xiàn)禮.光電編碼器輸出信號(hào)自動(dòng)調(diào)試技術(shù)研究[J].測(cè)控技術(shù),2014,33(3):38?42.
[5] 周化仁,潘學(xué)盈,王宗信.檢測(cè)與轉(zhuǎn)換技術(shù)[M].北京:中國礦業(yè)大學(xué)出版社,1989.
[6] 謝劍英.微型計(jì)算機(jī)控制技術(shù)[M].北京:國防工業(yè)出版社, 1985.