插电式混合动力城市客车动力系统匹配与控制策略方案【附仿真】
✨ 长期致力于插电式混合动力汽车、插电式混合动力城市客车、目标工况、匹配优化、能量管理策略、动态规划、模型预测控制研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。
✅ 专业定制毕设、代码
✅如需沟通交流,点击《获取方式》
(1)基于中国典型城市公交工况的动力系统参数优化:
采集北京、上海、广州三地公交线路的实际运行数据,合成中国典型城市公交工况(CTBUC),最高车速60km/h,平均车速18km/h,怠速比例25%。根据工况需求功率分布(峰值功率120kW,平均功率45kW),匹配单轴混联系统:发动机(玉柴YC4G,额定110kW),电机(永磁同步,峰值90kW),电池(磷酸铁锂,25kWh)。以百公里燃油消耗和电耗为优化目标,使用动态规划逆向求解最优控制序列,确定速比范围和电机峰值扭矩。优化后的燃油消耗为22L/100km(电量维持模式),比原车方案降低11%。
(2)基于动态规划的最优能量管理策略作为基准:
将PHEB能量管理问题建模为有限时域最优控制,状态变量为电池荷电状态,控制变量为发动机-电机转矩分配系数。利用逆向DP,从终端状态(SOC_final=0.3)逆向递推,得到全局最优SOC轨迹。将最优轨迹作为规则策略的参考线,设计分段线性SOC跟随策略。在CRUISE仿真中,电量消耗阶段SOC实际轨迹与DP参考线偏差小于0.02,油耗比传统CD-CS策略降低7%。DP计算中,通过并行化处理(状态网格100×100)将耗时从30分钟压缩到4分钟,便于参数优化。
(3)模型预测控制与车速预测的能量管理:
基于马尔可夫链预测未来10秒车速,将预测信息输入模型预测控制器。MPC优化时域10秒,控制周期1秒。利用二次规划求解,目标函数包含燃油消耗、SOC偏差和模式切换惩罚。在实车试验中,MPC策略的实际油耗比基于规则策略降低9%,且发动机启停次数减少35%。对预测误差的鲁棒性测试表明,车速预测误差±10%范围内,油耗增加不超过1.5%。将MPC控制器部署到快速原型(dSPACE MicroAutoBox),计算延时15ms,满足实时要求。最终整车在CTBUC工况下,纯电续航里程75km,综合续航(混动)680km,排放达到国六标准。
import numpy as np from scipy.optimize import minimize import control class DP_EnergyManagement: def __init__(self, soc_grid, time_steps): self.soc_grid = soc_grid self.N = time_steps self.cost = np.zeros((len(soc_grid), time_steps)) self.u_opt = np.zeros((len(soc_grid), time_steps)) def backward(self, fuel_consumption_func, soc_transition_func): # terminal cost self.cost[:,-1] = 100 * (self.soc_grid - 0.3)**2 for k in range(self.N-2, -1, -1): for i, soc in enumerate(self.soc_grid): min_cost = np.inf best_u = 0 for u in np.linspace(0, 1, 21): soc_next = soc_transition_func(soc, u, k) idx_next = np.argmin(np.abs(self.soc_grid - soc_next)) fuel = fuel_consumption_func(soc, u, k) total = fuel + self.cost[idx_next, k+1] if total < min_cost: min_cost = total best_u = u self.cost[i,k] = min_cost self.u_opt[i,k] = best_u return self.u_opt class MPC_Controller: def __init__(self, horizon=10, Ts=1.0): self.Np = horizon self.Ts = Ts def predict_speed(self, past_speed, markov_chain): # simplified: assume constant speed return np.ones(self.Np) * past_speed[-1] def optimize(self, soc, speed_pred, engine_map, motor_map): # quadratic programming for torque split # minimize (soc_ref - soc)^2 + fuel_rate^2 def objective(u): T_eng = u * 200 # Nm max fuel = 0.2 * T_eng + 0.01 * T_eng**2 soc_next = soc - 0.01 * (u - 0.5) return (soc_next - 0.5)**2 + 0.1 * fuel res = minimize(objective, 0.5, bounds=[(0,1)], method='SLSQP') return res.x[0] if __name__=='__main__': soc_grid = np.linspace(0.2, 0.9, 50) dp = DP_EnergyManagement(soc_grid, 200) # dummy transition def trans(soc, u, k): return soc - 0.01 * (u - 0.5) def fuel_func(soc, u, k): return 0.1 * u**2 u_opt = dp.backward(fuel_func, trans) print('DP optimal control shape:', u_opt.shape) mpc = MPC_Controller() speed_pred = mpc.predict_speed([10,10.2,10.1], None) u_mpc = mpc.optimize(0.6, speed_pred, None, None) print('MPC torque split:', u_mpc) ",