双惯量伺服系统在工业自动化领域应用广泛,从数控机床到工业机器人,这类系统通过弹性联轴器连接电机和负载,形成了典型的"电机-弹性轴-负载"结构。这种结构在带来安装便利性的同时,也引入了令人头疼的机械谐振问题。
我在调试某型号SCARA机器人时,就曾遇到过典型的谐振现象:当电机加速到特定转速区间时,整个机械臂会出现明显抖动,伴随刺耳的共振噪音。用频谱分析仪观察,在450Hz附近出现了明显的谐振峰,这正是弹性联轴器与负载惯量耦合产生的结构谐振。
传统解决方案是在速度环加入陷波滤波器,但这种方法存在三个致命缺陷:一是谐振频率会随负载变化而漂移,固定参数的陷波器很快失效;二是相位滞后会影响系统动态响应;三是多谐振峰场景需要级联多个陷波器,极大增加调试复杂度。这促使我开始研究自抗扰控制(ADRC)这一新兴控制策略。
自抗扰控制是韩京清教授在1998年提出的原创控制方法,其核心是将系统内部动态和外部扰动统一视为"总扰动",通过扩张状态观测器(ESO)实时估计并补偿。与PID控制相比,ADRC具有三大优势:
在双惯量系统谐振抑制场景中,二阶ADRC尤为适用。其结构包含:
当系统发生谐振时,ESO能准确观测到由弹性变形引起的二阶振荡模态。以某型号伺服系统为例,其状态空间方程为:
code复制ẋ1 = x2
ẋ2 = -k/Jx1 - (b/J)x2 + u/J
其中k为轴刚度,J为等效惯量。ESO将其重构为:
code复制ż1 = z2 - β1(z1-y)
ż2 = z3 - β2(z1-y) + b0u
ż3 = -β3(z1-y)
z3即估计的总扰动,包含谐振动态和外部干扰。
完整的仿真模型包含五个核心模块:
特别要注意的是轴刚度参数的设置,根据我的实测经验,普通谐波减速器的刚度在10⁴量级,而簧片联轴器可能低至10³量级,这直接影响谐振频率计算。
ADRC参数整定遵循"先ESO后NLSEF"的原则:
ESO带宽ωo取谐振频率的3-5倍
matlab复制beta1 = 3*omega_o;
beta2 = 3*omega_o^2;
beta3 = omega_o^3;
控制器带宽ωc通常取ωo的1/5
code复制kp = omega_c^2;
kd = 2*omega_c;
实测案例:当谐振峰在450Hz时,取ωo=1500rad/s(约240Hz),ωc=300rad/s。这种带宽配置能在保证扰动估计精度的同时避免高频噪声放大。
通过扫频测试对比PID与ADRC的伯德图:
特别值得注意的是,当负载惯量突然增大30%时,ADRC的幅值裕度仅下降2dB,而PID系统已出现明显振荡,这验证了ADRC的参数鲁棒性。
施加阶跃信号时,ADRC表现出两个显著优势:
更关键的是,在突加负载扰动测试中,ADRC的恢复时间仅为PID的1/3,且没有出现二次振荡。这在实际应用中意味着更高的加工精度。
在DSP上实现时需注意:
c复制// 二阶ESO离散化公式
z1 = z1 + T*(z2 - beta1*(z1 - y));
z2 = z2 + T*(z3 - beta2*(z1 - y) + b0*u);
z3 = z3 - T*beta3*(z1 - y);
采样周期T建议控制在谐振周期的1/10以下。对于450Hz谐振,采样频率不应低于4.5kHz。
针对变惯量场景,可采用在线惯量辨识:
code复制J_hat = (Tau_m - b*ω)/(dω/dt)
当检测到惯量变化超过15%时,自动调整ESO带宽ωo。我在某贴片机项目中使用此方法,将调试时间从2周缩短到3天。
高频振荡问题
响应迟缓问题
扰动补偿不足
某次现场调试中,电机在300rpm出现异常噪声,最终发现是ESO的β3系数过大导致观测器发散。将ωo从2000rad/s调整到1200rad/s后问题解决,这个案例让我深刻理解了"带宽不是越高越好"的道理。