很明显啊,在测量小于1Hz频率时,测量时间必须大于1s,比如10s,20s或者更长时间,这样才能保证测量准确。
既然你一次定时0.5s不能变,那就有程序控制累加多个0.5s的测量结果再计算频率值。
所以程序中使用自适应方法,首先测量一个0.5s,看得到的频率值是否大于1,如果大于1即直接测量,如果频率值为0,表示被测频率小于1Hz,就转入长时间测量的模式。
在不改变定时时间的前提下,也就是0.5秒定时,是不能实现0.1~2Hz频率的测量的。
你所谓2Hz~10KHz易实现也是基于这个道理。但这个也是理论情况。
当你0.5s内刚好检测到一个脉冲,你认为这个时候是2Hz而不是2.5hz或者3.9hz?
这中间存在一个测量精度的问题。实际上你所测到的信号是在2hz到4hz之间。
实际上我们在测量信号的时候,低频一般会采用测周期,高频用测频才能提高测量的准确性。
至于高低频的临界点,跟你的计数频率有关,感兴趣的话可以去看《电子测量原理》。
下面我来讲下测周实现的方法,可以使用边沿触发的D触发器输出作为单片机的外部定时控制,测量信号作为触发时钟,计数值作为该信号的周期。
写程序的话,可能比较麻烦,说说思路吧,小数点后面的可以用计数的方法,实际上就是在一个输入时钟内,计数,看计数到几,由于单片机的时钟是已知的,所示用计数值乘以时钟周期就可以得出外部输入时钟的,小数点后面部分的周期,从而可得F频率
先把所有的测得的数据X10 ,最后计算之后/10,不就可以了吗?