打印

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

[复制链接]
14917|38
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
engineer007|  楼主 | 2010-10-26 16:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近用STM32的PWM输入功能做了下测频实验,发现150Hz以下很难测到,而25000Hz以上误差又很大,各位大侠,有没有其它的好的方法,测频精度要求达到0.004%?
沙发
engineer007|  楼主 | 2010-10-26 16:27 | 只看该作者
用51单片机能实现,我想STM32肯定也行,期待中。。。。

使用特权

评论回复
板凳
mcuisp| | 2010-10-26 16:27 | 只看该作者
25000Hz的测频精度要达到0.004%,则要求参考频率625MHz。
要用高速CPLD来弄。

使用特权

评论回复
地板
grant_jx| | 2010-10-26 16:27 | 只看该作者
PWM输入功能做了下测频实验?

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

测频用TIM的输入捕获功能

使用特权

评论回复
5
mcuisp| | 2010-10-26 16:34 | 只看该作者
当然,可用测量多个周期的方法提升精度。

使用特权

评论回复
6
engineer007|  楼主 | 2010-10-26 16:36 | 只看该作者
PWM输入功能做了下测频实验?

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

测频用TIM的输入捕获功能
grant_jx 发表于 2010-10-26 16:27


STM32 定时器PWM输入功能,输入捕获功能的特列,好象是能测周期和占空比;
使用内部时钟源来测量外部信号的周期和占空比;

使用特权

评论回复
7
engineer007|  楼主 | 2010-10-26 16:42 | 只看该作者
希望能有一个好的解决方案,期待中。。。。

使用特权

评论回复
8
香水城| | 2010-10-26 17:18 | 只看该作者
1)请说明你要求的频率范围,不要说是1Hz~1MHz,:lol
因为0.004%对不同的频率意味着不同的数值。

2)楼主位说:“150Hz以下很难测到,而25000Hz以上误差又很大”,请说明你采用的测试方法,尤其是选择的配置参数。

使用特权

评论回复
9
IJK| | 2010-10-26 17:43 | 只看该作者
最近用STM32的PWM输入功能做了下测频实验,发现150Hz以下很难测到,而25000Hz以上误差又很大,各位大侠,有没有其它的好的方法,测频精度要求达到0.004%? ...
engineer007 发表于 2010-10-26 16:19


测频精度要求达到0.004%? ...

这个指标定得很高,0.004%就是 万分之0.4,一般的晶振 误差约万分之1

使用特权

评论回复
10
dl_shuang| | 2010-10-26 19:47 | 只看该作者
150HZ以下测不到是程序问题。
25000HZ以上,需要看你要求的测频速度。
是一个周期需要测出来,还是一个固定的时间段需要测出来。
一个周期就准确测出,对硬件的要求就高了。
如果是时间段就相对容易了,时间段越长越容易,越容易测准,当然反应速度就慢了。
晶振误差问题不大,选一种高稳定度的,初始误差通过标准信号校准扣除。可以考虑加温度修正。

使用特权

评论回复
11
火箭球迷| | 2010-10-26 22:21 | 只看该作者
这个精度有点高了

使用特权

评论回复
12
engineer007|  楼主 | 2010-10-27 09:05 | 只看该作者
to 香主:量程范围为1Hz~50KHz, 精度为±0.004%FULL, 即±2HZ; 用TIM的PWM输入方式,再根据不同的频率来变换TIM的输入时钟频率;
to:IJK: 测频精度0.004%FULL 不算高,我用51单片机再加外围分频电路能实现此精度; 测频只跟晶振的稳定性有关系,误差可修正;
to dl_shuang: 要求单个周期测出,但可以考虑滤波算法;

使用特权

评论回复
13
jinjing999| | 2010-10-27 09:29 | 只看该作者
150HZ绝对可以,我用过。但是25000HZ就不行。因为STM32内部总线频率是72,如果用TIM1定时器做,也就是定时器的频率是72M,测量的时候最小误差也是1/72m,也就是晶振多振一次少一次而已,25000/72m =0.034%了。这个精度完全达布道要求,跟何况你的外部电路处理也是有偏差的。

使用特权

评论回复
14
香水城| | 2010-10-27 14:55 | 只看该作者
to 香主:量程范围为1Hz~50KHz, 精度为±0.004%FULL, 即±2HZ; 用TIM的PWM输入方式,再根据不同的频率来变换TIM的输入时钟频率;
to:IJK: 测频精度0.004%FULL 不算高,我用51单片机再加外围分频电路能实现此精度; 测 ...
engineer007 发表于 2010-10-27 09:05


1Hz的±0.004%,怎么可能是±2Hz呢?  :lol

使用特权

评论回复
15
香水城| | 2010-10-27 15:05 | 只看该作者
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%精度的,请与大家分享一下;也许你计算错了。

使用特权

评论回复
16
香水城| | 2010-10-27 15:11 | 只看该作者
按照我在16楼的计算方法,简单地推算了一下,计数器的频率需要达到1.25GHz,才能达到你要求的±0.004%精度,即50kHz/0.004%=1.25GHz。

因此,我非常地想知道,你是怎么在51单片机上实现这个精度的?

使用特权

评论回复
17
pkat| | 2010-10-27 22:48 | 只看该作者
我也特别想知道:lol

使用特权

评论回复
18
engineer007|  楼主 | 2010-10-28 08:50 | 只看该作者
用51定时器门控方式,外部加分频电路,统一将频率降至1~50Hz之间;即可;
香主,STM32定时器功能这么强大,时钟和信号输入都有分频电路,而且定时器之间也能级联,我用STM32的目的是想省去复杂的外围分频电路;我想STM32肯定能行,只有还没有找到组合方式;大家有好的思路请提出来,通过这样的讨论,能加深对定时器的应用,实±0.004%精度

使用特权

评论回复
19
香水城| | 2010-10-28 22:10 | 只看该作者
用51定时器门控方式,外部加分频电路,统一将频率降至1~50Hz之间;即可;
香主,STM32定时器功能这么强大,时钟和信号输入都有分频电路,而且定时器之间也能级联,我用STM32的目的是想省去复杂的外围分频电路;我想S ...
engineer007 发表于 2010-10-28 08:50


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

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

你的要求是0.004%,也就是说可以区分开50.000kHz和49.998kHz的信号,不知道你使用51定时器门控方式,再外部加分频电路是怎么做到的?

使用特权

评论回复
20
gxgclg| | 2010-10-28 22:37 | 只看该作者
香主的最后一个问题似乎难道很大,很想知道楼主是如何做到的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

23

帖子

1

粉丝