采用等精度测频原理的频率计的设计.docx
《采用等精度测频原理的频率计的设计.docx》由会员分享,可在线阅读,更多相关《采用等精度测频原理的频率计的设计.docx(12页珍藏版)》请在冰点文库上搜索。
采用等精度测频原理的频率计的设计
采用等精度测频原理的频率计的设计
一.设计要求
1.设计一个用等精度测频原理的频率计。
2.频率测量测量范围1~9999;
3.用4位带小数点数码管显示其频率;
二.测频原理及误差分析
1.常用的直接测频方法主要有测频法和测周期法两种。
2.测频法就是在确定的闸门时间Tw内,记录被测信号的变化周期数(或脉冲个数)Nx,则被测信号的频率为:
fx=Nx/Tw。
3.测周期法需要有标准信号的频率fs,在待测信号的一个周期Tx内,记录标准频率的周期数Ns,则被测信号的频率为:
fx=fs/Ns。
4.这两种方法的计数值会产生±1个字误差,并且测试精度与计数器中记录的数值Nx或Ns有关。
为了保证测试精度,一般对于低频信号采用测周期法;对于高频信号采用测频法,因此测试时很不方便,所以人门提出等精度测频方法。
5.等精度测频方法是在直接测频方法的基础上发展起来的。
6.它的闸门时间不是固定的值,而是被测信号周期的整数倍,即与被测信号同步,因此,测除了对被测信号计数所产生±1个字误差,并且达到了在整个测试频段的等精度测量。
等精度测频原理波形图
7.在测量过程中,有两个计数器分别对标准信号和被测信号同时计数。
8.首先给出闸门开启信号(预置闸门上升沿),此时计数器并不开始计数,而是等到被测信号的上升沿到来时,计数器才真正开始计数。
然后预置闸门关闭信号(下降沿)到时,计数器并不立即停止计数,而是等到被测信号的上升沿到来时才结束计数,完成一次测量过程。
可以看出,实际闸门时间τ与预置闸门时间τ1并不严格相等,但差值不超过被测信号的一个周期
9.设在一次实际闸门时间τ中计数器对被测信号的计数值为Nx,对标准信号的计数值为Ns。
10.标准信号的频率为fs,则被测信号的频率为
11.由式
(1)可知,若忽略标频fs的误差,则等精度测频可能产生的相对误差为
12.δ=(|fxc-fx|/fxe)×100%
(2)
13.其中fxe为被测信号频率的准确值。
14.δ=|ΔNs|/Ns≤1/Ns=1/(τ·fs)
⏹由上式可以看出,测量频率的相对误差与被测信号频率的大小无关,仅与闸门时间和标准信号频率有关,即实现了整个测试频段的等精度测量。
⏹闸门时间越长,标准频率越高,测频的相对误差就越小。
⏹标准频率可由稳定度好、精度高的高频率晶体振荡器产生,在保证测量精度不变的前提下,提高标准信号频率,可使闸门时间缩短,即提高测试速度。
等精度测频的实现方法可简化为下图所示的框图
三.设计步骤
⏹CNT1和CNT2是两个可控计数器,标准频率(fs)信号从CNT1的时钟输入端CLK输入;经整形后的被测信号(fx)从CNT2的时钟输入端CLK输入。
⏹每个计数器中的CEN输入端为时钟使能端控制时钟输入。
⏹当预置门信号为高电平(预置时间开始)时,被测信号的上升沿通过D触发器的输出端,同时启动两个计数器计数;同样,当预置门信号为低电平(预置时间结束)时,被测信号的上升沿通过D触发器的输出端,同时关闭计数器的计数。
系统组成
⏹系统由分频器、计数器1、计数器2、D触发器等组成。
⏹分频器出来的信号作为等精度测频原理的预置闸门信号。
⏹其中D触发器,计数器2和计数器1的作用与前2页图中所示相同。
⏹运算模块就是完成公式
(1)的运算。
⏹复位主要对分频、计数器1和计数器2进行清零操作。
采用等精度测频原理的频率计的程序与仿真
--文件名:
PLJ.vhd。
--功能:
4位显示的等精度频率计。
--最后修改日期:
2004.4.14。
libraryieee;
useieee.std_logic_1164.all;
useieee.std_logic_unsigned.all;
useieee.std_logic_arith.all;
entityPLJis
port(clk:
instd_logic;--基准时钟(10KHz)
tclk:
instd_logic;--被测信号
start:
instd_logic;--复位信号
alarm0,alarm1:
outstd_logic;--超量程,欠量程显示
dian:
outstd_logic_vector(3downto0);--小数点
data1:
outintegerrange0to9999);--频率数据
endPLJ;
architecturebehavofPLJis
signalq:
integerrange0to9999;--预置闸门分频系数
signalq1:
integerrange0to10000;--被测信号计数器
signalq2:
integerrange0to20000;--基准信号计数器
signalen,en1:
std_logic;--预置闸门,实际闸门
signalqq,qqq:
integerrange0to200000000;--运算器
signaldata0:
integerrange0to9999;--频率数据中间信号
begin
process(clk)--此进程得到一个预置闸门信号
begin
ifclk'eventandclk='1'then
ifstart='1'thenq<=0;en<='0';
elsifq=9999thenq<=9999;en<='0';
elseq<=q+1;en<='1';
endif;
endif;
endprocess;
process(tclk)--此进程计被测信号脉冲数,和得到一个实际闸门信号
begin
iftclk'eventandtclk='1'then
ifstart='1'thenq1<=0;en1<='0';
elsifen='1'thenq1<=q1+1;en1<='1';
elseen1<='0';
endif;
endif;
endprocess;
process(clk)--此进程完成在实际闸门时间内,计基准脉冲数
begin
ifclk'eventandclk='1'then
ifstart='1'thenq2<=0;
elsifen1='1'then
ifq2=20000thenq2<=20000;
elseq2<=q2+1;
endif;
endif;
endif;
endprocess;
process(clk)--此进程完成等精度频率计的运算
begin
ifclk'eventandclk='1'then
ifstart='1'thendata0<=0;dian<="0000";alarm0<='0';alarm1<='0';qqq<=0;qq<=00;
elsifen1='0'then
ifq1>=1000thenqq<=q1*10000;--根据q1的大小来判断小数点的位置
ifqqqelsifdata0>=10000thenalarm0<='1';--超量程显示
elsedata1<=data0;
endif;
elsifq1>=100thenqq<=q1*100000;
ifqqqelsifdata0>=10000thendata1<=1000;dian<="0000";
elsedata1<=data0;dian<="0010";
endif;
elsifq1>=10thenqq<=q1*1000000;
ifqqqelsifdata0>=10000thendata1<=1000;dian<="0010";
elsedata1<=data0;dian<="0100";
endif;
elsifq1>=1thenqq<=q1*10000000;
ifqqqelsifdata0>=10000thendata1<=1000;dian<="0100";
elsedata1<=data0;dian<="1000";
endif;
endif;
elsifq2>19999thenalarm1<='1';--欠量程显示
elsealarm1<='0';
endif;
endif;
endprocess;
endbehav;
附录
等精度频率计仿真图—欠量程
等精度频率计仿真图—超量程
等精度频率计仿真图—5tclk=clk
等精度频率计仿真图—9tclk=clk
等精度频率计仿真图—50tclk=clk
等精度频率计仿真图—80tclk=clk
等精度频率计仿真图—300tclk=clk
等精度频率计仿真图—1000tclk=clk
等精度频率计仿真图—5000tclk=clk
等精度频率计仿真图—6000tclk=clk
等精度频率计仿真图—10000tclk=clk