← 全部文章

永磁同步电机 FOC 控制:从 dq 变换到 SVPWM 的完整推导(内嵌式 IPMSM 篇)

2026-08-30FOC · PMSM · IPMSM · MTPA · SVPWM · 三环整定

为什么要写这篇

我是做永磁同步电机(PMSM)台架标定出身的,4 年里调电流环、标 MTPA、验证弱磁,对 FOC 有很强的”手感”。但说实话,以前更多是”会调”而不是”能推”。转向机器人运动控制后,我意识到面试官要的不是”你调过几个环”,而是”你能不能把每个环节从方程推出来”——能推一遍和能调一遍,是完全不同的层次。

这篇笔记是我的完整推导主线,面向控制方向的面试官:三相 → 两相 → 旋转坐标系 → IPMSM 磁链/电压/转矩方程 → MTPA → SVPWM → 三环整定。配套 作品 1:Simulink FOC 双闭环仿真(内嵌式 IPMSM 模型),本文的每个公式都会在仿真里落地。

0. 符号约定(约定速查)

符号含义符号含义
vd,vqv_d, v_qdq 轴电压(V)ψf\psi_f永磁体磁链(Wb)
id,iqi_d, i_qdq 轴电流(A)ωe\omega_e电角速度(rad/s),ωe=pnωm\omega_e = p_n \omega_m
RsR_s定子电阻(Ω)pnp_n极对数
Ld,LqL_d, L_qdq 轴电感(H),内嵌式 Ld<LqL_d < L_qTeT_e电磁转矩(N·m)
θe\theta_e转子电角度(rad)VdcV_{dc}直流母线电压(V)

1. 第一步:三相 → 两相静止(Clarke 变换)

1.1 从物理直觉出发

三相绕组在空间互差 120120^\circ,三相电流 ia,ib,ici_a, i_b, i_c 各自在空间产生磁动势分量,合成一个空间旋转磁场。我们关心的是合成效果,而不是三个分量的细节——所以先投影到两个正交轴 αβ\alpha\beta 上(α\alpha 轴与 aa 相绕组轴线重合)。

投影关系(等幅值约定,系数 23\frac{2}{3} 保证变换前后电流幅值不变;等功率约定则用 23\sqrt{\frac{2}{3}},幅值会变,工程上 FOC 常用等幅值):

[iαiβ]=23[1121203232][iaibic]\begin{bmatrix} i_{\alpha} \\ i_{\beta} \end{bmatrix} = \frac{2}{3} \begin{bmatrix} 1 & -\frac{1}{2} & -\frac{1}{2} \\ 0 & \frac{\sqrt{3}}{2} & -\frac{\sqrt{3}}{2} \end{bmatrix} \begin{bmatrix} i_a \\ i_b \\ i_c \end{bmatrix}

利用星形连接 ia+ib+ic=0i_a + i_b + i_c = 0,可以消去 ici_c

iα=ia,iβ=13(ia+2ib)i_{\alpha} = i_a, \qquad i_{\beta} = \frac{1}{\sqrt{3}}(i_a + 2i_b)

这是工程实现里最常见的化简形式——只用两个电流传感器就够了。

1.2 为什么要先 Clarke 再 Park?

不能直接从三相变到 dq。因为 dqdq 坐标系是旋转的,必须先固定一个静止坐标系做投影(Clarke),再让坐标系跟着转子转起来(Park)。两步变换合起来才是”跟着转子磁场看电流”。

2. 第二步:两相静止 → 两相旋转(Park 变换)

Park 变换把 αβ\alpha\beta 里的交流量变成 dqdq 里的直流量:

[idiq]=[cosθesinθesinθecosθe][iαiβ]\begin{bmatrix} i_d \\ i_q \end{bmatrix} = \begin{bmatrix} \cos\theta_e & \sin\theta_e \\ -\sin\theta_e & \cos\theta_e \end{bmatrix} \begin{bmatrix} i_{\alpha} \\ i_{\beta} \end{bmatrix}

其中 θe\theta_e 是转子电角度(dd 轴与 α\alpha 轴夹角),由编码器/旋变或观测器实时获得。这一步是整个 FOC 的”定向”所在:坐标系对准了转子磁场,idi_d 才是真正的”励磁分量”、iqi_q 才是真正的”转矩分量”。

坐标变换的关系可以画成下面这张图(后续我会在仿真笔记里补动画版):

a(=α) b c α β d(随转子旋转) q i_s θ_e Clarke: a,b,c → α,β(静止) Park: α,β → d,q(随转子旋转 θ_e)

