3. 增量式编码器原理

增量式编码器是运动控制与位置采集系统中最常见的反馈元件之一。它并不像绝对式编码器那样直接输出“当前角度是多少”,而是通过旋转过程中连续产生的脉冲,让控制器“数出来”相对位移。理解增量式编码器,核心就是理解三路信号:A、B、Z,以及围绕它们展开的正交解码、分辨率、倍频和方向判别。

一、A/B/Z 三路信号的分工

增量式编码器的输出通常以 A、B、Z 三路为主,部分型号还会提供 A-、B-、Z- 差分互补信号,用于提高抗干扰能力。三路信号各司其职:

  • A 相与 B 相:是两路频率相同、相位差 90°电角度的方波。它们负责提供位移的“增量”和“方向”信息。每经过一个完整的 A/B 周期,代表编码器转过一个固定的机械角度。
  • Z 相:又称零位信号或索引信号,每转一圈只输出一个脉冲。它不用于计数,而是用于建立绝对参考点,例如回零、找机械原点或校正累计误差。

如果把 A/B 比作“里程表的刻度”,Z 就是“每圈一次的起点标记”。没有 Z,系统只能知道相对移动了多少;有了 Z,系统才能在每圈中找到一个确定的物理位置。

关键关系:A、B 两相的相位差固定为 90°。当 A 超前 B 90°时,通常表示正转;当 B 超前 A 90°时,通常表示反转。方向判别正是基于这个相位关系。

二、正交解码:从两路方波到计数与方向

正交解码(Quadrature Decoding)是增量式编码器接口的核心机制。它利用 A、B 两路信号的相位关系,在每一个边沿或电平组合变化时进行判断,从而同时得到“走了多少”和“往哪走”。

常见的正交解码方式有四种计数模式:

解码模式 计数触发条件 每周期计数 特点
1 倍频 仅 A 相上升沿 1 实现简单,分辨率最低
2 倍频 A 相上升沿 + 下降沿 2 分辨率提高一倍
4 倍频 A、B 两相全部边沿 4 分辨率最高,方向判别最完整
非正交计数 仅单路脉冲计数 1 无法判别方向,仅适合单向测速

以 4 倍频为例,A、B 两相在一个完整周期内共有 4 个有效边沿。每检测到一个边沿,计数器就加 1 或减 1,具体加减取决于当前 A、B 的电平组合与上一状态的跳变方向。这样,原本每周期 1 个脉冲的分辨率被放大到 4 个计数,位置控制更加细腻。

三、分辨率、倍频与线数的关系

分辨率描述的是编码器能分辨的最小角度或最小位移。对于增量式编码器,分辨率与“线数”和“倍频”直接相关:

每转计数 = 线数 × 倍频
角度分辨率 = 360° / 每转计数
位移分辨率 = 周长 / 每转计数

例如,一个 1000 线的增量式编码器,采用 4 倍频解码后,每转可得到 4000 个计数。若安装在直径为 50 mm 的轮子上,则:

周长 = π × 50 ≈ 157.08 mm
位移分辨率 = 157.08 / 4000 ≈ 0.0393 mm

也就是说,每个计数大约对应 0.039 mm 的位移。线数越高、倍频越高,分辨率越细,但同时也意味着同样的转速下脉冲频率更高,对接口电路和计数器的响应速度要求更高。

提示:“线数”是编码器每转输出的 A 相脉冲数,而“每转计数”是经过倍频后的实际计数值。选型时不要只看线数,还要确认接口支持几倍频解码。

四、方向判别与状态跳变

方向判别的本质,是观察 A、B 两相在边沿到来时的电平组合。把 A、B 看作两位二进制数,一个完整周期会经历 00 → 01 → 11 → 10 → 00 的状态序列。正转时状态按这个顺序循环,反转时则逆序循环。

因此,控制器只需记录上一次的 A/B 状态,再与当前状态比较,就能判断方向:

  • 若状态按 00 → 01 → 11 → 10 变化,判为正转,计数器加 1。
  • 若状态按 00 → 10 → 11 → 01 变化,判为反转,计数器减 1。
  • 若状态跳变跨越两个以上状态,说明信号受到干扰或转速过高导致丢边沿,应触发错误标志。

这种基于状态机的解码方式,不仅能在每个边沿更新计数,还能有效识别非法跳变,提高系统的可靠性。

增量式编码器 A/B/Z 信号与正交解码 A 相 B 相 Z 相 90° A/B 状态序列(正转) 00 01 11 10 00 正转:计数 +1 反转:计数 -1

五、典型应用场景与配置示例

在嵌入式系统中,很多 MCU 的定时器自带正交解码模式,可以直接把 A、B 两相接入定时器编码器接口,由硬件完成 4 倍频计数和方向判别。以 STM32 为例,常见配置思路如下:

// 定时器编码器模式配置(示意)
TIM_Encoder_InitTypeDef encoder;
encoder.EncoderMode = TIM_ENCODERMODE_TI12;  // A/B 两相均计数,4 倍频
encoder.IC1Polarity = TIM_ICPOLARITY_RISING;
encoder.IC2Polarity = TIM_ICPOLARITY_RISING;
HAL_TIM_Encoder_Init(&htim2, &encoder);
HAL_TIM_Encoder_Start(&htim2, TIM_CHANNEL_ALL);

// 读取计数值
int32_t count = (int32_t)__HAL_TIM_GET_COUNTER(&htim2);

Z 相通常接入外部中断或捕获通道。当 Z 脉冲到来时,可以执行回零操作,例如将计数器清零或记录当前绝对位置。这样,系统既保留了增量式编码器的高分辨率,又通过 Z 相获得了每圈一次的绝对参考。

六、常见误区与排障复盘

误区一:把线数直接当作分辨率。线数只是 A 相每转脉冲数,实际分辨率还要乘以倍频。若接口只做 1 倍频,分辨率会明显低于预期。

误区二:忽略 Z 相的有效宽度。Z 脉冲通常很窄,若中断响应慢或滤波过重,可能漏掉 Z 信号,导致回零失败。

误区三:A/B 接反导致方向相反。交换 A、B 两相即可反转计数方向,但不要通过软件取反来“修正”,否则容易与 Z 相逻辑冲突。

排障时,建议先用示波器同时观察 A、B、Z 三路波形,确认相位差是否为 90°、Z 是否每转一个脉冲、边沿是否干净。若计数跳动或方向不稳定,优先检查屏蔽、接地和差分接收器,再检查解码模式是否与接线一致。只有信号质量与解码逻辑同时正确,增量式编码器才能稳定地提供位置与速度反馈。