3、增量式编码器详解:A/B相正交信号、Z相零位信号、倍频技术(1x、2x、4x)、方向判断
增量式编码器,说白了就是编码器家族里的「老实人」。它不告诉你绝对位置,只告诉你「动了多少」和「往哪动」。我最早接触它是在一个伺服电机项目里,当时觉得这东西简单,结果一上手才发现,里面的门道还真不少。
今天咱们就把增量式编码器彻底聊透。从最基础的A/B相正交信号,到Z相零位,再到倍频技术和方向判断,我一个一个给你拆开讲。
3.1 A/B相正交信号:编码器的「心跳」
增量式编码器最核心的输出,就是两路方波信号——A相和B相。这两路信号相位差正好90度,所以叫「正交信号」。
你想想看,为什么非要搞两路信号?一路不行吗?
嗯,这里要注意:一路信号只能测速度,测不了方向。两路信号一配合,方向就出来了。具体怎么判断?看A相和B相的先后顺序。
- A相领先B相90度:编码器正转(顺时针)
- B相领先A相90度:编码器反转(逆时针)
我在项目中遇到过一个问题:信号线太长,导致A/B相边沿抖动,方向判断偶尔出错。后来加了施密特触发器整形,问题就解决了。所以信号质量真的很重要。
关键参数:每转脉冲数(PPR)。比如一个1000 PPR的编码器,转一圈输出1000个A相脉冲和1000个B相脉冲。注意,是每相1000个,不是两相加起来1000个。
3.2 Z相零位信号:回家的「灯塔」
增量式编码器有个天生的缺点——掉电后位置丢失。你重新上电,不知道轴在哪儿。这时候Z相就派上用场了。
Z相信号,也叫零位信号或索引信号。编码器每转一圈,在固定的机械位置输出一个脉冲。这个脉冲很窄,通常只有1/4个A相周期那么宽。
我习惯的做法是:系统上电后,先让电机低速转一圈,找到Z相脉冲,把这个位置设为机械原点。这样后面的位置计算就有了基准。
小技巧:Z相脉冲的宽度和A/B相有关。有些编码器的Z相是「高电平有效」,有些是「低电平有效」。选型时一定要看数据手册,别搞反了。
3.3 倍频技术:1x、2x、4x 到底怎么选?
倍频技术,说白了就是「一个脉冲当多个用」。你想想看,如果编码器只有1000 PPR,转一圈只能测1000个位置,分辨率太低了。怎么办?用倍频。
常见的倍频方式有三种:
| 倍频方式 | 原理 | 分辨率提升 | 适用场景 |
|---|---|---|---|
| 1x(单倍频) | 只检测A相上升沿 | 1倍 | 低速、对分辨率要求不高 |
| 2x(双倍频) | 检测A相上升沿和下降沿 | 2倍 | 中速、需要一定精度 |
| 4x(四倍频) | 检测A相和B相的上升沿和下降沿 | 4倍 | 高速、高精度定位 |
举个例子:一个1000 PPR的编码器,用4倍频后,分辨率变成4000线/圈。也就是说,转一圈能测4000个位置。精度直接翻了4倍。
我曾经在一个贴片机项目里用过4倍频。当时要求定位精度0.01mm,编码器本身只有500 PPR,4倍频后变成2000线/圈,配合丝杠螺距5mm,刚好满足要求。嗯,这个方案我到现在还在用。
注意:倍频不是越高越好。4倍频虽然分辨率高,但脉冲频率也高了4倍。如果MCU的定时器捕获频率跟不上,反而会丢脉冲。我见过有人用4倍频跑高速,结果计数器溢出,位置全乱了。
3.4 方向判断:硬件还是软件?
方向判断有两种做法:硬件判断和软件判断。
硬件判断:用D触发器或专用解码芯片(比如LS7083、HCTL-2020)。A相接时钟端,B接数据端。正转时输出高电平,反转时输出低电平。简单粗暴,适合对实时性要求高的场合。
软件判断:在MCU中断里读取A/B相状态。我习惯用状态机法——记录上一次的A/B相状态,和当前状态对比,查表得出方向。
下面是我常用的方向判断代码(伪代码):
// 状态表:上一次状态 + 当前状态 = 方向
// 状态编码:00=A低B低, 01=A低B高, 10=A高B低, 11=A高B高
const int8_t dir_table[4][4] = {
// 上一次状态: 00 01 10 11
/*当前00*/ { 0, 1, -1, 0},
/*当前01*/ {-1, 0, 0, 1},
/*当前10*/ { 1, 0, 0, -1},
/*当前11*/ { 0, -1, 1, 0}
};
// 在A相或B相中断中调用
void encoder_isr(void) {
uint8_t curr_state = (GPIO_ReadPin(A_PIN) << 1) | GPIO_ReadPin(B_PIN);
int8_t dir = dir_table[prev_state][curr_state];
if (dir == 1) position++;
else if (dir == -1) position--;
prev_state = curr_state;
}
这段代码我用了好多年,从来没出过问题。核心思想就是:状态变化必须合法,非法变化(比如从00直接跳到11)说明有干扰,直接忽略。
避坑指南:我曾经在电机启停瞬间遇到过方向误判。原因是电机振动导致A/B相边沿抖动。后来我在中断里加了20μs的去抖延时,问题就解决了。记住,编码器信号一定要做硬件滤波或软件去抖。
3.5 知识体系总览
下面这张图把增量式编码器的核心知识点串起来了。你可以把它当作一个快速参考。
这张图把增量式编码器的四个核心知识点——A/B相、Z相、倍频、方向判断——以及它们之间的关系都画出来了。你可以看到,倍频技术直接影响分辨率,而方向判断又依赖于A/B相的正交特性。Z相则是一个独立的「锚点」,用来校准位置。
好了,增量式编码器的核心内容就这些。记住一句话:选型看PPR和倍频,调试看信号质量,方向判断看状态机。把这三点吃透了,增量式编码器你就玩转了。