弱磁控制

← 返回 FOC MOC | ← 返回主页


一、引言:为什么需要弱磁控制?

在永磁同步电机(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 算法步骤

  1. 计算电压利用率: 实时计算电压指令幅值与最大可用电压的比值。 ; ; ;
  2. 弱磁决策: 当电压利用率超过设定的阈值(如0.95),则启动弱磁控制。
  3. 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; // 不弱磁 }
  4. 电流指令合成: 将弱磁补偿电流叠加到原有的 d 轴电流指令上。原有的 可能来自 MTPA 模块或为零(对于表贴式电机)。 ; ; // q轴指令通常由转矩环给出
  5. 电流限制: 确保最终的 (, ) 仍在电流极限圆内。

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;
}