好久不更新这个blog了。。
今天接到一个小的任务就是用FPGA测频率,大致需求如下,输入信号为一个方波信号(或者PWM),输入频率范围2MHz-3MHz,频率测量更新时间1ms左右,频率测量误差+-50Hz,用尽量少的资源来实现。
这里首先考虑用脉冲计数的方式来进行频率测量,或者频率估计,找了一些资料找到了误差最小的频率测量方式。大致思路如下,首先脉冲计数的频率测量方式核心思想就是用一个高频率的时钟来检测输入信号的上升沿,进而对输入信号脉冲计数,只要在确定时间内得到一定的脉冲数就可以计算得到频率。为了令频率误差最小,要么就是让固定的时间误差小,要么就是让所计的脉冲数误差最小,由于输入信号频率一定小于测量时钟主频,那么保证输入信号脉冲数的准确性可以得到最小误差。
因此算法如下,检测输入信号上升沿,然后时钟计数器一直计数,而输入信号计数器在每次输入信号上升沿计数。在时间大概1ms左右检测最后一个输入信号上升沿停止计数,最后时钟计数器计数值N0,输入信号计数器计数值Nx。这时候输入信号测量的频率值为:
fx=f0*Nx/N0
误差计算如下:
dfx=-f0*Nx/N0^2*dN0
=-f0^2/N0^2/f0*Nx/fx*fx*dN0
=-f0/fx/T*dN0
dN