增量式编码器原理:A/B/Z信号详解、正交解码、方向判断与倍频技术
增量式编码器,说白了就是个“计数器”。它不告诉你绝对位置,只告诉你“动了多少”。我刚开始接触这玩意儿时,总觉得它不够聪明——怎么连自己转了几圈都记不住?后来才明白,正是这种简单,让它成了工业现场最皮实的传感器之一。
今天咱们就把它拆开揉碎,看看A/B/Z信号到底在干什么,正交解码是怎么回事,方向怎么判断,以及倍频技术是怎么把精度“凭空”翻倍的。
A/B/Z信号:三根线的故事
增量式编码器通常输出三路信号:A相、B相和Z相。你想想看,这三根线就像三个性格迥异的兄弟。
- A相和B相:它们是双胞胎,长得像但步调不一致。A相和B相都是方波,频率相同,但相位差90°。这就是“正交”的由来。
- Z相:它是家里的“老实人”,每转一圈才发一个脉冲。我习惯叫它“零位信号”或“索引脉冲”。
我在项目中遇到过一件事:有个同事把A相和B相接反了,结果电机一启动就往反方向跑。嗯,这就是没搞懂正交信号的下场。
关键点:A相领先B相90°表示正转,B相领先A相90°表示反转。这就是方向判断的基础。
正交解码原理:为什么是90°?
正交信号的好处,说白了就是“抗干扰”和“能辨方向”。
为什么是90°?你想想看,如果A和B完全同步,那它们就是一路信号,根本分不清方向。如果相位差是180°,那A的上升沿正好对应B的下降沿,逻辑上也能判断方向,但抗干扰能力差。90°是最优解——每个边沿都落在另一个信号的稳定区间内。
正交解码的核心逻辑是这样的:
// 伪代码:正交解码逻辑
if (A上升沿) {
if (B == HIGH) {
方向 = 反转;
} else {
方向 = 正转;
}
计数器++;
}
if (B上升沿) {
if (A == LOW) {
方向 = 反转;
} else {
方向 = 正转;
}
计数器++;
}
你看,每个上升沿都触发一次判断。A和B的四个边沿(上升沿和下降沿)都可以用来计数。这就是倍频的基础。
方向判断逻辑:别搞反了
方向判断其实就一句话:看A和B谁先变。
具体来说:
- 正转:A相上升沿时,B相为低电平;或者B相上升沿时,A相为高电平。
- 反转:A相上升沿时,B相为高电平;或者B相上升沿时,A相为低电平。
我曾经犯过一个低级错误:在软件里把方向判断逻辑写反了,结果调试时电机总是往反方向跑。查了半天才发现是if条件写反了。从那以后,我习惯在代码里加个注释——“方向判断:A领先B为正转”。
避坑指南:我曾经遇到过编码器安装方向反了的情况。机械上装反了,软件里再怎么调方向判断也没用。所以,先确认机械安装方向,再写软件逻辑。
倍频技术:1x、2x、4x
倍频技术,说白了就是“一个脉冲当几个用”。
增量式编码器的原始分辨率由码盘上的刻线数决定。比如一个1000线的编码器,每转输出1000个A相脉冲。但通过倍频,我们可以把分辨率提高。
| 倍频模式 | 每转脉冲数 | 实现方式 | 精度提升 |
|---|---|---|---|
| 1x(单倍频) | 1000 | 只检测A相上升沿 | 基准 |
| 2x(双倍频) | 2000 | 检测A相上升沿和下降沿 | 2倍 |
| 4x(四倍频) | 4000 | 检测A相和B相的所有边沿 | 4倍 |
我个人习惯在低速高精度场合用4倍频,高速场合用1倍频。为什么?因为倍频越高,对信号质量要求也越高。如果信号有抖动,4倍频会把抖动也放大。
经验之谈:我曾经在一个振动很大的设备上用了4倍频,结果计数器乱跳。后来改成2倍频,再在软件里加了个简单的滤波,问题就解决了。别盲目追求高倍频,稳定才是第一位的。
Z信号:归零的锚点
Z信号每圈只出现一次,通常对应码盘上的一个特殊标记。它的作用就是“归零”或“找参考点”。
我习惯在系统上电时,让电机先找一次Z信号,把当前位置设为参考点。这样即使断电重启,也能知道绝对位置——前提是你记录了从参考点开始的脉冲数。
Z信号还有一个妙用:校准。比如你怀疑编码器有丢步,可以每转一圈用Z信号校正一次计数器。我做过一个项目,就是用Z信号做周期性校准,把长期误差控制在1个脉冲以内。
知识体系总览
下面这张图总结了增量式编码器的核心知识结构,你可以把它当作一个快速参考。
这张图把增量式编码器的核心知识点串起来了。从三路信号到正交解码,再到方向判断和倍频,最后用Z信号做归零校准——这就是一个完整的知识闭环。
总结一下:增量式编码器不复杂,但细节决定成败。A/B信号的相位关系决定了方向,边沿检测决定了分辨率,Z信号提供了参考点。搞懂这三样,增量式编码器你就拿下了。
公众号:蓝海资料掘金营,微信deep3321