题目4:MTPA轨迹计算

好,咱们今天聊聊MTPA。全称是Maximum Torque Per Ampere,最大转矩电流比。

说白了,就是花最少的电流,干最多的活。这在电机控制里,是个很实在的目标。你想想看,电流小了,铜耗就小,效率自然就上去了。尤其在低速区,这招特别管用。

MTPA原理:为什么会有这个“最优点”?

永磁同步电机有个特点,它既有永磁体产生的磁链,又有磁阻转矩。这两个东西叠加在一起,就产生了一个有趣的现象——转矩和电流不是简单的正比关系。

我打个比方。你用力推一扇门,直着推和斜着推,效果不一样。MTPA就是找到那个最省力的角度。

从数学上看,转矩方程是这样的:

T = 1.5 * p * [ψf * iq + (Ld - Lq) * id * iq]

这里面,ψf * iq 是永磁转矩,(Ld - Lq) * id * iq 是磁阻转矩。对于内置式永磁同步电机,Ld 小于 Lq,所以 Ld - Lq 是负的。这意味着,我们需要一个负的 id 电流,才能让磁阻转矩为正。

嗯,这里要注意。id 是直轴电流,它起到去磁的作用。id 负得越多,去磁越强,但磁阻转矩也越大。这中间就有一个平衡点。

这个平衡点,就是MTPA点。在这个点上,电流的利用率最高。

核心结论:MTPA的本质,是在电流矢量幅值不变的约束下,寻找使转矩最大的 id、iq 组合。

MTPA曲线推导:从公式到图形

推导过程其实不复杂。我们设电流幅值为 Is,那么:

Is² = id² + iq²

我们的目标,是在 Is 固定的情况下,最大化转矩 T。这是一个典型的条件极值问题。用拉格朗日乘数法,构造一个辅助函数:

F = T + λ * (id² + iq² - Is²)

然后对 id、iq 求偏导,令其为零。经过一番代数运算(我当年推这个也花了不少时间),可以得到:

id = -ψf / (2 * (Ld - Lq)) - sqrt(ψf² / (4 * (Ld - Lq)²) + iq²)

这个公式,就是MTPA的解析表达式。它给出了 id 和 iq 之间的约束关系。

画成曲线,就是一条在 id-iq 平面上的抛物线。这条曲线从原点出发,随着 iq 增大,id 往负方向走。这就是MTPA轨迹。

个人经验:我在项目中遇到过,电机参数 Ld、Lq 会随着电流变化。这时候,理论曲线和实际会有偏差。所以,我建议在标定阶段,一定要实测修正。

查表法与公式法实现

在实际工程中,怎么用MTPA?主要有两种路子:查表法和公式法。

查表法

查表法,说白了就是“事先算好,用时去查”。

具体做法是:

  1. 根据电机参数,离线计算出不同转矩指令下的 id、iq 值。
  2. 把这些值存到一个二维表里。横轴是转矩,纵轴是转速(或者电流幅值)。
  3. 运行时,根据当前的转矩指令,查表得到 id_ref 和 iq_ref。

查表法的优点是:

  • 计算量小,实时性好。
  • 可以方便地修正参数变化带来的误差。

缺点是:

  • 需要提前标定,工作量大。
  • 表格精度受限于存储空间。

我曾经在一个项目里,用查表法做MTPA。标定花了整整一周,但跑起来效果确实稳。尤其是低速大转矩工况,效率提升很明显。

公式法

公式法,就是直接用解析公式计算 id、iq。

核心公式就是上面推导的那个:

id = -ψf / (2 * (Ld - Lq)) - sqrt(ψf² / (4 * (Ld - Lq)²) + iq²)

但实际用的时候,我们通常反过来。给定转矩指令 T_ref,先估算一个 iq,然后算出 id,再校验转矩是否匹配。如果不匹配,就迭代调整。

代码实现大概是这样的:

// 公式法MTPA计算
float calc_mtpa_id(float iq, float psi_f, float Ld, float Lq) {
    float delta = psi_f / (2.0f * (Ld - Lq));
    float id = -delta - sqrt(delta * delta + iq * iq);
    return id;
}

// 迭代求解
float solve_mtpa(float T_ref, float psi_f, float Ld, float Lq, float p) {
    float iq = 0.0f;
    float id = 0.0f;
    float T_est = 0.0f;
    float error = 0.0f;
    
    for (int i = 0; i < 10; i++) {
        id = calc_mtpa_id(iq, psi_f, Ld, Lq);
        T_est = 1.5f * p * (psi_f * iq + (Ld - Lq) * id * iq);
        error = T_ref - T_est;
        iq += error * 0.01f;  // 简单的比例调节
    }
    return id, iq;
}

公式法的优点是:

  • 不需要提前标定,参数一变,公式自动适应。
  • 理论上精度更高,没有量化误差。

缺点是:

  • 计算量大,迭代过程可能耗时。
  • 对参数敏感,参数不准,结果就偏。

避坑指南:我曾经在公式法上栽过跟头。当时电机参数 Ld、Lq 随温度变化很大,导致MTPA计算出来的 id 偏小,转矩输出不足。后来我加了一个在线参数辨识模块,才把这个问题解决。所以,用公式法,一定要考虑参数鲁棒性。

两种方法的对比

对比项 查表法 公式法
计算量
存储需求
参数敏感性 低(可离线修正)
标定工作量
实时性 一般
适用场景 批量生产、参数稳定 研发阶段、参数多变

我个人习惯,在量产项目里用查表法。虽然前期标定累一点,但跑起来省心。在研发阶段,我更喜欢公式法,调参方便,迭代快。

MTPA轨迹的图形化理解

为了让你更直观地理解,我画了一张图。这张图展示了MTPA轨迹在 id-iq 平面上的位置。

id iq O T1 T2 T3 I1 I2 I3 MTPA轨迹 恒转矩曲线 恒电流圆 MTPA轨迹示意图

这张图里,红色曲线就是MTPA轨迹。它和每个恒电流圆相切,切点就是该电流下的最大转矩点。你仔细看,这些切点连起来,就是MTPA轨迹。

嗯,这里有个关键点。MTPA轨迹只在低速区有效。一旦进入弱磁区,电流轨迹就要沿着电压极限椭圆走了。这个我们后面会详细讲。

实用技巧:在实际调试时,我习惯先让电机空载运行,记录 id、iq 数据。然后逐渐加载,看 id 是否沿着MTPA轨迹走。如果偏离了,就检查参数或者查表数据。

好了,MTPA的内容就这些。核心就是一句话:用最少的电流,出最大的力。查表法和公式法各有千秋,选哪种,看你的项目需求。


公众号:蓝海资料掘金营,微信deep3321