張馳
(中國科學(xué)院 長春光學(xué)精密機(jī)械與物理研究所,吉林 長春 130033)
光電編碼器是許多傳感器和自動控制系統(tǒng)的重要部件,可用來測量位移、速度、加速度等。近年來在研究和使用方面,不斷有所創(chuàng)新和發(fā)展。由于光電編碼器具有精度高、體積小、重量輕、響應(yīng)速度快、可靠性高、抗干擾能力強(qiáng)等特點,因此在國防、科研及工業(yè)自動化等領(lǐng)域應(yīng)用越來越廣泛[1]。
在導(dǎo)彈的舵機(jī)伺服控制系統(tǒng)中,采用光電編碼器作為位置檢測裝置時,光電編碼器固定在電機(jī)軸上,并跟隨電機(jī)同軸轉(zhuǎn)動。為了減小舵機(jī)的體積,采用1個控制器控制4個舵機(jī)。舵機(jī)控制器采用DSP+FPGA的架構(gòu),DSP作為主控CPU,F(xiàn)PGA用于做接口處理。本文以Altera公司的型號為EP3C40F484I7的FPGA為基礎(chǔ),采用Verilog語言,設(shè)計了可與DSP相連的編碼器計數(shù)器接口,該接口具有數(shù)字濾波、方向鑒別、雙向計數(shù)、復(fù)位等功能。
光電編碼器根據(jù)形成代碼方式不同,分為增量式和絕對式兩種。絕對式編碼器是直接輸出數(shù)字量的傳感器,在任何時刻編碼器的示值都是唯一固定的;增量式編碼器根據(jù)中心軸所轉(zhuǎn)過的角度,輸出一系列脈沖,典型輸出為兩個相位相差為90°的方波脈沖信號A、B和基準(zhǔn)點定位脈沖信號I。增量式編碼器的A、B兩路信號的脈沖數(shù)標(biāo)志著編碼器所轉(zhuǎn)過的角度,A、B兩路信號的相位關(guān)系標(biāo)志著編碼器的轉(zhuǎn)向,A相超前 B相 90°時,編碼器正轉(zhuǎn);A相滯后 B相 90°時,編碼器反轉(zhuǎn);當(dāng)I相輸出一個脈沖時,表示編碼器旋轉(zhuǎn)了一周[2]。增量式光電編碼器輸出信號如圖1所示。
圖1 增量式編碼器輸出信號Fig.1 Signal output of incremental encoder
由于光電編碼器的轉(zhuǎn)速隨時間可能發(fā)生不斷變化,所以脈沖周期T很難確定。但是在每個脈沖周期內(nèi),A、B兩相方波之間的相位關(guān)系是確定的[2]。
光電編碼器選擇MAXON公司的MR型編碼器,旋轉(zhuǎn)一周的脈沖數(shù)為500個。舵機(jī)的舵偏角范圍為±30°,速比為125。編碼器A、B兩相信號一個周期內(nèi)信號產(chǎn)生四次變化,編碼器旋轉(zhuǎn)一圈對應(yīng)的計數(shù)器值應(yīng)為2000,所以當(dāng)舵偏角從-30°到+30°變化時,計數(shù)值最大應(yīng)為41667。FPGA與DSP相連的數(shù)據(jù)線為16位,最大數(shù)值為65536,計數(shù)器的初始值為32768,計數(shù)存在溢出的可能。所以每當(dāng)舵機(jī)到達(dá)中心0°時,DSP發(fā)出復(fù)位指令,計數(shù)器值復(fù)位為32768,這樣在計數(shù)過程中就不會產(chǎn)生數(shù)據(jù)的溢出。為了減小干擾,A、B兩相信號計數(shù)之前要對其進(jìn)行數(shù)字濾波。編碼器接口結(jié)構(gòu)圖如圖2所示。
圖2 編碼器接口結(jié)構(gòu)圖Fig.2 Structure diagram of interface with photoelectric encoder
雖然編碼器輸出信號經(jīng)過了硬件電路的前期處理,但是多數(shù)情況下仍然會產(chǎn)生噪聲信號,從而嚴(yán)重影響了計數(shù)的準(zhǔn)確性,降低了整個系統(tǒng)的精度。為了消除噪聲信號,在FPGA內(nèi)部設(shè)計了一個數(shù)字濾波器來濾除抖動脈沖,防止計數(shù)器的誤計數(shù)。數(shù)字濾波電路如圖3所示。
本設(shè)計采用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ā)器的原理計算各個時刻的信號輸出可知,當(dāng)干擾信號頻率大于主時鐘頻率的1/3時,干擾信號將會被濾除掉。如圖4所示。A代表有干擾的編碼器信號,CLK為主時鐘信號,CHA為濾波之后的編碼器信號。
時鐘周期的選擇與干擾信號的脈沖寬的有一定的關(guān)系,要根據(jù)多次試驗結(jié)果確定干擾信號的頻率范圍,再結(jié)合編碼器信號的脈沖頻率合理選取,這樣才能滿足最后的要求,經(jīng)過試驗確定主時鐘頻率為75 MHz,也就是說25 MHz以上的干擾信號不會對計數(shù)器產(chǎn)生影響。
圖3 A相數(shù)字濾波電路Fig.3 Digital filter of channel A
圖4 濾波信號示意圖Fig.4 Signal propagation through digital noise filter
實現(xiàn)計數(shù)的過程一般有兩種方法:一種方法是處理器內(nèi)部定時計數(shù)器實現(xiàn)計數(shù);另一種方法是由可逆計數(shù)器實現(xiàn)計數(shù)。第一種方法結(jié)構(gòu)簡單,較為容易實現(xiàn),但是不具有通用性,而且一個處理器上面的接口數(shù)量有限,無法對多個編碼器同時進(jìn)行計數(shù)。后一種方案利用FPGA實現(xiàn),具有較好的通用性,功能擴(kuò)展方便,能夠?qū)Χ鄠€編碼器同時進(jìn)行計數(shù)。
增量式編碼器根據(jù)軸所轉(zhuǎn)過的角度,輸出一系列脈沖,通過計數(shù)電路,對脈沖進(jìn)行計數(shù),得到相對的角位移。在脈沖周期T內(nèi),A、B兩相信號共產(chǎn)生四次變化,在每一次變化時計數(shù)器進(jìn)行計數(shù),這樣計數(shù)脈沖的周期減小到T/4,從而使光電編碼器的角位移測量精度提高4倍。
在采樣主時鐘的下降沿對A、B兩相信號進(jìn)行采樣,采樣值與前一時刻的采樣值進(jìn)行比較來判斷計數(shù)器的加減。當(dāng)電機(jī)正轉(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ù)。當(dāng)電機(jī)反轉(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ù)。當(dāng)沒有狀態(tài)轉(zhuǎn)換時,計數(shù)器不進(jìn)行計數(shù)[3]。 如圖5所示。
采用D觸發(fā)器來進(jìn)行旋轉(zhuǎn)方向的判斷,B相信號作為時鐘輸入,在B相信號的上升沿采樣A相信號的狀態(tài),當(dāng)輸出為高電平時,A相超前B相,表示電機(jī)正轉(zhuǎn);當(dāng)輸出為低電平時,A相滯后B相,表示電機(jī)反轉(zhuǎn)。
圖5 計數(shù)器狀態(tài)轉(zhuǎn)換圖Fig.5 The mode of counting
FPGA與DSP之間通過16位數(shù)據(jù)線、12位地址線,片選信號、時鐘信號和讀寫信號線相連。地址線上面不同的數(shù)據(jù)代表DSP對FPGA的不同操作,地址線協(xié)議如表1所示。計數(shù)器電路如圖6所示。
表1 地址線協(xié)議Tab.1 The protocol of address
圖6 計數(shù)器電路圖Fig.6 The circuit of counting
在實驗室條件下,DSP通過串口將計數(shù)值發(fā)送到計算機(jī)上,采用十六進(jìn)制表示,串口協(xié)議如下:發(fā)送周期為10 ms,波特率為115200kbit/s,無校驗位,8位數(shù)據(jù)位,1位停止位。結(jié)果如圖7所示。
圖7 串口數(shù)據(jù)界面圖Fig.7 Interface chart of series port
通過串口發(fā)出的數(shù)據(jù)可以看出,計數(shù)器的初始值為32768(十六進(jìn)制為8000)。當(dāng)電機(jī)正轉(zhuǎn)時計數(shù)器增加,當(dāng)電機(jī)反轉(zhuǎn)時計數(shù)器減少,當(dāng)電機(jī)停止旋轉(zhuǎn)時,計數(shù)器保持當(dāng)前數(shù)值。可以根據(jù)DSP發(fā)出的復(fù)位指令,計數(shù)器復(fù)位到初始值32768。DSP和FPGA工作正常,DSP通過片選信號和讀信號能夠?qū)崟r的讀取計數(shù)器的數(shù)值,能夠滿足電機(jī)控制的要求。
從以上可以看出,利用FPGA設(shè)計光電編碼器的接口電路,減少了系統(tǒng)芯片的數(shù)量,僅用一片芯片即可完成整個系統(tǒng)的設(shè)計,降低了系統(tǒng)的功耗,縮小了系統(tǒng)的體積,提高了系統(tǒng)的可靠性和抗干擾能力,用Verilog設(shè)計電路,只需要修改程序語句即可,提高了系統(tǒng)維護(hù)和升級的便捷性。本文的設(shè)計方法結(jié)構(gòu)簡單,無溢出,無誤碼,能夠準(zhǔn)確的檢測碼盤位置的變化,運行可靠,能夠與DSP相連。
[1]劉麗鈞,李曉游,孫清.基于FPGA的光電碼盤位置檢測系統(tǒng)的設(shè)計[J].沈陽工業(yè)大學(xué)學(xué)報,2006(4):157-160.LIU Li-jun,LI Xiao-you,SUN Qing.Design of photoelectrical encoder position detection system based on FPGA[J].Journal of Shengyang University of Technology,2006(4):157-160.
[2]李海濱,劉樂,邵暖,等.具有倍頻、辨相和計數(shù)功能的4倍頻電路及其FPGA實現(xiàn)[J].電氣傳動,2011,41(6):61-64.LI Hao-bing,LIU Le,SHAO Nuan,et al.Circuit with functions of frequency, direction, judgment and counting and its FPGA implementation[J].Electric Drive,2011,41(6):61-64.
[3]金鋒,盧楊,王文松,等.光柵4倍頻細(xì)分電路模塊的分析與設(shè)計[J].北京理工大學(xué)學(xué)報,2006(12):1073-1076.JIN Feng,LU Yang,WANG Wen-song,et al.Analysis and design of a grating with four sub-frequency circuit modules[J].Transactions of Beijing Instituite of Technology,2006(12):1073-1076.
[4]鈔靖,王小椿,姜虹.基于FPGA的光電編碼器四倍頻電路設(shè)計[J].儀表技術(shù),2007(6):17-21.CHAO Jing,WANG Xiao-chun,JIANG Hong.Fourfold frequency multiplication circuit design of incremental optoelectric encoder based on FPGA[J].Instrument Technology,2007(6):17-21.
[5]閆莎莎,朱世強(qiáng),劉華山,等.基于CPLD的光電編碼器測量系統(tǒng)[J].機(jī)電工程,2009(1):77-79.YAN Sha-sha,ZHU Shi-qiang,LIU Hua-shan,et al.Photoelectrical encoder system based on CPLD[J].Mechanical&Electrical Engineering Magazine,2009(1):77-79.
[6]王忠勇.基于CPLD的光電碼盤計數(shù)器的設(shè)計[J].儀器儀表用戶,2007(2):58-59.WANG Zhong-yong.Design ofphotoelectricalencoder counter based on CPLD[J].EIC,2007(2):58-59.