第二章 编码器原理:增量式、绝对式、接口电路与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 知识体系总览
下面这张图,把编码器的核心知识点串起来了。我建议你保存下来,做项目时对照着看。
2.6 避坑指南
做编码器项目,有几个坑我踩过,你千万别再踩:
- 信号反射:长线传输时,末端不匹配阻抗,信号会反弹。我建议加终端电阻,阻值等于电缆特性阻抗(通常120Ω)。
- 共模电压:电机和控制器地电位不一致,差分信号也会出问题。加光耦隔离是最稳妥的方案。
- 抖动误判:编码器在停止位置附近会抖动,导致计数乱跳。软件上加个死区滤波,或者用施密特触发器整形。
- 电源噪声:编码器供电和电机驱动共用一个电源?别这么干。独立供电或者加LC滤波。
⚠️ 我曾经在一个项目中,编码器线缆和动力线绑在一起走线,结果信号完全被干扰。后来分开走线,问题解决。记住:编码器线缆远离动力线,至少保持10cm距离。
好了,编码器这部分就聊到这儿。你先把增量式编码器的AB相解读练熟,这是后面做PID速度控制的基础。下一章咱们讲定时器捕获,怎么用硬件把脉冲数读得又快又准。
公众号:蓝海资料掘金营,微信deep3321