3、增量式编码器原理:A/B/Z信号时序、正交解码、倍频技术、零位脉冲Z信号

增量式编码器,说白了就是电机控制里的「眼睛」。它不告诉你电机现在在哪个绝对角度,而是告诉你「动了多少」以及「往哪边动」。我刚开始做FOC的时候,总觉得这东西不如绝对式编码器省心,但后来发现,只要把它的脾气摸透了,增量式编码器完全够用,而且性价比高得多。

3.1 A/B/Z信号的基本时序

增量式编码器通常输出三路信号:A相、B相和Z相。A和B是正交信号,Z是零位脉冲。

咱们先看A和B。这两路信号是方波,相位差正好90度。为什么叫正交?就是因为这个90度的相位差。你想想看,如果电机正转,A相领先B相90度;反转的话,B相就领先A相90度。就这么简单。

核心要点:正转时A领先B 90°,反转时B领先A 90°。这是判断转向的唯一依据。

Z信号就更有意思了。它每转一圈只输出一个脉冲,宽度通常是一个A/B周期的宽度。我习惯把Z信号叫做「圈标记」——它告诉控制器:「嘿,电机转到机械零位了!」

这里有个坑,我曾经踩过:有些编码器的Z信号不是正好在A/B的某个特定相位输出的,而是有±90°的偏差。所以第一次上电时,最好用示波器抓一下Z信号和A/B的相位关系,心里有个底。

3.2 正交解码:方向与位置

正交解码,说白了就是通过A和B的相位关系,判断电机转的方向,同时计数位置。

具体怎么做?我常用的方法是检测A相的上升沿和下降沿,同时看B相的电平。举个例子:

  • 如果A上升沿时B是低电平 → 正转,位置计数器+1
  • 如果A上升沿时B是高电平 → 反转,位置计数器-1

当然,你也可以在B的边沿检测A的电平,效果一样。我个人习惯用A的边沿触发,因为A相通常作为主通道。

小技巧:很多MCU的定时器模块自带正交解码功能,比如STM32的编码器模式。直接配置定时器为Encoder Mode,硬件自动帮你解码,省掉不少CPU开销。

位置计数器的值就是当前的位置信息。但注意,这个值是相对的——掉电就丢了。所以每次上电后,你需要让电机转到一个已知位置,或者用Z信号来校准。

3.3 倍频技术:1x、2x、4x倍频

倍频,就是让分辨率翻倍。为什么能翻倍?因为A和B的每个边沿都携带位置信息。

咱们来看三种常见的倍频方式:

倍频方式 检测边沿 每周期脉冲数 分辨率提升
1x倍频 仅A相上升沿 1 基础分辨率
2x倍频 A相上升沿+下降沿 2 2倍
4x倍频 A和B的所有边沿 4 4倍

举个例子:一个2500线的编码器,如果只用1x倍频,一圈只能得到2500个脉冲。但用4x倍频,一圈就是10000个脉冲。分辨率直接翻了4倍。

注意:倍频虽然提高了分辨率,但并没有提高编码器的物理精度。它只是把模拟量的位置信息用数字方式更精细地表达出来。物理精度还是由编码器的光栅刻线数决定的。

我建议在FOC控制中,至少用2x倍频。4x倍频虽然更好,但对MCU的中断频率要求更高。如果电机转速很高,比如10000rpm,4x倍频下每秒要处理的中断次数可能达到几十万次,这时候就要考虑硬件正交解码了。

3.4 零位脉冲Z信号:校准的锚点

Z信号是增量式编码器里最容易被忽视,但也是最重要的信号。没有它,你的位置就是「漂」的。

为什么这么说?因为增量式编码器的位置计数器是相对的。上电时计数器从0开始,但电机实际在什么位置?你不知道。只有当你转过了Z信号的位置,计数器才能和机械位置对应起来。

Z信号的使用场景主要有两个:

  1. 上电寻零:电机上电后,先朝一个方向转,直到检测到Z信号,然后把计数器清零或设为预设值。
  2. 周期性校准:每转一圈,用Z信号修正一次计数器,消除累积误差。

我记得有一次做项目,编码器的Z信号没接,结果电机跑了几百圈后,位置误差累积到好几度,FOC完全失控。从那以后,我只要用增量式编码器,Z信号必接,而且上电后必做一次寻零。

实战建议:Z信号最好接到MCU的捕获输入引脚,并开启中断。这样每次经过零位,都能第一时间校准位置,延迟越小越好。

3.5 知识体系总览

下面这张图把增量式编码器的核心知识点串起来了。你可以把它当作本章的「地图」:

增量式编码器知识体系 增量式编码器 A/B正交信号 Z零位脉冲 倍频技术 相位差90° → 判断转向 边沿检测 → 位置计数 正交解码 → 方向+位置 每圈一个脉冲 → 机械零位 上电寻零 → 校准起点 周期校准 → 消除累积误差 1x/2x/4x 倍频 分辨率提升4倍 不提升物理精度 实战要点 Z信号必接 · 上电寻零不可省 · 4x倍频优先 · 硬件解码省CPU

3.6 实战中的几个坑

最后,我把自己这些年踩过的坑总结一下,希望能帮你少走弯路:

  • Z信号抖动:有些编码器的Z信号在高速时会有抖动,导致误触发。我建议在Z信号上加一个简单的软件滤波,比如连续检测到两次才确认。
  • 倍频与中断负载:4x倍频下,如果电机转速高,中断频率可能超过MCU的处理能力。这时候要么用硬件解码,要么降低倍频。
  • 上电位置未知:增量式编码器上电后不知道当前位置,所以第一次启动时,电机可能会「跳」一下。我习惯在FOC初始化时,先让电机进入开环模式,慢慢转到Z信号位置,再切回闭环。
  • 线缆干扰:编码器信号线如果和功率线走在一起,很容易引入噪声。我曾经遇到过A/B信号毛刺导致位置乱跳的问题,后来加了差分传输和屏蔽线才解决。

我的习惯:每次新板子回来,第一件事就是用示波器抓A/B/Z的波形,确认时序正确、无毛刺、Z信号位置符合预期。这一步省不了,否则后面调试FOC会非常痛苦。