[STM32F1] STM32定时器输入捕获霍尔传感器信号测量电机转速,偶尔会丢失一个中断。

[复制链接]
6820|10
 楼主| silverpal 发表于 2016-6-23 10:17 | 显示全部楼层 |阅读模式
最近做一个项目用到了STM32F103C8T6,使用TIM4对霍尔传感器输出的脉冲进行捕获,用来测电机的转速,实现思路是:TIM4使能Update和CC1中断,配置为上升沿捕获。每次Update中断触发时计时变量Tim4UpdateCnt自增,用于整体计时。每次CC1中断时,获取捕获的值,与Tim4UpdateCnt结合计算得到捕获发生的时刻,然后计算与上一个捕获时刻的时间差,即为所测的电机转动周期。实际运行时程序测得的周期能够达到us级的精度。但是偶尔会丢失一次捕获中断,导致测得的电机转动周期跳变为正常值的两倍,大概几分钟至十几分钟会出现一次。为了排除霍尔传感器给的脉冲信号不可靠的原因,我使用信号发生器产生50Hz,占空比为1%的方波,连接至捕获通道上,结果仍然有同样的现象。不知道坛里的兄弟有没有遇到过这种问题,又是如何解决的,请不吝赐教,谢谢!
mmuuss586 发表于 2016-6-23 10:28 | 显示全部楼层
没遇到过呢,我们做无刷控制的时候没遇到这个问题;
xmshao 发表于 2016-6-23 14:40 | 显示全部楼层
程序里还有别的什么中断吗?
 楼主| silverpal 发表于 2016-6-23 15:54 | 显示全部楼层
xmshao 发表于 2016-6-23 14:40
程序里还有别的什么中断吗?

TIM4中断是最高优先级,别的中断都关掉了,仍然有这个问题。
xmshao 发表于 2016-6-23 16:12 | 显示全部楼层
按理说不该这样,会不会是硬件什么地方影响到它某时刻的捕捉了。
 楼主| silverpal 发表于 2016-6-24 15:20 | 显示全部楼层
xmshao 发表于 2016-6-23 16:12
按理说不该这样,会不会是硬件什么地方影响到它某时刻的捕捉了。

如果用外部中断,每次都能触发到,没有丢失。但是用定时器输入捕获总是会隔几分钟丢一个。
xuaiguo 发表于 2019-11-21 15:25 | 显示全部楼层
使用STSPIN32F0也发现这个问题
gdszzyq 发表于 2019-11-21 17:18 | 显示全部楼层
本帖最后由 gdszzyq 于 2019-11-21 17:20 编辑

为什么不用外部中断结合定时器的方式呢
leibinglin 发表于 2020-4-17 15:03 | 显示全部楼层
长知识了 呵呵
joyme 发表于 2020-4-17 15:38 | 显示全部楼层
你说你能达到us级的精度,你TIM4 update中断是1us中断吗?
如果是1us的中断,CPU负荷是很重的,看看你的中断处理函数里语句多不多
wziyi 发表于 2020-4-25 17:04 | 显示全部楼层
CPU 负载过高或者中断里的代码耗时太久
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

28

帖子

1

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