无刷电机反电动势和过零点介绍

你问的这几个东西,其实都围绕一个核心问题:

无刷电机控制器怎么知道转子磁铁现在转到哪里了?

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 更需要连续转子角度,所以通常用反电动势观测器估算角度,而不是简单靠过零点换相。

相关推荐
LCG元1 小时前
STM32实战:基于STM32F103的智能晾衣架(光控+雨控)
stm32·单片机·嵌入式硬件
西城微科方案开发1 小时前
华润微CS98P171(SOP8):高性价比8位通用MCU
单片机·嵌入式硬件
LingLong_roar2 小时前
普冉单片机PY32F002AF15P6TU + 0.96寸TFT ST7735s 80*160显示屏,使用软件SPI显示字符串“Hello World!”
单片机·嵌入式硬件
踏着七彩祥云的小丑2 小时前
嵌入式测试学习第 10天:主控、外设、传感器、通信模块
单片机·嵌入式硬件
三佛科技-134163842123 小时前
FT32F072系列 FT32F072RBAT7/CBAT7/KBBT7/KBBU7/KBCW7单片机共性与区别详细分析
单片机·嵌入式硬件·物联网·智能家居·pcb工艺
星夜夏空993 小时前
STM32单片机学习(11)——GPIO输入实验
stm32·单片机·学习
LingLong_roar3 小时前
手搓温湿度仪(单片机普冉PY32F002AF15P6TU + 温湿度传感器 SHT40-AD1B-R2 + 0.96寸TFT IPS 显示屏)软件实现
单片机·嵌入式硬件
黑白园3 小时前
STM32F103ZET6移植-电机2804-驱动板SimpleFOC Mini实现速度开环_位置开环控制(二、代码移植及功能实现)
stm32·单片机·嵌入式硬件
深圳市晨芯阳科技有限公司3 小时前
HC9623晨芯阳400mA带载、18V耐压、低压差快速响应LDO
单片机·嵌入式硬件·ldo线性稳压ic·深圳市晨芯阳科技有限公司