3、增量式编码器输出信号:A/B/Z 相信号定义、正交信号原理、脉冲计数与方向判断
增量式编码器,说白了就是只告诉你「动了多少」和「往哪动」,不告诉你「现在在哪」。它靠三根信号线——A、B、Z——来传递信息。这三根线配合起来,就能实现位置跟踪和方向判断。
我刚开始接触编码器时,总觉得 A/B 相就是两个方波,没什么特别的。直到有一次在伺服项目里,电机低速抖动时方向判断老是出错,我才真正去抠正交信号的细节。嗯,这里面的门道其实不少。
3.1 A/B/Z 相信号定义
先看一张信号定义表,把三根线的角色搞清楚:
| 信号 | 全称 | 功能 | 典型特征 |
|---|---|---|---|
| A 相 | Phase A | 主计数脉冲 | 方波,占空比 50% |
| B 相 | Phase B | 方向判别脉冲 | 与 A 相相差 90° 电角度 |
| Z 相 | Index / Zero | 零位参考 | 每圈一个窄脉冲 |
A 相是主计数通道。编码器每转过一个最小分辨率,A 相就输出一个脉冲。脉冲的个数直接对应位移量。
B 相和 A 相长得一模一样,但相位上差了 90°。这个相位差就是判断旋转方向的关键。
Z 相每圈只出现一次。我习惯用它来做「归零」或「圈数校准」。比如在机器人关节里,每次上电后先找 Z 相,就能知道绝对零位。
关键点:Z 相脉冲通常与 A/B 相的特定边沿对齐。不同厂家可能有 ±1/4 周期的偏差,选型时要注意。
3.2 正交信号原理
正交信号,英文叫 Quadrature Signal。为什么叫「正交」?因为 A 和 B 的相位差正好是 90°,在数学上就是正交关系。
你想想看,如果编码器正转,A 相上升沿时 B 相是高电平;反转时,A 相上升沿时 B 相是低电平。这个「谁先谁后」的关系,就是方向判别的依据。
下面这张图展示了正交信号的核心逻辑:
实际项目中,我一般用 MCU 的编码器接口(比如 STM32 的 TIM 编码器模式)来硬件解码。硬件自动处理边沿采样和方向判断,CPU 只管读计数值就行。
我的习惯:如果 MCU 没有硬件编码器接口,就用两个外部中断 + 一个定时器捕获。A 相触发中断,在中断里读 B 相电平。这样软件开销小,实时性也够。
3.3 脉冲计数与方向判断
脉冲计数有两种常见方式:
- 单边沿计数:只对 A 相的上升沿计数。简单,但分辨率低。
- 双边沿计数:对 A 相的上升沿和下降沿都计数。分辨率翻倍。
- 四倍频计数:对 A 相和 B 相的上升沿和下降沿都计数。分辨率是原始脉冲的 4 倍。
我举个例子。一个 1000 PPR 的编码器:
| 计数方式 | 每圈脉冲数 | 分辨率 |
|---|---|---|
| 单边沿 | 1000 | 0.36° |
| 双边沿 | 2000 | 0.18° |
| 四倍频 | 4000 | 0.09° |
方向判断的逻辑其实很简单:
// 伪代码:正交解码方向判断
if (A 相上升沿) {
if (B 相 == 高电平) {
方向 = 正转;
计数值++;
} else {
方向 = 反转;
计数值--;
}
} else if (A 相下降沿) {
if (B 相 == 低电平) {
方向 = 正转;
计数值++;
} else {
方向 = 反转;
计数值--;
}
}
我曾经踩过的坑:在电机高速运转时,如果中断响应不够快,会漏掉边沿。结果就是计数值不准,方向判断偶尔出错。后来我改用 DMA + 定时器捕获,或者直接用硬件编码器接口,问题才解决。
3.4 Z 相的作用与使用要点
Z 相每圈只出现一次,宽度通常等于一个 A 相脉冲周期。它的主要用途有两个:
- 归零校准:每次上电后,让电机转一圈,找到 Z 相脉冲,把计数值重置为 0。
- 圈数计数:配合 A/B 相,可以记录绝对位置。比如 Z 相出现 5 次,加上当前 A/B 相计数值,就知道转了多少圈加多少角度。
我个人的做法是:在 Z 相中断里做「软归零」。不是真的把计数值清零,而是记录一个偏移量。这样即使中途有干扰,也不会丢失绝对位置。
注意:Z 相脉冲的宽度和位置可能因编码器型号而异。有些编码器的 Z 相与 A 相上升沿对齐,有些与下降沿对齐。一定要看数据手册,或者用示波器实测确认。
3.5 常见问题与避坑
- 抖动干扰:机械振动会导致 A/B 相在边沿附近反复跳变。我一般加 10-50 μs 的软件去抖,或者用施密特触发器硬件滤波。
- 信号毛刺:长线传输时,反射会造成毛刺。建议用差分信号(RS-422)传输,或者加 RC 滤波。
- 方向误判:如果 A/B 相在低速时抖动,方向可能来回跳。我习惯用「滞回判断」——连续采样 3 次方向一致才更新。
嗯,增量式编码器的信号处理,说白了就是「数脉冲 + 看相位」。把 A/B/Z 三根线的时序关系吃透,大部分问题都能迎刃而解。