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° 导通模式。名字听着玄乎,其实逻辑很直白:

  1. 每一时刻,只有两相导通,一相悬空
  2. 每 60° 电气角换一次相
  3. 一个电气周期换 6 次,刚好 360°

我画了一张图,帮你把六步换相的时序理清楚:

BLDC 六步换相时序与导通状态图 BLDC 六步换相时序图(120° 导通模式) Step 1 U+ V- Step 2 U+ W- Step 3 V+ W- Step 4 V+ U- Step 5 W+ U- Step 6 W+ V- 说明 • 每步导通 60° 电气角 • 每步只有两相导通 • 悬空相用于检测反电动势 • 6 步完成一个电气周期 • 虚线箭头表示循环

你看,六步换相的本质就是:查表。根据当前转子位置,从换相表里取出对应的开关状态,然后更新 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%,温升直接超标。后来加了霍尔校准流程才解决。

校准方法其实不复杂:

  1. 用外力拖动电机到恒定转速
  2. 同时采集霍尔信号和反电动势波形
  3. 测量霍尔边沿和反电动势过零点的时间差
  4. 把这个时间差换算成角度偏移,存入 EEPROM
  5. 运行时在换相表里补偿这个偏移

说白了,就是软件上做个角度补偿。硬件装歪了,软件来兜底——这也是嵌入式工程师的日常。

一句话总结:BLDC 的六步换相,核心就是「霍尔查表 + 定时换相」。霍尔告诉你转子在哪个扇区,你根据扇区决定哪两相通电。就这么简单,但细节里全是坑——死区、补偿、校准,一个都不能省。