编码器原理:增量式与绝对式、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 编码器与霍尔协同工作
实际项目中,霍尔和编码器经常配合使用。霍尔提供初始换相信息,编码器提供精细位置反馈。举个例子:
- 上电阶段:读取霍尔状态,确定转子所在扇区。
- 启动阶段:用霍尔信号做6步换相,让电机转起来。
- 运行阶段:切换到编码器ABZ信号,做FOC矢量控制。
这种「霍尔粗定位 + 编码器精定位」的方案,我用了很多年。它既解决了上电位置未知的问题,又保证了高速运行时的精度。
下面这张图展示了整个协同工作的流程:
核心要点:霍尔传感器和编码器不是替代关系,而是互补关系。霍尔解决「初始位置」问题,编码器解决「精度」问题。两者结合,才能让电机既平稳又精准。
嗯,这一节的内容就到这里。编码器的原理看似简单,但实际工程中坑不少。我建议你拿到编码器后,先用示波器抓一下ABZ波形,确认时序正确再写代码——这一步能省下后面大量的调试时间。