编码器原理:增量式与绝对式、ABZ信号、霍尔换相逻辑

编码器这东西,说白了就是电机的「眼睛」。没有它,你的FOC算法再漂亮也是盲人摸象。我最早做伺服驱动时,选错编码器类型,折腾了整整两周才找到问题——嗯,从那以后我对编码器的选型就特别较真。

这一节我们聚焦三个核心问题:编码器怎么分类?ABZ信号到底怎么读?霍尔传感器又是如何配合换相的?

一句话总结:增量式编码器告诉你「动了多少」,绝对式编码器告诉你「在哪儿」,霍尔传感器告诉你「该换哪一相」。

2.1 增量式编码器 vs 绝对式编码器

先看一张对比表,把两种编码器的核心差异说清楚。

对比项 增量式编码器 绝对式编码器
输出信号 A、B、Z 脉冲 并行/串行二进制码
断电记忆 不记忆位置 记忆绝对位置
分辨率 取决于线数(如 2500线) 取决于位数(如 17位)
抗干扰 脉冲易受干扰 数字码抗干扰强
成本 低 高
典型应用 通用伺服、步进闭环 机器人关节、高端数控

我个人习惯:如果项目对成本敏感、且每次上电都能回零,用增量式就够了。但如果是协作机器人那种关节——断电后位置不能丢——必须上绝对式。

小经验:增量式编码器上电后需要「找零」操作。我见过有人用Z信号做归零,结果机械振动导致误触发——后来加了软件滤波才搞定。

2.2 ABZ信号解析

增量式编码器输出三路信号:A、B、Z。A和B相位差90°,用来判断方向和计数;Z每转一圈出一个脉冲,用来校准。

你想想看,为什么是90°?因为这样可以通过A和B的上升沿/下降沿组合,把一圈分成4倍频的脉冲数。举个例子:2500线的编码器,4倍频后一圈就是10000个脉冲。

// 典型的ABZ信号解码逻辑(伪代码)
if (A上升沿) {
    if (B == HIGH)  direction = 正转;
    else            direction = 反转;
    position += direction;
}
if (Z上升沿) {
    position = 0;  // 一圈归零
}

我在项目中遇到过一个问题:Z信号宽度很窄,高速旋转时容易漏掉。后来我改用Z信号的下降沿触发,配合DMA捕获,才算稳定。

注意:ABZ信号是差分传输的(A+/A-、B+/B-、Z+/Z-),千万别只接单端。差分对能抑制共模干扰,尤其在电机驱动这种强噪声环境里,省掉差分就是给自己挖坑。

2.3 霍尔传感器换相逻辑

霍尔传感器是另一种「编码器」——它只输出3位二进制信号(H1、H2、H3),对应6个扇区。每个扇区60°,正好覆盖一个电周期。

为什么是6个扇区?因为三相永磁同步电机(PMSM)的换相逻辑就是6步换相法。霍尔信号告诉你转子在哪个扇区,控制器就知道该导通哪两相。

霍尔状态 (H3 H2 H1) 扇区编号 导通相
001 1 A+ B-
011 2 A+ C-
010 3 B+ C-
110 4 B+ A-
100 5 C+ A-
101 6 C+ B-

我曾经犯过一个低级错误:霍尔信号线接反了,结果电机一启动就剧烈抖动。后来用示波器抓波形才发现,霍尔状态顺序是反的——调换两根线就解决了。

避坑指南:霍尔传感器安装时,三个元件必须严格间隔120°电角度。机械偏差会导致换相提前或滞后,轻则转矩脉动,重则失步。我建议用专用的霍尔安装夹具,别靠目测。

2.4 编码器与霍尔协同工作

实际项目中,霍尔和编码器经常配合使用。霍尔提供初始换相信息,编码器提供精细位置反馈。举个例子:

  1. 上电阶段:读取霍尔状态,确定转子所在扇区。
  2. 启动阶段:用霍尔信号做6步换相,让电机转起来。
  3. 运行阶段:切换到编码器ABZ信号,做FOC矢量控制。

这种「霍尔粗定位 + 编码器精定位」的方案,我用了很多年。它既解决了上电位置未知的问题,又保证了高速运行时的精度。

下面这张图展示了整个协同工作的流程:

编码器与霍尔协同工作流程图 上电读取霍尔状态 6步换相启动 编码器FOC控制 霍尔状态 → 扇区判断 换相表查表 ABZ解码 → 位置/速度 协同工作要点 1. 霍尔提供初始扇区,编码器提供精细位置 2. 启动时霍尔换相,转速>500rpm后切换编码器 3. 编码器Z信号用于校准霍尔安装偏差 4. 霍尔故障时,可用编码器做无霍尔启动(下一章讲)

核心要点:霍尔传感器和编码器不是替代关系,而是互补关系。霍尔解决「初始位置」问题,编码器解决「精度」问题。两者结合,才能让电机既平稳又精准。

嗯,这一节的内容就到这里。编码器的原理看似简单,但实际工程中坑不少。我建议你拿到编码器后,先用示波器抓一下ABZ波形,确认时序正确再写代码——这一步能省下后面大量的调试时间。