实验4 数字频率计

实验目的:

1、使用铆孔U7输出一个脉冲,频率不定。

2、使用铆孔V7测量脉冲频率,并在数码管上显示。

实验内容及步骤:

  • 设计原理

测量频率的方法有很多,按照其工作原理分为无源测量法、比较法、示波器法和计数法等。计数法在实质上属于比较法,其中最常用的方法是电子计数器法。电子计数器是一种最常见、最基本的数字化测量仪器。

数字计数式频率计能直接计数单位时间内被测信号的脉冲数,然后以数字形式显示频率值。这种方法测量精确度高、快速,适合不同频率、不同精确度测频的需要。电子计数器测频有两种方式:一是直接测频法,即在一定闸门时间内测量被测信号的脉冲个数;二是间接测频法,如周期测频法。

由于数字电路的飞速发展和集成电路的普及,计数器的应用十分广泛。利用电子计数器测量频率具有精度高,显示醒目直观,测量迅速,以及便于实现测量过程自动化等一系列突出优点,所以该方法是目前最好的。

1.任务分析

数字频率计是采用数字电路制做成的能实现对周期性变化信号频率测量的仪器。频率计主要用于测量正弦波、矩形波、三角波和尖脉冲等周期信号的频率值。其扩展功能可以测量信号的周期和脉冲宽度。通常说的,数字频率计是指电子计数式频率计。

被测输入信号:方波

测试频率范围:0HZ-48MHZ

显示方式:用8个BCD七段数码管显示读数。采用对高为无意义补零显示。

3.模块设计

闸门产生、闸门电路工作原理:在测试电路中设置一个闸门产生电路,用于产生脉冲宽度为1s的闸门信号。该闸门信号控制闸门电路的导通与开断。让被测信号送入闸门电路,当1s闸门脉冲到来时闸门导通,被测信号通过闸门并到达后面的计数电路(计数电路用以计算被测输入信号的周期数),当1s闸门结束时,闸门再次关闭,此时计数器记录的周期个数为1s内被测信号的周期个数,即为被测信号的频率。测量频率的误差与闸门信号的精度直接相关,因此,为保证在1s内被测信号的周期量误差在10³量级,则要求闸门信号的精度为10 ⁴量级。例如,当被测信号为1kHz时,在1s的闸门脉冲期间计数器将计数1000次,由于闸门脉冲精度为10⁴,闸门信号的误差不大于0.1s,固由此造成的计数误差不会超过1,符合5*10³的误差要求。进一步分析可知,当被测信号频率增高时,在闸门脉冲精度不变的情况下,计数器误差的绝对值会增大,但是相对误差仍在5*10³范围内。

闸门信号产生、闸门电路实现方法

方法一:通常上述电路可以用分频器产生和多路选择器实现

方法二:采用相位累加法精确控制闸门

代码如下:

//
//8位数码管显示控制模块smg
//

module smg(clk, d1, d2, d3, d4, d5, d6, d7, d8, sel, seg);
input clk;
output reg [7:0] sel;
output reg [7:0] seg;	//a~g,dp
input [3:0] d1, d2, d3, d4; //d[7]-dp, d[6:0]-ASCII
input [3:0] d5, d6, d7, d8; //d[7]-dp, d[6:0]-ASCII 

//扫描频率:50Hz
parameter update_interval = 48000000 / 400 - 1; 
reg [4:0] dat; 
reg [2:0] cursel;
integer selcnt;

//扫描计数,选择位
always @(posedge clk)
begin
	selcnt <= selcnt + 1;
	if (selcnt == update_interval)
		begin
			selcnt <= 0;
			cursel <= cursel +  1'b1;
		end
end
 
//切换扫描位选线和数据
always @(posedge clk)
begin
	case (cursel)
		3'b000: begin dat = d1; sel = ~8'b00000001; end
		3'b001: begin dat = d2; sel = ~8'b00000010;end
		3'b010: begin dat = d3; sel = ~8'b00000100; end
		3'b011: begin dat = d4; sel = ~8'b00001000; end
		3'b100: begin dat = d5; sel = ~8'b00010000; end
		3'b101: begin dat = d6; sel = ~8'b00100000;end
		3'b110: begin dat = d7; sel = ~8'b01000000; end
		3'b111: begin dat = d8; sel = ~8'b10000000; end
	endcase
