基于FPGA的光電編碼器接口設計
光電編碼器是許多傳感器和自動(dòng)控制系統的重要部件,可用來(lái)測量位移、速度、加速度等。近年來(lái)在研究和使用方面,不斷有所創(chuàng )新和發(fā)展。由于光電編碼器具有精度高、體積小、重量輕、響應速度快、可靠性高、抗干擾能力強等特點(diǎn),因此在國防、科研及工業(yè)自動(dòng)化等領(lǐng)域應用越來(lái)越廣泛。
本文引用地址:http://dyxdggzs.com/article/201610/308363.htm在導彈的舵機伺服控制系統中,采用光電編碼器作為位置檢測裝置時(shí),光電編碼器固定在電機軸上,并跟隨電機同軸轉動(dòng)。為了減小舵機的體積,采用1個(gè)控制器控制4個(gè)舵機。舵機控制器采用DSP+FPGA的架構,DSP作為主控CPU,FPGA用于做接口處理。本文以Altera公司的型號為EP3C40F48417的FPGA為基礎,采用Verilog語(yǔ)言,設計了可與DSP相連的編碼器計數器接口,該接口具有數字濾波、方向鑒別、雙向計數、復位等功能。
1 光電編碼器原理
光電編碼器根據形成代碼方式不同,分為增量式和絕對式兩種。絕對式編碼器是直接輸出數字量的傳感器,在任何時(shí)刻編碼器的示值都是唯一固定的;增量式編碼器根據中心軸所轉過(guò)的角度,輸出一系列脈沖,典型輸出為兩個(gè)相位相差為90°的方波脈沖信號A、B和基準點(diǎn)定位脈沖信號I。增量式編碼器的A、B兩路信號的脈沖數標志著(zhù)編碼器所轉過(guò)的角度,A、B兩路信號的相位關(guān)系標志著(zhù)編碼器的轉向,A相超前B相90°時(shí),編碼器正轉;A相滯后B相90°時(shí),編碼器反轉;當I相輸出一個(gè)脈沖時(shí),表示編碼器旋轉了一周。增
量式光電編碼器輸出信號如圖1所示。

由于光電編碼器的轉速隨時(shí)間可能發(fā)生不斷變化,所以脈沖周期T很難確定。但是在每個(gè)脈沖周期內,A、B兩相方波之間的相位關(guān)系是確定的。
2 FPGA設計
光電編碼器選擇MAXON公司的MR型編碼器,旋轉一周的脈沖數為500個(gè)。舵機的舵偏角范圍為±30°,速比為125。編碼器A、B兩相信號一個(gè)周期內信號產(chǎn)生四次變化,編碼器旋轉一圈對應的計數器值應為2000,所以當舵偏角從-30°到+30°變化時(shí),計數值最大應為41667。FPGA與DSP相連的數據線(xiàn)為16位,最大數值為65536,計數器的初始值為32768,計數存在溢出的可能。所以每當舵機到達中心0°時(shí),DSP發(fā)出復位指令,計數器值復位為32768,這樣在計數過(guò)程中就不會(huì )產(chǎn)生數據的溢出。為了減小干擾,A、B兩相信號計數之前要對其進(jìn)行數字濾波。編碼器接口結構圖如圖2所示。

2.1 數宇濾波設計
雖然編碼器輸出信號經(jīng)過(guò)了硬件電路的前期處理,但是多數情況下仍然會(huì )產(chǎn)生噪聲信號,從而嚴重影響了計數的準確性,降低了整個(gè)系統的精度。為了消除噪聲信號,在FPGA內部設計了一個(gè)數字濾波器來(lái)濾除抖動(dòng)脈沖,防止計數器的誤計數。數字濾波電路如圖3所示。

本設計采用4個(gè)D觸發(fā)器、一個(gè)JK觸發(fā)器和一些邏輯電路來(lái)實(shí)現濾波,原理為:A相信號經(jīng)過(guò)4路D觸發(fā)器鎖存以后產(chǎn)生3路信號,3路信號相與之后作為JK觸發(fā)器的J端輸入,3路信號取反再做與邏輯之后作為JK觸發(fā)器的K端輸入。根據JK觸發(fā)器的原理計算各個(gè)時(shí)刻的信號輸出可知,當干擾信號頻率大于主時(shí)鐘頻率的1/3時(shí),干擾信號將會(huì )被濾除掉。如圖4所示。A代表有干擾的編碼器信號,CLK為主時(shí)鐘信號,CHA為濾波之后的編碼器信號。

