摘 要:從增量型光電編碼器的構造特點出發,分析其輸出信號中引起抖動誤碼脈沖的原因。根據編碼器兩相輸出信號(A相、B相)不能同時跳變的特點,設計了一種高精度抗抖動二倍頻電路,能有效濾除信號的干擾脈沖。
關鍵詞:光電編碼器; 二倍頻; 抗抖動; FPGA
中圖分類號:TN15 文獻標識碼:A
文章編號:1004-373X(2010)09-0157-03
Anti-jitter Frequency Second Harmonic Circuit of
Increment Type Photoelectric Encoder Based on FPGA
WANG Jun-shan, CHENG Ming, BAI Xiao-ying
(Information Engineering College, Zhengzhou University, Zhengzhou 450001, China)
Abstract: According to the characteristics of the increment type photoelectric encoder′s construction,the reasons of the error encoder pulse caused by jitter in the output signals are analyzed, a high-precision anti-jitter second harmonic circuit was designed according to the characteristics that the two output signals(A-phase, B phase) of the encoder can not change at the same time. In this way, the interference pulse signal can be filtered out effectively.
Keywords: photoelectric encoder; second harmonic; anti-jitter; FPGA
在某些工業自動控制領域、某些裝備應用上,經常會遇到各種需要測量長度的場合,目前通常采用的是光電編碼器。光電編碼器根據其刻度方法及信號輸出形式,可分為增量式、絕對式、混合式三種。它是一種集光、機、電為一體的傳感器,具有精度高、響應快、性能穩定可靠等顯著的優點,能夠精確地檢測角度、轉速、位移等參數。它可以將位移等物理量轉變為數字脈沖信號,通過計算脈沖的個數,實現精確的位移測量[1]。然而由于工作環境等因素影響,增量型光電編碼器輸出信號中含有較多的抖動誤碼脈沖,將會引起誤計數。本文分析誤碼脈沖產生的原因,設計一種有效的濾波電路。
1 增量型編碼器的工作原理
增量型編碼器是一種通過光電轉換將輸出軸上的機械幾何位移量轉換成脈沖或數字量的傳感器,它由光柵盤和光電檢測裝置組成。光柵盤是在一定直徑的圓板上等分地開通若干個長方形孔,見圖1[2]。由于光電碼盤與電動機同軸,電動機旋轉時,光柵盤與電動機同速旋轉,經發光二極管等電子元件組成的檢測裝置檢測輸出若干脈沖信號,編碼盤上涂有兩道相差90°黑自相同的柵欄,分別稱之為A道和B道。其輸出脈沖也是相差90°。當編碼器正向旋轉時,A相比B相超前90°,當編碼器反向旋轉時,A相比B相滯后[3]90°。正常情況下編碼器的輸出波形如圖1所示[4-5]。
圖1 光電編碼器的輸出
2 誤碼脈沖產生的原因及其濾除方法
2.1 誤碼脈沖產生的原因
為了說明誤碼脈沖的存在性,將編碼器碼盤局部放大。圖1中點O是編碼器旋轉軸的中心,圓角矩形代表碼盤上A列和B列透光狹縫[2]。假定編碼器一相信號處于某種狀態,而另一相信號處于高低電平跳變的交界狀態,則編碼器的誤碼脈沖如圖2(a),圖2(b)所示[6]。由于電機的旋轉或機械設備的振動,會使編碼器輸出脈沖抖動,從而引起誤計數。它一方面表現為在透光窗口附近的抖動,引起的干擾脈沖,如圖2(a)給出了A相脈沖信號在上升沿和下降沿發生抖動輸出的時序波形,圖2(b)給出了B相脈沖信號在上升沿和下降沿發生抖動輸出的時序波形;另一方面表現為在編碼器的某點附近前后振動,引起干擾脈沖。如圖2(c),圖2(d)給出了信號在編碼器b點前后抖動的時序波形。編碼器從a點正轉到b點,然后編碼器反轉到a點,又正轉到b點,兩個b點之間的脈沖數為干擾脈沖。
圖2 光電編碼器抖動波形輸出
2.2 誤碼脈沖的濾除
2.2.1 濾除編碼器抖動的原理
采用二倍頻技術濾除抖動脈沖。所謂二倍頻技術即對A相或者B相每個脈沖的上升沿和下降沿分別計數。光電編碼器經過二倍頻后正常輸出波形如圖3所示[7],A相脈沖0→1跳變時,B為0,則編碼器正轉;B為1,則編碼器反轉。A相脈沖1→0跳變時,B為1,則編碼器正轉;B為0,則編碼器反轉。編碼器正常輸出波形時,A、B兩相交替跳變,如果A相發生跳變后,B相沒有發生跳變A相又發生跳變,此時認為是干擾脈沖,反之同樣視為干擾脈沖。
圖3 編碼器輸出波形分析
分析圖4,對A相的跳變沿進行二倍頻計數,B相的高低電平用來判斷編碼器的正反轉。B相邊沿的抖動脈沖對二倍頻計數沒有影響,如圖4(b)所示。分析圖4(a),A相邊緣的抖動認為是干擾脈沖被濾除掉。圖4(c),圖4(d)中的a,b標記的位置是編碼器物理地址,如圖4(d)標記的a,b表示編碼器在此處反復振動。圖4(c)、圖4(d)(1)、(2)標記處跳變沿視為抖動脈沖,應濾除,A相的正轉脈沖數據數和反轉脈沖數據數相減后就是A相實際二倍頻后的脈沖數據。
2.2.2 FPGA濾除編碼器抖動及仿真結果
根據以上分析,本文采用FPGA濾除增量型光電編碼器輸出抖動脈沖。編譯環境采用 Quartus Ⅱ 8.0。在FPGA中使用圖形和語言結合的方法設計邏輯模塊。內部的邏輯子模塊采用Verilog語言來實現[8-9]。頂層模塊的結構圖如圖5所示。 A和B輸入引腳連接增量型編碼器A相和B相信號。Acount為16位的數據寄存器,輸出當前編碼器的位置。頂層設計中包含兩個模塊,一個是根據編碼器的B相跳變沿記錄來濾除編碼器A相抖動脈沖的BlockA模塊,該模塊根據濾除后的A相脈沖數據個數并記錄脈沖數據。Verilog的主要程序如下:
另一個模塊BlockB主要完成的功能是濾除編碼器B相的抖動脈沖。根據分析濾除編碼器抖動的原理,ENA引腳為BlockA模塊的輸出引腳,當A相輸入引腳有跳變時ENA為1,A相引腳有連續的跳變或者接下來B相有跳變時ENA為0。ENB為編碼器B相跳變使能引腳,當ENA為1時如果B相有跳變ENB為1,當ENA為1時如果B相有連續跳變ENB為0。主要程序如下:
always @(B)
begin
if(ENA) ENB<=1′b1;
else if(ENB) ENB<=1′b0;
else
ENB<=1′b0;
end
以圖4(a)的編碼器抖動輸出仿真為例,仿真效果如圖6所示。從圖中分析,A相輸出7個脈沖,應該輸出3個脈沖,二倍頻后是14個脈沖,應該輸出6個脈沖,經過濾除后脈沖計數器數為6個。A相的抖動脈沖得到有效的濾除。
圖6 編碼器抖動輸出仿真圖
3 結 語
現場調試結果證明,該算法可以消除工業現場出現的干擾和抖動現象,能夠準確地記錄脈沖數據。此濾波
方法可以采用軟件濾波,但是軟件濾波需要的引腳較
多,采用兩個中斷引腳響應A相的上升沿和下降沿,浪費CPU資源[10]。采用FPGA實現編碼器的濾波,設計方便,改動靈活。
參考文獻
[1]許永華,李鋼.數控機床中光電編碼器計數電路設計[J].制造技術與機床,2000(1):14-15.
[2]呂國芳,孫超.利用中斷技術防止編碼器抖動計數的方法[EB/OL].[2009-2-12]. http://www.paper800.com,2009.
[3]向艷穩,修吉平.光電編碼器信號抗干擾算法[J].計算機測量與控制,2003(8):66-68.
[4]付小寧,程為彬.快速高精度光電測速算法[J].光電工程,2006(1):137-140.
[5]費偉中,沈建新,周勇.增量式光電編碼器計數與接口電路的設計[J].微特電機,2007,35(1):137-140.
[6]蔣晶,蔣東方,高航.高可靠性增量式光電編碼器接口電路設計[J].測控技術,2009,28(2):1-4.
[7]陳以,于新業,黃云鵬.基于FPGA的旋轉編碼器抗抖動四倍頻電路設計[J].計算機工程與科學,2009,31(7):92-94.
[8]張延偉,楊金巖,葛愛學.VerilogHDL程序設計實例詳解[M].北京:人民郵電出版社,2008.
[9]華清遠見嵌入式培訓中心.FPGA應用開發入門與典型實例[M].北京:人民郵電出版社,2008.
[10]王朕,劉學鋒,劉陵順.基于AT89C51的電機轉速測量儀的設計與實現[J].四川兵工學報,2009,30(5):19-21.