基于FPGA等精度的实时测量频率和占空比
目錄
一、要求:
二、指標(biāo)要求?
三、?等精度測(cè)頻設(shè)計(jì)原理
四、時(shí)序分析:?
五、模塊設(shè)計(jì)?
1、計(jì)數(shù)器
2、讀數(shù)據(jù)
3、數(shù)據(jù)處理
4、數(shù)碼管顯示模塊
六、仿真分析
1、計(jì)數(shù)模塊
A、測(cè)量1Mhz頻率占空比為50%的信號(hào)的頻率。
?B、Em設(shè)置為1Mhz,占空比為46%的信號(hào)的占空比
2、數(shù)據(jù)處理模塊
3、總體仿真?
七、實(shí)測(cè)展示
?八、說明
一、要求:
????????利用Altera公司的FPGA開發(fā)軟件Quartus 13.1采用混合設(shè)計(jì)實(shí)現(xiàn)方波信號(hào)頻率和占空比測(cè)量。?
二、指標(biāo)要求?
1) 待測(cè)方波信號(hào)頻率范圍1Hz~1MHz,測(cè)量精度優(yōu)于0.1Hz
2) 待測(cè)方波信號(hào)占空比范圍1%~95%,測(cè)量精度優(yōu)于1%
3) 頻率數(shù)據(jù)顯示精度0.1Hz,給出8位數(shù)字的BCD碼結(jié)果
4) 占空比給出2位整數(shù)百分比的BCD碼結(jié)果
三、?等精度測(cè)頻設(shè)計(jì)原理
?設(shè)計(jì)原理流程圖如圖 1:
圖 1設(shè)計(jì)原理流程圖?
?????????將在相同時(shí)間內(nèi)對(duì)被測(cè)信號(hào)和標(biāo)準(zhǔn)信號(hào)同時(shí)計(jì)數(shù) ,D觸發(fā)器保證實(shí)際閘門時(shí)間與被測(cè)信號(hào)同步,消除被測(cè)信號(hào)計(jì)數(shù)誤差;讀數(shù)據(jù)模塊兩個(gè)技術(shù)模塊數(shù)據(jù)同時(shí)讀入送進(jìn)數(shù)據(jù)處理模塊處理;數(shù)據(jù)處理模塊將讀入的數(shù)據(jù)計(jì)算出頻率與占空比后送入顯示模塊;顯示模塊將頻率與占空比顯示在數(shù)碼管上。
等精度測(cè)頻率原理:
????????等精度測(cè)頻法本質(zhì)上是多周期同步測(cè)頻,它是在直接測(cè)頻基礎(chǔ)上發(fā)展起來的,在目前的測(cè)頻系統(tǒng)中得到了越來越廣泛的應(yīng)用。等精度測(cè)頻時(shí),同時(shí)對(duì)標(biāo)準(zhǔn)信號(hào)和待測(cè)信號(hào)計(jì)數(shù),而且實(shí)際閘門時(shí)間不是固定的,而是被測(cè)信號(hào)的整數(shù)倍,即與被測(cè)信號(hào)保持同步,因此消除了對(duì)被測(cè)信號(hào)計(jì)數(shù)所產(chǎn)生的士1個(gè)數(shù)字誤差,使測(cè)量精度大為提高。
四、時(shí)序分析:?
?????????如圖 2所示,Tx待測(cè)型號(hào)在Cl的預(yù)置閘門信號(hào)期間進(jìn)行采樣計(jì)數(shù),使得在En為高時(shí)Tx總是整數(shù)倍出現(xiàn)。?
圖 2時(shí)序分析圖?
????????設(shè)在一次實(shí)際閘門時(shí)間τ中計(jì)數(shù)器對(duì)被測(cè)信號(hào)的計(jì)數(shù)值為Nx,對(duì)標(biāo)準(zhǔn)信號(hào)的計(jì)數(shù)值為Ns。標(biāo)準(zhǔn)信號(hào)的頻率為fs,則被測(cè)信號(hào)的頻率為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?fx=(Nx/Ns)·fs? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?(1)? ? ? ? ?
五、模塊設(shè)計(jì)?
????????如圖 3所示,計(jì)數(shù)器模塊同時(shí)計(jì)數(shù)頻率Ns、Nx值與占空比Nh值,數(shù)值傳給數(shù)據(jù)處理模塊,由數(shù)據(jù)模塊switch信號(hào)切換顯示數(shù)據(jù)的不同位,數(shù)值傳給數(shù)碼管顯示模塊顯示。
????????由一個(gè)D觸發(fā)器實(shí)現(xiàn)預(yù)置閘門與待測(cè)信號(hào)的同步,觸發(fā)信號(hào)為Tx,后面四個(gè)D觸發(fā)器為讀信號(hào)和清零信號(hào)延時(shí),由50Mhz標(biāo)準(zhǔn)信號(hào)觸發(fā),延時(shí)兩個(gè)標(biāo)準(zhǔn)信號(hào)單元為Read信號(hào),延時(shí)四個(gè)標(biāo)準(zhǔn)單元為clr信號(hào);復(fù)位信號(hào)控制五個(gè)D觸發(fā)器的使能信號(hào)。
?
圖 3系統(tǒng)總體設(shè)計(jì)圖?
?模塊代碼展示:
1、計(jì)數(shù)器
頻率計(jì)數(shù)器:
module counter(clk,En,clr,tsq); input clk,clr,En; output reg [27:0]tsq; always@(posedge clk or negedge clr) beginif(!clr)begintsq<=28'b0;endelsebeginif(En)begintsq<=tsq+1;endend end endmodule?占空比計(jì)數(shù)器:
module counter_duty(clk,En,clr,Tx,duty,tsq); input clk,clr,En,Tx; output reg [27:0]duty; output reg [27:0]tsq; always@(posedge clk or negedge clr) beginif(!clr)beginduty<=28'b0;tsq<=28'b0;endelsebegintsq<=tsq+1;if(En&Tx)duty<=duty+1;//高電平數(shù)end end endmodule2、讀數(shù)據(jù)
module read_value(read,Ns_data_in,Ns_data_out,TX_data_in,TX_data_out,Nh_data_in,Nh_data_out); input read; input [27:0] Ns_data_in,TX_data_in,Nh_data_in; output reg [27:0] Ns_data_out,TX_data_out,Nh_data_out;always@(negedge read) beginTX_data_out<= TX_data_in;Ns_data_out<=Ns_data_in+28'd4;Nh_data_out<=Nh_data_in+28'd4; end endmodule3、數(shù)據(jù)處理
module data_processing(Ns_data,TX_data,Fre_data_INT,Fre_data_Fra,duty,duty_rs); input [27:0] Ns_data,TX_data,duty; reg [55:0] temp; reg [27:0] remainder;output reg [9:0]duty_rs; //占空比 output reg [27:0] Fre_data_INT; // 頻率整數(shù)部分 output reg [6:0] Fre_data_Fra; // 頻率小數(shù)部分always@(Ns_data,TX_data) begintemp = 50_000_000*TX_data;Fre_data_INT = temp/Ns_data;remainder = temp%Ns_data; Fre_data_Fra= remainder*100/Ns_data; // 保留2位小數(shù)duty_rs =(duty*1000)/Ns_data; end endmodule4、數(shù)碼管顯示模塊
module display(switch,Fre_data_INT,Fre_data_Fra,clk_50M,duty,Dis1,Dis2,Dis3,Dis4,Dis5,Dis6); input [27:0] Fre_data_INT; input [6:0] Fre_data_Fra; input [9:0] duty; input switch; input clk_50M; output reg [3:0] Dis1; output reg [3:0] Dis2; output reg [3:0] Dis3; output reg [3:0] Dis4; output reg [3:0] Dis5; output reg [3:0] Dis6;reg [27:0] Ns_data;always@(clk_50M) beginif(switch)//前六位beginDis1[3:0]<= Fre_data_INT/1_000_000;Dis2[3:0]<= (Fre_data_INT%1_000_000)/100000;Dis3[3:0]<= (Fre_data_INT%100000)/10000;Dis4[3:0]<= (Fre_data_INT%10000)/1000;Dis5[3:0]<= (Fre_data_INT%1000)/100;Dis6[3:0]<= (Fre_data_INT%100)/10;endelse//后六位(其中最后三位為占空比數(shù)據(jù))beginDis1[3:0]<= Fre_data_INT%10;Dis2[3:0]<= 0;Dis3[3:0] <= Fre_data_Fra/10;Dis4[3:0]<=duty/100;Dis5[3:0]<=(duty%100)/10;Dis6[3:0]<=duty%10;end end endmodule六、仿真分析
1、計(jì)數(shù)模塊
????????在計(jì)數(shù)模塊中Ns為標(biāo)準(zhǔn)信號(hào)個(gè)數(shù),Nx為待測(cè)信號(hào)個(gè)數(shù),Nh為高電平計(jì)數(shù)個(gè)數(shù),tsq為頻率值,duty為占空比值。
?????? 計(jì)算公式tsq = 50_000_000*Nx/Ns;? duty=Nh/Ns;用quartus自帶仿真,仿高頻信號(hào)。
A、測(cè)量1Mhz頻率占空比為50%的信號(hào)的頻率。
????????設(shè)置Tx為1Mhz,預(yù)置閘門preset_gate周期為20us,clk_50M為標(biāo)準(zhǔn)50Mhz,reset為使能信號(hào),始終為高。
理論測(cè)得tsq=500。
????????實(shí)際仿真測(cè)得tsq=496,由于clr信號(hào)延時(shí)四個(gè)標(biāo)準(zhǔn)信號(hào)周期,所以tsq=500-4,后期數(shù)據(jù)處理模塊會(huì)將Ns補(bǔ)4,符合理論結(jié)果,如圖 4所示。
?圖 4計(jì)數(shù)器模塊頻率計(jì)數(shù)仿真圖?
?B、Em設(shè)置為1Mhz,占空比為46%的信號(hào)的占空比
????????理論測(cè)得Nh=230,Ns=500,duty計(jì)算得460(乘以1000后的結(jié)果,以便顯示)實(shí)際仿真測(cè)得duty=460,Nh補(bǔ)4后符合理論結(jié)果(原因同上),如圖 5所示。
圖 5計(jì)數(shù)器模塊占空比計(jì)數(shù)仿真圖?
2、數(shù)據(jù)處理模塊
????????Duty_rs為占空比值*1000,Fre_data_INT為頻率整數(shù)值,Fre_data_Fra為頻率小數(shù)值Read為讀信號(hào),switch為顯示位輸出轉(zhuǎn)換開關(guān)。
仿真1MHz,占空比為46%的信號(hào)。
根據(jù)公式tsq = 50_000_000*Nx/Ns;? duty=Nh/Ns。
理論測(cè)得Duty_rs=460,fre_data_INT=1000000,fre_data_Fra=0。
實(shí)際仿真測(cè)得Duty_rs=460,fre_data_INT=1000000,fre_data_Fra=0如圖 6。
圖 6數(shù)據(jù)處理模塊仿真圖?
3、總體仿真?
????????總體仿真電路圖如圖 7所示,隨機(jī)選取了5656.5Hz占空比為55.5%的信號(hào)測(cè)試,仿真結(jié)果如下圖所示。頻率仿真得到fre =5656.5hz,占空比為55.5%符合題目設(shè)計(jì)要求。?
圖 7總體仿真電路圖?
測(cè)試文件設(shè)置如圖 8
單位1ps,精度1ps。
圖 8測(cè)試文件圖?
圖 9總體仿真測(cè)試圖?
?Switch為1時(shí)輸出頻率高六位,為0時(shí)輸出低一位和小數(shù)點(diǎn)后一位,以及用0代替小數(shù)點(diǎn)(此模塊小數(shù)點(diǎn)沒接管腳),和占空比(最后一位為小數(shù)后一位)。如上圖9所示。
七、實(shí)測(cè)展示
????????用50Mhz分頻的待測(cè)信號(hào),測(cè)量280.8hz,占空比50%信號(hào)。(隨機(jī)選擇)
?圖 10生成待測(cè)信號(hào)分頻器設(shè)計(jì)
圖 11前六位顯示?
圖 12后六位顯示
????????如圖 11前六為分別是頻率的小數(shù)點(diǎn)前2至7位,如圖 12第一位是頻率的小數(shù)點(diǎn)前1位,第二位是用來當(dāng)小數(shù)點(diǎn)的0(此塊板子沒有接小數(shù)點(diǎn)管腳),第三位是頻率的小數(shù)點(diǎn)后一位,后三位用于表述占空比,其中最后一位是占空比小數(shù)點(diǎn)后一位;可見測(cè)得數(shù)據(jù)位,頻率:280.8hz,占空比為50.0%。
????????將圖 10中的第7行89000改為85000,可改變其占空比,理論計(jì)算得89000/178000=47.7%,實(shí)際測(cè)得也為47.7%,如下圖所示。
?圖 13改變占空比后的后六位顯示
?八、說明
????????因?yàn)閷?shí)際測(cè)量信號(hào)不是由信號(hào)發(fā)生器生成的標(biāo)準(zhǔn)信號(hào),而是通過50Mhz分頻產(chǎn)生而得,?根據(jù)實(shí)際測(cè)量結(jié)果可知,較高頻的測(cè)量誤差較大,其原因是因?yàn)槠浯郎y(cè)信號(hào)是由標(biāo)準(zhǔn)50Mhz分頻而得,在生成較高頻時(shí)由于 ?(數(shù)據(jù)處理+程序運(yùn)行時(shí)間)/理論分頻的周期 的比值較大,數(shù)據(jù)處理時(shí)間+程序運(yùn)行時(shí)間使實(shí)際分頻周期偏大,使得實(shí)際測(cè)得信號(hào)頻率偏小,誤差較大;待測(cè)頻率越高誤差越大。
? ? ? ? 如果使用信號(hào)發(fā)生器作為標(biāo)準(zhǔn)輸入信號(hào),誤差應(yīng)該符合題目需求,但是沒有實(shí)測(cè)過。
總結(jié)
以上是生活随笔為你收集整理的基于FPGA等精度的实时测量频率和占空比的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用Arduino 连接旋转编码器
- 下一篇: Unity中实现群组行为