你问的这几个东西,其实都围绕一个核心问题:
无刷电机控制器怎么知道转子磁铁现在转到哪里了?
FOC、六步换相、无感启动、反电动势、过零点,本质都和"估算转子位置/速度"有关。
1. 先说反电动势是什么
反电动势英文叫 Back EMF ,也叫 反向电动势。
无刷电机里面有两样东西:
text
定子:线圈
转子:永磁体
当电机转起来以后,转子永磁体的磁场会扫过定子线圈。
线圈处在变化的磁场中,就会产生感应电压。
这个电压就是:
text
反电动势
也可以这样理解:
text
电源给电机线圈加电压 → 电机转起来
电机转起来以后 → 自己又像发电机一样产生一个电压
这个电压方向通常会反抗外部驱动电压
所以叫反电动势
所以电机一边是电动机,一边又像发电机。
2. 为什么叫"反"电动势?
因为它的方向通常和你施加的驱动电压相反。
电机绕组可以简化成这样:
text
电源电压 = 电阻压降 + 电感压降 + 反电动势
U = I × R + L × dI/dt + E
其中:
| 符号 | 含义 |
|---|---|
| U | 控制器加到电机绕组上的电压 |
| I × R | 绕组电阻消耗的电压 |
| L × dI/dt | 绕组电感引起的电压 |
| E | 反电动势 |
电机转速越高,反电动势越大。
大概关系是:
text
反电动势 E ∝ 转速 ω
也就是:
text
转得越快,发出来的"反向电压"越大
3. 反电动势有什么作用?
反电动势有几个非常重要的作用。
作用 1:限制电机电流
电机刚启动的时候,转速几乎为 0。
这时反电动势很小:
text
E ≈ 0
所以电流主要由绕组电阻和电感限制。
如果你直接给很大电压,电流会非常大。
text
启动瞬间:
转速低
反电动势小
电流大
电机转起来以后:
text
转速升高
反电动势升高
实际加在线圈上的有效电压变小
电流下降
所以反电动势天然会限制电流。
这就是为什么电机堵转危险:
text
堵转
转速 = 0
反电动势 ≈ 0
电流暴涨
MOS 发热
绕组发热
可能烧电机/烧驱动
作用 2:判断电机转速
因为:
text
反电动势 ∝ 转速
所以测到反电动势大小,就可以估算电机速度。
转得慢,反电动势小。
转得快,反电动势大。
作用 3:判断转子位置
这是无感无刷电机控制的重点。
因为反电动势的波形和转子磁极位置有固定关系。
你可以理解成:
text
转子转到不同角度
线圈里感应出来的电压也不同
所以控制器可以通过反电动势波形,反推出:
text
转子大概转到哪个位置了
这就是无感 BLDC 的基础。
4. 什么是过零点?
过零点,就是一个信号从正变负,或者从负变正,穿过 0 的那个点。
比如一个正弦波:
text
电压
^
| /\
| / \
0|----/----\----/----\----> 时间
| / \ /
| / \/
|
它穿过 0V 的地方,就叫:
text
过零点
在无刷电机里面,通常说的"过零点",一般是指:
某一相的反电动势穿过中性点电压的时刻。
注意,不一定是穿过真正的 0V,而是穿过:
text
母线电压的一半
或者虚拟中性点电压
比如三相无刷电机:
text
A 相反电动势
B 相反电动势
C 相反电动势
每一相反电动势都会周期性变化。
当某一相反电动势从高于中性点变成低于中性点,或者从低于中性点变成高于中性点,这个时刻就是这一相的反电动势过零点。
5. 过零点有什么用?
它最大的用途是:
给无感六步换相提供换相时机。
传统无感 BLDC 六步控制里面,一次只驱动两相,第三相悬空。
比如:
text
A 相上桥导通
B 相下桥导通
C 相悬空
这时 C 相没有被驱动,它像一个"探头"。
控制器就可以测 C 相的反电动势。
当 C 相反电动势过零以后,说明转子已经转到某个关键位置。
但是注意:
过零点不是马上换相。
通常是:
text
检测到反电动势过零点
↓
再延迟 30 电角度
↓
进行下一次换相
为什么延迟 30 电角度?
因为在六步换相 BLDC 中:
text
反电动势过零点距离最佳换相点相差 30 电角度
所以过零点的作用是:
text
告诉控制器:转子已经到达某个参考位置了
控制器再延迟一段角度
然后换相
6. 六步无感 BLDC 中的流程
假设电机已经转起来了:
text
1. 控制器驱动两相
2. 留一相悬空
3. 采样悬空相反电动势
4. 判断它什么时候穿过虚拟中性点
5. 检测到过零点
6. 根据当前速度延迟 30 电角度
7. 切换到下一组 MOS 导通状态
8. 重复这个过程
可以画成这样:
text
当前换相状态:
A+ B- C悬空
↓
采样 C 相反电动势
↓
C 相反电动势过零
↓
延迟 30 电角度
↓
换相到下一状态
↓
A+ C- B悬空
↓
采样 B 相反电动势
所以在六步无感控制里:
text
过零点 = 换相参考点
反电动势 = 无位置传感器的转子位置信息来源
7. 那 FOC 里还用过零点吗?
严格说,标准 FOC 不主要靠过零点换相。
FOC 要的是连续的转子电角度:
text
θe = 转子电角度
FOC 每个 PWM 周期都要做:
text
采样三相电流
↓
Clarke 变换
↓
Park 变换
↓
得到 Id / Iq
↓
PI 控制
↓
反 Park 变换
↓
SVPWM 输出
这里面 Park 变换必须知道转子角度 θe。
所以 FOC 需要的不是粗略的"六个换相点",而是连续角度:
text
0°、1°、2°、3°......359°
而六步换相只需要知道大概每 60 电角度换一次相。
所以:
| 控制方式 | 需要什么位置信息 |
|---|---|
| 六步换相 | 过零点 + 延迟 30° |
| FOC | 连续电角度 θe |
| 有感 FOC | 编码器/霍尔/磁编码器提供角度 |
| 无感 FOC | 通过反电动势/观测器/滑模/PLL 估算角度 |
8. FOC 里反电动势怎么用?
FOC 里面,反电动势主要用于无感位置估算。
无感 FOC 没有霍尔、没有编码器,那它怎么知道转子角度?
答案是通过数学模型估算。
电机模型可以简化成:
text
电机电压 = 电阻压降 + 电感压降 + 反电动势
也就是:
text
U = R × I + L × dI/dt + E
控制器知道:
text
U:自己输出的电压
I:ADC 采样到的相电流
R:电机绕组电阻,参数已知
L:电机电感,参数已知或估算
于是可以反推:
text
E = U - R × I - L × dI/dt
这个 E 就是反电动势。
反电动势的方向和转子磁链方向有固定关系,所以可以用它估算转子角度。
9. 无感 FOC 的大概流程
无感 FOC 不是直接找"过零点",而是这样:
text
采样相电流 Ia、Ib、Ic
↓
知道自己输出的三相电压 Ua、Ub、Uc
↓
根据电机模型估算反电动势 Ea、Eb、Ec
↓
根据 Ea/Eb/Ec 估算转子磁链方向
↓
得到转子电角度 θe
↓
把 θe 送给 Park/反 Park/SVPWM
更形象一点:
text
反电动势波形
↓
反映转子磁铁扫过线圈的状态
↓
控制器通过算法追踪这个波形
↓
得到转子位置和速度
↓
FOC 根据这个角度输出正确的电压矢量
10. 为什么低速时无感 FOC 很难?
因为反电动势和速度成正比:
text
E = Ke × ω
其中:
| 符号 | 含义 |
|---|---|
| E | 反电动势 |
| Ke | 反电动势常数 |
| ω | 转速 |
低速时:
text
ω 很小
E 很小
反电动势信号小到接近 ADC 噪声、电流采样误差、PWM 干扰。
于是控制器很难从反电动势中估算角度。
所以无感 FOC 通常有启动流程:
text
1. 开环强拖启动
2. 给一个旋转电压矢量
3. 把电机拖到一定转速
4. 反电动势足够明显
5. 切换到闭环无感 FOC
这就是为什么很多无感电机低速、零速、重载启动比较难。
11. 过零点在 FOC 里有没有用?
有,但不是主角。
在一些低成本无感方案里,可能会这样用:
text
先用六步过零检测把电机带起来
↓
速度上来以后
↓
切到无感 FOC
或者:
text
用反电动势过零点估算一个粗略速度/相位
↓
再交给 PLL 或观测器平滑成连续角度
但是纯 FOC 更常见的是:
| 方法 | 说明 |
|---|---|
| 霍尔 FOC | 霍尔给粗角度,再插值 |
| 编码器 FOC | 编码器直接给高精度角度 |
| 磁编码器 FOC | AS5600/MT6701/TLE5012 等给角度 |
| 无感 FOC | 反电动势观测器、SMO、PLL、MRAS 等估角 |
| 高频注入 | 用于低速/零速估算转子位置,复杂一些 |
所以可以这么说:
text
六步无感 BLDC:非常依赖反电动势过零点
无感 FOC:依赖反电动势估算连续角度,但不一定直接用"过零点"
有感 FOC:可以完全不用反电动势过零点
12. 反电动势波形和电机类型有关
无刷电机常见两种反电动势波形:
1)梯形反电动势
适合六步换相。
text
反电动势像梯形
电流也接近方波
控制方式:六步 BLDC
优点:
text
控制简单
成本低
容易做无感过零检测
缺点:
text
转矩脉动大
噪声大
低速不够顺
2)正弦反电动势
适合 FOC。
text
反电动势接近正弦
电流也控制成正弦
控制方式:FOC
优点:
text
转矩平滑
噪声低
效率好
控制性能强
缺点:
text
算法复杂
需要电流采样
需要角度估算或传感器
13. 过零点检测怎么硬件实现?
六步无感里面常见做法是测悬空相电压。
因为无刷三相电机通常没有引出中性点,所以要造一个虚拟中性点。
例如:
text
A 相
B 相
C 相
通过三个电阻分压,得到虚拟中性点 VN
然后比较:
text
悬空相电压 Vphase 和 VN
当:
text
Vphase 从小于 VN 变成大于 VN
或者
Vphase 从大于 VN 变成小于 VN
就认为发生了过零点。
硬件上可以用:
| 方式 | 说明 |
|---|---|
| 比较器 | 悬空相和虚拟中性点比较 |
| ADC | MCU 采样悬空相电压,软件判断过零 |
| 运放/滤波 | 抑制 PWM 噪声 |
| 片上比较器 | 一些 MCU 自带 comparator |
14. 过零点检测为什么容易受干扰?
因为电机相线上全是 PWM 开关噪声。
相线不是干净的正弦波,里面有:
text
PWM 尖峰
MOS 开关振铃
死区影响
续流电流影响
母线电压波动
地弹噪声
ADC 采样时刻误差
所以过零点检测通常要做:
text
PWM 消隐时间 blanking time
滤波
多次确认
比较器迟滞
ADC 采样同步
换相后延迟一段时间再检测
否则容易误判过零,导致提前/滞后换相,电机会抖、噪声大、甚至失步。
15. 和霍尔传感器的区别
霍尔传感器是直接检测转子磁极位置。
一般三路霍尔,每 60 电角度变化一次状态。
text
霍尔:直接给转子位置粗信息
反电动势:从电机自身发电信号里推测位置
对比:
| 项目 | 霍尔 | 反电动势过零 |
|---|---|---|
| 是否需要传感器 | 需要 | 不需要 |
| 零速能否知道位置 | 可以粗略知道 | 基本不行 |
| 低速表现 | 好 | 差 |
| 成本 | 高一点 | 低 |
| 算法难度 | 低 | 中等 |
| 抗干扰 | 较好 | 需要处理噪声 |
所以无感方案便宜,但启动和低速麻烦。
16. 用一个电机转动过程串起来
假设你做一个无感六步 BLDC:
text
1. 上电后不知道转子在哪
2. 先强制给固定相序,让转子对齐
3. 然后开环按顺序换相,把电机拖起来
4. 电机转起来后,反电动势变明显
5. 采样悬空相反电动势
6. 找到反电动势过零点
7. 过零后延迟 30 电角度
8. 执行下一次换相
9. 后面进入闭环无感运行
如果是无感 FOC:
text
1. 上电不知道转子角度
2. 先开环给旋转磁场拖动
3. 速度上来后,反电动势变明显
4. 通过电机模型估算反电动势
5. 通过反电动势估算连续角度 θe
6. 用 θe 做 Park 变换
7. 控制 Id / Iq
8. SVPWM 输出三相电压
17. 你可以这样记
反电动势
text
电机转起来以后,绕组自己发出来的电压。
转速越高,反电动势越大。
它可以限制电流,也可以用来估算转速和转子位置。
过零点
text
反电动势从正到负,或者从负到正穿过中性点的时刻。
在六步无感 BLDC 中,用它来判断什么时候该换相。
在 FOC 里的关系
text
FOC 不靠六个过零点来直接换相。
FOC 需要连续角度。
反电动势可以被观测器用来估算这个连续角度。
18. 对你做平衡车/FOC 的实际意义
如果你做的是平衡车,我不太建议一开始就用纯无感 FOC。
因为平衡车需要:
text
低速大力矩
零速附近稳定控制
快速响应
正反转频繁
堵转/起步可靠
这些正好是反电动势无感方案的弱点。
因为零速时:
text
反电动势 ≈ 0
控制器很难知道转子角度。
所以平衡车更推荐:
text
霍尔传感器 + FOC
或者
磁编码器/编码器 + FOC
这样你不用依赖反电动势过零点。
对于平衡车来说:
text
霍尔/编码器负责告诉你转子在哪里
FOC 负责把电流精准打到需要的方向
IMU 负责告诉你车身倾角
PID/LQR 负责算出需要多少力矩
整体链路是:
text
IMU 测倾角
↓
平衡控制算法算目标力矩
↓
目标力矩转成 Iq
↓
FOC 根据转子角度控制电机输出力矩
↓
车轮产生力矩让车身保持平衡
19. 最后用一句话总结
反电动势是电机转动后自己感应出来的电压,它包含了转速和转子位置信息;过零点是反电动势穿过中性点的时刻,六步无感 BLDC 用它来决定换相;FOC 更需要连续转子角度,所以通常用反电动势观测器估算角度,而不是简单靠过零点换相。