end

//更新段码
always @(posedge clk)
begin
	seg[0] <= dat[4]; //dp
	case (dat[3:0])
		4'h00 	: seg[7:1] <= ~7'b0000001;	//0
		4'h01 	: seg[7:1] <= ~7'b1001111;	//1
		4'h02 	: seg[7:1] <= ~7'b0010010;	//2
		4'h03 	: seg[7:1] <= ~7'b0000110;	//3
		4'h04 	: seg[7:1] <= ~7'b1001100;	//4
		4'h05 	: seg[7:1] <= ~7'b0100100;	//5
		4'h06 	: seg[7:1] <= ~7'b0100000;	//6
		4'h07 	: seg[7:1] <= ~7'b0001111;	//7
		4'h08 	: seg[7:1] <= ~7'b0000000;	//8
		4'h09 	: seg[7:1] <= ~7'b0000100;	//9 
		4'h0a 	: seg[7:1] <= ~7'b0001000;	//a 
		4'h0b 	: seg[7:1] <= ~7'b1100000;	//b 
		4'h0c 	: seg[7:1] <= ~7'b1110010;	//c 
		4'h0d 	: seg[7:1] <= ~7'b1000010;	//d 
		4'h0e 	: seg[7:1] <= ~7'b0110000;	//e 
		4'h0f 	: seg[7:1] <= ~7'b0111000;	//f 
		default  : seg[7:1] <= ~7'b0110000; 	//E-rror
	endcase
end
	
endmodule
module freqmeasure(
	output  P99,//输出脉冲	
	input  P100,//测量脉冲	
   output  [7:0] sel,
	output  [7:0] seg,	//a~g,dp
	
	input clkin//时钟

);

//
//
//锁相环模块
//
//
wire clk;
pll4 pll4_inst0(
	.inclk0(clkin),//12Mhz
	.c0(clk)//48Mhz
);

 

 
reg [31:0]	count;
reg clk_1s;
//1S定时时钟产生
always @(posedge clk ) 
begin
   if(count<48_000_000-1)
	begin
		count <= count+1;
		clk_1s <= 0;
	end
	else 
	begin
		count <= 0;
		clk_1s <= 1;	
	end
end	
 
 
 
reg [31:0] count_p100; 
always @(posedge P100 ) 
	count_p100 <= count_p100+1;
	
reg [31:0] count_p100_last; 
reg [31:0] freq_1s; 
always @(posedge clk )
if(clk_1s)
begin
	freq_1s <= count_p100-count_p100_last;
	count_p100_last <= count_p100;
end
 
reg [31:0] phase;
always @(posedge clk )
phase <= phase + 123456789;

assign P99 = phase[31]; //freq=48000000*123456789/2^32

//
//
//数码管模块
//
//
smg smg_inst
(
	.clk(clk) ,	// input  clkin
	.d1(d1) ,	// input [4:0] d1
	.d2(d2) ,	// input [4:0] d2
	.d3(d3) ,	// input [4:0] d2
	.d4(d4) ,	// input [4:0] d2
	.d5(d5) ,	// input [4:0] d2
	.d6(d6) ,	// input [4:0] d2
	.d7(d7) ,	// input [4:0] d2
	.d8(d8) ,	// input [4:0] d2
	.sel(sel) ,	// output [7:0] sel
	.seg(seg) 	// output [7:0] seg
);


 
 reg [3:0] d1, d2 ; //d[4]-dp, d[3:0]  
 reg [3:0] d3, d4 ; //d[4]-dp, d[3:0]  
 reg [3:0] d5, d6 ; //d[4]-dp, d[3:0]  
 reg [3:0] d7, d8 ; //d[4]-dp, d[3:0]  
reg [7:0]status;


reg [31:0]s,s1,div;

always @(posedge clk)
begin
      s1<=freq_1s/div;
      s<=s1%10;

