4、磁编码器校准:磁编码器原理、磁场偏置校准、角度偏移量计算与补偿
磁编码器这东西,说白了就是利用磁场变化来测角度。我刚开始接触BLDC伺服时,总觉得磁编码器比光编便宜那么多,精度肯定不行。后来踩过几次坑才发现——不是磁编不行,是你没校准好。
这一节,咱们就把磁编码器的校准彻底讲透。从原理到底层补偿,再到实际工程中的坑,我都会一一拆开来讲。
4.1 磁编码器工作原理
磁编码器的核心,是一对正交放置的霍尔元件或磁阻传感器。它们检测转子磁钢产生的磁场,输出两路正余弦信号:
- Sin 通道:磁场强度在 Y 轴的分量
- Cos 通道:磁场强度在 X 轴的分量
理想情况下,这两路信号应该是完美的正弦波,相位差 90°,幅值相等,直流偏置为零。然后通过 atan2(Sin, Cos) 就能解算出 0~360° 的绝对角度。
但现实嘛……你想想看,传感器贴歪了、磁钢充磁不均匀、温度漂移,都会让信号变形。我见过最离谱的一次,客户反馈电机抖动,查了半天发现是磁编的 Cos 通道偏置漂了 200mV,直接导致角度跳变。
核心公式:
θ_raw = atan2(Sin_raw, Cos_raw)
其中:
Sin_raw = A_sin * sin(θ) + Offset_sin
Cos_raw = A_cos * cos(θ) + Offset_cos
校准的目标,就是消除 Offset_sin、Offset_cos,并补偿 A_sin 与 A_cos 的幅值差异。
4.2 磁场偏置校准
偏置校准,就是测出 Sin 和 Cos 通道的直流分量,然后把它减掉。为什么会有偏置?原因很多:
- 传感器芯片本身的失调电压
- 磁钢与传感器的安装间隙不均匀
- 温度变化导致的漂移
我个人习惯的做法是:让电机匀速旋转一圈(或者多圈),采集 Sin 和 Cos 的最大值和最小值,然后取平均作为偏置。
偏置校准步骤:
- 电机以恒定低速(如 10 rpm)旋转至少 1 圈
- 采集 Sin 通道的 ADC 值,记录最大值 Sin_max 和最小值 Sin_min
- 采集 Cos 通道的 ADC 值,记录最大值 Cos_max 和最小值 Cos_min
- 计算偏置:
Offset_sin = (Sin_max + Sin_min) / 2,Offset_cos = (Cos_max + Cos_min) / 2 - 将偏置值写入固件,后续采样时直接减去
我曾经遇到过一个问题:电机只转一圈,采集到的最大值和最小值并不准确,因为机械振动会导致信号抖动。后来我改成转 3 圈取平均,效果好了很多。
注意:偏置校准必须在电机空载、匀速旋转的条件下进行。如果负载变化导致转速波动,采集到的极值会失真。另外,温度变化超过 10°C 时,建议重新校准一次。
4.3 角度偏移量计算与补偿
偏置校准之后,我们得到了相对干净的 Sin 和 Cos 信号。但还有一个问题:磁编码器的零度位置,和电机的电气零度(即反电动势过零点)通常不重合。这个偏差,就是角度偏移量。
为什么要补偿这个偏移量?因为 FOC 控制需要知道转子磁极的精确电气角度。如果磁编的 0° 对应的是机械 0°,而电机的 A 相反电动势过零点在机械 15°,那你就得把这个 15° 补偿进去。
4.3.1 偏移量标定方法
我常用的方法有两种:
| 方法 | 原理 | 精度 | 适用场景 |
|---|---|---|---|
| 直流注入法 | 给 A 相通直流电,转子锁定到电气零度,读取磁编角度 | ±0.5° | 产线批量标定,速度快 |
| 反电动势观测法 | 拖转电机,检测反电动势过零点,与磁编角度对比 | ±0.1° | 实验室高精度标定 |
直流注入法比较简单,我详细说一下步骤:
- 给电机的 A 相(U 相)施加一个直流电流(建议额定电流的 30%~50%)
- B 相和 C 相悬空或短接
- 转子会自行旋转并锁定到 A 相电气零度位置
- 此时读取磁编码器的角度值,记为 θ_offset
- 后续所有角度都减去这个 θ_offset:
θ_elec = θ_mag - θ_offset
代码示例:角度偏移量补偿
// 磁编码器原始角度(经过偏置校准后)
float theta_mag = atan2(sin_compensated, cos_compensated);
// 角度偏移量(通过直流注入法标定得到)
#define ANGLE_OFFSET 15.2f // 单位:度
// 补偿后的电气角度
float theta_elec = theta_mag - ANGLE_OFFSET;
// 确保角度在 0~360° 范围内
if (theta_elec < 0.0f) theta_elec += 360.0f;
if (theta_elec >= 360.0f) theta_elec -= 360.0f;
4.3.2 偏移量校准的坑
嗯,这里要注意。直流注入法虽然快,但有个前提:你给的直流电流必须足够大,确保转子能克服静摩擦力矩。如果电流太小,转子可能没锁死在电气零度,而是停在某个随机位置。我遇到过产线上标定出来的偏移量每次都不一样,查了半天发现是电流源输出不稳定。
另外,如果你用的是多极对电机(比如 4 对极),磁编的机械角度和电气角度之间还有一个极对数倍的关系:
θ_elec = (θ_mag - θ_offset) * PolePairs
这个公式很容易写错。我记得有一次帮客户调试,他写成了 θ_elec = θ_mag * PolePairs - θ_offset,结果电机在高速时直接飞车。所以一定要先减偏移量,再乘极对数。
4.4 校准流程总结
把上面讲的串起来,完整的磁编码器校准流程是这样的:
- 硬件检查:确认磁钢与传感器的安装间隙在规格范围内(通常 0.5~2mm)
- 偏置校准:匀速旋转,采集 Sin/Cos 极值,计算并写入偏置
- 幅值校准(可选):如果 Sin 和 Cos 的幅值差异超过 5%,需要做归一化处理
- 角度偏移量标定:直流注入法或反电动势法,获取 θ_offset
- 验证:手动旋转转子,观察角度是否连续、无跳变;用示波器看 Sin/Cos 李萨如图形是否为正圆
验证小技巧:把 Sin 和 Cos 分别接到示波器的 X 和 Y 通道,调成 X-Y 模式。如果校准到位,你会看到一个完美的圆形。如果看到椭圆,说明幅值没补偿;如果圆心不在原点,说明偏置没消干净。
磁编码器校准这件事,说难不难,说简单也不简单。只要你把偏置和偏移量这两个东西搞清楚了,剩下的就是细心和耐心。我做了这么多年伺服驱动,最大的体会就是:校准做得好,后面控制就顺;校准偷懒,后面全是坑。