1. 项目概述:双惯量系统谐振问题与陷波滤波方案
在伺服控制系统中,双惯量结构(电机惯量+负载惯量通过弹性联轴器连接)引发的机械谐振是工程师最头疼的问题之一。当系统运行在谐振频率附近时,不仅会产生刺耳的噪声,更会导致定位精度下降甚至设备损坏。去年我们团队在某半导体设备改造项目中就遇到过这样的情况——新换的碳纤维联轴器虽然减轻了重量,却让系统在120Hz附近出现了剧烈振荡,导致晶圆定位精度直接超标。
传统解决方案往往采用降低带宽的保守策略,但这会牺牲系统动态响应性能。而陷波滤波器(Notch Filter)就像一把精准的手术刀,能在特定频率点实现"挖槽"式衰减,既抑制了谐振峰又不影响其他频段的控制性能。Matlab Simulink作为机电系统仿真的事实标准工具,其模块化建模方式特别适合这类控制算法的快速验证。
2. 双惯量系统建模与谐振机理
2.1 典型双惯量系统数学模型
以某工业机械臂关节为例,其动力学方程可表示为:
code复制Jm·θ̈m + Bm·θ̇m + K(θm - θL) = Tm
JL·θ̈L + BL·θ̇L + K(θL - θm) = 0
其中Jm=0.002kg·m²(电机惯量),JL=0.015kg·m²(负载惯量),K=500N·m/rad(轴刚度),Bm/BL为阻尼系数。通过拉普拉斯变换可得传递函数:
code复制G(s) = [K/(Jm·JL)] / [s² + (Bm/Jm + BL/JL)s + K(1/Jm + 1/JL)]
2.2 谐振频率特性实测分析
在Simulink中搭建该模型后,通过扫频仿真可观察到:
- 反谐振频率:约45Hz(系统表现为高阻抗)
- 谐振频率:约58Hz(振幅放大3倍以上)
- 相位在谐振点附近出现180°跳变
注意:实际系统中谐振频率会随负载变化漂移±15%,这是设计滤波器时需要重点考虑的。
3. 陷波滤波器设计与实现
3.1 二阶数字陷波滤波器原理
采用零极点对消的IIR滤波器结构:
code复制H(z) = (1 - 2cos(ω0)z⁻¹ + z⁻²) / (1 - 2rcos(ω0)z⁻¹ + r²z⁻²)
其中:
- ω0=2πf0/fs(中心频率对应的数字频率)
- r=1-β/2(极点半径,β为带宽系数)
- 品质因数Q=f0/Δf
在Matlab中可通过iirnotch函数快速生成:
matlab复制fs = 5000; % 采样率5kHz
f0 = 58; % 中心频率
Q = 8; % 品质因数
[b,a] = iirnotch(f0/(fs/2), f0/(fs/2)/Q);
3.2 Simulink实现方案对比
-
离散传递函数模块
- 直接填入上述b,a系数
- 优点:计算量最小
- 缺点:参数调整不便
-
Digital Filter模块
- 选择IIR Notch类型
- 可实时调节频率和Q值
- 适合参数调试阶段
-
S-Function自定义模块
- 实现自适应频率跟踪
- 需要编写C代码
- 适合最终产品部署
4. 完整仿真模型搭建
4.1 模型架构设计
code复制[速度指令] → [PID控制器] → [陷波滤波器] → [双惯量系统] → [反馈]
↑
[频率自适应模块]
4.2 关键参数设置
-
PID参数整定
- 先关闭陷波器,用Ziegler-Nichols法初步整定
- 最终参数:Kp=12.5, Ki=380, Kd=0.03
-
滤波器参数优化
- 初始Q值设为5,逐步增加到10
- 通过阶跃响应观察超调量变化
- 最佳平衡点:Q=8时超调<5%,调节时间0.15s
-
采样时间选择
- 控制周期:200μs(5kHz)
- 仿真步长:固定步长ode4(Runge-Kutta)
4.3 仿真结果对比
| 指标 | 无滤波器 | 固定陷波 | 自适应陷波 |
|---|---|---|---|
| 谐振峰值(dB) | +9.5 | -12.3 | -15.8 |
| 调节时间(s) | 0.38 | 0.21 | 0.18 |
| 超调量(%) | 22 | 6.5 | 4.2 |
5. 工程实践中的挑战与解决方案
5.1 频率漂移应对策略
在某CNC机床项目中,我们发现谐振频率会随温度变化漂移±8Hz。解决方案:
- 在线辨识算法
matlab复制% 基于FFT的实时频率检测 [pxx,f] = pwelch(vibrationSignal,hanning(1024),512,1024,fs); [~,idx] = max(pxx); currentFreq = f(idx); - 参数自整定流程
- 每30分钟自动执行扫频测试
- 更新滤波器中心频率
- 记录历史数据形成温度-频率曲线
5.2 多谐振峰处理
当系统存在多个谐振点时(如某六轴机器人同时出现58Hz和125Hz谐振):
- 串联两个陷波器
- 采用广义陷波器形式:
matlab复制[b,a] = iircomb(..., 'notch', 'Bandwidth', 5); - 注意相位累积问题,建议:
- 两个滤波器Q值差异不超过3
- 总延迟不超过2个控制周期
5.3 数字实现注意事项
-
量化误差预防
- 使用Direct Form II转置结构
- 系数采用Q15格式定点数
- 增加溢出保护
-
计算耗时优化
- 将滤波器计算拆分为多个控制周期
- 利用SIMD指令并行处理
- 实测在STM32H743上仅需1.2μs
6. 进阶应用:与其他抑振方法联合使用
6.1 与加速度反馈融合
在某晶圆搬运机器人中,我们采用:
code复制[位置环] → [陷波器] → [加速度反馈] → [电流环]
参数配合要点:
- 陷波器带宽设为加速度反馈带宽的1/3
- 相位补偿需精确匹配
6.2 自适应振动抑制
基于LMS算法的改进方案:
matlab复制function UpdateCoeffs()
% 输入:参考信号x,误差信号e
% 输出:更新后的滤波器系数w
mu = 0.01; % 收敛因子
w = w - mu * e * x;
end
实现效果:
- 对±20%频率变化可自动跟踪
- 收敛时间<0.5s
7. 模型验证与实测对比
在某型号贴片机上的实测数据:
| 场景 | X轴振动(μm) | Y轴振动(μm) |
|---|---|---|
| 原始系统 | 15.2 | 22.7 |
| 仅PID控制 | 8.5 | 13.4 |
| PID+陷波滤波器 | 2.1 | 3.8 |
调试中发现一个有趣现象:当滤波器Q值超过12时,虽然谐振抑制效果更好,但会导致相邻频段出现新谐振点。这提醒我们参数优化需要平衡多个指标。
