1. 编码器基础:增量式与绝对式,你该选哪个?

做电机控制这些年,我接触最多的就是编码器。说白了,编码器就是把电机的旋转角度、速度、位置这些物理量,变成单片机能读懂的脉冲信号。你想想看,没有编码器,你连电机转没转、转了多少圈都不知道,那还谈什么精确控制?

编码器分两大类:增量式和绝对式。这两兄弟各有各的脾气,选错了可是要吃苦头的。我刚开始做项目时就在这上面栽过跟头,后面慢慢跟大家聊。

1.1 增量式编码器:简单粗暴,但有个致命缺点

增量式编码器的工作原理,其实挺直观的。它内部有一个码盘,码盘上刻着密密麻麻的透光和不透光的条纹。码盘跟着电机轴一起转,光耦一照,就输出脉冲信号。

它只告诉你「我动了多少」,不告诉你「我在哪里」。就像你走路时数步数,你知道自己走了100步,但不知道这100步是从家门口走的,还是从小区门口走的。

核心特点:

  • 输出信号:A相、B相、Z相(有的还有U、V、W)
  • 断电后位置丢失,上电必须回零
  • 成本低、结构简单、响应快
  • 适合速度测量和相对位置控制

1.2 绝对式编码器:一开机就知道自己在哪

绝对式编码器就高级多了。它的码盘上刻的不是简单的条纹,而是一圈一圈的格雷码(Gray Code)。每一圈代表一个二进制位,圈数越多,分辨率越高。

它输出的不是脉冲,而是一串二进制数据。你读到这个数据,就知道当前轴在什么位置。断电再上电,位置信息还在。这一点在机器人关节、数控机床这些场合特别重要。

我的经验: 如果项目要求断电后必须记住位置,或者有安全联锁需求,别犹豫,直接上绝对式。我曾经在一个AGV小车上用了增量式,结果每次断电都要手动推回原点,客户差点没把我骂死。

1.3 ABZ三相输出信号解析

增量式编码器最常见的输出就是ABZ三相。咱们一个一个说清楚。

信号 作用 特点
A相 主脉冲输出 每转一圈输出固定数量的脉冲
B相 方向判别 与A相相位差90°,谁先谁后决定方向
Z相 零位信号 每转一圈输出一个脉冲,用于回零

A相和B相的关系: 电机正转时,A相领先B相90°;反转时,B相领先A相90°。STM32的定时器编码器模式就是靠这个相位差来判断方向的。

Z相的作用: 这个信号每圈只出现一次。我习惯用它来做「圈数计数」的基准。比如你测长距离移动,光靠A相脉冲会累积误差,每圈用Z相校准一下,精度就上去了。

注意: 有些便宜的编码器Z相脉冲宽度很窄,只有几微秒。如果你的STM32中断响应不够快,可能会漏掉。我建议用定时器的输入捕获功能来抓Z相,别用外部中断。

1.4 分辨率与精度,别搞混了

这两个概念我见过太多人搞混了。包括我自己,刚入行时也闹过笑话。

分辨率: 编码器能分辨的最小角度变化。比如一个编码器是1000线,那就是一圈输出1000个脉冲。每个脉冲对应的角度是360°/1000 = 0.36°。分辨率越高,你能测到的角度变化就越小。

精度: 编码器实际输出位置与真实位置之间的误差。这跟码盘的加工精度、光耦的安装位置、信号处理电路都有关系。

说白了,分辨率是「理论上你能看到多细」,精度是「实际上你测得有多准」。一个编码器可以有很高的分辨率,但精度可能很差。就像一把尺子,刻度很密(分辨率高),但尺子本身是歪的(精度差),量出来的数据照样不准。

选型建议:

  • 测速为主:分辨率够用就行,重点看响应频率
  • 定位为主:精度比分辨率更重要
  • 低成本方案:增量式+Z相回零,性价比最高

1.5 一张图看懂编码器知识体系

下面这张图把编码器的分类、信号、关键参数串起来了。我画图时习惯把核心概念放在中间,分支展开,这样一眼就能看清全貌。

编码器知识体系 编码器 增量式编码器 绝对式编码器 A相 / B相 Z相(零位) 格雷码 / SSI / BiSS 分辨率(线数) 精度(误差) 选型要点 测速 → 增量式 + 高分辨率 定位 → 绝对式 + 高精度

1.6 实战中怎么选?我的一点建议

做项目时,我一般按这个思路来选编码器:

  1. 先看应用场景: 是测速还是定位?断电要不要记忆位置?
  2. 再看接口资源: STM32定时器有几个?能不能支持编码器模式?
  3. 最后看成本: 增量式几十块,绝对式几百上千,预算说了算。

一个小技巧: 如果你用增量式编码器做位置控制,一定要在机械结构上装一个限位开关。上电后先让电机撞一下限位,把当前位置标定为原点。这样就算断电了,下次上电也能找到参考点。我有个项目就是这么干的,用了三年没出过问题。