[麦麦茶水间] 【每周分享】定时器输入捕获测频率的范围限制

[复制链接]
16|0
happypcb 发表于 2026-8-13 10:48 | 显示全部楼层 |阅读模式
之前做一个转速检测的项目,电机轴上装了一个霍尔传感器,每转一圈输出一个脉冲。需要测量脉冲的频率来计算转速,用的是定时器的输入捕获功能。
思路很简单,捕获上升沿时刻,计算两个上升沿之间的时间差,然后换算成频率。代码写完之后测试,转速低的时候挺准,转速高了之后误差越来越大。
查了一下定时器的配置,发现捕获边沿选的是上升沿和下降沿都捕获。计数器的时钟频率是1MHz,一个计数值代表1微秒。但是计数器的最大值是65535,超过65535就会溢出。转速低的时候,两个上升沿之间的时间超过了65535微秒,计数器溢出了,计算出来的时间就不对了。
解决办法有两个。一个是降低计数器的时钟频率,比如从1MHz降到100kHz,这样计数值的范围扩大了10倍,能测更低的频率。另一个是在溢出中断里加一个溢出计数器,记录溢出了多少次,这样等效计数值可以做到很大。
选了第一个办法,把时钟频率降到了100kHz。改完之后低频测准了,高频又不行了。因为时钟频率低了,计数值的精度也低了,高频的时候误差又大了。转速高的时候脉冲间隔只有几十微秒,100kHz的时钟一个计数值就是10微秒,误差百分之几十。
后来换了一个思路,不用输入捕获,而是用定时器的外部时钟计数模式。把霍尔信号接到定时器的外部时钟输入引脚,定时器对输入的脉冲个数进行计数,然后在固定的时间窗口内读取计数值,换算成频率。这个方法的好处是,低频的时候没有溢出问题,高频的时候精度也够。只要时间窗口足够长,就能同时兼顾高低频。
最后用的是这个方法,电机从每分钟几十转到几千转都测得很准。总结一下,用定时器测频率,如果频率范围很宽,输入捕获加溢出计数或者外部时钟计数两种方式各有优劣。输入捕获适合中低频,外部时钟计数适合信号频率本身较高的情况。做项目前先想清楚你的频率范围是多少,再选合适的方法。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1904

主题

8364

帖子

3

粉丝
快速回复 在线客服 返回列表 返回顶部
0