1. 问题背景
当永磁同步电机(PMSM)的转速升高时,反电势随之增大,定子电压逐渐逼近逆变器所能提供的最大电压。此时,系统难以继续运行在最大转矩电流比(MTPA)曲线上,必须进入弱磁(Field Weakening)区域。
然而,弱磁运行点并不一定恰好落在电压极限圆上,而是在圆内的某个位置。为了在高速弱磁区获得最佳的电压利用率,需要引入最大转矩电压比(MTPV)控制。这就带来了两个关键问题:
- 弱磁运行点究竟在哪里?
- 控制器如何从 MTPA 平滑切换到弱磁,再过渡到 MTPV?
本文基于 motulator 开源库中的同步电机参考生成器源码,系统分析 MTPV 的数学原理、实现细节以及 MTPA → 弱磁 → MTPV 的切换逻辑。
2. MTPV 在 motulator 中的实现
2.1 数学条件:\(d\tau / d\psi_s = 0\)
MTPV 的核心思想是:在磁链幅值 \(|\psi_s|\) 受电压限制的条件下,寻找能产生最大电磁转矩的电流工作点。其数学条件可表述为:
\[\partial\tau_{\text{M}} / \partial\delta \big|_{|\psi_s|=\text{const}} = 0\]
其中 \(\delta\) 是磁链矢量在 \(dq\) 坐标系中的角度。换言之,对于每一个固定的磁链圆,MTPV 给出了转矩最大的那个点。
2.2 辅助电流 \(\psi_b\)(\(i_a\))的定义与推导
motulator 采用 Varatharajan 等人提出的辅助电流(auxiliary current)概念,将 MTPV 条件写成与 MTPA 对偶的正交形式:
\[\text{Re}(i_a \cdot \psi_s^*) = 0\]
辅助电流 \(i_a\) 的定义式(来自 _parameters.py 中的 aux_current())为:
\[i_a = (G_{\text{qq}}\cdot\psi_d + j\cdot G_{\text{dd}}\cdot\psi_q) – j\cdot G_{\text{dq}}\cdot\psi_s^* – i_s\]
其中 \(G = L_s^{-1}\) 是增量电感矩阵的逆。对于线性不饱和电机(\(L_{\text{dq}} = 0\)),该式可简化为:
\[i_a = \psi_f/L_q + i_d\cdot(L_d/L_q – 1) + j\cdot i_q\cdot(L_q/L_d – 1)\]
将其代入正交条件 \(\text{Re}(i_a \cdot \psi_s^*) = 0\),即可得到 IPMSM 的经典 MTPV 双曲线方程。
2.3 compute_mtpv_locus() 的 Brentq 求根过程
在 _sm_control_loci.py 中,ControlLoci.compute_mtpv_locus() 通过以下步骤预计算 MTPV 轨迹:
- 在 [0, \(\psi_{\text{s,max}}\)] 范围内均匀取 16 个磁链幅值点;
- 对每个磁链幅值,调用
compute_mtpv_flux_angle(); - 该函数以磁链角度 \(\delta\) 为变量,构造残差函数:\(\text{mtp\_cond}(\delta) = \text{Re}(i_a(\delta) \cdot \psi_s^*(\delta))\);
- 在区间 \([\pi/2, \pi]\) 内使用
brentq算法求根(IPMSM 的 MTPV 根位于第二象限); - 若区间两端点函数值同号,则说明不存在 MTPV(如表贴式电机 \(L_d = L_q\))。
求根完成后,motulator 构造 LUT 插值器 \(i_{\text{s,dq}}\text{ vs }\psi_{\text{s,abs}}\),供控制器在线查表使用。
2.4 _get_mtpv_flux_and_torque() 的 LUT 查表
在运行时,ReferenceGenerator._get_mtpv_flux_and_torque(psi_s_abs_ref) 直接以当前磁链参考值为索引,通过 LUT 插值查得 MTPV 电流 \(i_s\),再反算出对应的磁链 \(\psi_s\) 和转矩 \(\tau_{\text{M}}\):
i_s = self.i_s_mtpv(psi_s_abs_ref) psi_s = complex(self.par.psi_s_dq(i_s)) tau_M = 1.5 * self.par.n_p * (i_s * psi_s.conjugate()).imag
3. MTPA → 弱磁 → MTPV 切换逻辑
所有参考生成的核心集中在 compute_flux_and_torque_refs() 方法中。该方法通过五个连续的”渐进式约束”步骤,将原始转矩参考 \(\tau_{\text{M,ref}}\) 逐步修正为最终可行的 \((\psi_{\text{s,ref}}, \tau_{\text{M,ref}})\):
| 步骤 | 操作 | 物理意义 | 切换判据 |
|---|---|---|---|
| 1 | \(\psi_s = \text{abs}(\psi_{\text{s,MTPA}}(\tau_{\text{M,ref}}))\) | 按 MTPA 曲线计算目标磁链 | 默认优先 MTPA |
| 2 | \(\text{clip}(\psi_s, \psi_{\text{s,min}}, \psi_{\text{s,max}})\) | 磁链硬限幅 | \(\psi_s\) 超出预设范围时触发 |
| 3 | \(\psi_s = \min(\psi_s, u_{\text{s,max}} / |\omega|)\) | 电压极限弱磁 | 当转速升高导致电压极限收缩时触发 |
| 4 | \(\tau_{\text{M}} = \min(\tau_{\text{CL}}, |\tau_{\text{M,ref}}|) \cdot \operatorname{sgn}\) | 电流极限转矩截断 | 所需转矩超出电流极限圆与电压极限圆交集时触发 |
| 5 | \(\tau_{\text{M}} = \min(k_{\text{mtpv}}\cdot\tau_{\text{MTPV}}, |\tau_{\text{M,ref}}|) \cdot \operatorname{sgn}\) | MTPV 极限 | 工作点越过 MTPV 轨迹时触发 |
这种 clip + min 的组合实现了渐进式约束,而非硬切换:当转速从低到高变化时,电压极限圆自然收缩,MTPA 磁链被逐步”压”到电压极限以下,最终可能进一步被 MTPV 约束截断转矩。
4. 仿真验证 — \(i_d\)-\(i_q\) 平面轨迹分析
为了验证上述理论分析,我们在 motulator 中运行了 3600 rpm 风机负载仿真,并在 \(i_d\)-\(i_q\) 平面上绘制了实际电流轨迹与理论曲线的对比。

