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