您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

基于FPGA的同步测周期高精度数字频率计的计划

发布日期:2011-04-27

    本文先容了一种同步测周期计数器的计划,并基于该计数器计划了一个高精度的数字频率计。文中给出了计数器的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中实现了体系集成。