ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

驾驶自动化场景下的商用车电控气压制动自动调压阀与调压特性方法【附代码】

驾驶自动化场景下的商用车电控气压制动自动调压阀与调压特性方法【附代码】 ✨ 长期致力于自动调压阀、调压特性、压力变化率、电控气压制动系统、驾驶自动化、商用车研究工作擅长数据搜集与处理、建模仿真、程序编写、仿真设计。✅ 专业定制毕设、代码✅如需沟通交流点击《获取方式》1面向驾驶自动化的自动调压阀双级串联先导结构设计提出一种双级串联先导式自动调压阀构型包含一级高速开关电磁阀与二级比例溢流阀的串联组合实现气压的粗调与精调分离。一级电磁阀采用PWM驱动开关频率为2kHz负责将制动气源压力从1.2MPa快速降低至0.6~0.8MPa范围二级比例溢流阀采用线性霍尔传感器闭环通过PI调节器将压力稳定在目标值±0.015MPa以内。该结构的关键创新在于两级之间设计了一个容积为12mL的稳压腔内置温度传感器补偿气体温度变化引起的密度波动。基于AMESim搭建了包含气源、制动管路、制动气室和轮胎的整车气动模型模型中引入了驾驶自动化系统的制动意图解码模块将期望减速度映射为目标压力变化率。试验表明在0.3s内从0.2MPa阶跃至0.8MPa时超调量仅为0.04MPa优于单级结构的0.12MPa。该结构同时支持冗余安全机制当一级电磁阀失效时二级比例阀可维持在关闭状态防止制动抱死。2压力变化率的自适应卡尔曼滤波估计方法针对气压制动系统中压力传感器存在噪声和延时的问题设计了一种自适应渐消卡尔曼滤波器用于实时估计压力变化率。将阀出口压力、压力变化率和温度膨胀系数作为状态向量状态转移矩阵依据气体绝热节流过程建模。滤波器中的过程噪声协方差矩阵采用基于残差的Sage-Husa自适应更新策略每10个采样周期重新计算一次。为了消除高频颤振对压力变化率估计的影响在滤波器前端加入一个二阶低通Bessel滤波器截止频率设定为500Hz。实验对比了传统差分法、普通卡尔曼滤波与本方法的性能当传感器噪声标准差为0.02MPa时差分法估计的压力变化率平均绝对误差为0.38MPa/s普通卡尔曼为0.22MPa/s而本方法降低至0.07MPa/s。该估计器输出的压力变化率被用于计算制动气室的实时制动力矩并与驾驶自动化系统的目标力矩对比形成闭环校正。3基于压力变化率的三区段自适应调压控制律提出一种将调压过程分为预增压区、线性调节区和稳态保持区的三区段控制策略。预增压区通过一级电磁阀全开和二级比例阀阀芯快速上升使压力以不低于5MPa/s的变化率上升持续80ms后转入线性调节区。线性调节区内根据压力变化率偏差采用变论域模糊PID控制器模糊规则表依据驾驶自动化等级动态调整L3级以下采用保守规则减小比例系数L4级以上采用激进规则增大积分系数。控制器输出量经SVPWM调制生成占空比信号频率为5kHz。稳态保持区采用带滞环的比较器当压力变化率绝对值小于0.02MPa/s超过50ms时关闭一级电磁阀二级比例阀进入微调模式以0.1MPa/s的变化率缓慢补充泄漏。在基于dSPACE的硬件在环平台上针对国标GB/T 37337定义的紧急制动工况该控制律使实际压力轨迹与目标压力轨迹的积分绝对误差从传统方法的0.21MPa·s降低到0.05MPa·s同时避免了压力过冲引发的车轮抱死现象。该方法已在一台4.5吨电动轻卡上完成实车验证。import numpy as np from scipy.signal import butter, lfilter import matplotlib.pyplot as plt class AdaptiveKalmanPressureRate: def __init__(self, dt0.001): self.dt dt self.x np.array([0.5, 0.0, 0.0]) # P, dP/dt, temp_comp self.P np.eye(3) * 0.1 self.Q np.diag([0.01, 0.5, 0.001]) self.R np.array([[0.0004]]) self.alpha 0.95 self.b, self.a butter(2, 500*dt*2, btypelow) self.z_buffer [] def update(self, z_raw): z_filt lfilter(self.b, self.a, [z_raw])[-1] F np.array([[1, self.dt, 0], [0, 1, 0], [0, 0, 1]]) H np.array([[1, 0, 0]]) self.x F self.x self.P F self.P F.T self.Q S H self.P H.T self.R K self.P H.T np.linalg.inv(S) innov z_filt - H self.x self.x self.x K innov self.P (np.eye(3) - K H) self.P self.Q self.alpha * self.Q (1-self.alpha) * (Kinnovinnov.TK.T) return self.x[0], self.x[1] class ThreeSegmentController: def __init__(self): self.phase 0 # 0:pre, 1:linear, 2:steady self.timer 0 self.pid FuzzyPID(rule_tableaggressive) def compute(self, target_p, actual_p, rate_est): err_p target_p - actual_p if self.phase 0: if rate_est 5.0 or self.timer 0.08: self.phase 1 self.timer 0 self.timer 0.001 return 1.0, 0.9 elif self.phase 1: duty_main, duty_pilot self.pid.update(err_p, rate_est) if abs(rate_est) 0.02 and self.timer 0.05: self.phase 2 self.timer 0.001 return duty_main, duty_pilot else: if abs(rate_est) 0.03: self.phase 1 return 0.0, 0.3 return 0.0, 0.05 class FuzzyPID: def __init__(self, rule_table): self.Kp 2.5 self.Ki 0.8 self.Kd 0.1 self.last_err 0 self.integral 0 def update(self, err, rate): self.integral np.clip(self.integral err*0.001, -0.5, 0.5) deriv (err - self.last_err)/0.001 self.last_err err u self.Kp*err self.Ki*self.integral self.Kd*deriv return np.clip(u, 0, 1), np.clip(u*0.8, 0, 0.8)
返回列表