基于FPGA的增量型光電編碼器抗抖動(dòng)二倍頻電路設(shè)計(jì)
掃描二維碼
隨時(shí)隨地手機(jī)看文章
1 增量型編碼器的工作原理
增量型編碼器是一種通過光電轉(zhuǎn)換將輸出軸上的機(jī)械幾何位移量轉(zhuǎn)換成脈沖或數(shù)字量的傳感器,它由光柵盤和光電檢測(cè)裝置組成。光柵盤是在一定直徑的圓板上等分地開通若干個(gè)長(zhǎng)方形孔,見圖1。由于光電碼盤與電動(dòng)機(jī)同軸,電動(dòng)機(jī)旋轉(zhuǎn)時(shí),光柵盤與電動(dòng)機(jī)同速旋轉(zhuǎn),經(jīng)發(fā)光二極管等電子元件組成的檢測(cè)裝置檢測(cè)輸出若干脈沖信號(hào),編碼盤上涂有兩道相差90°黑自相同的柵欄,分別稱之為A道和B道。其輸出脈沖也是相差90°。當(dāng)編碼器正向旋轉(zhuǎn)時(shí),A相比B相超前90°,當(dāng)編碼器反向旋轉(zhuǎn)時(shí),A相比B相滯后90°。正常情況下編碼器的輸出波形如圖1所示。
2 誤碼脈沖產(chǎn)生的原因及其濾除方法
2.1 誤碼脈沖產(chǎn)生的原因
為了說明誤碼脈沖的存在性,將編碼器碼盤局部放大。圖1中點(diǎn)0是編碼器旋轉(zhuǎn)軸的中心,圓角矩形代表碼盤上A列和B列透光狹縫。假定編碼器一相信號(hào)處于某種狀態(tài),而另一相信號(hào)處于高低電平跳變的交界狀態(tài),則編碼器的誤碼脈沖如圖2(a),圖2(b)所示。由于電機(jī)的旋轉(zhuǎn)或機(jī)械設(shè)備的振動(dòng),會(huì)使編碼器輸出脈沖抖動(dòng),從而引起誤計(jì)數(shù)。它一方面表現(xiàn)為在透光窗口附近的抖動(dòng),引起的干擾脈沖,如圖2(a)給出了A相脈沖信號(hào)在上升沿和下降沿發(fā)生抖動(dòng)輸出的時(shí)序波形,圖2(b)給出了B相脈沖信號(hào)在上升沿和下降沿發(fā)生抖動(dòng)輸出的時(shí)序波形;另一方面表現(xiàn)為在編碼器的某點(diǎn)附近前后振動(dòng),引起干擾脈沖。如圖2(c),圖2(d)給出了信號(hào)在編碼器b點(diǎn)前后抖動(dòng)的時(shí)序波形。編碼器從a點(diǎn)正轉(zhuǎn)到b點(diǎn),然后編碼器反轉(zhuǎn)到a點(diǎn),又正轉(zhuǎn)到b點(diǎn),兩個(gè)b點(diǎn)之間的脈沖數(shù)為干擾脈沖。
2.2 誤碼脈沖的濾除
2.2.1 濾除編碼器抖動(dòng)的原理
采用二倍頻技術(shù)濾除抖動(dòng)脈沖。所謂二倍頻技術(shù)即對(duì)A相或者B相每個(gè)脈沖的上升沿和下降沿分別計(jì)數(shù)。光電編碼器經(jīng)過二倍頻后正常輸出波形如圖3所示,A相脈沖O→1跳變時(shí),B為O,則編碼器正轉(zhuǎn);B為1,則編碼器反轉(zhuǎn)。A相脈沖1→O跳變時(shí),B為1,則編碼器正轉(zhuǎn);B為0,則編碼器反轉(zhuǎn)。編碼器正常輸出波形時(shí),A、B兩相交替跳變,如果A相發(fā)生跳變后,B相沒有發(fā)生跳變A相又發(fā)生跳變,此時(shí)認(rèn)為是干擾脈沖,反之同樣視為干擾脈沖。
分析圖4,對(duì)A相的跳變沿進(jìn)行二倍頻計(jì)數(shù),B相的高低電平用來判斷編碼器的正反轉(zhuǎn)。B相邊沿的抖動(dòng)脈沖對(duì)二倍頻計(jì)數(shù)沒有影響,如圖4(b)所示。分析圖4(a),A相邊緣的抖動(dòng)認(rèn)為是干擾脈沖被濾除掉。圖4(c),圖4(d)中的a,b標(biāo)記的位置是編碼器物理地址,如圖4(d)標(biāo)記的a,b表示編碼器在此處反復(fù)振動(dòng)。圖4(c)、圖4(d)(1)、(2)標(biāo)記處跳變沿視為抖動(dòng)脈沖,應(yīng)濾除,A相的正轉(zhuǎn)脈沖數(shù)據(jù)數(shù)和反轉(zhuǎn)脈沖數(shù)據(jù)數(shù)相減后就是A相實(shí)際二倍頻后的脈沖數(shù)據(jù)。
2.2.2 FPGA濾除編碼器抖動(dòng)及仿真結(jié)果
根據(jù)以上分析,本文采用FPGA濾除增量型光電編碼器輸出抖動(dòng)脈沖。編譯環(huán)境采用QuartusⅡ8.O。在FPGA中使用圖形和語言結(jié)合的方法設(shè)計(jì)邏輯模塊。內(nèi)部的邏輯子模塊采用Verilog語言來實(shí)現(xiàn)。頂層模塊的結(jié)構(gòu)圖如圖5所示。A和B輸入引腳連接增量型編碼器A相和B相信號(hào)。Acount為16位的數(shù)據(jù)寄存器,輸出當(dāng)前編碼器的位置。頂層設(shè)計(jì)中包含兩個(gè)模塊,一個(gè)是根據(jù)編碼器的B相跳變沿記錄來濾除編碼器A相抖動(dòng)脈沖的BlockA模塊,該模塊根據(jù)濾除后的A相脈沖數(shù)據(jù)個(gè)數(shù)并記錄脈沖數(shù)據(jù)。Verilog的主要程序如下:
另一個(gè)模塊BlockB主要完成的功能是濾除編碼器B相的抖動(dòng)脈沖。根據(jù)分析濾除編碼器抖動(dòng)的原理,ENA引腳為BlockA模塊的輸出引腳,當(dāng)A相輸入引腳有跳變時(shí)ENA為1,A相引腳有連續(xù)的跳變或者接下來B相有跳變時(shí)ENA為0。ENB為編碼器B相跳變使能引腳,當(dāng)ENA為1時(shí)如果B相有跳變ENB為1,當(dāng)ENA為1時(shí)如果B相有連續(xù)跳變ENB為0。主要程序如下:
以圖4(a)的編碼器抖動(dòng)輸出仿真為例,仿真效果如圖6所示。從圖中分析,A相輸出7個(gè)脈沖,應(yīng)該輸出3個(gè)脈沖,二倍頻后是14個(gè)脈沖,應(yīng)該輸出6個(gè)脈沖,經(jīng)過濾除后脈沖計(jì)數(shù)器數(shù)為6個(gè)。A相的抖動(dòng)脈沖得到有效的濾除。
3 結(jié)語
現(xiàn)場(chǎng)調(diào)試結(jié)果證明,該算法可以消除工業(yè)現(xiàn)場(chǎng)出現(xiàn)的干擾和抖動(dòng)現(xiàn)象,能夠準(zhǔn)確地記錄脈沖數(shù)據(jù)。此濾波方法可以采用軟件濾波,但是軟件濾波需要的引腳較多,采用兩個(gè)中斷引腳響應(yīng)A相的上升沿和下降沿,浪費(fèi)CPU資源。采用FPGA實(shí)現(xiàn)編碼器的濾波,設(shè)計(jì)方便,改動(dòng)靈活。