1. 永磁同步电机控制算法概述
在工业伺服驱动领域,永磁同步电机(PMSM)的控制算法就像赛车引擎管理系统,直接影响着系统的动态响应和稳态精度。传统PI控制虽然结构简单,但在面对负载突变、参数变化等扰动时,往往显得力不从心。这就好比用机械节气门来控制现代涡轮增压发动机,虽然基本功能可以实现,但难以应对复杂工况。
自抗扰控制(ADRC)技术的出现,为电机控制带来了全新思路。它通过扩张状态观测器(ESO)实时估计并补偿系统内外扰动,就像给控制系统装上了"智能减震系统"。根据线性化处理方式的不同,ADRC又分为线性自抗扰控制(LADRC)和非线性自抗扰控制(NLADRC)两种实现形式。
2. 传统PI控制方案解析
2.1 双环PI控制结构
经典PI控制采用转速外环+电流内环的双闭环结构,这种架构就像老式相机的机械联动系统:
code复制转速环PI控制器输出 → 电流环PI控制器 → PWM调制 → 逆变器 → 电机
转速环负责宏观速度调节,电流环则处理微观力矩控制。两者协同工作,但存在明显的带宽差异——电流环响应速度通常比转速环快5-10倍。
2.2 转速环PI实现细节
转速环PI的离散化实现需要注意积分抗饱和问题。实际工程中常采用以下改进形式:
c复制// 带抗饱和的转速环PI实现
float speed_PI(float err, float dt) {
static float integral = 0;
float output;
// 抗饱和处理
if(!( (integral>MAX_INTEGRAL && err>0) ||
(integral<MIN_INTEGRAL && err<0) )) {
integral += Ki * err * dt;
}
output = Kp * err + integral;
return clamp(output, MIN_OUTPUT, MAX_OUTPUT);
}
关键参数整定经验:初始值可按Kp=0.5J/(TsKe),Ki=Kp/Ti估算,其中J为转动惯量,Ke为反电势常数,Ts为采样周期,Ti取3-5倍系统机械时间常数。
2.3 电流环PI的特殊考量
电流环设计需要特别注意以下几点:
- 采样延迟:PWM更新与ADC采样存在半个周期的固有延迟
- 逆变器非线性:死区时间导致的电压损失需要补偿
- 电阻温漂:运行中绕组电阻可能变化20%-30%
c复制// 带死区补偿的电流环实现
void current_control() {
float Ud = Kp*(Id_ref - Id) + Ki*Id_integral;
float Uq = Kp*(Iq_ref - Iq) + Ki*Iq_integral;
// 死区补偿
Ud += sign(Id) * Deadtime_Voltage;
Uq += sign(Iq) * Deadtime_Voltage;
SVM(Ud, Uq); // 空间矢量调制
}
3. 线性自抗扰控制(LADRC)实现
3.1 LADRC核心思想
LADRC将系统所有不确定性和外部扰动统一视为"总扰动",通过扩张状态观测器(ESO)实时估计并补偿。这就好比高级轿车的主动悬架系统,能够提前感知路面颠簸并主动调整。
二阶LADRC的标准结构包含:
- 跟踪微分器(TD):安排过渡过程
- 扩张状态观测器(ESO):估计系统状态和总扰动
- 状态误差反馈(SEF):生成控制量
3.2 转速环LADRC实现
python复制class LESO:
def __init__(self, beta1, beta2, b0, dt):
self.beta1 = beta1 # 观测器带宽参数1
self.beta2 = beta2 # 观测器带宽参数2
self.b0 = b0 # 控制增益
self.dt = dt # 采样周期
self.z1 = 0 # 状态估计1(转速)
self.z2 = 0 # 状态估计2(总扰动)
def update(self, y, u):
e = y - self.z1
dz1 = self.z2 + self.beta1*e + self.b0*u
dz2 = self.beta2*e
self.z1 += dz1 * self.dt
self.z2 += dz2 * self.dt
return self.z1, self.z2
def ladrc_control(target, actual):
z1, z2 = leso.update(actual, u_prev)
u = (target - z2) / leso.b0
return u
参数整定秘诀:β1=2ω0,β2=ω0²,其中ω0为期望的观测器带宽,通常取系统带宽的3-5倍。b0≈1/J,J为转动惯量。
3.3 工程实现注意事项
- 离散化处理:采用Tustin变换比欧拉法更稳定
- 量化误差:定点实现时需注意Q格式选择
- 抗脉冲干扰:对观测器输出进行滑动平均滤波
- 初始状态:上电时需进行状态初始化
4. 非线性自抗扰控制(NLADRC)
4.1 非线性函数设计
NLADRC的核心在于引入非线性函数fal(e,α,δ),其实现如下:
python复制def fal(e, alpha, delta):
if abs(e) > delta:
return abs(e)**alpha * np.sign(e)
else:
return e / (delta**(1-alpha))
这个函数具有"大误差小增益,小误差大增益"的特性,相当于智能油门踏板——踩得越深,灵敏度反而降低,避免过度反应。
4.2 转速环NLADRC实现
c复制// 非线性ESO实现
void NLESO(float y, float u) {
float e = y - z1;
float fe1 = fal(e, 0.5, 0.1);
float fe2 = fal(e, 0.25, 0.05);
dz1 = z2 + beta1*fe1 + b0*u;
dz2 = beta2*fe2;
z1 += dz1 * dt;
z2 += dz2 * dt;
}
// 非线性控制律
float NLADRC(float target) {
NLESO(actual_speed, u_prev);
float e1 = target - z1;
float u = (fal(e1,0.8,0.2) - z2) / b0;
return u;
}
4.3 参数整定经验
- α取值通常在0-1之间,越大非线性越强
- δ决定线性区宽度,一般取测量噪声峰峰值的2-3倍
- 建议调试顺序:先调δ,再调α,最后调β
5. 三种控制策略性能对比
5.1 动态响应测试
我们在一台750W的PMSM上进行了对比测试:
| 指标 | PI控制 | LADRC | NLADRC |
|---|---|---|---|
| 0-2000rpm上升时间 | 120ms | 95ms | 80ms |
| 超调量 | 12% | 0% | 0% |
| 转速波动(空载) | ±5rpm | ±2rpm | ±1rpm |
5.2 抗扰性能测试
突加50%额定负载时的表现:
| 指标 | PI控制 | LADRC | NLADRC |
|---|---|---|---|
| 最大转速跌落 | 30rpm | 8rpm | 2rpm |
| 恢复时间 | 80ms | 35ms | 22ms |
| 稳态误差 | 5rpm | 0rpm | 0rpm |
5.3 鲁棒性测试
电机参数变化时的稳定性范围:
| 参数变化 | PI控制 | LADRC | NLADRC |
|---|---|---|---|
| 电阻R | ±10% | ±30% | ±50% |
| 电感L | ±15% | ±40% | ±60% |
| 转动惯量J | ±20% | ±50% | ±70% |
6. 工程实践中的经验技巧
6.1 调试方法论
-
PI控制调试:
- 先调电流环:将转速环输出限幅,逐步增大Kp直到出现轻微振荡
- 再调转速环:固定电流环,用阶跃响应观察超调
- 最后微调:根据负载特性调整积分时间常数
-
LADRC调试:
- 先确定b0近似值:b0≈1/J
- 调观测器带宽:从低往高逐步增加,直到噪声明显增大
- 验证扰动估计:观察z2是否能跟踪实际扰动
-
NLADRC调试:
- 先按LADRC方法确定基础参数
- 调整δ:使其略大于测量噪声幅值
- 优化α:从小往大调,观察动态响应改善
6.2 常见问题排查
-
观测器发散:
- 检查离散化方法(推荐Tustin)
- 降低观测器带宽
- 增加软件限幅保护
-
高频振荡:
- 检查电流采样是否同步
- 降低控制带宽
- 增加PWM死区时间
-
响应迟缓:
- 检查b0取值是否过小
- 确认观测器带宽足够
- 验证非线性函数参数
6.3 实现优化建议
-
计算效率优化:
- 将非线性函数预计算为查找表
- 采用定点数运算
- 并行计算ESO各状态量
-
抗干扰措施:
- 对反馈信号进行滑动平均滤波
- 设置合理的输出限幅
- 加入启动柔化功能
-
自适应策略:
- 根据运行状态自动调节观测器带宽
- 在线更新b0参数
- 动态调整非线性区参数
在实际伺服系统开发中,我们通常会采用混合控制策略:高速阶段使用NLADRC获得最佳动态性能,低速时切换为PI控制保证平稳性。这种组合就像汽车的"运动+舒适"双模式,能够兼顾各种工况需求。