4、弱磁控制策略(二):基于电压反馈的弱磁控制方法

上一章我们聊了查表法弱磁,说白了就是离线算好,在线直接查。但实际跑起来你会发现,电机参数会变,母线电压会抖,查表法有时候会“跑偏”。

那怎么办?加反馈。

基于电压反馈的弱磁控制,是我个人在实际项目里用得最多的一种方法。它不依赖精确的电机模型,而是盯着一个东西——电压环的输出。只要电压环告诉你“电压不够了”,它就自动往弱磁方向调。

4.1 核心思想:电压环与电流指令的闭环

先想一个问题:什么时候需要弱磁?

答案是:当电机反电动势接近或超过母线电压能提供的极限时。

反电动势你没法直接测,但你可以测电压指令。在矢量控制里,Vd_ref 和 Vq_ref 经过反 Park 变换后,合成电压幅值 Vs_ref。如果这个值超过了 Vdc / √3(SVPWM 线性区极限),那就说明——电压饱和了。

基于电压反馈的弱磁,就是拿这个 Vs_ref 和电压极限 Vmax 做差,误差进 PI 调节器,输出一个 负的 Id 补偿量,叠加到原来的 Id 指令上。

一句话总结:电压环检测到“电压快用完了”,就主动把 Id 往负方向拉,让出电压裕量给 Iq,从而提升转速。

4.2 控制框图与信号流

下面这张图是我自己画的控制结构,你看一眼就能明白信号怎么走的。

基于电压反馈的弱磁控制框图 基于电压反馈的弱磁控制框图 转速环 PI Id PI Iq PI 弱磁 PI Vs 计算 限幅 电压误差反馈 说明:弱磁 PI 的输入是 Vmax - Vs_ref,输出为负的 Id 补偿量,叠加到 Id 指令上。 Vmax 通常取 Vdc / √3(SVPWM 线性区),也可根据调制策略调整。

信号流程是这样的:

  1. 转速环输出 Iq_ref(转矩电流指令)。
  2. 电压环(弱磁 PI)检测 Vs_ref 是否超过 Vmax。
  3. 如果超了,弱磁 PI 输出一个 负的 Id_weak,叠加到 Id_ref 上。
  4. Id PI 和 Iq PI 分别跟踪修正后的电流指令。
  5. 输出 Vd_ref 和 Vq_ref,合成 Vs_ref,再送回弱磁 PI 形成闭环。

我个人的习惯:弱磁 PI 的输出限幅要设好。下限一般取 -Id_rated(额定 Id 的负值),上限取 0。千万别让 Id 正着跑出去,那就不叫弱磁了,叫增磁。

4.3 弱磁 PI 参数整定

电压环的 PI 参数怎么调?这是很多工程师头疼的地方。

我直接给一组经验值,你可以在你的平台上先试:

参数 推荐值 说明
Kp_voltage 0.5 ~ 2.0 比例增益,越大响应越快,但容易振荡
Ki_voltage 50 ~ 200 积分增益,消除稳态误差
积分限幅 ±Id_rated 防止积分饱和导致失控
输出限幅 -Id_rated ~ 0 只允许负方向输出

调参的时候,我建议你先给一个很小的 Kp(比如 0.3),Ki 先给 0。然后让电机跑到弱磁区,看 Vs_ref 能不能稳定在 Vmax 附近。如果振荡,减小 Kp;如果响应太慢,加大 Ki。

我曾经踩过一个坑:弱磁 PI 的积分限幅设得太大,结果电机在高速区突然卸载,积分项把 Id 拉到很负的值,等再加载时电流环半天回不来,直接导致过流保护。后来我把积分限幅缩到 0.5 倍额定 Id,问题就解决了。

4.4 电压极限的选取

Vmax 取多少?这取决于你的调制策略。

  • SVPWM 线性区:Vmax = Vdc / √3。这是最常用的,调制比 0.577。
  • 过调制区:Vmax 可以取到 Vdc / 2(调制比 0.5)甚至更高,但谐波会增大。
  • 方波模式:Vmax = Vdc * 2 / π,但电流波形会严重畸变。

