摘要:TIM 配置成 Encoder Mode,正转加计数,反转减计数,低速正常,高速就乱?不是编码器精度问题,而是 TI1/TI2 的极性(Polarity)输入滤波配置错误。本文解析正交编码器的硬件解码逻辑。


一、问题描述(现象)

**旋转编码器,慢慢拧,计数正常;

稍微转快一点,计数突然跳变或反向;

示波器看 TI1/TI2 波形很干净。**

很多工程师的排查方向是:

  1. 编码器坏了?

  2. TIM 计数模式选错了?

  3. 加个软件消抖?


二、原理分析

1. 物理模型

正交编码器输出两路相位差 90° 的信号:

TI1:  ___|‾‾‾|___|‾‾‾|___
TI2:  _|‾‾‾|_|‾‾‾|_|‾‾‾|_
      ↑   ↑   ↑
      A   B   A

2. 核心参数

  • Encoder Mode:TIM 的编码器模式(TI1/TI2 计数)。

  • Polarity(极性):上升沿 / 下降沿触发。

  • ICFilter(输入滤波):数字滤波器系数。

3. 反直觉真相

“只在上升沿计数”是错的。

  • 编码器模式必须同时在 TI1 和 TI2 的边沿计数。

  • 如果只选 Rising Edge

    • 高速时,占空比轻微不对称 → 计数丢失或重复。

  • 如果极性选反:

    • 正转变成反转,方向永远不对。


三、工程级解决方案

方案 1:正确的编码器模式配置(标准解法)

必须配置为 TI1 + TI2 边沿计数

// STM32 HAL 示例
htim3.Init.CounterMode = TIM_COUNTERMODE_UP;
htim3.Init.Period = 65535;
HAL_TIM_Encoder_Init(&htim3, &sConfig);

// 关键:两个通道都要配置极性
TIM_IC_InitTypeDef sConfigIC;
sConfigIC.ICPolarity = TIM_INPUTCHANNELPOLARITY_RISING; // 或 BOTHEDGE
sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI;
sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;
sConfigIC.ICFilter = 6; // 非常重要!
HAL_TIM_Encoder_ConfigChannel(&htim3, &sConfigIC, TIM_CHANNEL_1);
HAL_TIM_Encoder_ConfigChannel(&htim3, &sConfigIC, TIM_CHANNEL_2);

方案 2:ICFilter 是灵魂(消抖神器)

编码器机械触点会产生抖动。

转速

推荐 ICFilter

低速 (< 100 RPM)

8 ~ 12

中速 (100~1000 RPM)

4 ~ 8

高速 (> 1000 RPM)

0 ~ 4

经验公式:

ICFilter = 4≈ 采样频率 = fCK_INT / 8

方案 3:判断方向(软件修正)

如果硬件方向始终不对,可以在软件层修正:

int16_t count = (int16_t)__HAL_TIM_GET_COUNTER(&htim3);
if (count > 32768) count -= 65536;

四、选型避坑建议

  1. 不要混用通道

    • TI1 必须接 A 相,TI2 必须接 B 相,接反了方向必反。

  2. Period 值

    • 12 位编码器:Period ≥ 4096。

    • 16 位定时器:Period = 65535(防止溢出)。

  3. 不要在中断里读

    • 编码器模式是硬件计数,不要在 Update 中断里频繁清零,会破坏计数连续性。


五、总结 Checklist

  • [ ] 是否配置为 TIM_ENCODERMODE_TI12

  • [ ] 是否两个通道都配置了相同的 Polarity?

  • [ ] 是否开启了输入滤波(ICFilter ≥ 4)?

  • [ ] 是否在高速下测试过计数连续性?


六、写在最后(关注我,少走弯路)

我是 gqqsherry,一个拒绝调包、专注底层逻辑的嵌入式工程师。

编码器模式是 TIM 外设最像“状态机”的功能,配置对了就是丝滑,配置错了就是玄学。

关注我的专栏《嵌入式底层避坑指南》,下一篇我们将深入解析 《定时中断进不来?别只怪 Prescaler,看看 Counter Mode》

👉 下一篇预告:《TIM 定时中断不准?别只怪 SystemCoreClock,看看 Center-Aligned 模式》


 

原创文章,转载请注明出处。

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