第二章 编码器原理:增量式、绝对式、接口电路与AB相解读

编码器这东西,说白了就是电机的「眼睛」。

没有它,你的PID控制就是瞎调。我刚开始做电机控制那会儿,就吃过这个亏——电机转得挺欢,但速度到底多少,全靠猜。后来加了编码器,才真正「看见」了转速。

这一章,咱们把编码器彻底聊透。

2.1 增量式编码器:最常用的「计数器」

增量式编码器,我习惯叫它「脉冲发生器」。它不告诉你绝对位置,只告诉你「又转了多少」。就像你走路时数步子——知道走了多少步,但不知道自己在哪条街上。

工作原理

内部有个码盘,上面刻着明暗相间的条纹。光耦一照,转起来就输出脉冲。每转一圈,脉冲数固定,比如1000线、2000线、5000线。

我项目中常用的是2000线的增量式编码器,配合4倍频,一圈能读到8000个脉冲。精度够用,价格也合适。

关键参数:

  • 分辨率:每圈脉冲数(PPR),常见100~5000
  • 输出类型:NPN开路集电极、推挽、差分(RS-422)
  • 最高响应频率:决定了你能测多快的转速

💡 选型建议:普通直流电机用2000~5000线足够。伺服电机建议用5000线以上,配合差分输出抗干扰。

2.2 绝对式编码器:一开机就知道位置

绝对式编码器就高级一些了。它每个位置都有唯一编码,断电再上电,位置还在。

我记得有一次做AGV小车,用的增量式编码器,每次开机都要先回零位。后来换成绝对式,开机直接干活,省了不少事。

两种主流类型:

  • 单圈绝对式:一圈内位置唯一,转多了就重复
  • 多圈绝对式:内部有齿轮或电池,记录总圈数

绝对式的输出接口通常是SSI、BiSS、EnDat等同步串口。我建议初学者先别碰这些,从增量式入手更实际。

⚠️ 注意:绝对式编码器价格是增量式的3~10倍。不是所有项目都需要绝对位置,别盲目追求高端。

2.3 AB相脉冲信号解读:这才是核心

增量式编码器输出两路信号:A相和B相。相位差90度。

为什么是两路?

因为一路只能测速度,测不了方向。两路配合,谁先谁后,方向就出来了。

解读规则:

  • A相上升沿时,B相是高电平 → 正转
  • A相上升沿时,B相是低电平 → 反转

我习惯用定时器捕获模式来读AB相。STM32的编码器模式可以直接硬件解码,省CPU资源。

// 伪代码:AB相脉冲读取
if (A_rising_edge) {
    if (B == HIGH) {
        pulse_count++;
    } else {
        pulse_count--;
    }
}

4倍频技术:

同时检测A相和B相的上升沿和下降沿,一个脉冲变成4个计数。2000线的编码器,4倍频后一圈8000个计数。

我建议:只要MCU性能够,一律用4倍频。精度翻倍,不增加硬件成本。

2.4 编码器接口电路:别让信号死在路上

编码器信号最容易出问题的地方,就是接口电路。

我曾经在一个项目中,编码器线长了5米,信号波形完全畸变,速度读数跳来跳去。查了两天才发现是没加差分接收。

常见接口类型:

接口类型 传输距离 抗干扰 典型应用
NPN开路集电极 <3米 一般 低成本、短距离
推挽输出 <10米 较好 通用场合
差分输出(RS-422) <100米 优秀 工业现场、长距离

接口电路设计要点:

  • 上拉电阻:NPN输出必须加,阻值2.2k~10k
  • 滤波电容:100pF~1nF,滤除高频噪声
  • 差分接收:AM26LS32或MC3486,长距离必备
  • 光耦隔离:电机侧和控制器侧电气隔离,防止共模干扰

💡 我个人的习惯:编码器线缆用双绞屏蔽线,屏蔽层单端接地。别省这点钱,信号干净了,调试时间能省一半。

2.5 知识体系总览

下面这张图,把编码器的核心知识点串起来了。我建议你保存下来,做项目时对照着看。

编码器知识体系 增量式编码器 绝对式编码器 AB相脉冲输出 Z相零位脉冲 单圈/多圈 SSI/BiSS AB相脉冲解读:相位差90° → 方向判断 → 4倍频计数 接口电路:NPN → 上拉电阻 | 推挽 → 直接连接 | 差分 → RS-422接收 工程要点:双绞屏蔽线 · 光耦隔离 · 滤波电容 · 单端接地

2.6 避坑指南

做编码器项目,有几个坑我踩过,你千万别再踩:

  • 信号反射:长线传输时,末端不匹配阻抗,信号会反弹。我建议加终端电阻,阻值等于电缆特性阻抗(通常120Ω)。
  • 共模电压:电机和控制器地电位不一致,差分信号也会出问题。加光耦隔离是最稳妥的方案。
  • 抖动误判:编码器在停止位置附近会抖动,导致计数乱跳。软件上加个死区滤波,或者用施密特触发器整形。
  • 电源噪声:编码器供电和电机驱动共用一个电源?别这么干。独立供电或者加LC滤波。

⚠️ 我曾经在一个项目中,编码器线缆和动力线绑在一起走线,结果信号完全被干扰。后来分开走线,问题解决。记住:编码器线缆远离动力线,至少保持10cm距离。

好了,编码器这部分就聊到这儿。你先把增量式编码器的AB相解读练熟,这是后面做PID速度控制的基础。下一章咱们讲定时器捕获,怎么用硬件把脉冲数读得又快又准。


公众号:蓝海资料掘金营,微信deep3321