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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于嵌入式微處理器和FPGA的高精度測頻設(shè)計(jì)

          基于嵌入式微處理器和FPGA的高精度測頻設(shè)計(jì)

          作者: 時(shí)間:2009-08-03 來源:網(wǎng)絡(luò) 收藏

          引 言

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

          本課題來源于一個(gè)無紙記錄儀的項(xiàng)目。在該項(xiàng)目中要求無紙記錄儀中有一路通道將工業(yè)現(xiàn)場采集到的頻率信號(hào)測量并顯示出來。

          傳統(tǒng)的測頻系統(tǒng)大多采用單片機(jī)加邏輯器件構(gòu)成,而這類測頻系統(tǒng)存在測頻速度慢、準(zhǔn)確度低、可靠性差的缺點(diǎn),故而使測量儀表達(dá)不到工業(yè)現(xiàn)場的要求。鑒于此,本文了一種SEP 3203和的測頻系統(tǒng)。將靈活的控制功能與靈活、高速和高可靠性的特點(diǎn)有機(jī)結(jié)合,從而達(dá)到工業(yè)現(xiàn)場的實(shí)時(shí)測量要求,而且該測頻系統(tǒng)具有可重構(gòu)性。

          2 測頻原理

          常用的直接測頻方法主要有測頻法和測周期法2種。測頻法就是在確定的閘門時(shí)間tw內(nèi),記錄被測信號(hào)的變化周期數(shù)(或脈沖個(gè)數(shù))Nχ,被測信號(hào)的頻率為fχ=Nχ/tw。測周期法需要有標(biāo)準(zhǔn)信號(hào)的頻率fs,在待測信號(hào)的一個(gè)周期內(nèi)tχ,記錄標(biāo)準(zhǔn)頻率的周期數(shù)Ns,被測信號(hào)的頻率為fχ=fs/Ns。這2種方法的計(jì)數(shù)值會(huì)產(chǎn)生±1個(gè)字的誤差,并且測試精度與計(jì)數(shù)器中記錄的數(shù)值Nχ或Ns有關(guān)。為了保證測試精度,一般對(duì)于低頻信號(hào)采用測周期法,對(duì)于高頻信號(hào)采用測頻法,這樣測試時(shí)很不方便,所以人們提出了等精度測頻的方法。

          等精度測頻方法是在直接測頻方法的基礎(chǔ)上發(fā)展起來的,他的閘門時(shí)間不是固定的值,而是被測信號(hào)周期的整數(shù)倍,即與被測信號(hào)同步,消除了對(duì)被測信號(hào)計(jì)數(shù)所產(chǎn)生±1個(gè)字的誤差,達(dá)到了在整個(gè)測試頻段內(nèi)保持等精度測量。其測頻原理如圖1所示。


          在測量過程中,有2個(gè)計(jì)數(shù)器分別對(duì)標(biāo)準(zhǔn)信號(hào)和被測信號(hào)同時(shí)計(jì)數(shù)。首先給出閘門開啟信號(hào)(預(yù)置閘門上升沿),此時(shí)計(jì)數(shù)器并不開始計(jì)數(shù),而是等到被測信號(hào)的上升沿到來時(shí),計(jì)數(shù)器才真正開始計(jì)數(shù)。然后預(yù)置閘門關(guān)閉信號(hào)(下降沿)到時(shí),計(jì)數(shù)器并不立即停止計(jì)數(shù),而是等到被測信號(hào)的上升沿到來時(shí)才結(jié)束計(jì)數(shù),完成1次測量過程。從而實(shí)現(xiàn)了實(shí)際門控信號(hào)與被測信號(hào)的同步,進(jìn)而消除對(duì)被測信號(hào)計(jì)數(shù)產(chǎn)生的一個(gè)脈沖的誤差。

          設(shè)在1次實(shí)際閘門時(shí)間τ中計(jì)數(shù)器對(duì)被測信號(hào)的計(jì)數(shù)值為Nχ,對(duì)標(biāo)準(zhǔn)信號(hào)的計(jì)數(shù)值為Ns。標(biāo)準(zhǔn)信號(hào)的頻率為fs,則被測信號(hào)的頻率為:

          fχ=(Nχ/Ns)×fs (1)

          3 誤差分析

          由式(1)可知,若忽略標(biāo)頻的誤差,則等精度測頻可能產(chǎn)生的相對(duì)誤差為:

          δ=(fχ-fe/fe)×100% (2)

          其中,fe為被測信號(hào)頻率的準(zhǔn)確值。在測量中,由于fχ計(jì)數(shù)的起停時(shí)間都是由該信號(hào)的上升沿觸發(fā)的,在閘門時(shí)間τ內(nèi)對(duì)fχ的計(jì)數(shù)Nχ無誤差(τ=Nχtχ);對(duì)fs的計(jì)數(shù)Ns最多相差1個(gè)數(shù)的誤差,即│△Ns│≤1,其測量頻率為:

          fe=[Nχ/(Ns+△Ns)]/fs (3)

          將式(1)和式(3)代入式(2),并整理得:

          δ=│△Ns│/Ns≤1/Ns-1/(τ×fs) (4)

          由上式可以看出:測量頻率的相對(duì)誤差與被測信號(hào)頻率的大小無關(guān),僅與閘門時(shí)間和標(biāo)準(zhǔn)信號(hào)頻率有關(guān),即實(shí)現(xiàn)了整個(gè)測試頻段的等精度測量。閘門時(shí)間越長,標(biāo)準(zhǔn)頻率越高,測頻的相對(duì)誤差就越小。標(biāo)準(zhǔn)頻率可由穩(wěn)定度好、精度高的高頻晶體振蕩器產(chǎn)生,在保證測量精度不變的前提下,提高標(biāo)準(zhǔn)信號(hào)頻率,可使閘門時(shí)間縮短,即提高測試速度。

          4框圖及實(shí)現(xiàn)

          (1)前級(jí)電路

          即首先對(duì)待測信號(hào)進(jìn)行處理使其達(dá)到與后級(jí)電路相兼容的脈沖信號(hào)。原理框圖如圖2所示。具體實(shí)現(xiàn)電路如圖3所示。


          第一級(jí)電路是由開關(guān)三極管組成的零偏置放大電路,以保證放大電路具有良好的高頻響應(yīng),當(dāng)輸入信號(hào)為零或負(fù)電壓時(shí),三極管工作在截止?fàn)顟B(tài),輸出為高電平,當(dāng)輸入為正電壓時(shí),三極管工作在飽和狀態(tài)(導(dǎo)通),輸出電壓隨輸入電壓上升而下降。零偏置放大電路把如正弦波樣的正負(fù)交替波形變換成單向脈沖,這使得該電路可以測量任意方波信號(hào)、正弦波信號(hào)、鋸齒波信號(hào)、三角波信號(hào)等頻率。

          第二級(jí)采用的是施密特非門觸發(fā)器CC74HC14,是對(duì)放大器輸出的信號(hào)進(jìn)行整形,使其輸出的信號(hào)成為與后級(jí)電路相兼容的脈沖信號(hào)。

          (2)后級(jí)電路

          圖4為測頻系統(tǒng)的主要模塊。圖4中各模塊用硬件描述語言Verilog HDL描述,通過EDA工具(ModelSim,Synplify,QuartusⅡ)進(jìn)行編譯、仿真、延時(shí)分析、管腳調(diào)整、綜合等步驟,最后燒錄到芯片中。將芯片與被測信號(hào)的放大整形模塊等外圍電路相連接,通過調(diào)試便完成了整個(gè)設(shè)計(jì)。


          工作過程表示如下:

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

          上一頁 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); })();