基于FPGA的光電編碼器接口設計
光電編碼器是許多傳感器和自動控制系統(tǒng)的重要部件,可用來測量位移、速度、加速度等。近年來在研究和使用方面,不斷有所創(chuàng)新和發(fā)展。由于光電編碼器具有精度高、體積小、重量輕、響應速度快、可靠性高、抗干擾能力強等特點,因此在國防、科研及工業(yè)自動化等領域應用越來越廣泛。
本文引用地址:http://www.biyoush.com/article/201610/308363.htm在導彈的舵機伺服控制系統(tǒng)中,采用光電編碼器作為位置檢測裝置時,光電編碼器固定在電機軸上,并跟隨電機同軸轉(zhuǎn)動。為了減小舵機的體積,采用1個控制器控制4個舵機。舵機控制器采用DSP+FPGA的架構(gòu),DSP作為主控CPU,FPGA用于做接口處理。本文以Altera公司的型號為EP3C40F48417的FPGA為基礎,采用Verilog語言,設計了可與DSP相連的編碼器計數(shù)器接口,該接口具有數(shù)字濾波、方向鑒別、雙向計數(shù)、復位等功能。
1 光電編碼器原理
光電編碼器根據(jù)形成代碼方式不同,分為增量式和絕對式兩種。絕對式編碼器是直接輸出數(shù)字量的傳感器,在任何時刻編碼器的示值都是唯一固定的;增量式編碼器根據(jù)中心軸所轉(zhuǎn)過的角度,輸出一系列脈沖,典型輸出為兩個相位相差為90°的方波脈沖信號A、B和基準點定位脈沖信號I。增量式編碼器的A、B兩路信號的脈沖數(shù)標志著編碼器所轉(zhuǎn)過的角度,A、B兩路信號的相位關系標志著編碼器的轉(zhuǎn)向,A相超前B相90°時,編碼器正轉(zhuǎn);A相滯后B相90°時,編碼器反轉(zhuǎn);當I相輸出一個脈沖時,表示編碼器旋轉(zhuǎn)了一周。增
量式光電編碼器輸出信號如圖1所示。
由于光電編碼器的轉(zhuǎn)速隨時間可能發(fā)生不斷變化,所以脈沖周期T很難確定。但是在每個脈沖周期內(nèi),A、B兩相方波之間的相位關系是確定的。
2 FPGA設計
光電編碼器選擇MAXON公司的MR型編碼器,旋轉(zhuǎn)一周的脈沖數(shù)為500個。舵機的舵偏角范圍為±30°,速比為125。編碼器A、B兩相信號一個周期內(nèi)信號產(chǎn)生四次變化,編碼器旋轉(zhuǎn)一圈對應的計數(shù)器值應為2000,所以當舵偏角從-30°到+30°變化時,計數(shù)值最大應為41667。FPGA與DSP相連的數(shù)據(jù)線為16位,最大數(shù)值為65536,計數(shù)器的初始值為32768,計數(shù)存在溢出的可能。所以每當舵機到達中心0°時,DSP發(fā)出復位指令,計數(shù)器值復位為32768,這樣在計數(shù)過程中就不會產(chǎn)生數(shù)據(jù)的溢出。為了減小干擾,A、B兩相信號計數(shù)之前要對其進行數(shù)字濾波。編碼器接口結(jié)構(gòu)圖如圖2所示。
2.1 數(shù)宇濾波設計
雖然編碼器輸出信號經(jīng)過了硬件電路的前期處理,但是多數(shù)情況下仍然會產(chǎn)生噪聲信號,從而嚴重影響了計數(shù)的準確性,降低了整個系統(tǒng)的精度。為了消除噪聲信號,在FPGA內(nèi)部設計了一個數(shù)字濾波器來濾除抖動脈沖,防止計數(shù)器的誤計數(shù)。數(shù)字濾波電路如圖3所示。
本設計采用4個D觸發(fā)器、一個JK觸發(fā)器和一些邏輯電路來實現(xiàn)濾波,原理為:A相信號經(jīng)過4路D觸發(fā)器鎖存以后產(chǎn)生3路信號,3路信號相與之后作為JK觸發(fā)器的J端輸入,3路信號取反再做與邏輯之后作為JK觸發(fā)器的K端輸入。根據(jù)JK觸發(fā)器的原理計算各個時刻的信號輸出可知,當干擾信號頻率大于主時鐘頻率的1/3時,干擾信號將會被濾除掉。如圖4所示。A代表有干擾的編碼器信號,CLK為主時鐘信號,CHA為濾波之后的編碼器信號。
時鐘周期的選擇與干擾信號的脈沖寬的有一定的關系,要根據(jù)多次試驗結(jié)果確定干擾信號的頻率范圍,再結(jié)合編碼器信號的脈沖頻率合理選取,這樣才能滿足最后的要求,經(jīng)過試驗確定主時鐘頻率為75 MHz,也就是說25 MHz以上的干擾信號不會對計數(shù)器產(chǎn)生影響。
2.2 計數(shù)器設計
實現(xiàn)計數(shù)的過程一般有兩種方法:一種方法是處理器內(nèi)部定時計數(shù)器實現(xiàn)計數(shù);另一種方法是由可逆計數(shù)器實現(xiàn)計數(shù)。第一種方法結(jié)構(gòu)簡單,較為容易實現(xiàn),但是不具有通用性,而且一個處理器上面的接口數(shù)量有限,無法對多個編碼器同時進行計數(shù)。后一種方案利用FPGA實現(xiàn),具有較好的通用性,功能擴展方便,能夠?qū)Χ鄠€編碼器同時進行計數(shù)。
增量式編碼器根據(jù)軸所轉(zhuǎn)過的角度,輸出一系列脈沖,通過計數(shù)電路,對脈沖進行計數(shù),得到相對的角位移。在脈沖周期T內(nèi),A、B兩相信號共產(chǎn)生四次變化,在每一次變化時計數(shù)器進行計數(shù),這樣計數(shù)脈沖的周期減小到T/4,從而使光電編碼器的角位移測量精度提高4倍。
在采樣主時鐘的下降沿對A、B兩相信號進行采樣,采樣值與前一時刻的采樣值進行比較來判斷計數(shù)器的加減。當電機正轉(zhuǎn)時,A相超前B相90°,則在一個周期內(nèi),兩相信號共有四次相對變化:00→10→11→01→00,每發(fā)生一次變化,計數(shù)器便實現(xiàn)一次加計數(shù),一個周期內(nèi)共可實現(xiàn)4次加計數(shù),從而實現(xiàn)正轉(zhuǎn)狀態(tài)下的四倍頻計數(shù)。當電機反轉(zhuǎn)時,A相滯后B相90°,則在一個周期內(nèi),兩相信號共有四次相對變化:00→01→11→10→00,每發(fā)生一次變化,計數(shù)器便實現(xiàn)一次減計數(shù),一個周期內(nèi)共可實現(xiàn)4次減計數(shù),從而實現(xiàn)反轉(zhuǎn)狀態(tài)下的四倍頻計數(shù)。當沒有狀態(tài)轉(zhuǎn)換時,計數(shù)器不進行計數(shù)。如圖5所示。
采用D觸發(fā)器來進行旋轉(zhuǎn)方向的判斷,B相信號作為時鐘輸入,在B相信號的上升沿采樣A相信號的狀態(tài),當輸出為高電平時,A相超前B相,表示電機正轉(zhuǎn);當輸出為低電平
時,A相滯后B相,表示電機反轉(zhuǎn)。
FPGA與DSP之間通過16位數(shù)據(jù)線、12位地址線,片選信號、時鐘信號和讀寫信號線相連。地址線上面不同的數(shù)據(jù)代表DSP對FPGA的不同操作,地址線協(xié)議如表1所示。計數(shù)器電路如圖6所示。
3 實驗結(jié)果
在實驗室條件下,DSP通過串口將計數(shù)值發(fā)送到計算機上,采用十六進制表示,串口協(xié)議如下:發(fā)送周期為10 ms,波特率為115200kbit/s,無校驗位,8位數(shù)據(jù)位,1位停止位。結(jié)果如圖7所示。
通過串口發(fā)出的數(shù)據(jù)可以看出,計數(shù)器的初始值為32768(十六進制為8090)。當電機正轉(zhuǎn)時計數(shù)器增加,當電機反轉(zhuǎn)時計數(shù)器減少,當電機停止旋轉(zhuǎn)時,計數(shù)器保持當前數(shù)值??梢愿鶕?jù)DSP發(fā)出的復位指令,計數(shù)器復位到初始值32768。DSP和FPGA工作正常,DSP通過片選信號和讀信號能夠?qū)崟r的讀取計數(shù)器的數(shù)值,能夠滿足電機控制的要求。
4 結(jié)論
從以上可以看出,利用FPGA設計光電編碼器的接口電路,減少了系統(tǒng)芯片的數(shù)量,僅用一片芯片即可完成整個系統(tǒng)的設計,降低了系統(tǒng)的功耗,縮小了系統(tǒng)的體積,提高了系統(tǒng)的可靠性和抗干擾能力,用Verilog設計電路,只需要修改程序語句即可,提高了系統(tǒng)維護和升級的便捷性。本文的設計方法結(jié)構(gòu)簡單,無溢出,無誤碼,能夠準確的檢測碼盤位置的變化,運行可靠,能夠與DSP相連。
評論