4. 换相逻辑基础:六步换相法、120°与180°导通、霍尔传感器换相
换相,说白了就是告诉电机「该轮到哪一组线圈通电了」。
我刚开始接触BLDC时,总觉得换相很神秘。后来拆了几个电机驱动板,对着霍尔信号一个个测,才明白——其实就是个有规律的开关动作。今天咱们就把这个规律彻底讲透。
4.1 六步换相法:最经典的换相节奏
六步换相,也叫梯形控制。名字听着复杂,其实就六个状态循环跑。
BLDC电机有三相绕组:U、V、W。每一时刻,只有两相通电,一相悬空。六步换相就是把这「两相通电」的组合,按顺序切换六次,完成一个电周期。
核心规律:
- 任何时候只有两相导通
- 导通相中,一相流入电流(正),一相流出电流(负)
- 第三相不参与通电(悬空)
- 每60°电角度切换一次状态
我习惯把六步换相的状态画成一张表,调试时对照着看,非常直观。
| 步序 | 电角度范围 | U相 | V相 | W相 |
|---|---|---|---|---|
| 1 | 0° ~ 60° | + | - | 悬空 |
| 2 | 60° ~ 120° | + | 悬空 | - |
| 3 | 120° ~ 180° | 悬空 | + | - |
| 4 | 180° ~ 240° | - | + | 悬空 |
| 5 | 240° ~ 300° | - | 悬空 | + |
| 6 | 300° ~ 360° | 悬空 | - | + |
你看,每个状态持续60°电角度。六个状态走完,转子刚好转了一圈(电角度)。
我的小技巧: 在Simulink里建一个六步状态机,用Stateflow或者MATLAB Function Block实现。我习惯用查表法——把六个状态存成一个数组,根据霍尔信号索引切换。比if-else嵌套清爽多了。
4.2 120°导通 vs 180°导通
这两个概念,很多初学者容易搞混。我简单说一下区别。
120°导通: 每相MOS管导通120°电角度,然后关断60°。这就是六步换相的标准模式。每相电流波形是方波,导通区间正好120°。
180°导通: 每相MOS管导通180°电角度。这时候三相同时通电,不再是「两相通电一相悬空」。电流波形更接近正弦波,但控制复杂得多。
| 对比项 | 120°导通 | 180°导通 |
|---|---|---|
| 同时导通相数 | 2相 | 3相 |
| 电流波形 | 方波 | 近似正弦波 |
| 转矩脉动 | 较大 | 较小 |
| 控制复杂度 | 低 | 高 |
| 适用场景 | 低成本、低速应用 | 高性能、高速应用 |
注意: 180°导通不能直接用六步换相的逻辑。它需要SVPWM(空间矢量脉宽调制)或者正弦波调制。我见过有人把六步换相的表直接套到180°导通上,结果电机抖得像筛子——千万别这么干。
我个人习惯,做风机、水泵这类对转矩脉动不敏感的项目,用120°导通就够了。但如果是做伺服或者机器人关节,我会选180°导通+SVPWM。
4.3 霍尔传感器换相原理
霍尔传感器,就是电机的「位置眼睛」。三个霍尔元件间隔120°(或60°)安装在定子上,检测转子磁极的位置。
每个霍尔输出高电平或低电平。三个霍尔组合起来,就是3位二进制数,一共8种状态。其中6种是有效状态,对应转子的6个位置区间。剩下2种(000和111)是非法状态——正常情况下不会出现。
霍尔状态和换相步序的对应关系,是换相逻辑的核心。
| 霍尔状态 (H3 H2 H1) | 对应电角度区间 | 应执行的换相步序 |
|---|---|---|
| 001 | 0° ~ 60° | 步1 (U+, V-) |
| 101 | 60° ~ 120° | 步2 (U+, W-) |
| 100 | 120° ~ 180° | 步3 (V+, W-) |
| 110 | 180° ~ 240° | 步4 (V+, U-) |
| 010 | 240° ~ 300° | 步5 (W+, U-) |
| 011 | 300° ~ 360° | 步6 (W+, V-) |
嗯,这里要注意:霍尔状态和换相步序的对应关系,取决于霍尔元件的安装位置和电机绕线方式。不同电机可能不一样。我建议你拿到电机后,先用手转动转子,用示波器抓一下霍尔波形,再对照这个表确认。
避坑指南: 我曾经遇到过一批电机,霍尔信号在换相边界有毛刺。直接读霍尔状态做换相,结果在边界处来回跳,电机嗡嗡响。后来加了20μs的消抖滤波,问题就解决了。在Simulink建模时,记得加一个「霍尔消抖」模块。
4.4 换相逻辑的Simulink实现思路
在Simulink里搭换相逻辑,我一般分三步走:
- 霍尔信号采集与解码: 三个霍尔信号进来,组合成3位二进制数,查表得到当前电角度区间。
- 换相状态机: 根据电角度区间,输出对应的MOS管开关信号(6个PWM控制信号)。
- 死区时间插入: 上下桥臂切换时,插入死区时间,防止直通短路。
下面是一个简单的Simulink换相逻辑伪代码,用MATLAB Function Block实现:
function [U_H, U_L, V_H, V_L, W_H, W_L] = commutation_logic(H1, H2, H3)
% 霍尔状态解码
hall_code = H3*4 + H2*2 + H1;
% 换相表:根据霍尔状态输出MOS管信号
% 1表示上桥导通,-1表示下桥导通,0表示悬空
switch hall_code
case 1 % 001
phase_state = [1, -1, 0]; % U+, V-, W悬空
case 5 % 101
phase_state = [1, 0, -1]; % U+, W-
case 4 % 100
phase_state = [0, 1, -1]; % V+, W-
case 6 % 110
phase_state = [-1, 1, 0]; % V+, U-
case 2 % 010
phase_state = [-1, 0, 1]; % W+, U-
case 3 % 011
phase_state = [0, -1, 1]; % W+, V-
otherwise
phase_state = [0, 0, 0]; % 非法状态,全部关断
end
% 输出6个MOS管信号
U_H = (phase_state(1) == 1);
U_L = (phase_state(1) == -1);
V_H = (phase_state(2) == 1);
V_L = (phase_state(2) == -1);
W_H = (phase_state(3) == 1);
W_L = (phase_state(3) == -1);
end
这段代码看着简单,但实际项目里我会加几个保护:
- 非法状态检测:如果霍尔状态是000或111,立刻关断所有MOS管
- 换相超时保护:如果长时间没有霍尔跳变,判断为堵转,执行保护
- 软换相:在换相瞬间,不要立刻切换电流方向,而是先关断再开通,减少电流冲击
4.5 换相逻辑知识体系总览
下面这张图,把本章的核心知识点串起来了。你可以把它当作换相逻辑的「地图」。
从图上你能看到,120°导通和180°导通是两条不同的技术路线。咱们这门课主要走左边这条路——霍尔传感器+六步换相。这是入门最快、最稳的路径。
再次提醒: 霍尔换相表不是通用的。不同电机、不同霍尔安装位置,换相表可能不一样。我建议你在Simulink里做一个「换相表配置」的接口,方便调试时在线修改。别把换相表写死在代码里——我吃过这个亏,换了一个电机型号,改代码改到怀疑人生。