在準備”Freescale”杯全國大學(xué)生智能車(chē)比賽中我們開(kāi)始的時(shí)候是采用紅外傳感器來(lái)測量速度,但是它受環(huán)境的干擾很大,且響應頻率很小,還達不到1K Hz,為了提高速度測量精度和響應頻率,減小環(huán)境的干擾,決定采用了旋轉編碼器,我們成功地開(kāi)發(fā)了單片機與旋轉編碼器的最簡(jiǎn)硬件接口。 1 旋轉編碼器及其工作原理 旋轉編碼器是用來(lái)測量角度的裝置。它分為單路輸出和雙路輸出兩種。單路輸出是指旋轉編碼器的輸出是一組脈沖,而雙路輸出的旋轉編碼器輸出兩組相位差90度的脈沖,通過(guò)這兩組脈沖不僅可以測量轉速,還可以判斷旋轉的方向。 它將測量到的角度量轉換為數字脈沖信號輸出,用來(lái)檢測被檢對象的角位移、角速度、角加速度、線(xiàn)位移、線(xiàn)速度和線(xiàn)加速度等,因而,應用十分廣泛。旋轉編碼器有絕對式和增量式兩種。絕對式所測量到的角位置是絕對位置;而增量式所測量的是轉動(dòng)體角位移的累計量。 旋轉編碼器有一個(gè)中心有軸的光電碼盤(pán),其上有環(huán)形通、暗的刻線(xiàn),有光電發(fā)射和接收器件讀取,獲得四組正弦波信號組合成A、B、C、D,每個(gè)正弦波相差90度相位差(相對于一個(gè)周波為360度),將C、D信號反向,疊加在A(yíng)、B兩相上,可增強穩定信號;另每轉輸出一個(gè)Z相脈沖以代表零位參考位。 由于A(yíng)、B兩相相差90度,可通過(guò)比較A相在前還是B相在前,以判別編碼器的正轉與反轉,通過(guò)零位脈沖,可獲得編碼器的零位參考位。 信號輸出有正弦波(電流或電壓),方波(TTL、HTL),集電極開(kāi)路(PNP、NPN),推拉式多種形式,其中TTL為長(cháng)線(xiàn)差分驅動(dòng)(對稱(chēng)A,A-;B,B-;Z,Z-),HTL也稱(chēng)推拉式、推挽式輸出,編碼器的信號接收設備接口應與編碼器對應。編碼器的脈沖信號一般連接計數器、PLC、計算機,PLC和計算機連接的模塊有低速模塊與高速模塊之分,開(kāi)關(guān)頻率有低有高。如單相聯(lián)接,用于單方向計數,單方向測速。B兩相聯(lián)接,用于正反向計數、判斷正反向和測速。 A、B、Z三相聯(lián)接,用于帶參考位修正的位置測量。A、A- 、B、B- 、Z、Z-連接,由于帶有對稱(chēng)負信號的連接,電流對于電纜貢獻的電磁場(chǎng)為0,衰減最小,抗干擾最佳,可傳輸較遠的距離。 為方便用戶(hù)使用,旋轉編碼器信號有電壓、NPN、PNP、T、D多種輸出方式。不同輸出方式的抗電磁干擾的能力也不同。因而,可根據使用的具體要求選擇恰當輸出形式的旋轉編碼器。本設計采用旋轉編碼器的單相聯(lián)接輸出方波。 2 旋轉編碼器與單片機的接口 由于工程實(shí)踐和比賽的需要,我們研究開(kāi)發(fā)了一種單片機與旋轉編碼器直接接口的方法。此方法就是直接將旋轉編碼器信號端與Freescale 的S12的單片機的輸入捕捉/輸出比較通道(IOC)極為簡(jiǎn)潔,由此構成的系統極為簡(jiǎn)單而可靠性很高。旋轉編碼器A相輸出信號,故可使用單片機的IOC1(IOC0~IOC7任意一個(gè)都可以)與之相接。實(shí)際使用時(shí),根據旋轉編碼器信號線(xiàn)的長(cháng)度及電磁干擾的程度,可以在旋轉編碼器與單片機之間增加光電耦合器,或整形門(mén)電路,以抵抗干擾,調理旋轉編碼器的輸入信號。我們在使用中采用了電壓輸出形式的旋轉編碼器,而且信號線(xiàn)很短,接口電路見(jiàn)圖1。 圖1 旋轉編碼器與單片機的接口電路 圖1上拉電阻R是因為我們的編碼器是NPN型集電極開(kāi)路的。在這個(gè)接口方式中,將旋轉編碼器的A相與單片機的IOC1/PT1引腳相連,輸出端需接1KΩ的上拉電阻,這個(gè)電阻是我們通過(guò)實(shí)驗得到的結果,其空載輸出脈沖頻率為0~10KHz。 實(shí)物圖見(jiàn)圖2,我們采用齒輪嚙合的原理將電機的齒輪和編碼器的齒輪嚙合,當電機旋轉帶動(dòng)編碼器的旋轉,編碼器就在接上拉電阻的信號線(xiàn)A上產(chǎn)生方波。 圖2 智能車(chē)上旋轉編碼器的安裝 3 接口程序 上述接口方法是利用了S12單片機的ECT模塊的外部輸入捕捉/輸出比較工作方式。單片機也僅僅使用外部輸入捕捉的來(lái)處理旋轉編碼器數據,只要將旋轉編碼器的A相(或B相)接至外部輸入捕捉口IOC1(IOC0~IOC7任意一個(gè)都可以),程序如下: 用PT1(IOC1)通道作為速度脈沖信號輸入,ECT模塊初始化步驟如下: 1)設置TIOS寄存器,設置PT1通道為輸入; 2)設置TCTL4寄存器,使得上升沿和下降沿(任何沿)均能得到捕捉; 3)設置ICOVW_NOVW寄存器,保護脈沖累加器的數據; 4)置位ICPAR_PA1EN,使能脈沖累加器。設置此寄存器之后,脈沖累加器開(kāi)始計數; 5)通過(guò)讀取PACN1寄存器,即可以獲取當前的脈沖累加值。 初始化程序為: void ECT_initial(void) //ECT初始化 { DDRT_DDRT1=0; //置PT1(IOC1)腳為輸入 TIOS_IOS0=0; TIOS_IOS1=0; //通道1為輸入捕捉 TCTL4=0b00001101; //通道1為任何沿捕捉 TSCR1_TEN=1; //計數器1使能 ICOVW_NOVW1 = 1; //保護 ICPAR_PA1EN = 1; //脈沖累加器使能 } 在每一控制周期開(kāi)始時(shí),MC9S12DG128讀取脈沖累加器中的數值(average),然后與前5個(gè)控制周期的脈沖累加器值求和(all_speed)再求平均值,做為當前速度反饋值(speed)。程序流程圖如圖3所示。 圖3 直流電機測速流程圖 4 計數速度的測試 采用以下兩種方法對電機測速部分進(jìn)行測試: 1)讓智能車(chē)在賽道上行駛,每20ms將賽車(chē)當前速度值通過(guò)SCI串口發(fā)送到上位機上,并利用串口調試器進(jìn)行監控。對正好在一圈當中賽車(chē)行駛的速度值進(jìn)行累加求和,再乘以20ms,得到的總行駛距離約為27m,而模擬賽道總長(cháng)約為26m,兩者的相對誤差不到4%。這說(shuō)明,速度傳感器測量基本準確。 2)直流電機空載運行時(shí),改變脈沖捕捉方式,在上升沿、下降沿和任何沿捕捉方式間進(jìn)行切換。不改變驅動(dòng)電機占空比設置,理想情況下,單位時(shí)間內捕捉的脈沖數滿(mǎn)足:上升沿獲取下的脈沖數=下降沿獲取下的脈沖數=任何沿獲取下的脈沖數/2。在脈沖捕捉方式不變的情況下,改變PWM信號占空比(即改變速度給定值),檢測的速度值與占空比近似成線(xiàn)性比例關(guān)系。以上間接說(shuō)明脈沖檢測的可靠性。 |