我个人建议:先用 SVPWM 线性区,等弱磁控制稳定了,再考虑往过调制扩展。一步到位容易出问题。

4.5 代码实现示例

下面是一段基于电压反馈的弱磁控制代码,C 语言风格,你可以在 DSP 或 MCU 上直接移植。

// 弱磁控制:基于电压反馈
// 输入:Vd_ref, Vq_ref, Vdc, Id_ref_original
// 输出:Id_ref_weak (叠加后的 Id 指令)

#define VMAX_SCALE  0.57735f  // 1/sqrt(3)
#define ID_RATED    10.0f     // 额定 Id 幅值

float voltage_flux_weakening(float Vd_ref, float Vq_ref, float Vdc, float Id_ref_orig) {
    static float Id_weak = 0.0f;
    static float integral = 0.0f;
    
    // 1. 计算合成电压幅值
    float Vs_ref = sqrtf(Vd_ref * Vd_ref + Vq_ref * Vq_ref);
    
    // 2. 计算电压极限
    float Vmax = Vdc * VMAX_SCALE;
    
    // 3. 电压误差
    float err = Vmax - Vs_ref;
    
    // 4. PI 调节器(输出为负的 Id 补偿)
    float Kp = 1.0f;
    float Ki = 100.0f;
    
    // 比例项
    float prop = Kp * err;
    
    // 积分项(带限幅)
    integral += Ki * err * DT;  // DT 为控制周期
    if (integral > 0.0f) integral = 0.0f;  // 只允许负积分
    if (integral < -ID_RATED) integral = -ID_RATED;
    
    // 输出
    Id_weak = prop + integral;
    
    // 输出限幅
    if (Id_weak > 0.0f) Id_weak = 0.0f;
    if (Id_weak < -ID_RATED) Id_weak = -ID_RATED;
    
    // 5. 叠加到原始 Id 指令
    float Id_ref_final = Id_ref_orig + Id_weak;
    
    return Id_ref_final;
}

这段代码有几个关键点:

  • 积分限幅只允许负方向,因为弱磁只需要负 Id。
  • 输出限幅同样只允许负值,上限为 0。
  • DT 是控制周期,别忘了乘,否则积分系数会乱。

4.6 优缺点对比

和查表法比,电压反馈法有什么好处?又有什么短板?

对比项 查表法 电压反馈法
模型依赖 高(需要精确参数) 低(不依赖参数)
动态响应 快(开环前馈) 中等(闭环调节)
鲁棒性 差(参数变化会跑偏) 好(自动修正)
实现复杂度 低(查表即可) 中等(需要调 PI)
适用场景 参数稳定、工况固定 参数变化大、工况复杂

你想想看,如果你的电机是批量生产的,参数一致性很好,查表法确实省事。但如果你做的是电动汽车、压缩机这种工况多变的项目,电压反馈法会更靠谱。

4.7 实际项目中的避坑指南

最后,我分享几个实际项目中容易踩的坑:

  • 电压采样噪声:Vdc 采样如果带噪声,Vs_ref 会抖,弱磁 PI 跟着抖。我建议加一个 10Hz 左右的低通滤波。
  • 启动时的弱磁误触发:电机刚启动时,Vs_ref 很小,误差为正,积分会往正方向跑。但我们的积分限幅只允许负方向,所以没问题。但如果你忘了设限幅,积分会饱和,等需要弱磁时半天反应不过来。
  • 弱磁区和电流环的交互:弱磁 PI 的输出会改变 Id 指令,Id 指令变了又会影响 Vs_ref。这个环路如果 PI 参数不匹配,容易振荡。我一般把弱磁 PI 的带宽设成电流环带宽的 1/5 到 1/10。

一句话记住:电压反馈弱磁,核心是“电压不够,Id 来凑”。凑多了会发热,凑少了会失控,PI 参数就是那个“刚刚好”的平衡点。