在此,我首先说明,测试的波形是理想波形,我是采用实验室的信号发生器产生正弦波,方波,三角波,并频率要达到一定大小才能确保测试的数据准确。所以,该项目只能自己做着玩,若想做产品,只能参考。
常用的频率测量方法有两种:周期测量法和频率测量法。周期测量法是先测量出被测信号的周期T,然后根据频率f = 1/T求出被测信号的频率。频率测量法是在时间t内对被测信号的脉冲数N进行计数,然后求出单位时间内的脉冲数,即为被测信号的频率。但是上述两种方法都会产生± 1个被测脉冲的误差,在实际应用中有一定的局限性。根据测量原理,很容易发现周期测量法适合于低频信号测量,频率测量法适合于高频信号测量,但二者都不能兼顾高低频率同样精度的测量要求。
等精度测量的一个最大特点是测量的实际门控时间不是一个固定值,而是一个与被测信号有关的值,刚好是被测信号的整数倍。在计数允许时间内,同时对基准时钟和被测信号进行计数,再通过数学公式推导得到被测信号的频率。由于门控信号是被测信号的整数倍,就消除了对被测信号产生的± l周期误差,但是会产生对基准时钟± 1周期的误差。 特别是在中低频测量的时候,相较于传统的频率测量和周期测量方法,可以大大提高测量精度。
上面一段文字是我复制粘贴正点原子文档上关于等精度测量描述。具体什么是等精度测量,百度一大堆,在此就不进行详细阐述,下面就是模拟量的测频方法。
众所周知,FPGA属于数字芯片,无法直接对模拟量进行处理,所以我们需要借助一块AD芯片,将模拟量转化为数字量。下面是对数字量进行处理
因为我使用的AD芯片是8位的,最大只能为255,所以我将信号进行量化,大于等于128的为高电平,低于128的为低电平,这样就将8位的数字量,转化为一位的方波,方便计算。接下来就是对该方波进行测频。经测试,大于600khz的信号才能确保测得数据正确,低于600khz,会差10khz左右。