<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 增量型光電編碼器抗抖動(dòng)二倍頻電路的設(shè)計(jì)

          增量型光電編碼器抗抖動(dòng)二倍頻電路的設(shè)計(jì)

          作者: 時(shí)間:2010-07-21 來(lái)源:網(wǎng)絡(luò) 收藏

            2.2.2 濾除編碼器抖動(dòng)及仿真結(jié)果

            根據(jù)以上分析,本文采用濾除增量型輸出抖動(dòng)脈沖。編譯環(huán)境采用QuartusⅡ8.O。在中使用圖形和語(yǔ)言結(jié)合的方法設(shè)計(jì)邏輯模塊。內(nèi)部的邏輯子模塊采用Verilog語(yǔ)言來(lái)實(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相跳變沿記錄來(lái)濾除編碼器A相抖動(dòng)脈沖的BlockA模塊,該模塊根據(jù)濾除后的A相脈沖數(shù)據(jù)個(gè)數(shù)并記錄脈沖數(shù)據(jù)。Verilog的主要程序如下:

          程序

          頂層模塊的結(jié)構(gòu)圖

            另一個(gè)模塊BlockB主要完成的功能是濾除編碼器B相的抖動(dòng)脈沖。根據(jù)分析濾除編碼器抖動(dòng)的原理,ENA引腳為BlockA模塊的輸出引腳,當(dāng)A相輸入引腳有跳變時(shí)ENA為1,A相引腳有連續(xù)的跳變或者接下來(lái)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)過(guò)濾除后脈沖計(jì)數(shù)器數(shù)為6個(gè)。A相的抖動(dòng)脈沖得到有效的濾除。

          仿真效果

            3 結(jié)語(yǔ)

            現(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)靈活。


          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();