4、弱磁控制策略(二):基于电压反馈的弱磁控制方法
上一章我们聊了查表法弱磁,说白了就是离线算好,在线直接查。但实际跑起来你会发现,电机参数会变,母线电压会抖,查表法有时候会“跑偏”。
那怎么办?加反馈。
基于电压反馈的弱磁控制,是我个人在实际项目里用得最多的一种方法。它不依赖精确的电机模型,而是盯着一个东西——电压环的输出。只要电压环告诉你“电压不够了”,它就自动往弱磁方向调。
4.1 核心思想:电压环与电流指令的闭环
先想一个问题:什么时候需要弱磁?
答案是:当电机反电动势接近或超过母线电压能提供的极限时。
反电动势你没法直接测,但你可以测电压指令。在矢量控制里,Vd_ref 和 Vq_ref 经过反 Park 变换后,合成电压幅值 Vs_ref。如果这个值超过了 Vdc / √3(SVPWM 线性区极限),那就说明——电压饱和了。
基于电压反馈的弱磁,就是拿这个 Vs_ref 和电压极限 Vmax 做差,误差进 PI 调节器,输出一个 负的 Id 补偿量,叠加到原来的 Id 指令上。
一句话总结:电压环检测到“电压快用完了”,就主动把 Id 往负方向拉,让出电压裕量给 Iq,从而提升转速。
4.2 控制框图与信号流
下面这张图是我自己画的控制结构,你看一眼就能明白信号怎么走的。
信号流程是这样的:
- 转速环输出 Iq_ref(转矩电流指令)。
- 电压环(弱磁 PI)检测 Vs_ref 是否超过 Vmax。
- 如果超了,弱磁 PI 输出一个 负的 Id_weak,叠加到 Id_ref 上。
- Id PI 和 Iq PI 分别跟踪修正后的电流指令。
- 输出 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 参数就是那个“刚刚好”的平衡点。