赞
踩
FPGA数字频率计
数字频率计在电子技术中已经扮演着一个重要的角色,广泛应用于航天、电子、测控 等领域,许多测量方案和测量结果都与频率有着十分密切的关系,因此频率的测量在电子产 品的研究与生产中显得尤为重要。测量频率的方法有多种,其中电子计数器测量频率具有精 度高、使用方便、测量迅速,以及便于实现测量过程自动化等优点,是频率测量的重要手 段之一。本文基于测频原理,利用直接测频法,在 Quartus II 仿真平台上编译、仿真、调试,设计了一个 1-9999KHz 的数字频率计,能实现十进制数字的显示,从而测得频率。
测频率时,以分频后的时钟信号作为闸门信号,因为输入信号的频率大于闸门信号频率,所以在闸门信号周期内,计算输入信号的周期数目,就可以计算出输入信号的频率值。
数字频率计被测信号为 clk1,输入计数器;标准信号发生器提供标准时钟信号clk,输入测频控制信号发生器,由测频控制信号发生器产生闸门信号,其高电平持续的时间 en =1s ,当 ls 信号来到时,闸门开通,被测脉冲信号通过闸门,计数器开始计数,直到 1s 信 号结束时闸门关闭,停止计数。若在闸门时间1s内计数器计得的脉冲个数为 N,则被测信号频率 f= NHz,并在停止计数的1s时间内(即使能信号 en=0 期间内),把被测频率 N 显示出来。根据测频法原理设计频率计,测量一秒或者 x 秒内待测信号的周期个数,然后经过分频或者倍频法,计数出一秒内待测信号的个数 t,t 即为待测信号的频率值。
频率的测量分为以下几个主要步骤:
①时基产生与测频控制进程模块。产生一个标准的时钟信号作为闸门信号,对计数器 的工作状态进行控制,在闸门信号有效的时间内开启计数器,对输入的波形进行计数,就 是对1秒或者x秒内被测信号的周期进行累计。为了计算方便,通过倍频或者分频后使得闸门有效时间为 1 秒。
②计数进程模块,在在闸门信号有效时间范围内,即使能信号en=1的高电平期间内,对输入的信号周期个数进行计数。通过计数器的开启,对被测信号在单位时间内的重复次数进行测量,如果时间不是单位时间,则通过分频或者倍频将时间换算为单位时间,则单位时间内待测信号的个数即为待测频率值。闸门信号(测频控制信号en)控制对计数器的开启和关闭,被测信号在闸门信号开启(即en=1)期间内,对计数器的计数功能进行触发,并计数。
在quartus ii使用VHDL语言编程,由于最大频率9999KHz为7位,因此编写7位十进制数,从个位到百万位。
代码如下(示例):
library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity plj is port ( rst:in std_logic; --复位信号 clk :in std_logic; --系统时钟 clk1:in std_logic; --被测信号 ge,shi,bai,qian,wan,shiwan,baiwan:out std_logic_vector(3 downto 0); ceen:out std_logic; ceclr:out std_logic ); end plj; architecture behav of Plj is signal b1,b2,b3,b4,b5,b6,b7:std_logic_vector(3 downto 0); --十进制计数器 signal en,bclk:std_logic; --使能信号,有效被测信号 signal sss : std_logic_vector(3 downto 0); --小数点 signal q :integer range 0 to 49999999; --秒分频系数 signal qq : integer range 0 to 499999; --动态扫描分频系数 signal clr:std_logic; begin second:process(clk) --此进程产生一个持续时间为一秒的的闸门信号 begin
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。