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

          新聞中心

          EEPW首頁 > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 基于FPGA與有限狀態(tài)機(jī)的高精度測角系統(tǒng)的設(shè)計(jì)與實(shí)

          基于FPGA與有限狀態(tài)機(jī)的高精度測角系統(tǒng)的設(shè)計(jì)與實(shí)

          作者: 時(shí)間:2013-04-24 來源:網(wǎng)絡(luò) 收藏

          激光跟蹤測量系統(tǒng)(Laser Tracker System)是工業(yè)測量系統(tǒng)中常用的一種的測量儀器,是近十年發(fā)展起來的新型大尺寸空間測量儀器,不僅對靜止目標(biāo)可以測量,而且對運(yùn)動(dòng)目標(biāo)也可以進(jìn)行跟蹤測量。它集合了激光測距技術(shù)、光電技術(shù)、精密機(jī)械技術(shù)、計(jì)算機(jī)及控制技術(shù)等各種先進(jìn)技術(shù),對空間運(yùn)動(dòng)目標(biāo)進(jìn)行跟蹤并實(shí)時(shí)測量目標(biāo)的空間三維坐標(biāo)。它具有快速、動(dòng)態(tài)、精度高等優(yōu)點(diǎn),適合于大尺寸工件配裝測量。在航空航天、機(jī)械制造、核工業(yè)、現(xiàn)代軍事等測量領(lǐng)域得到廣泛的應(yīng)用。該系統(tǒng)的跟蹤精度在很大程度上依賴于轉(zhuǎn)臺(tái)的旋轉(zhuǎn)角度的測量精度。

          本文引用地址:http://www.ex-cimer.com/article/189624.htm

          為了提高系統(tǒng)轉(zhuǎn)臺(tái)旋轉(zhuǎn)角度測量的精度,本系統(tǒng)采用高分辨率的光電編碼器來測量角度。光電編碼器是利用光柵衍射原理實(shí)現(xiàn)位移數(shù)字變換的,光電編碼器作為一種的測角傳感器已普遍應(yīng)用于伺服跟蹤系統(tǒng)中,它具有精度高、響應(yīng)快、性能穩(wěn)定可靠等優(yōu)點(diǎn)。光電編碼器按編碼方式主要分為兩類:增量式與絕對式。由于增量式光電編碼器成本低、測角的精度高,因此本系統(tǒng)的增量式光電編碼器選用Renishaw公司的圓光柵。

          然而,由于機(jī)械振動(dòng)或抖動(dòng)等原因,增量式編碼器的輸出脈沖會(huì)出現(xiàn)抖動(dòng)毛刺的現(xiàn)象,因此需要在對編碼器輸出脈沖進(jìn)行計(jì)數(shù)的過程中采取有效的方法來去掉抖動(dòng)干擾。本文介紹的方法,在上可以有效消除抖動(dòng)引起的計(jì)數(shù)干擾,提高計(jì)數(shù)的精度[1]。

          1 方案設(shè)計(jì)

          1.1 系統(tǒng)組成

          激光跟蹤測量系統(tǒng)的核心處理模塊主要由ARM處理器,組成。為了充分利用ARM9微處理器的運(yùn)算能力和的高速邏輯處理能力,在設(shè)計(jì)中對功能的實(shí)現(xiàn)進(jìn)行了劃分。ARM9 用于運(yùn)動(dòng)控制平臺(tái)的控制并且與FPGA一起形成一個(gè)完整的應(yīng)用平臺(tái)。FPGA主要完成編碼器的精確計(jì)數(shù)功能、與ARM9處理器數(shù)據(jù)通信、與激光測距儀數(shù)據(jù)通信功能。系統(tǒng)的組成框圖如圖1所示。本文重點(diǎn)介紹在FPGA上實(shí)現(xiàn)編碼器的輸出脈沖計(jì)數(shù)與角度測量。

          1.2 增量式編碼器原理

          增量型編碼器通常有3路信號(hào)輸出:A、B和Z,每路都是差分信號(hào),共6路信號(hào),信號(hào)采用TTL電平,A脈沖在前,B脈沖在后,A、B脈沖相差90°,每旋轉(zhuǎn)一圈發(fā)出一個(gè)基準(zhǔn)脈沖Z,作為參考機(jī)械零位。Z相的波形中心對準(zhǔn)A相輸出的波形中心。利用A相B相的相位差來進(jìn)行判相,A超前B 90°為正轉(zhuǎn),反之B超前A 90°為反轉(zhuǎn)。

          由于增量式編碼器不帶記憶功能,因此對外界因素引起的干擾非常敏感,在實(shí)際應(yīng)用中,由于機(jī)械振動(dòng)、工作環(huán)境,電機(jī)負(fù)載等都無可避免地會(huì)產(chǎn)生震動(dòng),編碼器會(huì)在某一相的脈沖邊緣的地方出現(xiàn)抖動(dòng)的情況,因此有效濾掉脈沖的抖動(dòng)和毛刺,是提高計(jì)數(shù)精度的關(guān)鍵技術(shù)。編碼器輸出真實(shí)信號(hào)的波形如圖2所示[2-3]。

          2 理論分析與算法

          2.1 原理

          在編碼器的一個(gè)輸出周期內(nèi),A、B兩相輸出信號(hào)共產(chǎn)生4個(gè)跳變沿,在A、B方波信號(hào)的上升沿和下降沿分別計(jì)數(shù),從而實(shí)現(xiàn)四倍頻計(jì)數(shù)的操作。本文通過FSM,對原始信號(hào)進(jìn)行四倍頻采樣控制,狀態(tài)機(jī)外加的一路高速同步時(shí)鐘信號(hào)作為狀態(tài)機(jī)的驅(qū)動(dòng)時(shí)鐘信號(hào),從而有效濾掉抖動(dòng)干擾。

          有限狀態(tài)機(jī)FSM(Finite State Machine)是一種時(shí)序電路,是數(shù)字系統(tǒng)中實(shí)現(xiàn)高效率可靠性邏輯控制的重要方法。標(biāo)準(zhǔn)狀態(tài)機(jī)可分為摩爾型Moore和米利型Mealy兩種類型。Mealy狀態(tài)機(jī)的輸出是當(dāng)前狀態(tài)和輸入信號(hào)的函數(shù)。在本設(shè)計(jì)中,對編碼器輸出信號(hào)進(jìn)行計(jì)數(shù),采用的計(jì)數(shù)器是雙向計(jì)數(shù)器,既與當(dāng)前編碼器所處于的電平組合有關(guān),又與前一個(gè)狀態(tài)有關(guān)。因此本設(shè)計(jì)采用Mealy狀態(tài)機(jī)。Mealy狀態(tài)機(jī)比Moore狀態(tài)機(jī)在狀態(tài)切換時(shí)提前一個(gè)同步時(shí)鐘, 因而具有較高的實(shí)時(shí)性。A、B兩相信號(hào)轉(zhuǎn)換狀態(tài)如圖3所示[4]。

          在理想情況下, 若編碼器正向旋轉(zhuǎn),A、B 電平的值為:00-10-11-01-00 ; 若編碼器反向旋轉(zhuǎn), 則A、B 電平的值為:00-01-11-10-00 。但是在實(shí)際應(yīng)用中, 輸入脈沖含有抖動(dòng)和毛刺,A、B 相脈沖的電平狀態(tài)會(huì)在狀態(tài)機(jī)中有效地跳轉(zhuǎn), 抖動(dòng)之后, 由于計(jì)數(shù)器能夠正反向計(jì)數(shù),因此最終的計(jì)數(shù)值會(huì)保持不變, 輸出的結(jié)果也保持不變, 達(dá)到了去抖動(dòng)的效果。有限狀態(tài)機(jī)設(shè)置了5 個(gè)狀態(tài):IDLE (S0) ,ALBL (S1) ,AHBL (S2) ,AHBH (S3) ,ALBH (S4) 。其中IDLE 為初始狀態(tài), 用于初始化計(jì)數(shù)器的計(jì)數(shù)器狀態(tài)。狀態(tài)機(jī)的狀態(tài)空間跳轉(zhuǎn)圖如圖4 所示[5]。

          fpga相關(guān)文章:fpga是什么


          脈沖點(diǎn)火器相關(guān)文章:脈沖點(diǎn)火器原理

          上一頁 1 2 下一頁

          評(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); })();