3、弱磁控制基本原理:从基速到弱磁区,电压饱和与电流分配策略
好,咱们进入正题。
弱磁控制,说白了就是让电机跑得比额定转速更快。你想想看,电机到了基速以后,反电动势都快赶上母线电压了,这时候还想提速怎么办?只能靠弱磁。
我刚开始接触PMSM时,总觉得弱磁是个很玄乎的东西。后来亲手调过几台电机,踩过坑,才慢慢摸清楚这里面的门道。今天我就把核心思路拆开来讲。
3.1 电压极限与基速的物理含义
先搞清楚一个问题:为什么会有基速?
电机运行时,定子绕组会产生反电动势。这个反电动势跟转速成正比,跟磁链也成正比。当转速升高到某个点,反电动势接近甚至等于母线电压时,电流就再也灌不进去了。这个转速,就是基速。
用公式表达更清楚:
U_s = ω * ψ_s + I_s * R_s
其中:
U_s — 定子电压矢量幅值
ω — 电角速度
ψ_s — 定子磁链幅值
I_s — 定子电流矢量幅值
R_s — 定子电阻
忽略电阻压降(高速时电阻压降占比很小),近似为:
U_s ≈ ω * ψ_s
所以,当U_s达到母线电压极限U_dc/√3(SVPWM调制下),转速再想往上走,就必须减小ψ_s。这就是弱磁的本质。
核心结论:弱磁不是真的把磁钢消磁,而是通过施加直轴去磁电流Id(负值),抵消一部分永磁体产生的磁链,从而降低总磁链ψ_s。
我在项目里遇到过一台额定3000rpm的电机,客户非要跑到4500rpm。一开始我硬着头皮加电压,结果电流波形都畸变了。后来老老实实做弱磁,才把问题解决。嗯,这里要注意:弱磁不是万能的,它受限于电机本身的退磁电流极限。
3.2 电压饱和:你碰到的第一个瓶颈
电压饱和,就是逆变器输出电压不够用了。
你想想看,SVPWM调制下,最大相电压幅值是U_dc/√3。当电机反电动势加上阻抗压降超过这个值,电流环就失控了。表现出来就是:给定电流很大,实际电流却上不去,转速也提不动。
判断是否进入电压饱和,我一般看两个指标:
- 电流环输出限幅标志:如果d轴或q轴电压指令持续达到限幅值,说明已经饱和。
- 实际电流跟踪误差:给定Id=0,实际Id却偏正,说明电压不够用了。
调试小技巧:我习惯在示波器上同时观察Vd_ref和Vq_ref。当这两个值加起来接近电压极限圆时,就该启动弱磁了。别等到完全饱和再介入,那时候电流环已经乱了。
3.3 电流分配策略:Id和Iq怎么分?
进入弱磁区后,电流分配就不再是简单的Id=0了。我们需要在电压极限圆和电流极限圆之间找到一个工作点。
先看两个约束条件:
电流极限圆:Id² + Iq² ≤ I_max²
电压极限圆:(Ld*Id + ψ_f)² + (Lq*Iq)² ≤ (U_max/ω)²
其中:
- Ld、Lq — dq轴电感
- ψ_f — 永磁体磁链
- U_max — 最大相电压幅值
- I_max — 最大相电流幅值
说白了,我们要在电流圆和电压圆的交集里,找一个能让输出转矩最大的点。
常用的分配策略有三种:
| 策略名称 | 核心思路 | 适用场景 |
|---|---|---|
| 查表法 | 离线计算好Id/Iq对应表,运行时查表 | 对实时性要求高、处理器资源有限 |
| 梯度下降法 | 在线搜索最优工作点 | 参数变化大、需要自适应 |
| 电压反馈法 | 根据电压裕量调节Id | 工程中最常用,鲁棒性好 |
我个人最常用的是电压反馈法。为什么呢?因为它简单、稳定,而且对电机参数不敏感。
具体做法是这样的:
- 实时计算电压利用率:U_ratio = sqrt(Vd² + Vq²) / U_max
- 当U_ratio超过某个阈值(比如0.95),启动弱磁调节器
- 弱磁调节器输出负的Id_ref,抵消磁链
- 同时根据Id_ref重新计算Iq_ref,保证电流不超限
注意:我曾经在一个项目中,弱磁调节器的PI参数没调好,导致Id来回震荡。电机嗡嗡响,电流波形像锯齿。后来把比例系数减小了一半,积分时间放大了两倍,才稳住。弱磁环的带宽一般要比电流环低一个数量级,别调太快。
3.4 从基速到弱磁区的过渡
过渡过程处理不好,很容易出现转矩抖动。
我建议的做法是:在基速附近设置一个过渡区。比如基速是3000rpm,那从2800rpm开始就逐渐引入弱磁,而不是到了3000rpm突然切入。
过渡区的处理:
- 线性过渡:根据转速线性增加Id的负值
- 查表过渡:预先标定好不同转速下的最优Id
- 自适应过渡:根据电压裕量动态调整
我做过对比,线性过渡最简单,但转矩波动稍大。查表法最平滑,但标定工作量大。自适应过渡是折中方案,工程上用得最多。
实战建议:第一次调弱磁时,先用手动模式。给定一个固定的负Id,比如-10A,然后慢慢升速。观察电流波形和转矩输出。等摸清楚电机的脾气了,再上自动弱磁。我当年就是太心急,直接上自动,结果电机震得像要散架。
3.5 一个简单的弱磁控制代码框架
下面给个C语言风格的伪代码,帮你理解整个流程:
// 弱磁控制主函数
void FieldWeakeningControl(float speed_ref, float speed_fb)
{
// 1. 计算电压利用率
float U_ratio = sqrt(Vd_ref*Vd_ref + Vq_ref*Vq_ref) / U_max;
// 2. 判断是否进入弱磁区
if (U_ratio > 0.95)
{
// 3. 弱磁调节器(PI)
error = U_ratio - 0.95;
Id_fw = Id_fw + Kp_fw * (error - error_last) + Ki_fw * error * Ts;
// 限制Id_fw为负值
if (Id_fw > 0) Id_fw = 0;
if (Id_fw < Id_min) Id_fw = Id_min; // Id_min为退磁极限
// 4. 重新分配Iq
float I_max_available = sqrt(I_max*I_max - Id_fw*Id_fw);
if (Iq_ref > I_max_available) Iq_ref = I_max_available;
// 5. 更新Id参考值
Id_ref = Id_fw;
}
else
{
// 未进入弱磁区,保持Id=0或MTPA
Id_ref = 0; // 或查MTPA表
}
error_last = error;
}
这段代码很基础,但框架是完整的。实际项目中,你还需要加入抗积分饱和、限幅处理、模式切换平滑等细节。
我的习惯:弱磁调节器的输出Id_fw,我会加一个一阶低通滤波。时间常数设个5ms左右,能有效抑制噪声引起的抖动。别小看这个滤波,有时候就是它决定了系统稳不稳。
3.6 常见问题与避坑指南
最后,分享几个我踩过的坑:
- 弱磁深度不够:转速提不上去。检查Id是否真的负得足够多,有时候是Id限幅设得太保守。
- 弱磁过头:转矩输出严重下降,甚至出现不可逆退磁。我曾经有一台样机,弱磁电流设到-30A,结果跑了几百小时后磁钢退磁了,电机性能永久下降。从那以后,我每次都会查电机手册的退磁曲线。
- 电压环和电流环打架:弱磁调节器和电流环共用同一个电压资源,容易互相干扰。解决办法是让弱磁环的响应慢一些,别跟电流环抢带宽。
- 过渡区抖动:从基速到弱磁区切换时,转矩会突然下降。我一般会在过渡区加一个转矩补偿,根据转速差适当增加Iq。
好了,弱磁的基本原理和电流分配策略就讲到这里。下一章我会详细讲弱磁调节器的参数整定方法,包括PI参数怎么调、怎么避免震荡。到时候咱们再细聊。