找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 184|回复: 1
收起左侧

EDA数字频率计设计资料(VHDL语言)

[复制链接]
hainucp 发表于 2021-8-1 01:12 | 显示全部楼层 |阅读模式
一、指标需求
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时,频率越接近被测频率,误差越小。

以上文档下载:
word文档.docx (495.64 KB, 下载次数: 0)

电路逻辑图

电路逻辑图

框架图

框架图

1HZ测试图

1HZ测试图

15HZ测试图

15HZ测试图

100HZ测试图

100HZ测试图

442HZ测试图

442HZ测试图

1000HZ测试图

1000HZ测试图

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

 楼主| hainucp 发表于 2021-8-1 01:47 | 显示全部楼层
分享学习资料,大家可以一起交流学习
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表