【频率计】基于ISE+VHDL编程的多功能数字频率计
1.软件版本
ISE14.7
2.本算法理论知识
1 数字频率计的基本原理
频率测量的方法常用的有测频法和测周法两种。
·测频法
测频法的基本思想是让计数器在闸门信号的控制下计数1秒时间,计数结果是1秒内被测信号的周期数,即被测信号的频率。若被测信号不是矩形脉冲,则应先变换成同频率的矩形脉冲。测频法的原理框图如图3-1所示。
图中,秒脉冲作为闸门信号,当其为高电平时,计数器计数;低电平时,计数器停止计数。显然,在同样的闸门信号作用下,被测信号的频率越高,测量误差越小。当被测频率一定时,闸门信号高电平的时间越长,测量误差越小。但是闸门信号周期越长,测量的响应时间也越长。例如,闸门信号高电平时间为1秒,被测信号频率的真值为2Hz,如图3-2所示。
图4-1频率测量原理框图
可知,无论被测信号的频率是多少,测量时可能产生的最大绝对误差均为±1Hz,即
f测-f真=±1Hz
所以,最大相对误差为:σmax= (f测-f真)/ f真=±1/ f真
由上式可知,在闸门信号相同时,测频法的相对误差与被测信号的频率成反比。因此测频法适合于测量频率较高的信号。
图4-2 测频法的误差
·测周法
当被测信号频率较低时,为保证测量精度,常采用测周法。即先测出被测信号的周期,再换算成频率。测周法的实质是把被测信号作为闸门信号,在它的高电平的时间内,用一个标准频率的信号源作为计数器的时钟脉冲。若计数结果为N,标准信号频率为f1,则被测信号的周期为
T = T1·N
被测信号的频率为
f = 1/T1·N = f1/N
利用测周法所产生的最大绝对误差,显然也等于±1个标准信号周期。如果被测信号周期的真值为T真= T1·N,则T测= T1·(N±1)
σmax= (f测-f真)/ f真= T真/T测 – 1=±1/(N±1)
由上式可知,对于一定的被测信号,标准信号的频率越高,则N的值越大,因而相对误差越小。
2 数字频率计的基本设计方案
频率信号易于传输,抗干扰性强,可以获得较好的测量精度。因此,频率检测是电子测量领域最基本的测量之一。本文的数字频率计是按照计算每秒内待测信号的脉冲个数的基本原理来设计,此时取闸门时间为1秒。
数字频率计的关键组成部分包括一个测频控制信号发生器、一个计数器和一个锁存器,另外包含信号整形电路、脉冲发生器、译码驱动电路和显示电路,其原理框图如图1所示。
图4-1 数字频率计原理框图
工作过程:系统正常工作时,脉冲信号发生器输入1Hz的标准信号,经过测频控制信号发生器的处理,2分频后即可产生一个脉宽为1秒的时钟信号,以此作为计数闸门信号。测量信号时,将被测信号通过信号整形电路,产生同频率的矩形波,输入计数器作为时钟。当计数闸门信号高电平有效时,计数器开始计数,并将计数结果送入锁存器中。设置锁存器的好处是显示的数据稳定,不会由于周期性的清零信号而不断闪烁。最后将锁存的数值由外部的七段译码器译码并在数码管上显示。
3.核心代码
module REG32B(load,din,dout);
input load;
input[39:0]din;
output[39:0]dout;
reg[39:0]dout;
always @(load or din)
beginif(load==1'b1)dout<=din;
end
endmodule
•系统总体设计module FREQ(fsin,clk,dout2);
input fsin;
input clk;
output[39:0]dout2;
wire TSTEN;
wire CLR_CNT;
wire LOAD;
TESTCTL TESTCTL_u(.CLK (clk), .TSTEN (TSTEN), .CLR_CNT (CLR_CNT), .LOAD (LOAD));
wire[39:0]dout;
wire s1;
wire s2;
wire s3;
wire s4;
wire s5;
wire s6;
wire s7;
wire s8;
wire s9;
wire s10;
CNT10 CNT10_u1(.clk (fsin), .rst (CLR_CNT), .en (TSTEN), .cq (dout[3:0]), .carry_out (s1));CNT10 CNT10_u2(.clk (s1), .rst (CLR_CNT), .en (TSTEN), .cq (dout[7:4]), .carry_out (s2));
CNT10 CNT10_u3(.clk (s2), .rst (CLR_CNT), .en (TSTEN), .cq (dout[11:8]), .carry_out (s3));
CNT10 CNT10_u4(.clk (s3), .rst (CLR_CNT), .en (TSTEN), .cq (dout[15:12]), .carry_out (s4));
CNT10 CNT10_u5(.clk (s4), .rst (CLR_CNT), .en (TSTEN), .cq (dout[19:16]), .carry_out (s5));
CNT10 CNT10_u6(.clk (s5), .rst (CLR_CNT), .en (TSTEN), .cq (dout[23:20]), .carry_out (s6));CNT10 CNT10_u7(.clk (s6), .rst (CLR_CNT), .en (TSTEN), .cq (dout[27:24]), .carry_out (s7));
CNT10 CNT10_u8(.clk (s7), .rst (CLR_CNT), .en (TSTEN), .cq (dout[31:28]), .carry_out (s8));
CNT10 CNT10_u9(.clk (s8), .rst (CLR_CNT), .en (TSTEN), .cq (dout[35:32]), .carry_out (s9));
CNT10 CNT10_u10(.clk (s9), .rst (CLR_CNT), .en (TSTEN), .cq (dout[39:36]), .carry_out (s10));
REG32B REG32B_u(.load (LOAD), .din (dout), .dout (dout2));
endmodule
4.操作步骤与仿真结论
一般对于系统的仿真,我们均采用Modelsim进行,我们在建立工程的时候,将仿真设置为Modelsim,如下图所示:
图4 modelsim仿真设置
下面我们将对系统进行详细的仿真测试,由于系统要求精度为10e-1到10e8,我们将对10个数量级的频率分别进行测试。
·0.1HZ
图5 0.1HZ仿真效果
·1HZ
图6 1HZ仿真效果
·10HZ
图7 10HZ仿真效果
·100HZ
图8 100HZ仿真效果
·1KHZ
图9 1kHZ仿真效果
·10KHZ
图10 10KHZ仿真效果
5.参考文献
[1]凌振宝, 叶剑峰, 孙正光. 多功能数字频率计的设计与研究[J]. 吉林大学学报:信息科学版, 2011, 29(4):7.
A37-3
6.完整源码获得方式
方式1:微信或者QQ联系博主
方式2:订阅MATLAB/FPGA教程,免费获得教程案例以及任意2份完整源码
【频率计】基于ISE+VHDL编程的多功能数字频率计相关推荐
- 【JAVA小游戏+水果售卖系统】基于GUI界面编程的水果“人生”模拟系统
[JAVA]基于GUI界面编程的水果"人生"模拟系统 一.系统主要功能及简介 二.系统体系结构 三.系统设计技术 四.编码说明 五.效果展示 一.系统主要功能及简介 该系统以JAV ...
- adsl服务器客户端配置cisco_基于ISE对Cisco网络设备部署AAA
基于ISE对Cisco网络设备部署AAA 上期小武老师我教你们安装了ISE服务器,那么现在服务器安装好了,AAA如何部署实现呢?现在我就来教你们! 跟着小武我开始吧-- 一.ISE初始化配置 1.1. ...
- 使用VHDL编程的直接扩频发生器
使用VHDL编程的直接扩频发生器 在ISE下创建的,使用VHDL编程实现. part is xc4vsx55 下面是顶层模块和工程截图:
- python 数学公式识别_Python实现基于KNN算法的笔迹识别功能详解
本文实例讲述了Python实现基于KNN算法的笔迹识别功能.分享给大家供大家参考,具体如下: 需要用到: Numpy库 Pandas库 手写识别数据 点击此处本站下载. 数据说明: 数据共有785列, ...
- 安卓学习笔记42:基于HTTP网络编程
文章目录 零.学习目标 一.安卓基于HTTP网络编程 (一)两种请求方式 (二)安卓基于HTTP网络编程的两种方式 1.使用HttpURLConnection访问网络资源 2.利用HttpClient ...
- php ob gzhandler,php基于ob_start(ob_gzhandler)实现网页压缩功能的方法
本文实例讲述了php基于ob_start("ob_gzhandler")实现网页压缩功能的方法.分享给大家供大家参考,具体如下: PHP生成网页后传送给浏览器显示 ,页面的打开速度 ...
- sql编程接收一个集合_T-SQL是基于集合的编程方法的资产
sql编程接收一个集合 介绍 (Introduction) This article is the third and last one of a series of articles that ai ...
- PHP高级计算器的过程,PHP基于堆栈实现的高级计算器功能示例
PHP基于堆栈实现的高级计算器功能示例 发布于 2017-10-14 13:38:26 | 108 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext ...
- python模拟手写笔迹_Python实现基于KNN算法的笔迹识别功能详解
本文实例讲述了Python实现基于KNN算法的笔迹识别功能.分享给大家供大家参考,具体如下: 需要用到: Numpy库 Pandas库 手写识别数据 点击此处本站下载. 数据说明: 数据共有785列, ...
- 基于TCP,Socket编程,模仿腾讯QQ界面,使用Java开发的一款网络聊天工具。QQ_Chat
代码下载地址 原博客地址 QQ_Chat 基于TCP,Socket编程,模仿腾讯QQ界面,使用Java开发的一款网络聊天工具. (内含报告) 工具: Eclipse.Navicat for MySQL ...
最新文章
- java aio_java中的AIO
- Upload上传图片
- 诺奖10年,干细胞领域再突破!华大单细胞技术助力获得人类体外诱导全能干细胞...
- C语言编程时常犯十八个错误
- 用Tableau画可调整的树状图(Tree Diagram)
- DELPHI串口通讯编程
- 高可用之KeepAlived(2):keepalived+lvs
- oracle 9i手动启动数据库,Oracle9iAS (之五): 手工起动,关闭系统
- 巴赛尔协议与贷款产品利率解析
- mysql表添加字段_怎么给mysql数据表添加字段
- MES(制造企业生产过程执行管理系统)
- 双线性映射matlab,[Matlab]双线性变换法设计数字带通滤波器
- 银行IT架构变迁史(金融IT基础架构)
- [数字媒体] PR视频剪辑之竖屏实现横屏旋转切换和大视频文件缩小
- [精简]托福核心词汇78
- 试题 算法训练 娜神平衡python
- 制造业质量管理四大病因
- Composer用法详解
- 大阪第17天——清明古诗
- history 路由原理