3、无刷直流电机(BLDC):结构、反电动势与换相逻辑
好,咱们今天聊聊 BLDC。说实话,我入行那会儿,有刷电机还是主流,第一次拆开 BLDC 看到三根线,心里直犯嘀咕——这玩意儿怎么转?后来才明白,BLDC 的精髓就四个字:电子换相。
3.1 BLDC 的基本结构
BLDC 的物理结构其实不复杂。转子是永磁体,定子是线圈绕组。你想想看,没有电刷,那电流怎么进转子?答案是不需要进转子——电流只在定子线圈里跑,转子跟着磁场转。
我习惯把 BLDC 的结构拆成三块来看:
- 定子绕组:通常是三相星形连接,U、V、W 三根线
- 永磁转子:表贴式或内嵌式,极对数从 2 到 8 不等
- 位置传感器:最常见的是三个霍尔传感器,间隔 120° 或 60° 安装
这里有个容易踩的坑——极对数。我刚开始做项目时,把 4 对极的电机当 2 对极算换相频率,结果电机嗡嗡响就是不转。后来才记住:电气角度 = 机械角度 × 极对数。
关键公式:电气频率 fe = (极对数 P × 机械转速 n) / 60
这个公式在六步换相里天天用,建议刻在脑子里。
3.2 反电动势与换相逻辑
BLDC 为什么能转?说白了就是定子磁场追着转子跑。那怎么知道转子在哪儿?两个办法:有传感器(霍尔)和无传感器(反电动势检测)。
反电动势(Back EMF)是电机旋转时,转子磁场在定子绕组上感应出的电压。它的波形长什么样?理想情况下是梯形波——这就是 BLDC 和 PMSM 最直观的区别。
我遇到过不少新手问:「为什么反电动势是梯形?」其实原因很简单:BLDC 的绕组是集中绕组,气隙磁场是方波分布,感应出来的自然就是梯形波。嗯,这里要注意,梯形波的平顶宽度是 120° 电气角,这个数字后面会反复出现。
个人经验:调试无传感器 BLDC 时,我习惯先用示波器抓一下反电动势波形。如果梯形波平顶不够平,或者过零点有毛刺,多半是电机工艺问题或者 PWM 频率没设对。
3.3 六步换相法
六步换相,也叫 120° 导通模式。名字听着玄乎,其实逻辑很直白:
- 每一时刻,只有两相导通,一相悬空
- 每 60° 电气角换一次相
- 一个电气周期换 6 次,刚好 360°
我画了一张图,帮你把六步换相的时序理清楚:
你看,六步换相的本质就是:查表。根据当前转子位置,从换相表里取出对应的开关状态,然后更新 PWM 输出。就这么简单。
避坑指南:我曾经在换相时刻插入了死区时间,结果电机在低速时抖动得厉害。后来发现是死区补偿没做。记住:死区时间必须根据 PWM 频率和 MOSFET 的开关特性来算,不能随便填个 1μs 了事。
3.4 霍尔传感器应用
霍尔传感器是 BLDC 最常用的位置反馈手段。三个霍尔元件间隔 120° 安装,输出三路高低电平,组合起来就是 6 种状态——正好对应六步换相的 6 个扇区。
霍尔信号和换相逻辑的对应关系,我习惯用一张表来记:
| 霍尔状态 (H3 H2 H1) | 对应扇区 | 导通相 | 悬空相 |
|---|---|---|---|
| 101 | 0° ~ 60° | U+ V- | W |
| 100 | 60° ~ 120° | U+ W- | V |
| 110 | 120° ~ 180° | V+ W- | U |
| 010 | 180° ~ 240° | V+ U- | W |
| 011 | 240° ~ 300° | W+ U- | V |
| 001 | 300° ~ 360° | W+ V- | U |
实际写代码时,我一般这么处理霍尔信号:
// 霍尔状态到换相表的映射
// hall_state 是 3 位霍尔值,范围 0~7
const uint8_t hall_to_phase[8] = {
0xFF, // 000: 无效状态
0x36, // 001: W+V- (Step 6)
0x2C, // 010: V+U- (Step 4)
0x34, // 011: W+U- (Step 5)
0x1A, // 100: U+W- (Step 2)
0x18, // 101: U+V- (Step 1)
0x2A, // 110: V+W- (Step 3)
0xFF // 111: 无效状态
};
// 换相函数
void bldc_commutate(uint8_t hall_state) {
uint8_t phase = hall_to_phase[hall_state];
if (phase == 0xFF) return; // 无效状态,跳过
// 解析 phase 的高 4 位和低 4 位
uint8_t high_side = (phase >> 4) & 0x0F;
uint8_t low_side = phase & 0x0F;
// 更新 PWM 输出
set_pwm_output(high_side, low_side);
}
这段代码我用了好多年,核心思路就是查表。你想想看,霍尔信号每 60° 变化一次,每次变化触发一次中断,在中断里查表更新 PWM——这就是最基础的 BLDC 方波驱动。
个人习惯:霍尔信号建议用外部中断触发,不要轮询。轮询会有延迟,高速时换相会滞后,轻则效率下降,重则失步。我一般把三个霍尔信号接到 MCU 的 GPIO 上,使能边沿中断,三个信号一起触发。
3.5 霍尔安装偏差的处理
这里有个现实问题:霍尔传感器不可能装得绝对精确。机械安装误差、磁钢位置偏差,都会导致霍尔信号和真实反电动势过零点有偏移。
我踩过这个坑。有一次做风机项目,霍尔安装偏差了 5° 电气角,结果电机在额定转速下效率掉了 8%,温升直接超标。后来加了霍尔校准流程才解决。
校准方法其实不复杂:
- 用外力拖动电机到恒定转速
- 同时采集霍尔信号和反电动势波形
- 测量霍尔边沿和反电动势过零点的时间差
- 把这个时间差换算成角度偏移,存入 EEPROM
- 运行时在换相表里补偿这个偏移
说白了,就是软件上做个角度补偿。硬件装歪了,软件来兜底——这也是嵌入式工程师的日常。
一句话总结:BLDC 的六步换相,核心就是「霍尔查表 + 定时换相」。霍尔告诉你转子在哪个扇区,你根据扇区决定哪两相通电。就这么简单,但细节里全是坑——死区、补偿、校准,一个都不能省。