图中包含以下信息:
- 红色实线:仿真实际运行轨迹 \(i_d(t)\) vs \(i_q(t)\),起点为绿色圆点,终点为红色圆点;
- 青色虚线:MTPA 理论曲线;
- 洋红色虚线:MTPV 理论曲线;
- 黑色实线:电流极限圆(\(i_{\text{s,max}} = 2.0\) pu);
- 彩色虚线椭圆:不同转速下的电压极限椭圆(\(V_{\text{dc}} = 180\ \text{V}\) / \(150\ \text{V}\));
- magma 等高线:磁链幅值 \(|\psi_s|\) 的等值线。
从图中可以观察到:
- 电机从静止启动时,电流从原点 \((0, 0)\) 出发,沿 MTPA 方向加速;
- 随着转速升高,电压极限椭圆收缩,工作点逐渐偏离 MTPA 曲线,向弱磁区(\(i_d \lt 0\))移动;
- 在 3600 rpm 稳态运行时,实际轨迹位于电压极限椭圆内部,靠近 MTPV 曲线但受电流极限圆约束;
- \(V_{\text{dc}} = 150\ \text{V}\) 时电压极限椭圆明显收缩,弱磁程度更深,验证了母线电压对运行边界的影响。
5. 结论
本文系统分析了 motulator 中 MTPV 的实现原理与 MTPA → 弱磁 → MTPV 的切换机制,主要结论如下:
- MTPV 数学条件通过辅助电流 \(i_a\) 与磁链 \(\psi_s\) 的正交关系 \(\text{Re}(i_a \cdot \psi_s^*) = 0\) 统一表达,适用于饱和与不饱和电机;
- Brentq 求根用于离线预计算 MTPV 轨迹 LUT,保证了数值稳健性和收敛速度;
- 五步渐进式约束链(MTPA → clip → 电压极限 → 电流极限 → MTPV)实现了各工作模式之间的平滑过渡,避免了硬切换带来的转矩冲击;
- 仿真轨迹验证了理论分析:实际运行点从 MTPA 出发,经弱磁区逐渐收敛到电压极限与 MTPV 的交界附近。
motulator 通过 clip 和 min 等简单运算实现了复杂的模式切换逻辑,其设计思路对永磁同步电机驱动的工程实现具有重要参考价值。
6. 附录:符号对照表
本文使用的代码标识符与数学符号之间的对应关系如下:
| 代码标识符 | 数学符号 | 说明 |
|---|---|---|
tau_M_ref |
\(\tau_{\text{M,ref}}\) | 转矩参考值 |
tau_M_cl |
\(\tau_{\text{M,cl}}\) | 电流极限转矩 |
tau_M |
\(\tau_{\text{M}}\) | 电磁转矩(通用) |
psi_s |
\(\psi_{\text{s}}\) | 定子磁链矢量 |
psi_s_max |
\(\psi_{\text{s,max}}\) | 最大定子磁链幅值 |
psi_s_ref |
\(\psi_{\text{s,ref}}\) | 定子磁链参考值 |
psi_s_abs_ref |
\(\psi_{\text{s,abs,ref}}\) | 定子磁链幅值参考 |
psi_s_dq |
\(\psi_{\text{s,dq}}\) | 定子磁链 dq 分量 |
u_s_max |
\(u_{\text{s,max}}\) | 最大定子电压 |
u_dc |
\(u_{\text{dc}}\) | 直流母线电压 |
i_s_max |
\(i_{\text{s,max}}\) | 最大定子电流 |
i_d |
\(i_d\) | d 轴电流 |
i_q |
\(i_q\) | q 轴电流 |
i_s_dq |
\(i_{\text{s,dq}}\) | 定子电流 dq 分量 |
k_mtpv |
\(k_{\text{mtpv}}\) | MTPV 安全系数 |
tau_CL |
\(\tau_{\text{CL}}\) | 电流极限约束转矩 |
w_m |
\(\omega_{\text{m}}\) | 机械角速度 |
n_p |
\(n_{\text{p}}\) | 极对数 |
函数对应:
| 代码函数 | 数学记号 | 说明 |
|---|---|---|
compute_flux_and_torque_refs(tau_M_ref, w_m, u_dc) |
\((\tau_{\text{M,ref}}, \omega_{\text{m}}, u_{\text{dc}}) \mapsto (\psi_{\text{s,ref}}, \tau_{\text{M,ref}})\) | 参考生成主入口 |
compute_mtpa_locus() |
\(\text{MTPA trajectory}\) | MTPA 轨迹预计算 |
compute_mtpv_locus() |
\(\text{MTPV trajectory}\) | MTPV 轨迹预计算 |
mtpa_cond(gamma) |
\(F_{\text{MTPA}}(\gamma)\) | MTPA 正交条件 |
mtpv_cond(delta) |
\(F_{\text{MTPV}}(\delta)\) | MTPV 正交条件残差 |
root_scalar / brentq |
\(\texttt{Brentq root-finding}\) | Brentq 求根算法 |
clip |
\(\operatorname{clip}\) | 硬限幅函数 |
min |
\(\min\) | 最小值函数 |
sign |
\(\operatorname{sgn}\) | 符号函数 |