双惯量伺服系统在工业自动化领域应用广泛,从工业机器人到数控机床都可见其身影。这类系统最让人头疼的问题莫过于机械谐振——就像吉他琴弦被拨动后的持续振动,只不过在伺服系统里,这种振动轻则导致设备发出刺耳噪音,重则直接损坏机械结构。传统解决方案多采用陷波滤波器或加速度反馈,但往往陷入"按下葫芦浮起瓢"的困境。
这次要介绍的仿真模型,采用了一种更为巧妙的控制策略:二阶自抗扰控制器(ADRC)。与常规的三环控制结构不同,我们将位置环和速度环合并,通过一个精心设计的扩展状态观测器(ESO)来实时估计并补偿系统扰动。这种设计不仅简化了控制结构,更在谐振抑制方面展现出惊人的效果。
仿真模型基于Matlab/Simulink平台搭建,采用离散化仿真方式,确保与真实数字控制系统的高度一致性。主要模块构成如下:
功率部分:
控制部分:
信号处理:
SVPWM实现要点:
matlab复制function [PWM_A, PWM_B, PWM_C] = SVPWM(Ualpha, Ubeta, Vdc)
% 归一化处理
Ualpha_norm = Ualpha / (Vdc/sqrt(3));
Ubeta_norm = Ubeta / (Vdc/sqrt(3));
% 扇区判断与作用时间计算
theta = atan2(Ubeta_norm, Ualpha_norm);
sector = floor(theta/(pi/3)) + 3;
if sector > 5
sector = 0;
end
% ...后续计算省略...
end
这个实现考虑了电压利用率最大化,同时通过对称PWM生成降低谐波含量。
电流环PI参数整定:
matlab复制Kp = 2 * pi * bandwidth * Lq; % Lq为q轴电感
Ki = R * Kp / Lq; % R为相电阻
按照典型的一阶系统响应进行设计,确保电流环有足够快的动态响应。
ADRC的核心思想是将系统未知动态和外部扰动统一视为"总扰动",通过ESO实时估计并补偿。我们的二阶ADRC结构包含:
matlab复制function [z1,z2,z3] = ESO(y, u, h, beta1,beta2,beta3)
persistent z_hat1 z_hat2 z_hat3
if isempty(z_hat1)
z_hat1 = 0; z_hat2 = 0; z_hat3 = 0;
end
e = y - z_hat1;
z_hat1 = z_hat1 + h*(z_hat2 + beta1*e);
z_hat2 = z_hat2 + h*(z_hat3 + beta2*e + b0*u);
z_hat3 = z_hat3 + h*(beta3*e);
z1 = z_hat1; z2 = z_hat2; z3 = z_hat3;
end
其中:
z1:系统输出估计z2:输出微分估计z3:总扰动估计b0:控制增益的倒数ESO参数遵循"带宽参数化"原则:
code复制beta1 = 3 * w0
beta2 = 3 * w0^2
beta3 = w0^3
其中w0为观测器带宽,通常取控制系统带宽的3-5倍。例如当控制带宽为100Hz时:
matlab复制w0 = 2*pi*300; % 300Hz观测器带宽
beta1 = 3*w0;
beta2 = 3*w0^2;
beta3 = w0^3;
双惯量系统动力学方程:
code复制Jm·θ̈m + Bm·θ̇m + K·(θm - θL) = Tm
JL·θ̈L + BL·θ̇L + K·(θL - θm) = 0
其中:
谐振频率计算公式:
code复制ω_res = sqrt(K*(Jm+JL)/(Jm*JL))
在Simulink中建立双惯量模型时需注意:
典型参数示例:
matlab复制Jm = 0.001; % kg·m²
JL = 0.005;
K = 1000; % N·m/rad
Bm = 0.01; % N·m/(rad/s)
在阶跃位置指令下,系统表现出:
与传统PI控制相比,ADRC在保持快速性的同时显著降低了超调。
关键对比指标:
| 指标 | 无ADRC | 有ADRC |
|---|---|---|
| 转速差峰值 | 50rpm | 5rpm |
| 稳定时间 | 0.5s | 0.1s |
| 谐振幅度 | 30% | <3% |
在1Nm阶跃负载扰动下:
推荐仿真设置:
matlab复制Solver: ode4 (Runge-Kutta)
Fixed step size: 50e-6 % 对应20kHz PWM
调试口诀:"先内后外,先观后控"
问题1:观测器输出振荡
问题2:谐振抑制效果差
问题3:系统响应迟缓
可扩展为基于模型参考的自适应ADRC:
matlab复制function update_parameters()
% 根据运行状态在线调整b0和ESO参数
if error > threshold
b0 = b0 * 0.9;
w0 = w0 * 1.1;
end
end
对于三惯量系统:
模型可直接用于:
移植注意事项:
在实际伺服系统调试中,这套方法已经帮助多个项目解决了长期存在的谐振问题。特别是在某型号工业机器人上应用后,末端振动幅度降低了80%,定位时间缩短了30%。最令人惊喜的是,这套控制算法对系统参数变化展现出极强的鲁棒性——当负载惯量在运行中发生变化时,传统方法需要重新整定参数,而ADRC却能自动适应。