一、指标需求 (1)设计一个频率测量范围0~200MHz的频率计。 (2)要求要能够完成高、低频率的测量并自动换挡,设计换挡分界,分析误差来源并设计测量分辨率及量程。
二、设计分工及原理分析2.1设计分工及总体框架图 本文以Max+plusII为设计环境,在具体的VHDL语言设计程序中,先将程序分为四个设计模块:分频模块、锁存器控制模块、计数模块、判决模块,在此基础上建立项层文件,再对项层文件进行编译、仿真即可。 总体框图设计思路:由系统时钟分频得到基准时钟,在基准时钟的高电平期间计被测频率的脉冲个数,高电平结束时计数结束,所记录的脉冲个数是被测信号的频率,为了在数码管上显示计数结果需要锁存器的锁存,因此,在基准时钟下降沿来的时候锁存器实现锁存功能。为了下次计数必须将本次计数的结果清零,所以在基准时钟低电平期间对计数器清零。被测频率从计数器的是中端输入实现频率的测试,通过计数器将最终的计数结果输入数据锁存器,锁存器锁存的数据输入判决模块决定并输出最终的计数结果。
2.2数字频率计的基本原理 常用的频率测量方法有两种:频率测量法和周期测量法。 (1)频率测量法是用一个频率稳定度高的频率源作为基准时钟,在时间t内对被测信号的脉冲数N进行计数,然后求出单位时间内的脉冲数,即为被测信号的频率。通常情况下计算每秒内待测信号的脉冲个数,此时我们称闸门时间为1秒。闸门时间也可以大于或小于一秒,闸门时间越长,得到的频率值就越准确,但闸门时间越长则每测一次频率的间隔就越长;闸门时间越短,测的频率值刷新就越快,但测得的频率精度就受影响。 (2)周期测量法是先测量出被测信号的周期T,然后根据频率f=1/T求出被测信号的频率。但是上述两种方法都会产生±1个被测脉冲的误差,在实际应用中有一定的局限性。 根据测量原理,很容易发现频率测量法适合于高频信号测量,周期测量法适合于低频信号测量,故本文高频时采用频率测量法,低频时自动换挡使用周期测量法。
三、设计结果展示 3.2分频器的功能模块及仿真 (1)分频器的功能模块: (2)源程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY FENP IS PORT(CLK:IN STD_LOGIC; --1 Hz测频控制时钟 FIN:IN STD_LOGIC; EN1,EN2:OUT STD_LOGIC; --计数器时钟使能 CLR1,CLR2:OUT STD_LOGIC; --计数器清零 LOAD1,LOAD2:OUT STD_LOGIC); --输出锁存信号 END ENTITY FENP; ARCHITECTURE ART OF FENP IS SIGNAL DIV2CLK :STD_LOGIC; SIGNAL DIV2FIN :STD_LOGIC; BEGIN PROCESS ( CLK ) IS BEGIN IF CLK'EVENT AND CLK='1' THEN --1HZ时钟二分频 DIV2CLK<=NOT DIV2CLK; END IF ; END PROCESS; PROCESS ( CLK,DIV2CLK ) IS BEGIN IF CLK= '0' AND DIV2CLK = '0' THEN --产生计数器清零信号 CLR1<='1'; ELSE CLR1<= '0' ; END IF; END PROCESS; PROCESS ( FIN ) IS BEGIN IF FIN'EVENT AND FIN='1' THEN --二分频 DIV2FIN<=NOT DIV2FIN; END IF ; END PROCESS; PROCESS (FIN,DIV2FIN ) IS BEGIN IF FIN= '0' AND DIV2FIN = '0' THEN --产生计数器清零信号 CLR2<='1'; ELSE CLR2<= '0' ; END IF; END PROCESS; LOAD1<=NOT DIV2CLK; EN1<=DIV2CLK; LOAD2<=NOT DIV2FIN; EN2<=DIV2FIN; END ARCHITECTURE ART; 频率计的关键是设计一个测频率控制信号发生器,产生测量频率的控制时序。控制时钟信号CLK取为1Hz,2分频后即可产生一个脉宽为1秒的时钟信号,以此作为计数闸门信号。当计数闸门信号为高电平时,允许计数;当计数闸门信号由高电平变为低电平(下降沿到来)时,应产生一个锁存信号,将计数值保存起来;锁存数据后,还要在下次计数闸门信号上升沿到来之前产生清零信号CLR,将计数器清零,为下次计数作准备。 3.3计数器的功能模块及仿真 (1)计数器的功能模块: (2)源程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY JISHU IS PORT (CLK:IN STD_LOGIC; ENA:IN STD_LOGIC; CLR:IN STD_LOGIC; CQ:OUT INTEGER RANGE 0 TO 15; CO:OUT STD_LOGIC); END ENTITY JISHU; ARCHITECTURE ART OF JISHU IS SIGNAL CQI :INTEGER RANGE 0 TO 15; BEGIN PROCESS(CLK,ENA,CLR) IS BEGIN IF CLR= '1' THEN CQI<= 0; ELSIF CLK'EVENT AND CLK='1' THEN IF ENA='1' THEN IF CQI<9 THEN CQI<=CQI+1; ELSE CQI<=0; END IF; END IF; END IF; END PROCESS; PROCESS (CQI) IS BEGIN IF CQI=9 THEN CO<='1'; ELSE CO<= '0'; END IF; END PROCESS; CQ<=CQI; END ARCHITECTURE ART; 该仿真的作用是实现十进制计数功能。从仿真图中可以得出,当第一个计数器计数输出CQ=9时,下一秒时钟上升沿到来时,将产生一个CO进位信号作为下一个计数器 的时钟信号,同时CQ清零,依次递推到8个计数器。 3.4数据锁存器的功能模块及仿真 (1)数据锁存器的功能模块: (2)源程序: LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY JICUNQI IS PORT(LOAD:IN STD_LOGIC; DIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0)); END ENTITY JICUNQI; ARCHITECTURE ART OF JICUNQI IS BEGIN PROCESS(LOAD,DIN) IS BEGIN IF LOAD'EVENT AND LOAD='1'THEN DOUT<=DIN; END IF; END PROCESS; END ARCHITECTURE ART; 仿真图的LOAD信号上升沿到来时将对输入到内部的计数信号进行锁存,并将结果输出给判决模块。当输入信号上升到时就会产生锁存,否则,不进行锁存,该仿真在上升沿的时候,将其锁存起来,直到下个上升沿才会改变锁存的数据。 3.5判决器的功能模块及仿真 (1)判决器的功能模块: (2)源程序: LIBRARY IEEE; USE IEEE. STD_LOGIC_1164.ALL; USE IEEE. STD_LOGIC_UNSIGNED.ALL; ENTITY PANJUE IS PORT(JCLK:IN STD_LOGIC_VECTOR(31 DOWNTO 0); JFIN:IN STD_LOGIC_VECTOR(31 DOWNTO 0); DOUT:OUT STD_LOGIC_VECTOR(31 DOWNTO 0); M:OUT STD_LOGIC; N:OUT STD_LOGIC); END PANJUE ; ..... 分别将频率测量法和周期测量法的计数结果输入判决模块,当频率高于我们换挡频率(100Hz)时输出频率测量法的计数结果,并输出M=0,N=0;当频率高于我们换挡频率(100Hz)时输出周期测量法的计数结果,并输出M=1,N=0;当频率低于我们1Hz时输出周期测量法的计数结果,并输出M=1,N=1,此时频率f=1/N;
3.6综合设计结果展示 (1)当被测频率为1000Hz时:
此时输出结果DOUT=1000, M=0,N=0;“DOUT=1000”表示“被测频率为1000Hz”,“M=0,N=0”表示“频率测量法的计数结果”。 (2)当被测频率为442Hz时:
此时输出结果DOUT=442, M=0,N=0;“DOUT=442”表示“被测频率为442Hz”,“ M=0,N=0”表示“频率测量法的计数结果”。 (3)当被测频率为100Hz时:
此时输出结果DOUT=100, M=1,N=0;“DOUT=100”表示“被测频率为100Hz”,“M=1,N=0”表示“周期测量法的计数结果”。 (4)当被测频率为15Hz时:
此时输出结果DOUT=15, M=1,N=0;“DOUT=15”表示“被测频率为15Hz”,“M=1,N=0”表示“周期测量法的计数结果”。 (5)当被测频率为1Hz时:
此时输出结果DOUT=1, M=1,N=0;“DOUT=1”表示“被测频率为1Hz”,“M=1,N=0”表示“周期测量法的计数结果”。 (6)当被测频率为0.2Hz时:
此时输出结果DOUT=5, M=1,N=1;“DOUT=5”表示“被测频率为1/5=0.2Hz”,“M=1,N=1”表示“周期测量法的计数结果且频率低于1Hz”。
四、设计结果展示调试参数分析计算(1)频率测量法:频率f=N (2)周期测量法:频率f=1/T 频率计的精度与误差要求:从上述的仿真结果可以看出,我们的设计方案的结果与被测频率符合很好,误差很小;实际上,测量的脉冲个数的误差会在士1 之间。假设所测得的脉冲个数为N,则所测频率的最大误差为δ=1/(N-1) X100%。显然,减少误差的方法就是增大N,当待测频率为换挡频率100Hz时,误差理论值为1/100约为1%,则测频误差应为1%,随着被测频率越高,则误差越低;当低于换挡频率,尤其是当频率无限接近0Hz时,频率越接近被测频率,误差越小。
|