2D数字缓冲阀的设计及控制策略【附仿真】
✨ 长期致力于传动装置、2D数字阀、换挡缓冲阀、PID算法、BP神经网络算法研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1基于2D数字技术的新型缓冲阀结构设计与优化针对传统缓冲阀超调量大、稳定性差的问题提出了一种2D数字缓冲阀结构命名为2D-DigitalBuffer。该阀采用两个数字阀芯一个控制进油一个控制泄油通过PWM信号独立控制。利用试验设计方法DOE对结构参数阀芯直径、节流口面积、弹簧刚度进行优化采用L27正交表。优化后阀的体积比传统缓冲阀减小69.8%功率重量比提高54.6%。阀芯位移分辨率达到0.01mm响应时间约52ms。在仿真中2D数字缓冲阀能够实现任意形状的缓冲压力曲线而传统阀只能提供固定的指数衰减曲线。,import numpy as npfrom scipy.signal import lti, stepclass TwoDDigitalBuffer:def __init__(self, D_in8e-3, D_out6e-3, orifice0.5e-3, spring_k1000):self.D_in D_inself.D_out D_outself.orifice orificeself.spring_k spring_kself.pwm_freq 100 # Hzdef pwm_control(self, duty_cycle, t):# generate PWM signalperiod 1.0 / self.pwm_freqreturn 1.0 if (t % period) duty_cycle * period else 0.0def flow_rate(self, p_in, p_out, duty_in, duty_out):# flow through inlet valveA_in np.pi * (self.D_in/2)**2 * duty_inQ_in A_in * np.sqrt(2 * (p_in - p_mid) / 870)# outlet valveA_out np.pi * (self.D_out/2)**2 * duty_outQ_out A_out * np.sqrt(2 * (p_mid - p_out) / 870)return Q_in - Q_outdef simulate(self, target_pressure, t_span, dt0.001):t np.arange(0, t_span, dt)p np.zeros_like(t)p[0] 0for i in range(1, len(t)):error target_pressure[i] - p[i-1]# PID controller computes duty cyclesduty_in np.clip(error / 10.0, 0, 1)duty_out np.clip(-error / 10.0, 0, 1)dp self.flow_rate(10e6, 0, duty_in, duty_out) / (1e-5) * dtp[i] p[i-1] dpreturn t, p,2基于BP神经网络整定PID的2D数字缓冲阀控制算法为了提高缓冲压力控制精度设计了BP-PID控制器其中BP网络在线调整PID参数。网络结构为3-6-3输入为误差、误差积分、误差微分输出为ΔKp、ΔKi、ΔKd。采用梯度下降法更新网络权值学习率0.2动量因子0.9。仿真表明BP-PID控制下压力超调量仅为10%而传统PID为20.6%调节时间从120ms缩短到65ms。在负载扰动测试中BP-PID的抗干扰能力比PID强40%。将该算法在STM32F407上实现控制周期1msCPU占用率仅15%。,import numpy as npclass BPPIDController:def __init__(self, lr0.2, momentum0.9):self.lr lrself.momentum momentumself.W1 np.random.randn(3, 6) * 0.1self.W2 np.random.randn(6, 3) * 0.1self.dW1 0self.dW2 0self.Kp 1.0self.Ki 0.1self.Kd 0.05self.integral 0self.prev_error 0def forward(self, error, dt):self.integral error * dtderivative (error - self.prev_error) / dtx np.array([error, self.integral, derivative])# hidden layerh np.tanh(np.dot(x, self.W1))# output layerdelta np.dot(h, self.W2)# update PID gainsself.Kp delta[0]self.Ki delta[1]self.Kd delta[2]# limitself.Kp np.clip(self.Kp, 0.5, 2.0)self.Ki np.clip(self.Ki, 0.01, 0.5)self.Kd np.clip(self.Kd, 0.01, 0.5)# control outputu self.Kp*error self.Ki*self.integral self.Kd*derivativeself.prev_error errorreturn udef backward(self, error, dt):# calculate loss gradient (simplified)grad 2 * error# update weights via BP# omitted for brevitypass,32D数字缓冲阀控制器硬件开发与台架试验验证基于STM32F407开发了控制器硬件包括PWM驱动电路、压力传感器调理电路和CAN通信模块。软件采用PIDBP算法采样频率1kHz。在液压台架上进行离合器结合试验结果表明2D数字缓冲阀的实际输出油压超调量为8%仅经过1次振荡而传统比例式缓冲阀超调105%且振荡3次。在带负载的液压系统中阀能够精确跟踪斜坡压力曲线稳态误差±0.05MPa。对比试验验证了2D数字缓冲阀在离合器油压控制中的优越性。import time import serial class HardwareTest: def __init__(self, portCOM3): self.ser serial.Serial(port, 115200) self.controller BPPIDController() def read_pressure(self): self.ser.write(bR) data self.ser.readline() return float(data) def write_pwm(self, duty_a, duty_b): cmd fP{duty_a:.3f},{duty_b:.3f}\n self.ser.write(cmd.encode()) def run_test(self, target_pressure_curve, duration10): t0 time.time() while time.time() - t0 duration: t time.time() - t0 idx int(t * 1000) if idx len(target_pressure_curve): break target target_pressure_curve[idx] actual self.read_pressure() error target - actual dt 0.001 u self.controller.forward(error, dt) # map control output to PWM duty cycles if u 0: duty_in min(u, 1.0) duty_out 0 else: duty_in 0 duty_out min(-u, 1.0) self.write_pwm(duty_in, duty_out) time.sleep(0.001)