当前位置:文档之家› 石经院基于FPGA等精度测频原理的频率计

石经院基于FPGA等精度测频原理的频率计

石家庄经济学院通信实习报告院系:信息工程学院学号:姓名:日期:2013.1.15一、实习目的1、通过本次专业课程设计巩固并扩展通信课程的基本概念、基本理论、分析方法和仿真实现方法。

2、结合所学的EDA应用和仿真技术,完成通信专业相关课程内容的建模和设计仿真。

到达通信专业相关理论课程有效的巩固和整合,实现将理论知识和软件设计紧密结合。

3、通过本次专业课程设计达到培养学生的创新能力、通信系统建模和仿真设计能力以及软件调试和分析能力的目的。

二、实习要求1、应用通信类软件完成通信系统相关内容的设计和建模,并仿真出正确结果,对仿真波形加以重点分析和说明。

2、按要求格式书写报告,原理充分、设计方法及仿真结果分析正确、条理清晰、重点突出。

三、实习内容1、实习题目基于FPGA等精度测频原理的频率计2、设计原理(1)直接测频方法常用的直接测频方法主要有测频法和测周期法两种:测频法就是在确定的闸门时间Tw内。

记录被测信号的变化周期数(或脉冲个数)Nx,则被测信号的频率为:Fx=Nx/Tw。

测周期法需要有标准信号的频率fs,在待测信号的一个周期Tx内,记录标准频率的周期数Ns,则被测信号的频率为:fx=fs/Ns。

这两种方法的计数值会产生±1个字误差,并且测试精度与计数器中记录的数值Nx或Ns有关。

为了保证测试精度,一般对于低频信号采用测周期法;对于高频信号采用测频法,因此测试时很不方便。

(2)等精度测频方法图1 等精度测频原理波形图等精度测频方法是在直接测频方法的基础上发展起来的。

它的闸门时间不是固定的值,而是被测信号周期的整数倍,即与被测信号同步,因此,消除了对被测信号计数所产生±1Hz误差,并且达到了在整个测试频段的等精度测量。

测频原理如图1所示。

在测量过程中,有两个计数器分别对标准信号和被测信号同时计数。

首先给出闸门开启信号(预置闸门上升沿)。

此时计数器并不开始计数,而是等到被测信号的上升沿到来时,计数器才真正开始计数。

然后预置闸门关闭信号(下降沿)到时,计数器并不立即停止计数,而是等到被测信号的上升沿到来时才结束计数,完成一次测量过程。

可以看出,实际闸门时间T与预置闸门时间下,并不严格相等,但差值不超过被测信号的一个周期。

设在一次实际闸门时间下中计数器对被测信号的计数值为Nx,对标准信号的计数值为Ns。

标准信号的频率为fs,则被测信号的频率为:Fx=(Nx/Ns)fs。

(1)若忽略标频fs的误差,则等精度测频可能产生的相对误差为:δ=(|fxc-fx|/fxe)×100%。

(2)其中&e为被测信号频率的准确值。

在测量中,由于fx计数的起停时间都是由该信号的上升沿触发的,在闸门时间T 内对fx的计数Nx无误差(T=NxTx);对fs的计数Ns最多相差一个数的误差,即|△Ns|≤l,其测量频率为:fxe=[Nx/(Ns+△Ns)]/fs (3)将式(1)和(3)代入式(2),并整理得:δ=|△Ns|/Ns≤l/Ns=1/(T·fs) 由上式可以看出。

测量频率的相对误差与被测信号频率的大小无关,仅与闸门时间和标准信号频率有关。

即实现了整个测试频段的等精度测量。

闸门时间越长,标准频率越高,测频的相对误差就越小。

标准频率可由稳定度好、精度高的高频率晶体振荡器产生,在保证测量精度不变的前提下,提高标准信号频率,可使闸门时间缩短,即提高测试速度。

表1所列为:标频在10KHz和100MHz时闸门时间与最大允许误差的对应关系。

表1 闸门时间与精度的关系等精度测频的实现方法可简化为图2所示的框图。

