如何用stm32实现高精度测频?

ttsurvive   2010-10-26 16:19 楼主
                                 最近用STM32的PWM输入功能做了下测频实验,发现150Hz以下很难测到,而25000Hz以上误差又很大,各位大侠,有没有其它的好的方法,测频精度要求达到0.004%?

回复评论 (31)

                                 用51单片机能实现,我想STM32肯定也行,期待中。。。。
点赞  2010-10-26 16:27
25000Hz的测频精度要达到0.004%,则要求参考频率625MHz。
要用高速CPLD来弄。
点赞  2010-10-26 16:27
PWM输入功能做了下测频实验?

PWM是否是你的测试时钟源啊?

测频用TIM的输入捕获功能
点赞  2010-10-26 16:27
                                 当然,可用测量多个周期的方法提升精度。
点赞  2010-10-26 16:34
PWM输入功能做了下测频实验?

PWM是否是你的测试时钟源啊?

测频用TIM的输入捕获功能
STM32 定时器PWM输入功能,输入捕获功能的特列,好象是能测周期和占空比;
使用内部时钟源来测量外部信号的周期和占空比;
点赞  2010-10-26 16:36
                                 希望能有一个好的解决方案,期待中。。。。
点赞  2010-10-26 16:42
1)请说明你要求的频率范围,不要说是1Hz~1MHz,
因为0.004%对不同的频率意味着不同的数值。

2)楼主位说:“150Hz以下很难测到,而25000Hz以上误差又很大”,请说明你采用的测试方法,尤其是选择的配置参数。
点赞  2010-10-26 17:18
最近用STM32的PWM输入功能做了下测频实验,发现150Hz以下很难测到,而25000Hz以上误差又很大,各位大侠,有没有其它的好的方法,测频精度要求达到0.004%? ...
测频精度要求达到0.004%? ...

这个指标定得很高,0.004%就是 万分之0.4,一般的晶振 误差约万分之1
点赞  2010-10-26 17:43
150HZ以下测不到是程序问题。
25000HZ以上,需要看你要求的测频速度。
是一个周期需要测出来,还是一个固定的时间段需要测出来。
一个周期就准确测出,对硬件的要求就高了。
如果是时间段就相对容易了,时间段越长越容易,越容易测准,当然反应速度就慢了。
晶振误差问题不大,选一种高稳定度的,初始误差通过标准信号校准扣除。可以考虑加温度修正。
点赞  2010-10-26 19:47
                                 这个精度有点高了
点赞  2010-10-26 22:21
to 版主:量程范围为1Hz~50KHz, 精度为±0.004%FULL, 即±2HZ; 用TIM的PWM输入方式,再根据不同的频率来变换TIM的输入时钟频率;
to:IJK: 测频精度0.004%FULL 不算高,我用51单片机再加外围分频电路能实现此精度; 测频只跟晶振的稳定性有关系,误差可修正;
to dl_shuang: 要求单个周期测出,但可以考虑滤波算法;
点赞  2010-10-27 09:05
                                 150HZ绝对可以,我用过。但是25000HZ就不行。因为STM32内部总线频率是72,如果用TIM1定时器做,也就是定时器的频率是72M,测量的时候最小误差也是1/72m,也就是晶振多振一次少一次而已,25000/72m =0.034%了。这个精度完全达布道要求,跟何况你的外部电路处理也是有偏差的。
点赞  2010-10-27 09:29
to 版主:量程范围为1Hz~50KHz, 精度为±0.004%FULL, 即±2HZ; 用TIM的PWM输入方式,再根据不同的频率来变换TIM的输入时钟频率;
to:IJK: 测频精度0.004%FULL 不算高,我用51单片机再加外围分频电路能实现此精度; 测 ...
engineer007 发表于 2010-10-27 09:05
点赞  2010-10-27 14:55
STM32定时器的PWM输入方式测量频率和占空比,是通过计算输入信号上升和下降沿之间的时间实现的,STM32定时器的最高输入频率是72MHz,即它的精度是1/72MHz。

下面以50kHz为例分析一下:如果以72MHz的频率对50kHz的输入信号计数,计数器计满1440个周期刚好是50kHz,假如出现误差或输入信号不是50kHz,倒推计数器数值1441或1439,得到49965.3Hz或50034.7Hz,这里可以看到误差在(34~35Hz)/2之间,达不到你要求的+/-2Hz或+/-0.004%的要求。

结论:如果你认同我上面的分析,则STM32满足不了你的要求。

不知道你用51单片机再加外围分频电路是如何实现±0.004%精度的,请与大家分享一下;也许你计算错了。
点赞  2010-10-27 15:05
按照我在16楼的计算方法,简单地推算了一下,计数器的频率需要达到1.25GHz,才能达到你要求的±0.004%精度,即50kHz/0.004%=1.25GHz。

因此,我非常地想知道,你是怎么在51单片机上实现这个精度的?
点赞  2010-10-27 15:11
                                 我也特别想知道
点赞  2010-10-27 22:48
用51定时器门控方式,外部加分频电路,统一将频率降至1~50Hz之间;即可;
版主,STM32定时器功能这么强大,时钟和信号输入都有分频电路,而且定时器之间也能级联,我用STM32的目的是想省去复杂的外围分频电路;我想STM32肯定能行,只有还没有找到组合方式;大家有好的思路请提出来,通过这样的讨论,能加深对定时器的应用,实±0.004%精度
点赞  2010-10-28 08:50
用51定时器门控方式,外部加分频电路,统一将频率降至1~50Hz之间;即可;
版主,STM32定时器功能这么强大,时钟和信号输入都有分频电路,而且定时器之间也能级联,我用STM32的目的是想省去复杂的外围分频电路;我想S ...
请问50kHz的信号,你使用什么分频系数,将频率降至1~50Hz之间?

再请问49.998kHz的信号,你使用什么分频系数,将频率降至1~50Hz之间?

你的要求是0.004%,也就是说可以区分开50.000kHz和49.998kHz的信号,不知道你使用51定时器门控方式,再外部加分频电路是怎么做到的?
点赞  2010-10-28 22:10
                                 版主的最后一个问题似乎难道很大,很想知道楼主是如何做到的
点赞  2010-10-28 22:37
12下一页
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复