基于FPGA的频率计设计

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

所谓“频率”,就是周期性信号在单位时间(秒)内变化的次数。


一、频率计是什么

所谓“频率”,就是周期性信号在单位时间(秒)内变化的次数。若在一定的时间间隔T内计数,计得某周期性信号的重复变化次数为N,则该信号的频率可表达为:

													f =N/ T

所以测量频率就要分别知道N和T的值,由此,测量频率的方法一般有三种:测频方法、测周方法和等精度测量。

测频方法:这种方法即己知时基信号(频率或周期确定)做门控信号,T为已知量,然后在门控信号有效的时间段内进行输入脉冲的计数,原理图如下图所示:

在这里插入图片描述

二、使用步骤

1.测量方法

首先,被测信号①(以正弦波为例)经过放大整形后转变成方波脉冲②,其重复频率等于被测信号频率。把方波脉冲②加到闸门的输入端。由一个高稳定的石英振荡器和一系列数字分频器组成了时基信号发生器,它输出时间基准(或频率基准)信号③去控制门控电路形成门控信号④,门控信号的作用时间T是非常准确的(由石英振荡器决定)。门控信号控制闸门的开与闭,只有在闸门开通的时间内,方波脉冲②才能通过闸门成为被计数的脉冲⑤由计数器计数。闸门开通的时间称为闸门时间,其长度等于门控信号作用时间T。比如,时间基准信号的重复周期为1S,加到闸门的门控信号作用时间T亦准确地等于1S,即闸门的开通时间——“闸门时间”为1S。在这一段时间内,若计数器计得N=100000个数,根据公式f =N /T,那么被测频率就是100000Hz。如果计数式频率计的显示器单位为“KHz”,则显示100.000KHz,即小数点定位在第三位。不难设想,若将闸门时间设为T=0.1S,则计数值为10000,这时,显示器的小数点只要根据闸门时间

T的改变也随之自动往右移动一位(自动定位),那么,显示的结果为100.00Khz。在计数式数字频率计中,通过选择不同的闸门时间,可以改变频率计的测量范围和测量精度。


2.测周方法:

测周方法:
被测信号(频率或周期待测)做门控信号,T为未知量,做门控信号T,然后在门控信号有效的时间段内对时基信号脉冲计数,原理图如下图所示: 测周方法:

等精度测量法的核心思想是通过闸门信号与被测信号同步,将闸门时间t控制为被测信号周期长度的整数倍。测量时,先打开预置闸门,当检测到被测信号脉冲沿到达时,标准信号时钟开始计数。预置闸门关闭时,标准信号并不立即停止计数,而是等检测到被测信号脉冲沿到达时才停止,完成被测信号整数个周期的测量。测量的实际闸门时间可能会与预置闸门时间不完全相同,但最大差值不会超过被测信号的一个周期。在等精度测量法中,相对误差与被测信号本身的频率特性无关,即对整个测量域而言,测量精度相等,因而称之为“等精度测量”。标准信号的计数值越大则测量相对误差越小,即提高门限时间r和标准信号频率f。可以提高测量精度。在精度不变的情况下,提高标准信号频率可以缩短门限时间,提高测量速度。

3.系统框图

在这里插入图片描述


/***********************产生测试时钟**************************************/
always @(posedge sysclk)
  begin 
    if(counter==15'b110_0001_1010_1000)
      begin
       test_clk<=~test_clk;//500HZ
       counter<=15'b0;
      end
    else
       counter<=counter+1'b1;
  end
/**********************产生1HZ的时钟************************************/
always @(posedge sysclk)
  begin 
    if(clk_counter==25'b1_0111_1101_0111_1000_0100_0000)
      begin
       clk_div<=~clk_div;
       clk_counter<=25'b0;
      end
    else
       clk_counter<=clk_counter+1'b1;
  end
/*********************测试待测信号***********************************/
always @(posedge inclk)
  begin 
    if(clk_div)
      begin
        if(counter1==4'b1001)
         begin 
           counter1<=4'b0;
           counter2<=counter2+1'b1;
           if(counter2==4'b1001)
             begin 
               counter2<=4'b0;
               counter3<=counter3+1'b1;
               if(counter3==4'b1001)
                 begin 
                   counter3<=4'b0;
                   counter4<=counter4+1'b1;
                   if(counter4==4'b1001)
                     begin 
                       counter4<=4'b0;
                       counter5<=counter5+1'b1;
                       if(counter5==4'b1001)
                         begin 
                           counter5<=4'b0;
                           counter6<=counter6+1'b1;
                           if(counter6==4'b1001)
                             begin
                               counter6<=4'b0;
                               counter7<=counter7+1'b1;
                               if(counter7==4'b1001)
                                 begin 
                                   counter7<=4'b0;
                                   counter8<=counter8+1'b1;
                                   if(counter8==4'b1001)
                                     begin
                                       counter8<=4'b0;
                                     end
                                 end 
                             end  
                         end 
                     end 
                 end 
             end 
         end
        else
         counter1<=counter1+1'b1;
      end
    else

总结

可以使用PLL生成时钟进行测试

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值