基于Verilog語言的等精度頻率計(jì)設(shè)計(jì)
本文引用地址:http://m.butianyuan.cn/article/201708/362968.htm
引言
傳統(tǒng)測量頻率的方法主要有直接測量法、分頻測量法、測周法等,這些方法往往只適用于測量一段頻率,當(dāng)被測信號的頻率發(fā)生變化時(shí),測量的精度就會下降。本文提出一種基于等精度原理的測量頻率的方法,在整個(gè)頻率測量過程中都能達(dá)到相同的測量精度,而與被測信號的頻率變化無關(guān)。本文利用FPGA(現(xiàn)場可編程門陣列)的高速數(shù)據(jù)處理能力,實(shí)現(xiàn)對被測信號的測量計(jì)數(shù);利用單片機(jī)的運(yùn)算和控制能力,實(shí)現(xiàn)對頻率、周期、脈沖寬度的計(jì)算及顯示。
等精度測量原理等精度測量的一個(gè)最大特點(diǎn)是測量的實(shí)際門控時(shí)間不是一個(gè)固定值,而是一個(gè)與被測信號有關(guān)的值,剛好是被測信號的整數(shù)倍。在計(jì)數(shù)允許時(shí)間內(nèi),同時(shí)對標(biāo)準(zhǔn)信號和被測信號進(jìn)行計(jì)數(shù),再通過數(shù)學(xué)公式推導(dǎo)得到被測信號的頻率。由于門控信號是被測信號的整數(shù)倍,就消除了對被測信號產(chǎn)生的士1誤差,但是會產(chǎn)生對標(biāo)準(zhǔn)信號士1的誤差。如圖1所示。
系統(tǒng)中,如果采用的標(biāo)準(zhǔn)信號源的精度很高,就叮以達(dá)到一個(gè)很高的測量精度,一般情況下都是采用晶體作為標(biāo)準(zhǔn)信號源,因此可以達(dá)到很高的精度,滿足一般系統(tǒng)的要求。
2、FPGA模塊設(shè)計(jì)
本系統(tǒng)在傳統(tǒng)的等精度測量原理基礎(chǔ)上進(jìn)行了改進(jìn)和優(yōu)化。增加了測量占空比的功能,同時(shí)由FPGA內(nèi)部產(chǎn)生清零信號,節(jié)省了資源。改進(jìn)后的FPGA核心模塊如圖2所示。FPGA部分主要由門控信號產(chǎn)生模塊、計(jì)數(shù)器控制模塊、計(jì)數(shù)器模塊、鎖存器、中斷輸出、數(shù)據(jù)選擇輸出、頂層模塊組成。
1)門控信號為了測量頻率為1H:的信號,要求系統(tǒng)的開門時(shí)間不小于1s;同理,為了測量0.1H:頻率的信號,要求開門時(shí)間最短為109。但是如果系統(tǒng)一直采用10s的門控信號,測量高頻信號的等待時(shí)間太長,顯然不合理,因?yàn)闇y量結(jié)果的顯示必須要等到一個(gè)測量周期結(jié)束之后才能更新。本系統(tǒng)采用的方法是,由單片機(jī)給FPGA提供一個(gè)門控的選擇信號,如果FPG人測得的頻率小于1Hz,那么單片機(jī)自動給出一個(gè)啟動10s門控的控制信號;反之,如果發(fā)現(xiàn)測量的頻率大于1Hz,自動切換回1。門控,實(shí)現(xiàn)了一個(gè)閉環(huán)的自動控制,很好地解決了門控的時(shí)間問題。
2)計(jì)數(shù)器控制模塊
該模塊是本文的創(chuàng)新點(diǎn)所在,主要用來同步被測信號。由前面的分析可知,門控信號啟動(上升沿)后,在被測信號的上升沿啟動計(jì)數(shù)允許模塊,允許計(jì)數(shù)器計(jì)數(shù);門控信號關(guān)閉(下降沿)后,在被測信號的下一個(gè)上升沿關(guān)閉計(jì)數(shù)允許模塊,停止計(jì)數(shù),從而保證了門控信號是被測信號的整數(shù)倍,達(dá)到了等精度的目的。該模塊有GATE,CLKx這2個(gè)輸人端;ENh,ENx,Load,CLR這4個(gè)輸出端。GATE為上一級給出的門控信號漢LKesx為被測信號;EN-h,高電平期間對標(biāo)準(zhǔn)信號進(jìn)行計(jì)數(shù),得到CNT_h;EN_x為給出的允許計(jì)數(shù)信號,在EN-x的高電平期間,對被測信號、標(biāo)準(zhǔn)信號同時(shí)計(jì)數(shù),得到CNT-x,CNT-b;Load為鎖存信號;CLR為計(jì)數(shù)器清零信號。
由CNTx和CNT_b可以計(jì)算出被測信號的頻率和周期;由CNTex和CNTh可以計(jì)算出被測信號的脈沖寬度。佑直圖加圖3所式。
3)計(jì)數(shù)器模塊
在設(shè)計(jì)計(jì)數(shù)器的過程中需要注意計(jì)數(shù)器的寬度設(shè)置,系統(tǒng)中采用的最大門控時(shí)間為10a,標(biāo)準(zhǔn)信號源的頻率為50MHz,則在計(jì)數(shù)的允許時(shí)間內(nèi)計(jì)數(shù)的最大值為:536870912,為了方便數(shù)據(jù)傳輸,系統(tǒng)中采用了32位位寬的計(jì)數(shù)器。
4)鎖存器模塊
在門控信號關(guān)閉的同時(shí),停止計(jì)數(shù),同時(shí)啟動鎖存模塊,把測量的數(shù)據(jù)鎖存起來,以便傳輸。
5)中斷輸出
鎖存數(shù)據(jù)的同時(shí),給單片機(jī)一個(gè)低電平的中斷信號,通知單片機(jī)讀取數(shù)據(jù)。
6)數(shù)據(jù)選擇輸出模塊
系統(tǒng)中采用了3個(gè)32位的計(jì)數(shù)器,由于單片機(jī)采用的是51系列單片機(jī),只有8位的數(shù)據(jù)總線,所以一次通信只能傳輸8位數(shù)據(jù),3x32/8二12,所以設(shè)計(jì)了一個(gè)數(shù)據(jù)輸出控制模塊,由單片機(jī)提供4根地址線,譯碼后可以選擇16組數(shù)據(jù),單片機(jī)得到中斷通知后,分12次讀取測量的數(shù)據(jù)。
7)頂層模塊
實(shí)例化所有的底層模塊,同時(shí)為了調(diào)試方便,加入了一些測試點(diǎn)。FPGA部分的整體結(jié)構(gòu)圖如圖4所示。
3、單片機(jī)模塊控制
3.1理論分析
在計(jì)數(shù)允許EN-x時(shí)間內(nèi),對被測信號和標(biāo)準(zhǔn)信號同時(shí)進(jìn)行進(jìn)行計(jì)數(shù),得到CNT_x和CNT_b,設(shè)被測信號的周期為T,,頻率為Fx,標(biāo)準(zhǔn)信號周期為F6.頻率為Fb。則有:
系統(tǒng)中采用式(6)一式(8)進(jìn)行計(jì)算,得到最終的測量數(shù)據(jù),單片機(jī)中采用浮點(diǎn)數(shù)進(jìn)行運(yùn)算,計(jì)算的精度可以滿足系統(tǒng)的要求。
3.2硬件電路
系統(tǒng)硬件電路比較簡單,就是單片機(jī)的最小系統(tǒng)加上液晶顯示模塊,設(shè)計(jì)時(shí)需要注意,51單片機(jī)端口電壓是5V輸出,而FPGA是3.3V輸出,所以在數(shù)據(jù)傳輸時(shí)要串聯(lián)一個(gè)電阻一般1000一300f2即可。電路原理圖如圖5所示。
3.3軟件設(shè)計(jì)
單片機(jī)軟件主要由系統(tǒng)初始化、數(shù)據(jù)傳輸、頻率、周期、占空比計(jì)算、液晶顯示等程序模塊組成。
下面簡單介紹主函數(shù)及計(jì)算子函數(shù)。軟件流程如圖6所示。
中斷服務(wù)子程序如圖7所示。
4、結(jié)束語
本系統(tǒng)設(shè)計(jì)采用FPGA和單片機(jī)結(jié)合的方式實(shí)現(xiàn)等精度測量頻率,充分發(fā)揮了FPGA高速的數(shù)據(jù)處理能力以及單片機(jī)的計(jì)算、控制能力。采用Verilog硬件描述語言對系統(tǒng)進(jìn)行仿真測試.最終下載到FPGA內(nèi)部。單片機(jī)采用C語言編寫程序,利用浮點(diǎn)數(shù)進(jìn)行計(jì)算,精度高。同時(shí)設(shè)計(jì)了門控信號自動選擇的閉環(huán)控制,大大地提高了系統(tǒng)的性能。等精度測量技術(shù)在生產(chǎn)、實(shí)驗(yàn)等環(huán)境中得到了廣泛的應(yīng)用。
評論