实验4 数字频率计

2024-04-24 20:44
文章标签 实验 数字 频率计

本文主要是介绍实验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)
beginselcnt <= selcnt + 1;if (selcnt == update_interval)beginselcnt <= 0;cursel <= cursel +  1'b1;end
end//切换扫描位选线和数据
always @(posedge clk)
begincase (cursel)3'b000: begin dat = d1; sel = ~8'b00000001; end3'b001: begin dat = d2; sel = ~8'b00000010;end3'b010: begin dat = d3; sel = ~8'b00000100; end3'b011: begin dat = d4; sel = ~8'b00001000; end3'b100: begin dat = d5; sel = ~8'b00010000; end3'b101: begin dat = d6; sel = ~8'b00100000;end3'b110: begin dat = d7; sel = ~8'b01000000; end3'b111: begin dat = d8; sel = ~8'b10000000; endendcase
end//更新段码
always @(posedge clk)
beginseg[0] <= dat[4]; //dpcase (dat[3:0])4'h00 	: seg[7:1] <= ~7'b0000001;	//04'h01 	: seg[7:1] <= ~7'b1001111;	//14'h02 	: seg[7:1] <= ~7'b0010010;	//24'h03 	: seg[7:1] <= ~7'b0000110;	//34'h04 	: seg[7:1] <= ~7'b1001100;	//44'h05 	: seg[7:1] <= ~7'b0100100;	//54'h06 	: seg[7:1] <= ~7'b0100000;	//64'h07 	: seg[7:1] <= ~7'b0001111;	//74'h08 	: seg[7:1] <= ~7'b0000000;	//84'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-rrorendcase
endendmodule
module freqmeasure(output  P99,//输出脉冲	input  P100,//测量脉冲	output  [7:0] sel,output  [7:0] seg,	//a~g,dpinput clkin//时钟);//
//
//锁相环模块
//
//
wire clk;
pll4 pll4_inst0(.inclk0(clkin),//12Mhz.c0(clk)//48Mhz
);reg [31:0]	count;
reg clk_1s;
//1S定时时钟产生
always @(posedge clk ) 
beginif(count<48_000_000-1)begincount <= count+1;clk_1s <= 0;endelse begincount <= 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)
beginfreq_1s <= count_p100-count_p100_last;count_p100_last <= count_p100;
endreg [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)
begins1<=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

);

这篇关于实验4 数字频率计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/932800

相关文章

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机

从去中心化到智能化:Web3如何与AI共同塑造数字生态

在数字时代的演进中,Web3和人工智能(AI)正成为塑造未来互联网的两大核心力量。Web3的去中心化理念与AI的智能化技术,正相互交织,共同推动数字生态的变革。本文将探讨Web3与AI的融合如何改变数字世界,并展望这一新兴组合如何重塑我们的在线体验。 Web3的去中心化愿景 Web3代表了互联网的第三代发展,它基于去中心化的区块链技术,旨在创建一个开放、透明且用户主导的数字生态。不同于传统

usaco 1.2 Name That Number(数字字母转化)

巧妙的利用code[b[0]-'A'] 将字符ABC...Z转换为数字 需要注意的是重新开一个数组 c [ ] 存储字符串 应人为的在末尾附上 ‘ \ 0 ’ 详见代码: /*ID: who jayLANG: C++TASK: namenum*/#include<stdio.h>#include<string.h>int main(){FILE *fin = fopen (

STM32(十一):ADC数模转换器实验

AD单通道: 1.RCC开启GPIO和ADC时钟。配置ADCCLK分频器。 2.配置GPIO,把GPIO配置成模拟输入的模式。 3.配置多路开关,把左面通道接入到右面规则组列表里。 4.配置ADC转换器, 包括AD转换器和AD数据寄存器。单次转换,连续转换;扫描、非扫描;有几个通道,触发源是什么,数据对齐是左对齐还是右对齐。 5.ADC_CMD 开启ADC。 void RCC_AD

HNU-2023电路与电子学-实验3

写在前面: 一、实验目的 1.了解简易模型机的内部结构和工作原理。 2.分析模型机的功能,设计 8 重 3-1 多路复用器。 3.分析模型机的功能,设计 8 重 2-1 多路复用器。 4.分析模型机的工作原理,设计模型机控制信号产生逻辑。 二、实验内容 1.用 VERILOG 语言设计模型机的 8 重 3-1 多路复用器; 2.用 VERILOG 语言设计模型机的 8 重 2-1 多

AIGC6: 走进腾讯数字盛会

图中是一个程序员,去参加一个技术盛会。AI大潮下,五颜六色,各种不确定。 背景 AI对各行各业的冲击越来越大,身处职场的我也能清晰的感受到。 我所在的行业为全球客服外包行业。 业务模式为: 为国际跨境公司提供不同地区不同语言的客服外包解决方案,除了人力,还有软件系统。 软件系统主要是提供了客服跟客人的渠道沟通和工单管理,内部管理跟甲方的合同对接,绩效评估,BI数据透视。 客服跟客人

NC 把数字翻译成字符串

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 有一种将字母编码成数字的方式:‘a’->1, ‘b->2’, … , ‘z->26’。 现在给一串数字,返回有多少种可能的译码结果 import java.u

34465A-61/2 数字万用表(六位半)

34465A-61/2 数字万用表(六位半) 文章目录 34465A-61/2 数字万用表(六位半)前言一、测DC/AC电压二、测DC/AC电流四、测电阻五、测电容六、测二极管七、保存截图流程 前言 1、6位半数字万用表通常具有200,000个计数器,可以显示最大为199999的数值。相比普通数字万用表,6位半万用表具有更高的测量分辨率和更高的测量准确度,适用于精度比较高的测

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密

超级 密码加密 解密 源码,支持表情,符号,数字,字母,加密 可以将表情,动物,水果,表情,手势,猫语,兽语,狗语,爱语,符号,数字,字母,加密和解密 可以将文字、字母、数字、代码、标点符号等内容转换成新的文字形式,通过简单的文字以不同的排列顺序来表达不同的内容 源码截图: https://www.httple.net/152649.html

两个长数字相加

1.编程题目 题目:要实现两个百位长的数字直接相加 分析:因为数字太长所以无法直接相加,所以采用按位相加,然后组装的方式。(注意进位) 2.编程实现 package com.sino.daily.code_2019_6_29;import org.apache.commons.lang3.StringUtils;/*** create by 2019-06-29 19:03** @autho