4、编码器与换相对齐:零位校准、电角度对齐、换相表生成与验证
好,咱们进入第四章。这一章是编码器换相里最核心、也最容易出问题的一环。
说白了,就是让编码器告诉控制器:「电机转子现在在哪个位置,该给哪一相通电了。」
如果这一步没对齐,电机要么抖得像筛子,要么直接堵转,甚至烧驱动。我在项目里见过太多次了。
4.1 零位校准:找到那个「绝对零点」
零位校准,就是找到编码器的物理零点。这个零点对应电机转子的一个固定位置。
我习惯把零位校准分成两步走:
- 硬件找零:手动转动电机,找到编码器输出的 Z 信号(索引脉冲)位置。
- 软件锁零:在控制器里把这个 Z 信号位置记录为角度 0。
嗯,这里要注意:增量式编码器每次上电后的位置都是随机的,必须通过 Z 信号来「归零」。绝对式编码器虽然上电就有位置,但它的零点也需要和电机转子对齐。
4.2 电角度对齐:编码器角度与反电动势的「握手」
电角度对齐,是编码器换相里最微妙的一步。为什么?因为编码器测量的是机械角度,而电机换相需要的是电角度。
对于一对极的电机,机械角度等于电角度。但对于多对极电机,电角度 = 机械角度 × 极对数。而且,电角度的零点必须与反电动势的过零点对齐。
我常用的对齐方法有两种:
| 方法 | 原理 | 适用场景 | 精度 |
|---|---|---|---|
| 直流注入法 | 给某相通直流电,让转子锁死在一个已知位置 | 调试阶段、无负载 | 中等 |
| 反电动势观测法 | 拖动电机旋转,观测反电动势过零点 | 量产阶段、带负载 | 高 |
直流注入法最简单。给 A 相通正电,B、C 相通负电,转子会锁死在电角度 0° 的位置。这时候把编码器角度清零,就完成了对齐。
但我在项目里发现一个问题:如果电机有齿槽转矩,锁死位置会有偏差。所以后来我改用反电动势法,精度更高。
关键点:电角度对齐的误差不能超过 ±5°(电角度)。超过这个范围,电机的转矩输出会明显下降,噪音也会变大。
4.3 换相表生成:从角度到开关序列的映射
换相表,本质上是一个查找表。输入是电角度,输出是六个开关管的通断状态。
对于方波驱动(六步换相),换相表很简单:每 60° 电角度切换一次。但对于 FOC(磁场定向控制),换相表其实是连续的,通过 SVPWM 实时计算。
我以六步换相为例,给你看看典型的换相表:
| 电角度范围 | 导通开关管 | 相电压状态 |
|---|---|---|
| 0° ~ 60° | Q1, Q4 | A+ B- |
| 60° ~ 120° | Q1, Q6 | A+ C- |
| 120° ~ 180° | Q3, Q6 | B+ C- |
| 180° ~ 240° | Q3, Q2 | B+ A- |
| 240° ~ 300° | Q5, Q2 | C+ A- |
| 300° ~ 360° | Q5, Q4 | C+ B- |
生成换相表时,我习惯用枚举类型,而不是直接写死数值。这样代码可读性更好,也方便后期修改。
// 换相表枚举定义
typedef enum {
STEP_0_60 = 0b001001, // Q1, Q4
STEP_60_120 = 0b001100, // Q1, Q6
STEP_120_180= 0b010100, // Q3, Q6
STEP_180_240= 0b010010, // Q3, Q2
STEP_240_300= 0b100010, // Q5, Q2
STEP_300_360= 0b100001 // Q5, Q4
} CommutationStep_t;
// 根据电角度查表
CommutationStep_t GetCommutationStep(float elecAngle) {
uint8_t index = (uint8_t)(elecAngle / 60.0f);
const CommutationStep_t table[6] = {
STEP_0_60, STEP_60_120, STEP_120_180,
STEP_180_240, STEP_240_300, STEP_300_360
};
return table[index % 6];
}
4.4 换相表验证:不转起来,你怎么知道对不对?
换相表生成后,必须验证。我一般做三步验证:
- 静态验证:手动转动电机,用示波器看相电压波形。正常应该是六个清晰的台阶。
- 动态验证:给一个开环速度指令,看电机是否平稳旋转。如果抖动或异响,说明换相时序有问题。
- 负载验证:带负载运行,看电流波形是否正弦(对于 FOC)或梯形(对于方波)。
这里我分享一个实用技巧:在验证阶段,把换相表输出和编码器角度同时打印出来。用串口或者 DAC 输出,可以直观看到角度和换相状态的对应关系。
4.5 核心流程:零位校准 → 电角度对齐 → 换相表生成 → 验证
为了让你更直观地理解整个流程,我画了一张图。这张图把四个步骤串起来,每一步的输入输出都标清楚了。
这张图里,我特意画了一条反馈回路。为什么?因为验证失败是常态。我做过一个项目,前三次验证都失败了,最后发现是编码器安装有偏心,导致角度读数不准。所以,验证不是终点,而是迭代的起点。
4.6 实战避坑指南
最后,我总结几个实战中容易踩的坑:
- 编码器安装偏心:会导致角度周期性误差。解决办法是提高安装精度,或者在软件里做偏心补偿。
- Z 信号抖动:如果 Z 信号有毛刺,零位会漂移。我习惯在捕获 Z 信号后加一个 10μs 的软件去抖。
- 极对数设置错误:电角度 = 机械角度 × 极对数。如果极对数设错了,换相时序会完全乱掉。
- 换相表与驱动板不匹配:不同驱动板的开关管排列可能不同。换相表必须与硬件一一对应。
好了,这一章的内容就到这里。零位校准、电角度对齐、换相表生成与验证,这四个步骤环环相扣。只要每一步都做到位,编码器换相这块就稳了。