status <= status+1;
case(status[7:4])
0:div<=10000000;
1:d1	<= s;
 
2:div<=1000000;
3:d2	<= s;
 
4:div<=100000;
5:d3	<= s;
 
6:div<=10000;
7:d4	<= s;
 
8:div<=1000;
9:d5	<= s;
 
10:div<=100;
11:d6	<= s;
 
12:div<=10;
13:d7	<= s;
 
14:div<=1;
15:d8	<= s;

endcase
end 			
endmodule

module freqmeasure(

output  P99,//输出脉冲

input  P100,//测量脉冲

   output  [7:0] sel,

output  [7:0] seg, //a~g,dp

input clkin//时钟

);

//

//

//锁相环模块

//

//

wire clk;

pll4 pll4_inst0(

.inclk0(clkin),//12Mhz

.c0(clk)//48Mhz

);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/570604.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

restful请求风格的增删改查-----修改and删除

一、修改&#xff08;和添加类似&#xff09; 前端&#xff1a; <script type"text/javascript">function update(){//创建user对象var user {id:$("#id").val(),username:$("#username").val(),password:$("#password").val…

aweraweg

c语言中的小小白-CSDN博客c语言中的小小白关注算法,c,c语言,贪心算法,链表,mysql,动态规划,后端,线性回归,数据结构,排序算法领域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 给大家分享一句我很喜欢我话&#xff1a; 知不足而奋进&#xff0c;望远山而前行&am…

​「Python绘图」绘制小猪佩奇

python 绘制小猪佩奇 一、预期结果 二、核心代码 import turtle print("开始绘制小猪佩奇") pen turtle.Turtle() pen.pensize(4) #pen.hideturtle()pen.speed(1000)pen.color("#ff9bc0","pink") pen.setheading(-30) pen.pu() pen.goto(-100,…

34. BI - 美国大学生足球队的 GCN 案例

本文为 「茶桁的 AI 秘籍 - BI 篇 第 34 篇」 文章目录 美国大学生足球队 Embedding&#xff08;GCN&#xff09; Hi&#xff0c;你好。我是茶桁。 在上一节课中&#xff0c;因为需要&#xff0c;我们先是回顾了一下 Graph Embedding&#xff0c;然后跟大家讲解了 GCN 以及其算…

代码随想录——双指针/滑动窗口(二)

一.最长连续递增序列 go语言 func max(a,b int) int{if a>b{return a}return b }func findLengthOfLCIS(nums []int) int {n:len(nums)maxlen:0for l:0;l<n;l{r:l1for r<n&&nums[r]>nums[r-1]{r}maxlenmax(r-l,maxlen)}return maxlen }cpp int findLengt…

为什么大模型训练需要GPU,以及适合训练大模型的GPU介绍

文章目录 前言 1、为什么大模型训练需要GPU&#xff0c;而非CPU 2、现在都有哪些合适的GPU适合训练&#xff0c;价格如何 前言 今天偶然看到一篇关于介绍GPU的推文&#xff0c;我们在复现代码以及模型训练过程中&#xff0c;GPU的使用是必不可少的&#xff0c;那么大模型训练需…

软件测试(Web自动化测试)

一.自动化测试简介 1.自动化测试是一种把人工驱动的测试行为转化为机器执行的测试过程。 2.使用自动化测试需要满足的3个条件&#xff1a; &#xff08;1&#xff09;项目需求变动不频繁 &#xff08;2&#xff09;项目进度压力不大&#xff0c;时间不紧迫 &#xff08;3&…

python struct模块 处理字节流

首先看一下&#xff0c;struct 的字节顺序格式。 其次是struct的格式对照表。 下面是案例&#xff1a; 单项数据编解码 >>>struct.pack(i,379978) bJ\xcc\x05\x00 >>>struct.pack(>i,379978) b\x00\x05\xccJ解析&#xff1a; >>>struct.unpa…

5.组合与继承

1.面向对象 在C中&#xff0c;面向对象&#xff08;Object-Oriented&#xff09;是一种程序设计范式&#xff0c;它使用“对象”来设计应用程序和软件。面向对象编程&#xff08;OOP&#xff09;的核心概念包括类&#xff08;Class&#xff09;、对象&#xff08;Object&#x…