3. IPMSM 的 dq 模型:从磁链方程推到电压方程

3.1 磁链方程

dqdq 坐标系下,定子磁链由两部分组成:电枢电流产生的磁链 + 永磁体贡献的磁链:

ψd=Ldid+ψf,ψq=Lqiq\psi_d = L_d i_d + \psi_f, \qquad \psi_q = L_q i_q

注意:永磁体磁链只出现在 dd 轴(dd 轴定义就是永磁体磁场方向)。

3.2 电压方程

由法拉第定律 v=Rsi+dψdt\vec{v} = R_s \vec{i} + \dfrac{d\vec{\psi}}{dt},在旋转坐标系里展开时,磁链的时间导数要加上坐标系旋转引起的交叉项(这是 dqdq 变换后出现耦合项的来源):

vd=Rsid+LddiddtωeLqiqv_d = R_s i_d + L_d \frac{di_d}{dt} - \omega_e L_q i_q

vq=Rsiq+Lqdiqdt+ωe(Ldid+ψf)v_q = R_s i_q + L_q \frac{di_q}{dt} + \omega_e (L_d i_d + \psi_f)

三项物理意义:

这两个耦合项/反电动势项,就是我在前馈开发里要补偿的对象——见《前馈控制为什么能提升响应速度》。补偿方式:vdff=ωeLqiqv_d^{ff} = -\omega_e L_q i_qvqff=ωe(Ldid+ψf)v_q^{ff} = \omega_e (L_d i_d + \psi_f)

3.3 转矩方程:磁阻转矩从哪来

用磁共能法推导电磁转矩。对 IPMSM,转矩有两项:

Te=32pn[ψfiq+(LdLq)idiq]T_e = \frac{3}{2} p_n \left[ \psi_f i_q + (L_d - L_q) i_d i_q \right]

这就是 IPMSM 需要用 MTPA(最大转矩电流比) 的根本原因:通过注入负 idi_d 换取磁阻转矩,让同样的电流幅值产生更大的转矩。

4. MTPA:怎么求最优的 idi_d

4.1 数学表述

在电流幅值约束 is2=id2+iq2i_s^2 = i_d^2 + i_q^2 下,最大化转矩 Te(id,iq)T_e(i_d, i_q)。用拉格朗日乘子法:

L=Te+λ(id2+iq2is2)\mathcal{L} = T_e + \lambda (i_d^2 + i_q^2 - i_s^2)

id,iqi_d, i_q 求偏导并令其为零,得到 MTPA 轨迹:

id=ψfψf2+4(LdLq)2iq22(LdLq)i_d = \frac{\psi_f - \sqrt{\psi_f^2 + 4(L_d - L_q)^2 i_q^2}}{2(L_d - L_q)}

4.2 工程实现:查表 vs 公式

理论上可以直接用上式在线计算 id(Te)i_d^*(T_e^*),但实际工程里更常用查表

我在前馈开发中主导过一次改进:把 MTPA 前馈从公式拟合改为查表插值,精度明显提升(量化数据脱敏,面试可详聊)——公式拟合在模型失配(磁链饱和、温度漂移)时误差累积,而查表直接来自台架实测,天然包含了饱和与非线性。这也是标定工程师思维在算法里的体现。

4.3 弱磁控制:高速区的另一个”必须懂”

MTPA 解决”低速怎么给电流”,弱磁解决”高速电压不够用”——两者是一对,我在台架上都标定过(也是我自动化标定平台的核心场景之一,见《从 INCA flow 到 Python》)。

电压约束:SVPWM 线性区最大相电压 Vmax=Vdc/3V_{max} = V_{dc}/\sqrt{3},dq 电压必须满足:

vd2+vq2Vmax2v_d^2 + v_q^2 \le V_{max}^2

把稳态电压方程代入,得到电压极限椭圆(外圆是电流极限圆):

(Ldid+ψf)2+(Lqiq)2(Vmaxωe)2,id2+iq2Imax2(L_d i_d + \psi_f)^2 + (L_q i_q)^2 \le \left(\frac{V_{max}}{\omega_e}\right)^2, \qquad i_d^2 + i_q^2 \le I_{max}^2

