弱磁控制
一、引言:为什么需要弱磁控制?
在永磁同步电机(PMSM)的矢量控制(FOC)中,当电机转速达到基速以上时,反电动势(Back-EMF)会接近甚至超过逆变器所能提供的最大电压。此时,若继续维持额定磁链,将无法提供足够的电压来驱动电流,导致转速无法进一步提升。 弱磁控制(Field Weakening Control) 正是为了解决这一问题而提出的关键技术。它通过主动减小直轴(d轴)电流(即产生负的),来削弱电机气隙磁场,从而在电压极限范围内,实现电机在基速以上的恒功率运行。 **核心目标:**在直流母线电压有限的情况下,通过控制策略拓展电机的调速范围,使其运行于更高转速。
二、理论基础:电压极限圆与电流极限椭圆
理解弱磁控制,必须掌握其在 d-q 坐标系下的图形化表示——电压极限圆和电流极限椭圆。
2.1 电压极限方程与电压极限圆
在稳态和忽略电阻压降的条件下,PMSM 在 d-q 坐标系下的电压方程可简化为:
逆变器输出电压受直流母线电压 限制,其幅值需满足:
将电压方程代入不等式,得到以电流 和 为变量的椭圆方程:
在 - 平面上,这是一个圆心在 ,半径随转速 增大而缩小的椭圆,称为 电压极限椭圆 。所有可行的电流矢量必须位于椭圆内部。
电压极限椭圆与电流极限圆示意图
2.2 电流极限方程与电流极限圆
电机电流受逆变器最大输出电流 和电机本身热限制,需满足:
在 - 平面上,这是一个以原点为圆心、 为半径的圆,称为 电流极限圆 。
图形化理解
电机在任何工况下的运行点 (, ) 必须同时位于 电流极限圆内 和 当前转速对应的电压极限椭圆内 。
- 基速以下: 电压椭圆很大,电流矢量由最大转矩/电流(MTPA)轨迹或转矩需求决定,运行在电流圆内。
- 基速以上: 电压椭圆缩小,与电流圆相交。为了输出转矩(),必须将 向负方向调节(弱磁),使电流矢量移动到电压椭圆与电流圆的交叠区域。
三、弱磁控制原理
弱磁控制的本质是:当检测到电压达到极限时,主动注入负的直轴电流 ,以抵消永磁体磁链 ,从而降低总的气隙磁链,使得在相同电压下能产生更高的转速。
| 控制区域 | 特点 | 电流矢量轨迹 | 目标 |
|---|---|---|---|
| 恒转矩区 (I) | 转速低于基速,电压有裕量 | 沿 MTPA 曲线 | 最大输出转矩 |
| 恒功率区 (II) - 弱磁区 | 转速高于基速,电压饱和 | 沿电流圆边界向负移动 | 扩展转速范围 |
| 恒功率区 (III) - 深度弱磁 | 转速很高,电压严重饱和 | 沿电压椭圆边界移动 | 维持功率,转速最大化 |
弱磁控制软件架构图
四、弱磁控制算法实现
常见的弱磁控制算法有查表法、梯度下降法、电压反馈PI调节法等。下面重点介绍工程中最常用的 电压反馈PI弱磁法 。
4.1 算法步骤
- 计算电压利用率: 实时计算电压指令幅值与最大可用电压的比值。 ; ; ;
- 弱磁决策: 当电压利用率超过设定的阈值(如0.95),则启动弱磁控制。
- PI调节产生弱磁电流: 以 () 或 () 作为误差,通过PI控制器生成负的 。 // 伪代码示例 if (Voltage_Utilization > Threshold) { error = U_ref - U_max; // 或 error = Voltage_Utilization - 1.0; delta_Id_fw = PI_Controller(error); // PI输出为负值 // 限制弱磁电流范围 delta_Id_fw = clamp(delta_Id_fw, Id_min, 0); } else { delta_Id_fw = 0; // 不弱磁 }
- 电流指令合成: 将弱磁补偿电流叠加到原有的 d 轴电流指令上。原有的 可能来自 MTPA 模块或为零(对于表贴式电机)。 ; ; // q轴指令通常由转矩环给出
- 电流限制: 确保最终的 (, ) 仍在电流极限圆内。
4.2 C语言代码框架
/**
* @brief 弱磁控制函数
* @param Ud_ref, Uq_ref: dq轴电压指令
* @param Udc: 直流母线电压
* @param speed_el: 电角速度 (rad/s)
* @param Id_ref_mtpa: 来自MTPA的d轴电流指令
* @param Iq_ref_torque: 来自转矩环的q轴电流指令
* @param pId_ref_fw: 输出弱磁后的d轴电流指令指针
* @param pIq_ref_fw: 输出弱磁后的q轴电流指令指针
*/
void FieldWeakening_Control(float Ud_ref, float Uq_ref, float Udc, float speed_el,
float Id_ref_mtpa, float Iq_ref_torque,
float* pId_ref_fw, float* pIq_ref_fw) {
static float fw_integral = 0.0f;
const float FW_KP = 0.05f;
const float FW_KI = 0.1f;
const float U_MAX_RATIO = 0.95f;
const float ID_MIN = -50.0f; // 最大弱磁电流限制
float U_ref = sqrtf(Ud_ref*Ud_ref + Uq_ref*Uq_ref);
float U_max = Udc / 1.73205f; // sqrt(3)
float U_ratio = U_ref / U_max;
float delta_Id = 0.0f;
// 1. 判断是否需要弱磁
if (U_ratio > U_MAX_RATIO && speed_el > 10.0f) {
// 2. PI调节器计算弱磁电流增量
float error = U_ref - U_max; // 或 error = U_ratio - 1.0f;
fw_integral += error * FW_KI * CONTROL_PERIOD;
fw_integral = fmaxf(fw_integral, ID_MIN); // 积分限幅
delta_Id = error * FW_KP + fw_integral;
// 3. 输出限幅
delta_Id = fmaxf(delta_Id, ID_MIN);
delta_Id = fminf(delta_Id, 0.0f);
} else {
fw_integral = 0.0f; // 重置积分,防止饱和
}
// 4. 合成最终电流指令
float Id_temp = Id_ref_mtpa + delta_Id;
float Iq_temp = Iq_ref_torque;
// 5. 电流圆限制
float I_sq = Id_temp*Id_temp + Iq_temp*Iq_temp;
const float I_MAX_SQ = 10000.0f; // 假设最大电流100A,平方为10000
if (I_sq > I_MAX_SQ) {
float ratio = sqrtf(I_MAX_SQ / I_sq);
Id_temp *= ratio;
Iq_temp *= ratio;
}
*pId_ref_fw = Id_temp;
*pIq_ref_fw = Iq_temp;
}