增量式编码器常输出A、B两路正交信号。只统计A相脉冲可以得到位移,但无法可靠判断方向;同时利用A/B相的相位先后关系,就能判断正转和反转。高速场景下,还要考虑输入滤波、计数频率和定时器编码器模式。
排查/设计顺序
先看相位关系
A、B两路相差约90°。某一方向旋转时A领先B,反向旋转时B领先A。方向判断本质上是观察状态变化顺序。
再确定计数倍率
只在A相单边沿计数是1×;利用A/B更多边沿可以做到2×或4×,分辨率更高,但输入频率和抗干扰要求也更高。
优先用硬件定时器
MCU具备Encoder Interface时,尽量让定时器硬件完成边沿采样和加减计数,避免高转速下用普通GPIO中断逐脉冲处理。
最后处理噪声
机械/长线编码器可能有毛刺,要结合施密特输入、RC/数字滤波和线缆接口设计,但滤波过重也会吞掉高速有效边沿。

一段完整的面试回答
我会先用A/B相的相位先后判断方向,再根据分辨率需求确定1×、2×还是4×计数。如果MCU定时器支持编码器模式,我会优先用硬件计数,因为它比GPIO中断逐脉冲处理更适合高速场景。输入端还会评估电平标准、毛刺滤波和最大边沿频率,确保滤波时间常数不会把有效脉冲吃掉。最后通过低速正反转和最高转速测试,核对方向、累计计数与零位是否正确。
继续追问
4×计数为什么分辨率更高,但对输入频率要求也更高?
A/B两相同时受干扰时,软件如何识别非法状态跳变?
带Z相的编码器,Z相信号通常怎么用?
只会数脉冲,不会解释为什么两相能判断方向。
高速编码器仍用大量GPIO中断,完全不估算CPU负载。
滤波参数只凭经验设定,不校核最高速度下的最小脉宽。

扫码关注





