23.leetcode---从前序与中序中遍历二叉树(Java版)

题目链接: https://leetcode.cn/problems/construct-binary-tree-from-preorder-and-inorder-traversal/submissions/518810727/ 代码: 测试:

建设数字化工厂系统需要哪些核心技术

随着工业4.0时代的来临&#xff0c;数字化工厂系统已成为制造业转型升级的关键所在。数字化工厂系统通过集成各种先进技术&#xff0c;实现生产过程的智能化、自动化和高效化&#xff0c;进而提升企业的竞争力。那么建设这样一个系统究竟需要哪些核心技术呢&#xff1f; 一、工…

如何创建网址静态码?二维码扫码跳转网址的方法

现在很多的网址链接需要转换成二维码之后来使用&#xff0c;比如印刷包装、宣传单、公众号等方面应用&#xff0c;用户可以通过扫码跳转到对应链接的页面&#xff0c;查看页面内容。那么想要将链接转换二维码&#xff0c;并且二维码长期有效&#xff0c;可以使用生成静态码的方…

CSS文本属性与字体属性

目录 文本属性 文本颜色 文本对齐 修饰文本 文本缩进 行高 字体属性 字体系列 字体大小 字体粗细 字体样式 字体/文本综合属性写法 Chrome调试工具的使用 文本属性 文本颜色 在CSS中使用color 属性用于定义文本的颜色&#xff0c;使用background-color设置一个盒…

attempt to compare nil with number -- 黑马点评出现问题

问题情况 : 主要问题 : 调用lua执行redis时&#xff0c;有一个值会接受nil&#xff08;因为redis中没有该数据&#xff09;或者数值&#xff0c;当该值为nil时执行报错&#xff0c;因为会用到将该值与其他数字比较&#xff0c;故报错attempt to compare nil with number 当然…

Linux 底软开发——对CAN的详细操作(周期发送,异常检测,过滤报文)

Linux底软开发—对CAN发送接收详细操作 文章目录 Linux底软开发—对CAN发送接收详细操作1.保证多条CAN数据发送的周期性2.解析CAN报文数据3.CAN总线异常机制应对4.对CAN报文进行过滤操作5.完整的接收报文代码&#xff08;过滤&#xff0c;心跳检测&#xff0c;解析&#xff09;…

大语言模型Ollama

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl Ollama简介 Ollama是一个开源的大语言模型平台&#xff0c;它允许用户在本地环境中运行、创建和共享大型语言模型。Ollama提供了丰富的功能和特性&#xff0c;使得用户可以…

eCharts 折线图 一段是实线,一段是虚线的实现效果

在lineStyle里写了不生效的话&#xff0c;可以尝试数据拼接 option {xAxis: {type: category,data: [Mon, Tue, Wed, Thu, Fri, Sat, Sun]},yAxis: {type: value},series: [{data: [150, 230, 224,218 ,,,],type: line},{data: [,,, 218, 135, 147, 260],type: line,lineStyl…

Git:使用conda命令切换虚拟环境

1. 问题 在win10电脑的Git中&#xff0c;无法使用conda list命令&#xff0c;报错&#xff08;bash&#xff1a;conda&#xff1a;command not found&#xff09;。也无法使用conda activate base命令激活虚拟环境&#xff0c;报错&#xff08;bash&#xff1a;conda&#xff…

【面试必会】线程池创建方式详解

最近面试问道了线程池的创建方式&#xff0c;这里出一篇文章记录下这一知识点&#xff01; 线程池是一种多线程处理形式&#xff0c;处理过程中将任务添加到队列&#xff0c;然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的ThreadFactory创建…

报名照片10k怎么处理?教你几个方法

现在在每年的事业单位考公的时候&#xff0c;大家都会在网上报名提交个人信息&#xff0c;其中有一项就是需要上传我们的考试证件照&#xff0c;平台通常会要求照片大小为10kb以下&#xff0c;那么如何将过大的图片压缩到10kb呢?本文将介绍如何处理这一问题&#xff0c;让您轻…
最新文章