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