3. 换相逻辑基础:BLDC与PMSM的换相原理
聊到电机控制,换相是个绕不开的话题。说白了,换相就是让电机绕组按照正确的顺序通电,产生旋转磁场,拉着转子转起来。BLDC和PMSM虽然结构上很像,但换相逻辑上还是有些门道的。我最早做项目时,就因为在换相时序上搞混了,电机嗡嗡响就是不转,后来才发现是霍尔信号接反了。
3.1 六步换相与FOC的区别
这两种方法,可以说是电机控制里的两个流派。一个简单粗暴,一个精细复杂。
| 对比项 | 六步换相(方波控制) | FOC(矢量控制) |
|---|---|---|
| 控制原理 | 每60°电角度切换一次导通相 | 连续控制电流矢量,实现正弦波 |
| 电流波形 | 方波/梯形波 | 正弦波 |
| 转矩脉动 | 较大,低速时明显 | 小,运行平滑 |
| 噪声 | 有换相噪声 | 安静 |
| 效率 | 中低转速尚可 | 全转速范围较高 |
| 实现复杂度 | 低,适合入门 | 高,需要数学运算 |
| 位置传感器需求 | 霍尔传感器即可 | 需要高精度编码器 |
核心区别一句话:六步换相是“开关式”控制,FOC是“连续式”控制。六步换相只关心转子在哪个扇区,FOC关心转子在扇区里的精确位置。
我个人习惯,在低成本、对噪声不敏感的应用(比如风机、水泵)里用六步换相。但在伺服、机器人关节这些场合,必须上FOC。你想想看,一个六步换相的电机,低速时那个顿挫感,用在机械臂上肯定不行。
3.2 六步换相详解
六步换相,也叫梯形波控制。它的逻辑其实挺直观的:
- 检测转子位置:通过霍尔传感器或反电动势检测,知道转子当前在哪个扇区。
- 确定导通相:根据转子位置,决定哪两相通电,哪一相悬空。
- 切换:每60°电角度切换一次,一个电周期完成6次切换。
举个例子,三相BLDC电机,霍尔信号是120°安装的。那么霍尔信号组合(HA, HB, HC)与导通相的关系是这样的:
| 霍尔信号 (HA, HB, HC) | 转子扇区 | 导通相(正极→负极) |
|---|---|---|
| 101 | 0°~60° | A+ → B- |
| 100 | 60°~120° | A+ → C- |
| 110 | 120°~180° | B+ → C- |
| 010 | 180°~240° | B+ → A- |
| 011 | 240°~300° | C+ → A- |
| 001 | 300°~360° | C+ → B- |
注意:这个表格是基于霍尔信号上升沿对齐的。实际项目中,霍尔安装角度可能有偏差,需要做零位校准。我曾经因为霍尔板装偏了5°,电机高速时直接过流保护,查了两天才找到原因。
六步换相的代码实现,其实就是一个查表过程:
// 六步换相查表示例
const uint8_t commutation_table[6][3] = {
{1, 0, 0}, // A+ B- C悬空
{1, 0, 1}, // A+ C- B悬空
{0, 0, 1}, // B+ C- A悬空
{0, 1, 1}, // B+ A- C悬空
{0, 1, 0}, // C+ A- B悬空
{1, 1, 0} // C+ B- A悬空
};
void six_step_commutation(uint8_t hall_state) {
// hall_state 是霍尔信号组合值 (0~7)
// 注意:hall_state 不会出现 000 和 111
uint8_t index = hall_state_to_index(hall_state);
set_mosfets(commutation_table[index]);
}
3.3 FOC换相原理
FOC就不一样了。它不搞“开关式”切换,而是连续地控制电流矢量。核心思想是:
- Clark变换:把三相电流(Ia, Ib, Ic)变换到两相静止坐标系(Iα, Iβ)。
- Park变换:把Iα, Iβ变换到旋转坐标系(Id, Iq)。
- PI控制:控制Id=0,Iq为目标转矩电流。
- 逆Park变换:把Vd, Vq变回Vα, Vβ。
- SVPWM:根据Vα, Vβ生成PWM占空比。
这里的关键是,Park变换需要知道转子的精确电角度θ。这个θ就是编码器或者观测器提供的。没有精确的θ,FOC就玩不转。
我的经验:FOC的初始角度对齐非常重要。如果编码器零位和电机反电动势零位对不上,电机启动时会抖动甚至反转。我一般会在电机出厂前做一次零位标定,把编码器零位偏移量存到EEPROM里。
3.4 霍尔传感器与编码器的配合
在实际项目中,霍尔传感器和编码器经常配合使用。霍尔传感器提供绝对位置(虽然精度只有60°),编码器提供高精度相对位置。两者结合,可以实现:
- 启动时:用霍尔传感器确定转子初始位置,避免启动反转。
- 运行时:用编码器做高精度位置反馈,实现FOC。
- 故障时:如果编码器信号丢失,可以降级到霍尔传感器做六步换相,保证系统不失控。
我做过一个项目,编码器线缆被机械臂反复弯折后断了一根线。幸好有霍尔传感器做备份,电机虽然噪声大了点,但至少还能继续工作,没有造成安全事故。
3.5 换相逻辑知识体系
下面这张图,把本章的核心逻辑串起来了:
3.6 霍尔与编码器的配合策略
在实际工程中,霍尔和编码器的配合,我总结了一套策略:
- 上电初始化:读取霍尔信号,确定转子所在的60°扇区。
- 编码器归零:以当前霍尔扇区的中间位置作为编码器的初始角度。
- 运行中校正:每次霍尔信号跳变时,用霍尔位置校正编码器的累积误差。
- 故障降级:编码器故障时,切换到纯霍尔六步换相模式。
避坑指南:霍尔信号和编码器信号的电气接口电平可能不匹配。我曾经遇到过霍尔输出是5V,编码器是3.3V,直接连在一起把编码器烧了。一定要加电平转换或者用开漏输出加外部上拉。