摘 要:本文介紹了一種同步測周期計數器的設計,并基于該計數器設計了一個高精度的數字頻率計。文中給出了計數器的VHDL編碼,并對頻率計的FPGA實現進行了仿真驗證,給出了測試結果。
在現代數字電路設計中,采用FPGA結合硬件描述語言VHDL可以設計出各種復雜的時序和邏輯電路,具有設計靈活、可編程、高性能等優點。本文將介紹一種基于FPGA,采用同步測周期的方法來實現寬頻段高精度數字頻率計的設計。
圖1 同步測周期計數器
同步測周期頻率計的原理
在數字頻率計中,測周期計數器是主要的電路,其功能是:使用標準時鐘以被測頻率信號的一個周期為時限進行脈沖計數。傳統的測周期計數器采用門控計數器來實現,即采用一個同被測頻率信號周期寬度相同的門控脈沖來控制計數器的計停。其缺點在于無法實現對被測信號的連續測周期計數。
本文設計的同步測周期計數器如圖1所示。圖中計數器的計數時鐘為clk0, 頻率為f0;被測信號為clkx,頻率為fx。采用一個D觸發器對輸入的被測信號clkx進行同步,同步輸出為s0。在clk0的上升沿到來之前,如果clkx出現了上升跳變,則le信號變為高電平,計數器ct的重載信號和鎖存器cout的使能信號有效。當clk0的上升沿到來時,計數器的計數值鎖存,同時計數器重載為1,重新開始計數,le變為低電平。計數器在其他時間里進行加1計數,鎖存器的值則保持不變。該測周期計數器能在clkx的每個上升沿之后輸出計數值,實現了對被測信號進行測周期計數,并始終輸出其最新一個周期的計數值,圖中cint端輸出一個clk0周期寬度的高脈沖,用于指示新的計數值鎖存。
圖2 同步測周期數字頻率計
圖3 頻率計cint的改進電路
設該計數器的測周期計數值為M0,由于同步測周期法的分辨率為一個標準時鐘周期,因此有:
該同步測周期計數器的測周期計數值最小為2,要求被測信號高低電平的寬度大于一個標準時鐘周期。
基于上述同步測周期計數器,本文設計了如圖2所示的高精度數字頻率計。freq_div模塊是一個分頻器,對標準時鐘clk0進行系數為C0的分頻。頻率計采用了兩個同步測周期計數器同時工作,計數值輸出端口分別為cout和mout。為了避免由于同步測周期計數器中被測信號和標準時鐘不同步,le信號高電平的寬度不固定而造成的計數出錯,在實際應用中,采取將被測信號先經過一個D觸發器同步后再送入計數器的方法,以保證計數的可靠性,其計數值和頻率的關系仍滿足(1)式。設cout輸出的值為C,mout輸出的值為M,根據頻率計的結構,對于其中以clkx為計數時鐘的計數器,由(1)式得:
同理,對于以clk0為計數時鐘的計數器,有:
根據兩個測周期計數器的計數值M、C,被測信號的頻率按下式計算得到
根據(3)式,計算結果的最大誤差為:
相對誤差為:
因此,只要使計數值C足夠大就可以保證頻率測量的精度。將(3)和(4)兩式相除并忽略小項得C和C0的關系如下:
給定C0,測周期計數值C的最大可變范圍為:。因此,根據實際測量精度的要求,設定適當的分頻器分頻系數C0,即可保證實際的測周期計數值C的大小在精度要求的范圍內。對于上述的數字頻率計,如果增大分頻器分頻系數C0,提高測周期計數器的計數范圍,可實現對輸入信號寬頻段高精度的頻率測量。
圖4 輸入被測信號周期為156ms時的仿真波形
數字頻率計的VHDL實現
上述的同步測周期數字頻率計在Altera 公司的FPGA開發平臺Quartus II中實現,模塊采用VHDL語言描述,具有通用性和可重用性。圖1中的同步測周期計數器的VHDL描述如下:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
use ieee.std_logic_arith.all;
entity freq_count is --實體定義
port( reset: in std_logic;
clk0 : in std_logic;
clkx : in std_logic;
cint : out std_logic;
cout : out std_logic_vector(23 downto 0));
end entity freq_count;
architecture ar of freq_count is
signal s0 : std_logic;
signal ct : std_logic_vector(23 downto 0);
begin
p0: process(reset,clk0)
--計數器進程
begin
if reset='0' then
s0<='0';
cint<='1';
cout<=conv_std_logic_vector(0,24);
else
if clk0'event and clk0='1' then
s0<=clkx;
if s0='0' and clkx='1' then
cout<=ct;
cint<='0';
ct<=conv_std_logic_vector(1,24);
else
cint<='1';
ct<=ct+1;
end if;
end if;
end if;
end process p0;
end ar;
測周期計數值M、C分別由mout和cout端口輸出,通過一定的接口由微處理器或其他的數據處理模塊獲取,進行頻率的計算和顯示,根據實際的應用情況設計輸出接口,這里不再詳述。當頻率計新一輪的測周期計數完成后,計數器通過cint和mint信號指示處理單元來獲取數據,其高電平脈沖的寬度為一個計數時鐘周期。當計數時鐘頻率很高時,一些慢速的單片機可能無法捕獲,因此(以cint信號為例)增加如圖3所示的電路。cint上升沿使D觸發器輸出引腳cdone置0,通知單片機取數,單片機讀結果時,相應的地址信號和讀信號有效使圖中的cint_set有效,cdone被復位為1,等待下一次cint脈沖的出現。通過該電路,慢速單片機就可以捕獲頻率計計數完成的指示信號。
為了使頻率計的設計更加靈活,頻率計中分頻器的分頻系數也可改為由外部輸入。在頻率計運行期間,由外部控制器設置不同的分頻系數C0,這樣可實現更寬范圍的頻率測量。
頻率計的仿真驗證 結語 相關推薦
上述數字頻率計的VHDL設計在Altera公司的Quartus II開發平臺下進行了編譯和仿真,圖4是在clk0輸入10 MHz方波,clkx輸入周期為156ms(頻率為6.41KHz)方波,分頻系數C0取15000時的仿真波形。
本文采用Altera公司的FPGA FLEX10K10LC84-4來實現上述的頻率計,計數器計數值的處理和顯示由 51單片機來完成,同步測周期數字頻率計的參數和測試結果是:計數器寬度為24 bit;分頻系數C0取106;計數時鐘頻率f0為1MHz;FPGA邏輯單元的使用比例為41%;測量的頻率范圍是1Hz
本文設計的同步測周期計數器能夠直接對被測信號進行連續的測周期計數,可以在許多頻率測量的設計中取代門控計數器,使設計更加靈活。文中采用兩個同步測周期計數器設計的數字頻率計,無需選擇量程便可實現寬頻段高精度的頻率測量,并在FPGA中實現了系統集成。
4位數字頻率計原理圖 仿真圖 ms.10文件或protel文件
4位數字頻率計原理圖,.ms10文件或protel文件
4位數字頻率計的設計
數字頻率計仿真錯誤!分頻器如何級聯!
數字頻率計的設計
數字頻率計的設計與制作
[求助]數字頻率計的設計
[求助]數字頻率計設計
【AC620 FPGA試用體驗】數字頻率計
【AC620 FPGA試用申請】基于fpga的數字頻率計
【鋯石A4 FPGA申請】基于等精度測量法的數字頻率計設計
基于8086的數字頻率計怎么實現?
基于FPGA的數字頻率計
怎樣去設計一個基于單片機C語言的數字頻率計
怎樣去設計基于單片機的數字頻率計
求助數字頻率計題目以下請大神求救急急急?。。。。。。⌒枰绦蚝驮韴D??!
求大神 知道單片機簡易數字頻率計的設計
經典數字頻率計課程設計畢業論文資料
采用AT89S52設計的數字頻率計
數字頻率計測頻率的基本原理
基于FPGA的數字頻率計的設計與實現
基于FPGA/CPLD芯片的數字頻率計設計
基于TMS320F2812的數字頻率計
基于FPGA與DSP的等精度數字頻率計設計
12位十進制等精度數字頻率計
一種高性價比等精度數字頻率計方案設計
基于單片機的數字頻率計的方案
數字頻率計
設計簡易數字頻率計
基于NiosII的等精度數字頻率計的設計
數字頻率計的制作
基于verilog語言的數字頻率計設計
大學數字頻率計課程設計報告
數字頻率計
如何使用FPGA和DSP進行精度數字頻率計的設計
基于FPGA自適應數字頻率計的設計
如何進行簡易數字頻率計的設計分析
基于51單片機的數字頻率計的設計講解
基于單片機的數字頻率計設計
評論
查看更多