CNT1和CNT2是两个可控计数器。

标准频率(fs)信号从CNTl的时钟输入端CLK输入;经整形后的被测信号(&)从CN他的时钟输入端CLK输入。

每个计数器中的CEN输入端为时钟使能端控制时钟输入。

当预置门信号为高电平(预置时间开始)时.被测信号的上升沿通过D触发器的输出端,同时启动两个计数器计数;同样,当预置门信号为低电平(预置时间结束)时,被测信号的上升沿通过D触发器的输出端。

同时关闭计数器的计数。

图2 等精度测频实现方法原理(3)系统组成系统由分频器、计数器l、计数器2、D触发器等组成。

分频器出来的信号作为等精度测频原理的预置闸门信号。

其中D触发器,计数器2和计数器1的作用与图2中所示相同。

运算模块就是完成公式(1)的运算。

复位主要对分频、计数器1和计数器2进行清零操作。

系统组成方框图如图3所示。

图3 采用等精度测频原理的频率计系统组成方框图3、程序与仿真以下所列为一种4位显示等精度频率计的程序,其中系统的FPGA电路符号如图4所示。

图4 系统FPGA电路符号图VHDL程序如下:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity PLJ isport(clk:in std_logic;--基准时钟(10KHz)tclk:in std_logic; --被测信号start:in std_logic; --复位信号alarm0,alarm1:out std_logic; --超量程,欠量程显示dian:out std_logic_vector(3 downto 0); --小数点data1:out integer range 0 to 9999 ); --频率数据end PLJ;architecture behav of PLJ issignal q:integer range 0 to 9999; --预置闸门分频系数signal q1:integer range 0 to 10000; --被测信号计数器signal q2:integer range 0 to 20000; --基准信号计数器signal en,en1:std_logic; --预置闸门,实际闸门signal qq,qqq:integer range 0 to 200000000; --运算器signal data0:integer range 0 to 9999; --频率数据中间信号beginprocess(clk) --此进程得到一个预置闸门信号beginif clk'event and clk='1' thenif start='1' then q<=0;en<='0';else q<=q+1;en<='1';end if;end if;end process;process(tclk) --此进程计被测信号脉冲数,和得到一个实际闸门信号beginif tclk'event and tclk='1' thenif start='1' then q1<=0;en1<='0';elsif en='1' then q1<=q1+1;en1<='1';else en1<='0';end if;end if;end process;process(clk) --此进程完成在实际闸门时间内,计基准脉冲数beginif clk'event and clk='1' thenif start='1' then q2<=0;elsif en1='1' thenif q2=20000 then q2<=20000;else q2<=q2+1;end if;end if;end if;end process;process(clk) --此进程完成等精度频率计的运算beginif clk'event and clk='1'thenif start='1' then data0<=0;dian<="0000";alarm0<='0';alarm1<='0';qqq<=0;qq<=00;elsif en1='0' thenif q1>=1000 then qq<=q1*10000; --根据q1的大小来判断小数点的位置if qqq<qq then qqq<=qqq+q2;data0<=data0+1;dian<="0000"; --完成数据运算elsif data0>=10000 then alarm0<='1'; --超量程显示else data1<=data0;end if;elsif q1>=100 then qq<=q1*100000;if qqq<qq then qqq<=qqq+q2;data0<=data0+1;elsif data0>=10000 then data1<=1000;dian<="0000";else data1<=data0;dian<="0010";end if;elsif q1>=10 then qq<=q1*1000000;if qqq<qq then qqq<=qqq+q2;data0<=data0+1;elsif data0>=10000 then data1<=1000;dian<="0010";else data1<=data0;dian<="0100";end if;elsif q1>=1 then qq<=q1*10000000;if qqq<qq then qqq<=qqq+q2;data0<=data0+1;elsif data0>=10000 then data1<=1000;dian<="0100";else data1<=data0;dian<="1000";end if;end if;elsif q2>19999 then alarm1<='1'; --欠量程显示else alarm1<='0';end if;end if;end process;end behav;仿真结果如下:标准时钟为10khz,即周期为100us。

相关主题