張馳
(中國科學院 長春光學精密機械與物理研究所,吉林 長春 130033)
光電編碼器是許多傳感器和自動控制系統的重要部件,可用來測量位移、速度、加速度等。近年來在研究和使用方面,不斷有所創新和發展。由于光電編碼器具有精度高、體積小、重量輕、響應速度快、可靠性高、抗干擾能力強等特點,因此在國防、科研及工業自動化等領域應用越來越廣泛[1]。
在導彈的舵機伺服控制系統中,采用光電編碼器作為位置檢測裝置時,光電編碼器固定在電機軸上,并跟隨電機同軸轉動。為了減小舵機的體積,采用1個控制器控制4個舵機。舵機控制器采用DSP+FPGA的架構,DSP作為主控CPU,FPGA用于做接口處理。本文以Altera公司的型號為EP3C40F484I7的FPGA為基礎,采用Verilog語言,設計了可與DSP相連的編碼器計數器接口,該接口具有數字濾波、方向鑒別、雙向計數、復位等功能。
光電編碼器根據形成代碼方式不同,分為增量式和絕對式兩種。絕對式編碼器是直接輸出數字量的傳感器,在任何時刻編碼器的示值都是唯一固定的;增量式編碼器根據中心軸所轉過的角度,輸出一系列脈沖,典型輸出為兩個相位相差為90°的方波脈沖信號A、B和基準點定位脈沖信號I。增量式編碼器的A、B兩路信號的脈沖數標志著編碼器所轉過的角度,A、B兩路信號的相位關系標志著編碼器的轉向,A相超前 B相 90°時,編碼器正轉;A相滯后 B相 90°時,編碼器反轉;當I相輸出一個脈沖時,表示編碼器旋轉了一周[2]。增量式光電編碼器輸出信號如圖1所示。

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

圖2 編碼器接口結構圖Fig.2 Structure diagram of interface with photoelectric encoder
雖然編碼器輸出信號經過了硬件電路的前期處理,但是多數情況下仍然會產生噪聲信號,從而嚴重影響了計數的準確性,降低了整個系統的精度。為了消除噪聲信號,在FPGA內部設計了一個數字濾波器來濾除抖動脈沖,防止計數器的誤計數。數字濾波電路如圖3所示。
本設計采用4個D觸發器、一個JK觸發器和一些邏輯電路來實現濾波,原理為:A相信號經過4路D觸發器鎖存以后產生3路信號,3路信號相與之后作為JK觸發器的J端輸入,3路信號取反再做與邏輯之后作為JK觸發器的K端輸入。根據JK觸發器的原理計算各個時刻的信號輸出可知,當干擾信號頻率大于主時鐘頻率的1/3時,干擾信號將會被濾除掉。如圖4所示。A代表有干擾的編碼器信號,CLK為主時鐘信號,CHA為濾波之后的編碼器信號。
時鐘周期的選擇與干擾信號的脈沖寬的有一定的關系,要根據多次試驗結果確定干擾信號的頻率范圍,再結合編碼器信號的脈沖頻率合理選取,這樣才能滿足最后的要求,經過試驗確定主時鐘頻率為75 MHz,也就是說25 MHz以上的干擾信號不會對計數器產生影響。

圖3 A相數字濾波電路Fig.3 Digital filter of channel A

圖4 濾波信號示意圖Fig.4 Signal propagation through digital noise filter
實現計數的過程一般有兩種方法:一種方法是處理器內部定時計數器實現計數;另一種方法是由可逆計數器實現計數。第一種方法結構簡單,較為容易實現,但是不具有通用性,而且一個處理器上面的接口數量有限,無法對多個編碼器同時進行計數。后一種方案利用FPGA實現,具有較好的通用性,功能擴展方便,能夠對多個編碼器同時進行計數。
增量式編碼器根據軸所轉過的角度,輸出一系列脈沖,通過計數電路,對脈沖進行計數,得到相對的角位移。在脈沖周期T內,A、B兩相信號共產生四次變化,在每一次變化時計數器進行計數,這樣計數脈沖的周期減小到T/4,從而使光電編碼器的角位移測量精度提高4倍。
在采樣主時鐘的下降沿對A、B兩相信號進行采樣,采樣值與前一時刻的采樣值進行比較來判斷計數器的加減。當電機正轉時,A相超前B相90°,則在一個周期內,兩相信號共有四次相對變化:00→10→11→01→00,每發生一次變化,計數器便實現一次加計數,一個周期內共可實現4次加計數,從而實現正轉狀態下的四倍頻計數。當電機反轉時,A相滯后B相90°,則在一個周期內,兩相信號共有四次相對變化:00→01→11→10→00,每發生一次變化,計數器便實現一次減計數,一個周期內共可實現4次減計數,從而實現反轉狀態下的四倍頻計數。當沒有狀態轉換時,計數器不進行計數[3]。 如圖5所示。
采用D觸發器來進行旋轉方向的判斷,B相信號作為時鐘輸入,在B相信號的上升沿采樣A相信號的狀態,當輸出為高電平時,A相超前B相,表示電機正轉;當輸出為低電平時,A相滯后B相,表示電機反轉。

圖5 計數器狀態轉換圖Fig.5 The mode of counting
FPGA與DSP之間通過16位數據線、12位地址線,片選信號、時鐘信號和讀寫信號線相連。地址線上面不同的數據代表DSP對FPGA的不同操作,地址線協議如表1所示。計數器電路如圖6所示。

表1 地址線協議Tab.1 The protocol of address

圖6 計數器電路圖Fig.6 The circuit of counting
在實驗室條件下,DSP通過串口將計數值發送到計算機上,采用十六進制表示,串口協議如下:發送周期為10 ms,波特率為115200kbit/s,無校驗位,8位數據位,1位停止位。結果如圖7所示。

圖7 串口數據界面圖Fig.7 Interface chart of series port
通過串口發出的數據可以看出,計數器的初始值為32768(十六進制為8000)。當電機正轉時計數器增加,當電機反轉時計數器減少,當電機停止旋轉時,計數器保持當前數值。可以根據DSP發出的復位指令,計數器復位到初始值32768。DSP和FPGA工作正常,DSP通過片選信號和讀信號能夠實時的讀取計數器的數值,能夠滿足電機控制的要求。
從以上可以看出,利用FPGA設計光電編碼器的接口電路,減少了系統芯片的數量,僅用一片芯片即可完成整個系統的設計,降低了系統的功耗,縮小了系統的體積,提高了系統的可靠性和抗干擾能力,用Verilog設計電路,只需要修改程序語句即可,提高了系統維護和升級的便捷性。本文的設計方法結構簡單,無溢出,無誤碼,能夠準確的檢測碼盤位置的變化,運行可靠,能夠與DSP相連。
[1]劉麗鈞,李曉游,孫清.基于FPGA的光電碼盤位置檢測系統的設計[J].沈陽工業大學學報,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]李海濱,劉樂,邵暖,等.具有倍頻、辨相和計數功能的4倍頻電路及其FPGA實現[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倍頻細分電路模塊的分析與設計[J].北京理工大學學報,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的光電編碼器四倍頻電路設計[J].儀表技術,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]閆莎莎,朱世強,劉華山,等.基于CPLD的光電編碼器測量系統[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的光電碼盤計數器的設計[J].儀器儀表用戶,2007(2):58-59.WANG Zhong-yong.Design ofphotoelectricalencoder counter based on CPLD[J].EIC,2007(2):58-59.