基于FPGA的高精度频率计

链接:https://pan.baidu.com/s/1AjCw2kyBkggQ5doQ2vNWkg
提取码:1234

一、 设计要求
利用FPGA设计一个信号测频器,要求:
(1)测量脉冲信号;
(2)频率测量1-10MHz以及占空比10%-99% 精确到1%;
(3)将测出频率和占空比显示在LCD1602上;

二、 设计方案
FPGA设计主要分为三个大模块来设计:1.被测信号产生模块;2.被测信号检测模块;3.数字显示模块。设计框图如图 1所示。

图 1 基于FPGA的信号测频器设计框图

  1. 被测信号产生模块
    该模块主要是用来产生被测信号,可以在模块中设置被测信号的频率和占空比。采用的方法是对系统时钟进行计数分频产生被测信号。这部分也采用了一个PLL,输出一个100MHz的时钟作为检测模块的采样时钟。该部分涉及的模块:signal_gen模块和PLL模块。

  2. 被测信号检测模块
    该模块对被测信号进行检测的方法是等精度测频法:
    (1)被测信号频率检测
    检测被测信号的频率,通过在外部使能信号有效时(即一段时间内),计数系统时钟脉冲数Ns与被测信号脉冲数Nd,若系统时钟频率为Fs,被测信号频率为Fd,则有Fs/Ns=Fd/Nd 最后有Fd=(Fs/Ns)·Nd。
    (2)被测信号占空比检测:
    检测被测信号的占空比,利用系统时钟,在外部使能信号有效时(即一段时间内),计数被测信号的正脉宽数Np和负脉宽数Nn,则占空比ducy=Np/(Np+Nn)*100%。
    该部分涉及的模块:signal_detect模块。

  3. 数字显示模块
    该模块主要分为两个部分:一个部分是把检测的频率码转换为十进制BCD码,采用这种方法虽然会提高运算时间,但却可以大大节省FPGA的资源(面积与速度的折衷);另外一个部分是驱动LCD1602进行显示。这里给出二进制码转换为十进制BCD码的几个步骤(以8bit二进制码为例): 1.将二进制码左移一位(或者乘2);2.找到左移后的码所对应的个,十,百位;3.判断在个位,十位和百位的码是否大于等于5;4.继续重复以上三步直到移位8次后停止;5.如果是则该段码加3。该部分涉及的模块:BCD2to10模块和lcd1602模块。

最终在FPGA的RTL视图如图 2所示:
在这里插入图片描述

//synopsys translate_off
`timescale 1 ns/ 1 ps
//synopsys translate_on
module BCD2to10(
	clk_100M,
	rst_n,
	d_clk_freq,
	qw,
	bw,
	sw,
	w,
	q,
	b,
	s,
	g);
	
	input 			clk_100M;											// 采样时钟 100MHz
	input 			rst_n;												// 复位信号
	input  [31:0] 	d_clk_freq;											// 被测信号频率
	output [3:0] 	qw;													// 转换提取千万位
	output [3:0] 	bw;													// 转换提取百万位
	output [3:0] 	sw;													// 转换提取十万位
	output [3:0] 	w;													// 转换提取万位
	output [3:0] 	q;													// 转换提取千位
	output [3:0] 	b;													// 转换提取百位
	output [3:0] 	s;													// 转换提取十位
	output [3:0] 	g;													// 转换提取个位
	
	parameter ST0 = 2'b00;
	parameter ST1 = 2'b01;
	parameter ST2 = 2'b10;
	
	//-------------------------------------------------------------------
	// 首先给出二进制码转换为十进制BC
  • 0
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FPGA频率计测不准的原因可能有以下几点: 1.定时器精度不高:FPGA中的定时器可能具有一定的误差,导致测量结果的准确性降低。这可能是由于晶体管的性能限制、电路设计不当或定时器的功能限制等原因造成的。 2.布线延迟:FPGA中的信号传输存在一定的延迟,这可能会影响到测量结果的准确性。布线延迟是指信号从输入到输出经过的时间,其中包括线路路径、时钟布线以及其他影响因素。如果延迟过大或不确定,将导致测量结果的不准确性。 3.环境因素:FPGA的测量结果可能会受到周围环境的影响,例如温度、电磁干扰、电源噪声等。这些因素可能会导致系统的时钟频率波动,从而影响测量准确性。 4.设计错误:FPGA频率计设计可能存在错误,例如计数器溢出、时钟源选择错误等。这些设计错误会直接影响到测量的准确性。 对于FPGA频率计测量不准的问题,我们可以尝试以下解决方法: 1. 使用高精度的定时器组件:选择能够提供更高精度的定时器组件,以确保测量结果的准确性。 2. 优化布线路径:通过合理布局和布线,减小信号传输的延迟,从而提高测量结果的准确性。 3. 减小环境干扰:采取屏蔽措施或增加外部滤波器来减小环境因素对FPGA测量结果的影响。 4. 检查设计错误:仔细检查FPGA设计的实现,确保计数器和时钟源的相关设置正确无误。 综上所述,FPGA频率计测不准可能是由于定时器精度不高、布线延迟、环境因素以及设计错误等多种原因造成的。通过采取相应的措施,我们可以提高测量结果的准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值