物理过程:转速升高 → 反电动势 ωeψf\omega_e \psi_f 增大 → 电压裕度减小。当 vqv_q 顶到电压上限时,需要注入负向 idi_d:它一方面削弱气隙磁链(ψd=Ldid+ψf\psi_d = L_d i_d + \psi_f 变小,等效”减弱磁场”),另一方面产生负的交叉耦合项 ωeLqiq-\omega_e L_q i_q 帮助 d 轴,从而把电压”腾出来”给 iqi_q——代价是转矩/电流比下降,进入恒功率区。

工程要点

5. SVPWM:把电压指令变成开关序列

5.1 八个基本矢量

两电平三相逆变器有 8 个开关状态:6 个有效矢量(V1V6V_1 \sim V_6,空间互差 60°60°)和 2 个零矢量(V0,V7V_0, V_7,三相全上/全下):

V1(100) V2(110) V3(010) V4(011) V5(001) V6(101) V_ref θ 第一扇区:V_ref 由相邻矢量 V1、V2 与零矢量按伏秒平衡合成

5.2 伏秒平衡合成(第一扇区)

一个开关周期 TsT_s 内,让 V1V_1 作用 T1T_1V2V_2 作用 T2T_2、零矢量作用 T0=TsT1T2T_0 = T_s - T_1 - T_2,使平均电压等于参考矢量:

Vref=T1TsV1+T2TsV2\vec{V}_{ref} = \frac{T_1}{T_s} \vec{V}_1 + \frac{T_2}{T_s} \vec{V}_2

由几何关系解得作用时间:

T1=3VrefVdcTssin(π3θ),T2=3VrefVdcTssinθT_1 = \sqrt{3}\,\frac{|V_{ref}|}{V_{dc}} T_s \sin\left(\frac{\pi}{3} - \theta\right), \qquad T_2 = \sqrt{3}\,\frac{|V_{ref}|}{V_{dc}} T_s \sin\theta

5.3 为什么 SVPWM 优于 SPWM

多出的 15.5% 意味着相同母线电压下输出能力更强(或相同输出下母线电压要求更低)——这是量产项目里很实在的成本项。

6. 三环控制结构:为什么先内环后外环

ω* 速度环 PI i_q* MTPA i_d* 电流环 PI v_d*,v_q* 反Park SVPWM 逆变器+PMSM ω 编码器:θ_e、ω 反馈(位置环在最外层,未画出) 先内后外:电流环(带宽最高)→ 速度环 → 位置环(带宽最低)

6.1 整定顺序的工程逻辑

  1. 先电流环:电流环带宽最高,受 PWM 频率约束(经验取开关频率的 1/101/201/10 \sim 1/20,过高会引入采样/延时不稳定)。只有电流环收敛,外环看到的才是”干净的转矩源”;
  2. 再速度环:把电流环等效为惯性环节后,速度环面对的是近似一阶对象,整定手感好;
  3. 最后位置环:位置环带宽最低,负责”轨迹跟踪”而不是”快速响应”,通常配合位置前馈使用(见《前馈》一文)。

6.2 电流环整定的参数化方法

以 q 轴为例,忽略耦合项(由前馈补偿),电流环对象近似一阶:

Gi(s)=1Lqs+RsG_i(s) = \frac{1}{L_q s + R_s}

采用 PI + 零极点对消:令 Kp=LqωccK_p = L_q \omega_{cc}Ki=RsωccK_i = R_s \omega_{cc}ωcc\omega_{cc} 为目标电流环带宽),开环传函变为 ωccs\dfrac{\omega_{cc}}{s},闭环带宽恰好约等于 ωcc\omega_{cc}——调一个参数 ωcc\omega_{cc} 就完成整定,这是工程上最常用的电流环整定方法(工程实现还叠加反电动势前馈与一拍延时补偿)。

面试时把”我用 4 年调出来的经验”翻译成”零极点对消 + 带宽参数化”,说服力完全不同。

7. 仿真实现计划(作品 1)

8. 踩坑清单(台架 + 仿真都会遇到)

  1. 离散化:连续域整定参数搬到离散域要重新验证;采样步长直接限制可达带宽;
  2. 一拍延时:从采样到 PWM 更新至少一拍,电流环相位裕度损失 ωccTs\omega_{cc} T_s,高速大带宽时不可忽略;
  3. 积分饱和:电压饱和后 PI 积分器 windup,必须 anti-windup(条件积分/反算);
  4. MTPA 表边界:查表插值在低转矩区和高饱和区误差大,需要边界处理;
  5. 弱磁区vqv_q 达上限后要切弱磁控制(idi_d 负向增大),这是 IPMSM 高速区的必修课,先仿真后台架。

相关项目