4、换相基础:直流无刷电机(BLDC)与永磁同步电机(PMSM)的换相逻辑、六步换相法
聊到电机控制,换相是个绕不开的话题。很多新手一上来就被「BLDC 和 PMSM 到底有啥区别」给整懵了。其实说白了,这两种电机在硬件结构上非常像,都是永磁转子加定子绕组。但它们的换相逻辑,嗯,走的是两条不同的路。
我个人习惯把 BLDC 叫做「方波电机」,PMSM 叫做「正弦波电机」。为什么这么叫?因为它们的反电动势波形不一样——BLDC 是梯形波,PMSM 是正弦波。波形不同,换相策略自然就不同。
4.1 六步换相法:BLDC 的经典换相逻辑
六步换相法,也叫「120° 导通法」。我刚开始做 BLDC 驱动时,觉得这名字挺唬人,后来发现其实就是六个开关状态轮流切换,让定子磁场转起来,拖着转子跑。
具体怎么换?看下面这张图就清楚了:
你看,六个步骤走完,正好是一个电周期。每个步骤里,只有两相绕组通电,第三相悬空。这就是「两两导通」模式。
关键点:六步换相法每次换相只改变一相的通断状态。比如从 Step 1(A+B-)到 Step 2(A+C-),B 相关断,C 相导通,A 相保持不变。这样做的好处是换相冲击小,电流过渡平滑。
4.2 BLDC 与 PMSM 的换相逻辑对比
你可能会问:那 PMSM 能不能也用六步换相法?答案是:能用,但效果很差。为什么?因为波形不匹配。
我整理了一个对比表,方便你直观理解:
| 对比项 | BLDC(直流无刷电机) | PMSM(永磁同步电机) |
|---|---|---|
| 反电动势波形 | 梯形波 | 正弦波 |
| 换相方式 | 六步换相(方波驱动) | FOC(矢量控制) |
| 导通模式 | 两两导通,120° 导通角 | 三相同时导通,正弦调制 |
| 转矩脉动 | 较大(约 10%~15%) | 很小(< 5%) |
| 噪声 | 较大,有换相噪声 | 安静,接近直流电机 |
| 控制复杂度 | 低,霍尔传感器即可 | 高,需要电流采样和坐标变换 |
| 适用场景 | 风机、水泵、电动工具 | 伺服、机器人、电动汽车 |
我在做电动工具项目时,用的就是 BLDC 加六步换相。成本低、控制简单,霍尔传感器一装,基本就能转起来。但后来做机器人关节电机时,发现六步换相的转矩脉动太大了,低速运行时能感觉到明显的「咔咔」声。没办法,只能上 FOC。
4.3 六步换相法的换相时刻与霍尔信号
六步换相法的核心问题就一个:什么时候换相?
对于带霍尔传感器的 BLDC,三个霍尔传感器(Ha, Hb, Hc)会输出 6 种状态组合。每种状态对应一个换相步骤。我习惯把霍尔状态和换相步骤的对应关系记成一张表:
| 霍尔状态 (Ha Hb Hc) | 导通相 | 电流方向 |
|---|---|---|
| 101 | A+ B- | A→B |
| 100 | A+ C- | A→C |
| 110 | B+ C- | B→C |
| 010 | B+ A- | B→A |
| 011 | C+ A- | C→A |
| 001 | C+ B- | C→B |
我的经验:霍尔信号和换相步骤的对应关系,不同电机厂家可能不一样。拿到一个新电机,我第一件事就是用手转动转子,用示波器抓霍尔波形,确认好对应关系再写代码。千万别直接套用之前的表,否则电机要么不转,要么抖得厉害。
4.4 六步换相法的代码实现思路
讲完理论,咱们看看代码怎么写。下面是一个简化的六步换相状态机:
// 六步换相状态表
// 每行: {Ha, Hb, Hc, AH, AL, BH, BL, CH, CL}
// AH=1 表示 A 相上管导通,AL=1 表示 A 相下管导通
const uint8_t commutation_table[6][9] = {
{1, 0, 1, 1, 0, 0, 1, 0, 0}, // Step 1: A+B-
{1, 0, 0, 1, 0, 0, 0, 0, 1}, // Step 2: A+C-
{1, 1, 0, 0, 0, 1, 0, 0, 1}, // Step 3: B+C-
{0, 1, 0, 0, 1, 1, 0, 0, 0}, // Step 4: B+A-
{0, 1, 1, 0, 1, 0, 0, 1, 0}, // Step 5: C+A-
{0, 0, 1, 0, 0, 0, 1, 1, 0} // Step 6: C+B-
};
void six_step_commutation(uint8_t hall_state) {
uint8_t step_index;
// 根据霍尔状态查找对应的换相步骤
switch(hall_state) {
case 0b101: step_index = 0; break;
case 0b100: step_index = 1; break;
case 0b110: step_index = 2; break;
case 0b010: step_index = 3; break;
case 0b011: step_index = 4; break;
case 0b001: step_index = 5; break;
default: return; // 无效状态,不换相
}
// 更新 PWM 输出
set_pwm_output(commutation_table[step_index]);
}
注意:换相时一定要加死区时间。我曾经在调试时忘了加死区,结果上下管直通,MOSFET 瞬间冒烟。嗯,那味道至今难忘。死区时间一般设为 1~3 μs,具体看 MOSFET 的关断延迟。
4.5 无霍尔传感器的六步换相
有些场合装不了霍尔传感器,比如压缩机内部高温高压。这时候就得用无霍尔方案——通过检测反电动势过零点来判断换相时机。
具体做法是:在每相悬空期间,检测该相的反电动势电压。当反电动势过零时,延迟 30° 电角度,就是换相点。
我做过一个冰箱压缩机的项目,用的就是无霍尔六步换相。启动时先强制换相(开环),等转速上来后再切换到反电动势检测。这里有个坑:启动电流不能太大,否则反电动势信号会被 PWM 噪声淹没。我当时的解决办法是降低 PWM 频率,同时加一个简单的低通滤波器。
4.6 六步换相法的优缺点总结
说了这么多,最后总结一下六步换相法的优缺点:
- 优点:
- 控制简单,代码量少
- 硬件成本低,霍尔传感器即可
- 中高速效率不错
- 缺点:
- 转矩脉动大,低速不平稳
- 有换相噪声
- 无法做到精确的力矩控制
如果你做的是风机、水泵、电动工具这类对转矩平稳性要求不高的应用,六步换相法完全够用。但如果是伺服、机器人、电动汽车,那还是老老实实上 FOC 吧。
嗯,这一章的内容就到这儿。换相逻辑是电机控制的地基,搞懂了它,后面学 FOC 会轻松很多。