時(shí)鐘周期的選擇與干擾信號的脈沖寬的有一定的關(guān)系,要根據多次試驗結果確定干擾信號的頻率范圍,再結合編碼器信號的脈沖頻率合理選取,這樣才能滿(mǎn)足最后的要求,經(jīng)過(guò)試驗確定主時(shí)鐘頻率為75 MHz,也就是說(shuō)25 MHz以上的干擾信號不會(huì )對計數器產(chǎn)生影響。
2.2 計數器設計
實(shí)現計數的過(guò)程一般有兩種方法:一種方法是處理器內部定時(shí)計數器實(shí)現計數;另一種方法是由可逆計數器實(shí)現計數。第一種方法結構簡(jiǎn)單,較為容易實(shí)現,但是不具有通用性,而且一個(gè)處理器上面的接口數量有限,無(wú)法對多個(gè)編碼器同時(shí)進(jìn)行計數。后一種方案利用FPGA實(shí)現,具有較好的通用性,功能擴展方便,能夠對多個(gè)編碼器同時(shí)進(jìn)行計數。
增量式編碼器根據軸所轉過(guò)的角度,輸出一系列脈沖,通過(guò)計數電路,對脈沖進(jìn)行計數,得到相對的角位移。在脈沖周期T內,A、B兩相信號共產(chǎn)生四次變化,在每一次變化時(shí)計數器進(jìn)行計數,這樣計數脈沖的周期減小到T/4,從而使光電編碼器的角位移測量精度提高4倍。
在采樣主時(shí)鐘的下降沿對A、B兩相信號進(jìn)行采樣,采樣值與前一時(shí)刻的采樣值進(jìn)行比較來(lái)判斷計數器的加減。當電機正轉時(shí),A相超前B相90°,則在一個(gè)周期內,兩相信號共有四次相對變化:00→10→11→01→00,每發(fā)生一次變化,計數器便實(shí)現一次加計數,一個(gè)周期內共可實(shí)現4次加計數,從而實(shí)現正轉狀態(tài)下的四倍頻計數。當電機反轉時(shí),A相滯后B相90°,則在一個(gè)周期內,兩相信號共有四次相對變化:00→01→11→10→00,每發(fā)生一次變化,計數器便實(shí)現一次減計數,一個(gè)周期內共可實(shí)現4次減計數,從而實(shí)現反轉狀態(tài)下的四倍頻計數。當沒(méi)有狀態(tài)轉換時(shí),計數器不進(jìn)行計數。如圖5所示。

采用D觸發(fā)器來(lái)進(jìn)行旋轉方向的判斷,B相信號作為時(shí)鐘輸入,在B相信號的上升沿采樣A相信號的狀態(tài),當輸出為高電平時(shí),A相超前B相,表示電機正轉;當輸出為低電平
時(shí),A相滯后B相,表示電機反轉。

FPGA與DSP之間通過(guò)16位數據線(xiàn)、12位地址線(xiàn),片選信號、時(shí)鐘信號和讀寫(xiě)信號線(xiàn)相連。地址線(xiàn)上面不同的數據代表DSP對FPGA的不同操作,地址線(xiàn)協(xié)議如表1所示。計數器電路如圖6所示。

3 實(shí)驗結果
在實(shí)驗室條件下,DSP通過(guò)串口將計數值發(fā)送到計算機上,采用十六進(jìn)制表示,串口協(xié)議如下:發(fā)送周期為10 ms,波特率為115200kbit/s,無(wú)校驗位,8位數據位,1位停止位。結果如圖7所示。

通過(guò)串口發(fā)出的數據可以看出,計數器的初始值為32768(十六進(jìn)制為8090)。當電機正轉時(shí)計數器增加,當電機反轉時(shí)計數器減少,當電機停止旋轉時(shí),計數器保持當前數值??梢愿鶕﨑SP發(fā)出的復位指令,計數器復位到初始值32768。DSP和FPGA工作正常,DSP通過(guò)片選信號和讀信號能夠實(shí)時(shí)的讀取計數器的數值,能夠滿(mǎn)足電機控制的要求。
4 結論
從以上可以看出,利用FPGA設計光電編碼器的接口電路,減少了系統芯片的數量,僅用一片芯片即可完成整個(gè)系統的設計,降低了系統的功耗,縮小了系統的體積,提高了系統的可靠性和抗干擾能力,用Verilog設計電路,只需要修改程序語(yǔ)句即可,提高了系統維護和升級的便捷性。本文的設計方法結構簡(jiǎn)單,無(wú)溢出,無(wú)誤碼,能夠準確的檢測碼盤(pán)位置的變化,運行可靠,能夠與DSP相連。
評論