STM32:如何配置定时器以在正交编码器模式下每次增量触发中断?

Posted

技术标签:

【中文标题】STM32:如何配置定时器以在正交编码器模式下每次增量触发中断?【英文标题】:STM32: How to configure timer to trigger interrupt in every increments in quadrature encoder mode? 【发布时间】:2021-12-18 21:32:37 【问题描述】:

我有一个带有 STM32F4 的旋转编码器,并在“编码器模式 TI1 和 TI2”中配置了 TIM4。我希望每次定时器的值增加或减少时都有一个中断。

计数有效,但我只能在每个更新事件上配置一个中断,而不是 TIM4->cnt 中的每个更改。我该怎么做?

换句话说:我的 MCU+Encoder 在正交模式下可以在一圈内从 0 计数到 99。我想在革命中有 100 个中断,但是如果我设置 TIM4->PSC=0 和 TIM4->ARR=1,会产生 50 个 UPDATE_EVENT,所以我应该设置 ARR=0 但它不起作用。我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

要获得每转 100 个中断,保持 PSC=0,ARR=1,请将两个定时器通道设置为输出比较模式,比较值为 0 和 1,并在两个通道上产生中断。

或者甚至使用 ARR=3 并设置所有四个通道,比较值为 0、1、2 和 3。这将允许检测方向。

【讨论】:

【参考方案2】:

通常,使用正交编码器模式的重点在于计数脉冲同时避免中断。您可以简单地定期轮询计数器寄存器以确定速度和位置。

在每个编码器脉冲上获取中断效率极低,尤其是对于高分辨率编码器。你的好像是低分辨率的。如果您仍然认为出于某种原因需要它们,您可以将 A & B 连接到外部中断并手动实现计数逻辑。在这种情况下,您不需要正交编码器模式。

【讨论】:

以上是关于STM32:如何配置定时器以在正交编码器模式下每次增量触发中断?的主要内容,如果未能解决你的问题,请参考以下文章

STM32定时器---正交编码器模式详解

STM32定时器编码器模式怎么使用

Stm32高级定时器

如何配置STM32定时器在每次递增/递减时触发中断?

time输入捕获编码器a,b,可以用不同定时器吗

[转]STM32正交编码器驱动电机