✨ 长期致力于振动主动控制、半物理仿真、RCP、HIL、模块化建模研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1基于模块化建模的振动主动控制系统分层架构将系统划分为被控对象层双层主动隔振台架、传感器与作动器层加速度计、压电堆栈、控制器层FXLMS算法实现和监控层。采用SimMichanics构建隔振台架的多体动力学模型包含上下两层平台、四个橡胶隔振器和两个压电作动器。模型的自由度数为6模态频率前两阶分别为8.2Hz和14.5Hz与模态测试结果误差在2%以内。控制器模型基于滤波-x最小均方算法次级通路采用8阶FIR滤波器进行离线辨识。通过模块化封装可单独替换控制算法模块例如LQG、PID进行对比。在Simulink中实现全数字仿真频率范围0-200Hz控制后振动加速度级降低15.6dB。2快速控制原型RCP与硬件在环HIL平台构建使用dSPACE MicroLabBox作为RCP平台将Simulink控制模型自动生成代码下载到DS1007处理器板。硬件在环部分将真实的压电驱动器和功率放大器接入而被控对象采用实时仿真机运行的动力学模型替代。通过模拟输入输出接口连接实现闭环。在HIL仿真中注入频率50Hz幅值1g的扰动RCP控制器计算出控制电压并输出到功率放大器然后通过AD采集反馈信号。测试结果与全数字仿真一致性达到95%以上最大误差为0.12g。利用该平台可以快速迭代不同的控制策略而不需要搭建实体台架。3数据实时监测与评估工具包开发基于LabVIEW开发了上位机监测界面通过UDP接收RCP平台传来的数据采样率2kHz。界面实时显示时域加速度曲线、频谱图以及控制效果评价指标均方根降幅、峰值降幅、收敛时间。还集成了一个半物理仿真数据库自动保存每次实验的参数和结果支持事后回放和批处理分析。在某舰船设备隔振应用中使用该平台对三种控制策略进行快速筛选选出最优FXLMS变步长方案然后直接移植到实物控制器开发周期缩短了60%。import numpy as np from scipy.signal import lfilter, firwin import matplotlib.pyplot as plt class FXLMS_Controller: def __init__(self, filter_order32, mu0.01): self.order filter_order self.w np.zeros(filter_order) self.mu mu self.sec_path_est firwin(16, 0.3) # 次级通路估计 def update(self, x, error): # x: 参考信号, error: 误差传感器信号 x_filtered lfilter(self.sec_path_est, 1.0, x) for i in range(self.order): self.w[i] self.mu * error * x_filtered[self.order-1-i] y np.dot(self.w, x[::-1]) return y class VibrationPlant: def __init__(self, m10, k5000, c20): self.m m self.k k self.c c self.x 0.0 self.v 0.0 def step(self, force_disturb, force_control, dt0.001): a (force_disturb force_control - self.c*self.v - self.k*self.x) / self.m self.v a * dt self.x self.v * dt return self.x # 位移传感器输出 def real_time_simulation(duration2.0, fs2000): dt 1/fs n_steps int(duration * fs) plant VibrationPlant() controller FXLMS_Controller() error_signal np.zeros(n_steps) for i in range(n_steps): t i * dt dist_force 100 * np.sin(2*np.pi*50*t) # 50Hz干扰 # 控制输出 if i 500: ref np.sin(2*np.pi*50*t) # 参考信号 control_force controller.update(ref, error_signal[i-1]) else: control_force 0 displacement plant.step(dist_force, control_force, dt) # 误差传感器加速度转换成力等效 error_signal[i] displacement * 1e3 # mm单位 return error_signal def evaluate_control( error_before, error_after): rms_before np.sqrt(np.mean(error_before**2)) rms_after np.sqrt(np.mean(error_after**2)) reduction 20 * np.log10(rms_before / rms_after) return reduction # 运行仿真 print(开始实时仿真...) err real_time_simulation(duration2.0) before err[:1000] # 前0.5秒无控制 after err[1500:] # 后0.5秒有控制 reduction_db evaluate_control(before, after) print(f振动降低: {reduction_db:.1f} dB)
振动主动控制系统半物理仿真分析【附仿真】
发布时间:2026/5/30 21:23:11
✨ 长期致力于振动主动控制、半物理仿真、RCP、HIL、模块化建模研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1基于模块化建模的振动主动控制系统分层架构将系统划分为被控对象层双层主动隔振台架、传感器与作动器层加速度计、压电堆栈、控制器层FXLMS算法实现和监控层。采用SimMichanics构建隔振台架的多体动力学模型包含上下两层平台、四个橡胶隔振器和两个压电作动器。模型的自由度数为6模态频率前两阶分别为8.2Hz和14.5Hz与模态测试结果误差在2%以内。控制器模型基于滤波-x最小均方算法次级通路采用8阶FIR滤波器进行离线辨识。通过模块化封装可单独替换控制算法模块例如LQG、PID进行对比。在Simulink中实现全数字仿真频率范围0-200Hz控制后振动加速度级降低15.6dB。2快速控制原型RCP与硬件在环HIL平台构建使用dSPACE MicroLabBox作为RCP平台将Simulink控制模型自动生成代码下载到DS1007处理器板。硬件在环部分将真实的压电驱动器和功率放大器接入而被控对象采用实时仿真机运行的动力学模型替代。通过模拟输入输出接口连接实现闭环。在HIL仿真中注入频率50Hz幅值1g的扰动RCP控制器计算出控制电压并输出到功率放大器然后通过AD采集反馈信号。测试结果与全数字仿真一致性达到95%以上最大误差为0.12g。利用该平台可以快速迭代不同的控制策略而不需要搭建实体台架。3数据实时监测与评估工具包开发基于LabVIEW开发了上位机监测界面通过UDP接收RCP平台传来的数据采样率2kHz。界面实时显示时域加速度曲线、频谱图以及控制效果评价指标均方根降幅、峰值降幅、收敛时间。还集成了一个半物理仿真数据库自动保存每次实验的参数和结果支持事后回放和批处理分析。在某舰船设备隔振应用中使用该平台对三种控制策略进行快速筛选选出最优FXLMS变步长方案然后直接移植到实物控制器开发周期缩短了60%。import numpy as np from scipy.signal import lfilter, firwin import matplotlib.pyplot as plt class FXLMS_Controller: def __init__(self, filter_order32, mu0.01): self.order filter_order self.w np.zeros(filter_order) self.mu mu self.sec_path_est firwin(16, 0.3) # 次级通路估计 def update(self, x, error): # x: 参考信号, error: 误差传感器信号 x_filtered lfilter(self.sec_path_est, 1.0, x) for i in range(self.order): self.w[i] self.mu * error * x_filtered[self.order-1-i] y np.dot(self.w, x[::-1]) return y class VibrationPlant: def __init__(self, m10, k5000, c20): self.m m self.k k self.c c self.x 0.0 self.v 0.0 def step(self, force_disturb, force_control, dt0.001): a (force_disturb force_control - self.c*self.v - self.k*self.x) / self.m self.v a * dt self.x self.v * dt return self.x # 位移传感器输出 def real_time_simulation(duration2.0, fs2000): dt 1/fs n_steps int(duration * fs) plant VibrationPlant() controller FXLMS_Controller() error_signal np.zeros(n_steps) for i in range(n_steps): t i * dt dist_force 100 * np.sin(2*np.pi*50*t) # 50Hz干扰 # 控制输出 if i 500: ref np.sin(2*np.pi*50*t) # 参考信号 control_force controller.update(ref, error_signal[i-1]) else: control_force 0 displacement plant.step(dist_force, control_force, dt) # 误差传感器加速度转换成力等效 error_signal[i] displacement * 1e3 # mm单位 return error_signal def evaluate_control( error_before, error_after): rms_before np.sqrt(np.mean(error_before**2)) rms_after np.sqrt(np.mean(error_after**2)) reduction 20 * np.log10(rms_before / rms_after) return reduction # 运行仿真 print(开始实时仿真...) err real_time_simulation(duration2.0) before err[:1000] # 前0.5秒无控制 after err[1500:] # 后0.5秒有控制 reduction_db evaluate_control(before, after) print(f振动降低: {reduction_db:.1f} dB)