作为一名从事电机控制多年的工程师,我经常遇到需要在内置式永磁同步电机(PMSM)上实现宽调速范围控制的需求。传统控制方法在高速区往往面临电压饱和问题,而弱磁控制正是解决这一难题的关键技术。今天我要分享的是基于直接计算法的弱磁控制实现方案,这个方案已经在多个工业项目中得到验证。
内置式PMSM与表贴式电机最大的区别在于其凸极效应(Ld≠Lq),这为MTPA控制提供了天然优势。在实际工程中,我们通常将控制策略分为三个区域:额定转速以下的MTPA控制区、额定转速至转折速度的电流圆运动区,以及转折速度以上的MTPV控制区。这种分区控制方案能够在不增加硬件成本的情况下,将电机调速范围提升30%-50%。
MTPA(Maximum Torque Per Ampere)控制的核心思想是在给定电流幅值下,通过优化id和iq的分配比例,使输出转矩最大化。对于内置式PMSM,其电磁转矩公式为:
Te = 3/2 * p * [ψf * iq + (Ld - Lq) * id * iq]
其中ψf为永磁体磁链,p为极对数。从公式可以看出,转矩不仅与iq有关,还受到id的影响。这就是为什么我们需要同时控制d轴和q轴电流。
在实际工程中,我们通常采用离线计算+在线查表的方式实现MTPA控制。具体步骤包括:
以下是经过工程验证的MTPA控制代码实现(基于STM32平台):
c复制typedef struct {
float Ld; // d轴电感
float Lq; // q轴电感
float psi_f; // 永磁体磁链
uint8_t p; // 极对数
} MotorParams;
void MTPA_Control(float Is, float* id_ref, float* iq_ref, MotorParams* params) {
float K = (params->Ld - params->Lq) / params->psi_f;
float delta = 1 + 4 * (K * Is) * (K * Is);
*id_ref = (params->psi_f / (2 * (params->Lq - params->Ld))) *
(1 - sqrtf(delta));
*iq_ref = sqrtf(Is*Is - (*id_ref)*(*id_ref));
}
关键参数整定经验:
- Ld和Lq的测量误差应控制在±5%以内,否则会导致MTPA点偏移
- 实际应用中建议加入电流限制环节,防止过流
- 对于批量生产的电机,建议每台都进行参数辨识
当转速超过额定转速后,电机端电压逐渐接近逆变器输出电压极限。此时需要实施弱磁控制,其本质是通过注入负的d轴电流来削弱气隙磁场。在电流矢量平面上,这表现为电流矢量沿着电流极限圆运动。
电压极限方程可以表示为:
(Vmax/ω)^2 = (Lqiq)^2 + (ψf + Ldid)^2
其中Vmax为最大输出电压,ω为电角速度。这个方程描述了一个椭圆,即电压极限椭圆。
与传统的查表法不同,直接计算法通过实时求解电压方程来获得最优电流指令。这种方法虽然计算量较大,但精度更高,特别适合参数变化较大的场合。
c复制void FluxWeakening_Control(float omega, float Vdc, float* id_ref,
float* iq_ref, MotorParams* params) {
float Vmax = Vdc / sqrtf(3); // 最大相电压
float a = params->Lq;
float b = params->Ld;
float c = params->psi_f;
// 求解电压极限椭圆与电流圆的交点
float A = b*b + a*a;
float B = 2 * b * c;
float C = c*c - (Vmax/omega)*(Vmax/omega);
float discriminant = B*B - 4*A*C;
if (discriminant < 0) {
// 进入MTPV区域
MTPV_Control(omega, Vdc, id_ref, iq_ref, params);
return;
}
*id_ref = (-B - sqrtf(discriminant)) / (2*A);
*iq_ref = sqrtf(Is_max*Is_max - (*id_ref)*(*id_ref));
}
工程实践中的注意事项:
- 需要实时监测直流母线电压Vdc,电压波动会影响控制效果
- 建议加入低通滤波,避免电流指令突变
- 在接近电压极限时,需要适当降低转矩指令
转折速度是指电流矢量到达电流极限圆与电压极限椭圆切点时的速度。超过这个速度后,电机进入MTPV控制区域。转折速度的计算公式为:
ωt = Vmax / √[(LqIs_max)^2 + (ψf + Ldid_min)^2]
其中id_min是电流极限圆上d轴电流的最小值(负的最大值)。
MTPV(Maximum Torque Per Voltage)控制的目标是在电压受限的情况下最大化输出转矩。其实现代码如下:
c复制void MTPV_Control(float omega, float Vdc, float* id_ref,
float* iq_ref, MotorParams* params) {
float Vmax = Vdc / sqrtf(3);
float k = params->Lq / params->Ld;
*id_ref = -params->psi_f / params->Ld;
*iq_ref = (Vmax/omega) / (params->Lq * sqrtf(1 + k*k));
// 电流限制
float Is = sqrtf((*id_ref)*(*id_ref) + (*iq_ref)*(*iq_ref));
if (Is > Is_max) {
float ratio = Is_max / Is;
*id_ref *= ratio;
*iq_ref *= ratio;
}
}
在实际系统中,三种控制策略需要通过状态机实现无缝切换。我推荐采用以下状态切换逻辑:
切换时需要特别注意:
在实际项目中,我们遇到过以下几个典型问题:
经过多个项目的验证,这套控制方案在以下场景表现优异:
对于需要更高性能的场合,可以考虑结合模型预测控制(MPC)等先进算法。但在大多数工业应用中,这种直接计算法已经能够满足要求,且实现相对简单。