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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于Verilog語言的等精度頻率計設(shè)計

          基于Verilog語言的等精度頻率計設(shè)計

          作者: 時間:2017-08-14 來源:網(wǎng)絡(luò) 收藏

           

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

            引言

            傳統(tǒng)測量頻率的方法主要有直接測量法、分頻測量法、測周法等,這些方法往往只適用于測量一段頻率,當被測信號的頻率發(fā)生變化時,測量的精度就會下降。本文提出一種基于等精度原理的測量頻率的方法,在整個頻率測量過程中都能達到相同的測量精度,而與被測信號的頻率變化無關(guān)。本文利用(現(xiàn)場可編程門陣列)的高速數(shù)據(jù)處理能力,實現(xiàn)對被測信號的測量計數(shù);利用單片機的運算和控制能力,實現(xiàn)對頻率、周期、脈沖寬度的計算及顯示。

            等精度測量原理等精度測量的一個最大特點是測量的實際門控時間不是一個固定值,而是一個與被測信號有關(guān)的值,剛好是被測信號的整數(shù)倍。在計數(shù)允許時間內(nèi),同時對標準信號和被測信號進行計數(shù),再通過數(shù)學公式推導得到被測信號的頻率。由于門控信號是被測信號的整數(shù)倍,就消除了對被測信號產(chǎn)生的士1誤差,但是會產(chǎn)生對標準信號士1的誤差。如圖1所示。

            系統(tǒng)中,如果采用的標準信號源的精度很高,就叮以達到一個很高的測量精度,一般情況下都是采用晶體作為標準信號源,因此可以達到很高的精度,滿足一般系統(tǒng)的要求。

            2、模塊設(shè)計

            本系統(tǒng)在傳統(tǒng)的等精度測量原理基礎(chǔ)上進行了改進和優(yōu)化。增加了測量占空比的功能,同時由內(nèi)部產(chǎn)生清零信號,節(jié)省了資源。改進后的FPGA核心模塊如圖2所示。FPGA部分主要由門控信號產(chǎn)生模塊、計數(shù)器控制模塊、計數(shù)器模塊、鎖存器、中斷輸出、數(shù)據(jù)選擇輸出、頂層模塊組成。

            1)門控信號為了測量頻率為1H:的信號,要求系統(tǒng)的開門時間不小于1s;同理,為了測量0.1H:頻率的信號,要求開門時間最短為109。但是如果系統(tǒng)一直采用10s的門控信號,測量高頻信號的等待時間太長,顯然不合理,因為測量結(jié)果的顯示必須要等到一個測量周期結(jié)束之后才能更新。本系統(tǒng)采用的方法是,由單片機給FPGA提供一個門控的選擇信號,如果FPG人測得的頻率小于1Hz,那么單片機自動給出一個啟動10s門控的控制信號;反之,如果發(fā)現(xiàn)測量的頻率大于1Hz,自動切換回1。門控,實現(xiàn)了一個閉環(huán)的自動控制,很好地解決了門控的時間問題。

            2)計數(shù)器控制模塊

            該模塊是本文的創(chuàng)新點所在,主要用來同步被測信號。由前面的分析可知,門控信號啟動(上升沿)后,在被測信號的上升沿啟動計數(shù)允許模塊,允許計數(shù)器計數(shù);門控信號關(guān)閉(下降沿)后,在被測信號的下一個上升沿關(guān)閉計數(shù)允許模塊,停止計數(shù),從而保證了門控信號是被測信號的整數(shù)倍,達到了等精度的目的。該模塊有GATE,CLKx這2個輸人端;ENh,ENx,Load,CLR這4個輸出端。GATE為上一級給出的門控信號漢LKesx為被測信號;EN-h,高電平期間對標準信號進行計數(shù),得到CNT_h;EN_x為給出的允許計數(shù)信號,在EN-x的高電平期間,對被測信號、標準信號同時計數(shù),得到CNT-x,CNT-b;Load為鎖存信號;CLR為計數(shù)器清零信號。

            由CNTx和CNT_b可以計算出被測信號的頻率和周期;由CNTex和CNTh可以計算出被測信號的脈沖寬度。佑直圖加圖3所式。

            3)計數(shù)器模塊

            在設(shè)計計數(shù)器的過程中需要注意計數(shù)器的寬度設(shè)置,系統(tǒng)中采用的最大門控時間為10a,標準信號源的頻率為50MHz,則在計數(shù)的允許時間內(nèi)計數(shù)的最大值為:536870912,為了方便數(shù)據(jù)傳輸,系統(tǒng)中采用了32位位寬的計數(shù)器。

            4)鎖存器模塊

            在門控信號關(guān)閉的同時,停止計數(shù),同時啟動鎖存模塊,把測量的數(shù)據(jù)鎖存起來,以便傳輸。

            5)中斷輸出

            鎖存數(shù)據(jù)的同時,給單片機一個低電平的中斷信號,通知單片機讀取數(shù)據(jù)。

            6)數(shù)據(jù)選擇輸出模塊

            系統(tǒng)中采用了3個32位的計數(shù)器,由于單片機采用的是51系列單片機,只有8位的數(shù)據(jù)總線,所以一次通信只能傳輸8位數(shù)據(jù),3x32/8二12,所以設(shè)計了一個數(shù)據(jù)輸出控制模塊,由單片機提供4根地址線,譯碼后可以選擇16組數(shù)據(jù),單片機得到中斷通知后,分12次讀取測量的數(shù)據(jù)。

            7)頂層模塊

            實例化所有的底層模塊,同時為了調(diào)試方便,加入了一些測試點。FPGA部分的整體結(jié)構(gòu)圖如圖4所示。

             

            3、單片機模塊控制

            3.1理論分析

            在計數(shù)允許EN-x時間內(nèi),對被測信號和標準信號同時進行進行計數(shù),得到CNT_x和CNT_b,設(shè)被測信號的周期為T,,頻率為Fx,標準信號周期為F6.頻率為Fb。則有:

            系統(tǒng)中采用式(6)一式(8)進行計算,得到最終的測量數(shù)據(jù),單片機中采用浮點數(shù)進行運算,計算的精度可以滿足系統(tǒng)的要求。

            3.2硬件電路

            系統(tǒng)硬件電路比較簡單,就是單片機的最小系統(tǒng)加上液晶顯示模塊,設(shè)計時需要注意,51單片機端口電壓是5V輸出,而FPGA是3.3V輸出,所以在數(shù)據(jù)傳輸時要串聯(lián)一個電阻一般1000一300f2即可。電路原理圖如圖5所示。

            3.3軟件設(shè)計

            單片機軟件主要由系統(tǒng)初始化、數(shù)據(jù)傳輸、頻率、周期、占空比計算、液晶顯示等程序模塊組成。

           

             

            下面簡單介紹主函數(shù)及計算子函數(shù)。軟件流程如圖6所示。

            中斷服務(wù)子程序如圖7所示。

            4、結(jié)束語

            本系統(tǒng)設(shè)計采用FPGA和單片機結(jié)合的方式實現(xiàn)等精度測量頻率,充分發(fā)揮了FPGA高速的數(shù)據(jù)處理能力以及單片機的計算、控制能力。采用硬件描述語言對系統(tǒng)進行仿真測試.最終下載到FPGA內(nèi)部。單片機采用C語言編寫程序,利用浮點數(shù)進行計算,精度高。同時設(shè)計了門控信號自動選擇的閉環(huán)控制,大大地提高了系統(tǒng)的性能。等精度測量技術(shù)在生產(chǎn)、實驗等環(huán)境中得到了廣泛的應(yīng)用。



          關(guān)鍵詞: Verilog FPGA

          評論


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