电磁直线执行器直接驱动的流体控制阀系统【附程序】

发布时间:2026/5/28 22:20:47

电磁直线执行器直接驱动的流体控制阀系统【附程序】 ✨ 长期致力于电磁直线执行器、直接驱动、磁阻式位移传感器、流体控制阀、自适应控制、无模型自适应控制、逆系统增益调度PI控制研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》(1) 差动式磁阻直线位移传感器设计与标定:设计了一种双磁阻差动结构消除电磁干扰,命名为Diff-MR-Sensor。传感器由两个相同的磁阻元件对称布置在执行器动子两侧,偏置磁钢提供恒定偏置磁场。当动子移动时,两个磁阻的阻值变化相反,差分输出与位移成线性关系。在Ansoft Maxwell中建立三维模型优化磁钢尺寸(10×5×3mm)和安装间隙(0.5mm)。静态标定实验显示灵敏度为82mV/mm,线性度误差0.8%,测量范围±5mm。动态测试在100Hz正弦运动下相位滞后小于2度,满足阀芯位置闭环要求。(2) 逆系统与增益调度PI复合控制策略:提出了分段复合控制器,命名为Inverse-PI-Switch。远离目标位置时采用逆系统控制:根据系统逆模型直接计算所需驱动电压,实现快速趋近,平均速度提高3倍。接近目标位置(误差0.1mm)时切换为增益调度PI控制器,PI参数根据误差和误差微分查表获得。采用模糊逻辑进行平滑切换,切换边界宽度0.02mm。在阶跃响应测试中,从0到2mm的调节时间为18ms,超调量1.5%;而单一PI控制器需52ms,超调5.2%。(3) 全格式无模型自适应控制及其试验验证:设计了不依赖系统模型的全格式无模型自适应控制器,命名为FF-MFAC。仅利用输入输出数据,通过伪偏导数的在线估计实现自适应控制。估计算法采用投影修正,步长因子η0.6,惩罚因子μ0.01。在液压试验平台上对不同升程(0.5,1.0,1.5,2.0mm)进行测试,均达到稳态误差小于±0.01mm,且不需要重新整定参数。在负载力扰动(0至50N突变)下,最大动态误差为0.03mm,恢复时间25ms。与PID相比,参数鲁棒性显著提高,当执行器气隙从0.8mm变化到1.2mm时,PID控制误差增大至0.12mm,而MFAC误差仅变化0.005mm。该控制器已应用于某航空燃油调节阀的伺服改造。import numpy as np from scipy.optimize import curve_fit from scipy.signal import lti, lsim import control class DiffMRSensor: def __init__(self, sensitivity82e-3, offset2.5): self.sensitivity sensitivity # V/mm self.offset offset # V at zero def calibrate(self, positions, voltages): # linear calibration self.sensitivity, self.offset np.polyfit(positions, voltages, 1) def measure(self, voltage): return (voltage - self.offset) / self.sensitivity class InversePISwitch: def __init__(self, inverse_model, pi_gains, switch_th0.1): self.inv inverse_model self.pi_kp pi_gains[kp]; self.pi_ki pi_gains[ki] self.threshold switch_th self.integral 0.0 self.last_error 0.0 def control(self, ref, y, dt): error ref - y self.integral error * dt if abs(error) self.threshold: # inverse control u self.inv.compute(ref, y) else: # PI control u self.pi_kp * error self.pi_ki * self.integral return np.clip(u, -10, 10) class FF_MFAC: def __init__(self, eta0.6, mu0.01, rho0.5, init_ppd1.0): self.eta eta self.mu mu self.rho rho self.ppd init_ppd # pseudo partial derivative self.u_prev 0.0 self.y_prev 0.0 def update(self, y, y_ref): # estimation of ppd delta_u self.u_prev - self.u_prev delta_y y - self.y_prev if abs(delta_u) 1e-5: ppd_hat self.ppd else: self.ppd self.ppd self.eta * delta_u * (delta_y - self.ppd * delta_u) / (self.mu delta_u**2) # control law error y_ref - y u self.u_prev self.rho * self.ppd * error / (1 self.ppd**2) self.u_prev u self.y_prev y return u def test_mfac_on_valve(): mfac FF_MFAC() sim_time np.arange(0, 1, 0.001) ref np.where(sim_time0.5, 1.0, 2.0) y np.zeros_like(ref) u np.zeros_like(ref) for i in range(1, len(sim_time)): u[i] mfac.update(y[i-1], ref[i]) # simulate plant: second order y[i] 0.95*y[i-1] 0.05*u[i-1] 0.01*np.random.randn() return y, u

相关新闻