02三相正弦波与旋转磁场
观察三相电流如何合成旋转磁场
本模块主旨
三个 120° 错开正弦 → 旋转磁场矢量;同时 Ia+Ib+Ic=0 是免费的硬件健康度听诊器。学完应能回答
- 能解释幅值(电流大小)与频率(电频率 = 转速·polePairs/60)在物理上完全独立
- 能在 30 秒内用 Ia+Ib+Ic 残差判断三相采样链是否健康(阈值 0.1A)
- 能识别"αβ 端点画椭圆 → 不平衡或 ADC 偏置"、"圆带毛边 → 5/7 次谐波"两种典型指纹
- 理解死区时间为什么产生 5、7、11、13 次谐波,并知道用什么补偿方案
- 掌握 STM32 双 ADC 同步采样 + TIM1 中点注入触发的最小配置代码
- 能说出"两路 ADC 重构 Ic = −Ia−Ib"的成立前提(三相星型 + ADC 偏置已校准)
总览
三相正弦的核心不是 sin 公式,而是"相位差 120° 的三个量在空间相差 120° 的绕组里合成出一个旋转磁场"。零基础速入
类比
三相电流就像三个排成 120° 的人**轮流**推一个旋转门——任何时刻总有人在推,门就一直转。三个人发力大小是正弦曲线,相互错开 120°,合起来给门一个**幅值不变方向连续转动**的力。这个"力"就是定子合成磁场。核心概念
三个固定方向的绕组通入相位差 120° 的正弦电流,合成出一个像转子一样转动的磁场——这是所有 AC 电机能转起来的物理基础。为什么要学
- 不理解"三相→旋转磁场",后面 Clarke / Park 的几何意义全是数字游戏。
- 调试时三相不平衡是最常见故障源(采样偏置、缺相、相序错),看波形和合成矢量就能一眼诊断。
- 把"3 相 AC"变成"2 维矢量"是从硬件视角到 FOC 控制视角的关键转换。
第一手操作
把右侧"频率"从 50 Hz 拉到 120 Hz,看左侧定子截面的合成磁场箭头转得明显变快;底部三相波形周期变短。然后试试"三相不平衡"=0.3,看箭头轨迹从圆变成椭圆。学习目标
- 理解三相相差 120° 的正弦电流
- 观察合成磁场矢量为何匀速旋转
- 理解幅值、频率、相位、不平衡、谐波和噪声对磁场的影响
核心概念
- 理想三相电流满足 Ia + Ib + Ic = 0,三相在空间上也相差 120°,合成后形成幅值稳定的旋转磁场。
- 频率决定磁场旋转速度,幅值决定磁场强度,初始相位决定当前时刻磁场从哪里开始。
- 不平衡、谐波和采样噪声会让合成矢量变成椭圆、抖动或带纹波。
公式
三相正弦电流
Ia = I·sin(ωt), Ib = I·sin(ωt − 2π/3), Ic = I·sin(ωt + 2π/3)
I 是峰值,ω = 2πf;三相和恒为 0(平衡时)。
合成磁动势
F(t) = (3/2)·I·e^(jωt)
空间相差 120° 的三个绕组 + 时间相差 120° 的三相电流 → 幅值稳定 (3/2)I 的旋转复矢量。
电频率 vs 同步转速
n_s = 60·f / p
50 Hz 4 极对电机 → 同步转速 750 rpm。FOC 中 f 由控制器选定,决定电机要追的目标转速。
工程意义
- FOC 的所有坐标变换都建立在三相正弦量之上。先把波形和旋转磁场看懂,后面的 αβ、dq 才不抽象。
- 真实驱动器三相不平衡常来自电流采样偏置、相电阻差异、死区、相序错或 PWM 更新时序错。
STM32 移植指南
- ADC 采样与 PWM 中点同步(注入采样 + 中心对齐 PWM)以避开开关噪声。
- 上电后第一件事是 ADC 偏置校准:电机不通电时记录 ia/ib/ic 数百次取均值作为零点。
- 调试用开环 V/f 或开环正弦电流模式,低压(12V)观察三相波形对称性,再切闭环。
常见误区
- 只看单相电流,忽略三相相位关系。
- 采样点靠近 PWM 边沿,开关纹波直接进控制环。
- RMS / 峰值 / 平均值混用导致标定比例错。
- ADC 偏置没校准就上电流环。
调试方法
- 示波器/电流钳比较三相峰值和相位关系(应严格 120° 差)。
- 运行时记录 ia+ib+ic:平衡系统应 < 0.1A;偏移大就是采样偏置或缺相。
- 把 ia/ib/ic 送进 FFT,谐波 > 5% 检查死区和反电动势谐波。
建议实验
- 频率 50→120 Hz,看磁场旋转加快(同振幅)。
- 注入 5 次谐波,看波形顶部出现凹坑、αβ 轨迹出现波纹。
- 不平衡 = 0.3,看圆形轨迹塌成椭圆。
STM32 C 代码骨架
/* ============================================
* 三相 ADC 采样 + 偏置校准
* 适配 STM32 ADC + DMA + 注入序列触发
* ============================================ */
/* 上电校准:电机不通电时取 1024 次平均,记录零电流 ADC 值 */
typedef struct {
int32_t ia_offset; // ADC 原始码值
int32_t ib_offset;
int32_t ic_offset;
float adc_to_amps; // 转换系数 = Vref / (4096 × R_shunt × Gain)
} current_calib_t;
void current_calibrate(current_calib_t *c) {
int32_t sa = 0, sb = 0, sc = 0;
for (int i = 0; i < 1024; i++) {
while (!(ADC1->JSR & ADC_JSR_JEOC)) { /* 等注入完成 */ }
sa += ADC1->JDR1;
sb += ADC1->JDR2;
sc += ADC1->JDR3;
ADC1->JSR &= ~ADC_JSR_JEOC;
}
c->ia_offset = sa >> 10; // /1024
c->ib_offset = sb >> 10;
c->ic_offset = sc >> 10;
}
/* 中断中:原始码值 → 真实安培 */
static inline float adc_to_amps(int32_t raw, int32_t offset, float scale) {
return (float)(raw - offset) * scale;
}
/* 用法(在 FOC ISR 里):
* float ia = adc_to_amps(ADC1->JDR1, calib.ia_offset, calib.adc_to_amps);
* float ib = adc_to_amps(ADC1->JDR2, calib.ib_offset, calib.adc_to_amps);
* float ic = -ia - ib; // 三相和=0 重构第三相,省一路 ADC
* // 调试断言:fabsf(ia + ib + ic) 应该 < 0.1A
*/下一步
- 进入 Clarke 变换,把三相量压缩成二维 αβ 平面矢量——这是 FOC 第一步坐标变换。
随堂题
三相平衡正弦电流 Ia + Ib + Ic 理论值是多少?
- 正比于幅值 I
- 正比于频率 f
- 恒为 0 (正确)
- 随 ωt 变化
提示:sin(ωt) + sin(ωt − 2π/3) + sin(ωt + 2π/3) = 0 是恒等式。运行时若 |Ia+Ib+Ic| > 0.1A 多半是 ADC 偏置没校准。
三相电流频率从 50Hz 调到 120Hz,定子合成磁场会怎样?
- 幅值变大
- 幅值不变、转得更快 (正确)
- 消失
- 反向
提示:幅值取决于电流峰值,频率只决定旋转角速度 ω = 2πf。
示波器看到三相幅值各 6A 但只有两相相差 120°,第三相相差 100°,会发生什么?
- 和正常一样
- 合成磁场幅值不稳定,轨迹变椭圆 (正确)
- 电机停转
- PWM 频率改变
提示:相位失配让三相不再对称合成出圆形旋转磁场,αβ 矢量端点画椭圆/抖动。
STM32 ADC 采样三相电流时为什么强烈推荐放在 PWM 中点?
- 硬件要求
- 中点是开关边沿,电流变化最快
- 中点电流纹波最小,避开开关噪声 (正确)
- 只能这样接线
提示:中心对齐 PWM 中点是上下管已经稳定切换完成的位置,电流纹波接近平均值,靠近开关边沿采样会引入巨大噪声。
4 极对 PMSM,定子电流频率 100Hz,电机的同步机械转速是?
- 100 rpm
- 1500 rpm (正确)
- 6000 rpm
- 400 rpm
提示:n_s = 60·f / p = 60 × 100 / 4 = 1500 rpm。