1. P2并联混动架构解析
P2并联混动架构是目前主流的混合动力方案之一,其核心特征是将电机布置在发动机与变速箱之间。这种布局就像在传统燃油车的动力链中插入了一个"电力助推器",既保留了传统传动系统的高效区间,又能通过电机实现能量回收和纯电驱动。
在实际建模时,我们需要特别关注几个关键特性:
- 电机与发动机可单独或同时驱动车轮
- 取消传统启动电机,由驱动电机兼任启动功能
- 变速箱保留完整档位,动力传递路径与传统车相似
这种架构的仿真难点在于模式切换时的动态协调。当车辆从纯电模式切换到并联模式时,发动机需要在电机拖动下达到同步转速才能平稳接合,这个过程对控制时序的要求极为严格。我们在Simulink模型中用Stateflow模块精确控制了这个过程,确保转速差不超过50rpm时才允许离合器接合。
2. 整车模型模块分解
2.1 驾驶员模型实现
驾驶员模型采用经典的PID控制策略,但针对混动特性做了特殊优化:
matlab复制function [acc_pedal, brake_pedal] = driver_model(speed_error, acc_error)
% 速度误差处理
persistent speed_integral;
if isempty(speed_integral)
speed_integral = 0;
end
speed_integral = speed_integral + speed_error * 0.1;
% 抗积分饱和处理
if speed_integral > 0.5
speed_integral = 0.5;
elseif speed_integral < -0.3
speed_integral = -0.3;
end
% 输出计算
acc_pedal = 0.8 * speed_error + 0.1 * speed_integral + 0.05 * acc_error;
brake_pedal = -0.6 * speed_error - 0.2 * speed_integral;
% 输出限幅
acc_pedal = min(max(acc_pedal, 0), 1);
brake_pedal = min(max(brake_pedal, 0), 1);
end
这个模型的特点在于:
- 对加速和制动指令进行耦合处理,避免同时输出非零值
- 积分项加入限幅,防止长时间误差累积导致的控制失效
- 参数设置考虑了混动车的动力响应特性,比传统车更激进
2.2 动力源建模细节
发动机模型采用准静态建模方法,基于万有特性曲线实现:
matlab复制function [torque, fuel_rate] = engine_model(rpm, throttle)
% 转速归一化
rpm_norm = (rpm - 800) / (6000 - 800);
% 扭矩查表
torque_map = [20 40 60 80 100 120 130 125 115;
35 70 105 140 175 210 225 215 200];
torque = interp1(linspace(0,1,9), torque_map(throttle>0.5)+1, rpm_norm);
% 燃油消耗计算
bsfc_map = [310 290 270 260 250 245 255 270 290;
300 280 260 250 240 235 245 260 280];
fuel_rate = torque * interp1(linspace(0,1,9), bsfc_map(throttle>0.5)+1, rpm_norm) / 3600;
end
电机模型则重点关注效率特性:
matlab复制function [torque, power_in] = motor_model(rpm, torque_cmd, mode)
% 效率MAP数据
eff_map = [0.82 0.85 0.88 0.90 0.91 0.90 0.88 0.85;
0.80 0.83 0.86 0.89 0.90 0.89 0.87 0.84];
% 工作点查询
rpm_idx = min(max(round((rpm-1000)/500)+1,1),8);
torque_idx = min(max(round((abs(torque_cmd)-50)/25)+1,1),2);
eff = eff_map(torque_idx, rpm_idx);
if mode == 1 % 驱动模式
torque = min(torque_cmd, 200 * (1 - (rpm-4000)/2000));
power_in = torque * rpm / 9550 / eff;
else % 发电模式
torque = max(torque_cmd, -180 * (1 - (rpm-3000)/1500));
power_in = torque * rpm / 9550 * eff;
end
end
3. 核心控制策略实现
3.1 扭矩分配算法进阶
原始模型中的扭矩分配算法可以进一步优化为动态权重分配:
matlab复制function [eng_trq, mot_trq] = torque_distribution_dynamic(soc, v, acc_pedal, eng_temp)
% 基础权重计算
base_ratio = acc_pedal^2 * 0.8;
% SOC修正
soc_comp = 1 - (0.5 - soc)^2 * 4;
% 发动机温度补偿
temp_comp = min(1, eng_temp / 70);
% 车速补偿
speed_comp = 1 - (v - 80)^2 / 6400;
% 综合权重
final_ratio = base_ratio * soc_comp * temp_comp * speed_comp;
eng_trq = final_ratio * req_trq;
mot_trq = (1 - final_ratio) * req_trq;
% 电机保护
if mot_trq > 0 && soc < 0.15
mot_trq = 0;
eng_trq = req_trq;
end
end
这个改进版本考虑了:
- 电池SOC对分配比例的非线性影响
- 发动机冷启动时的扭矩限制
- 高速工况下的动力分配优化
- 低电量时的电机保护策略
3.2 换挡策略优化
换挡策略增加了驾驶模式识别和坡度补偿:
matlab复制function gear = gear_shift_enhanced(current_gear, v, acc_pedal, slope)
% 基础换挡MAP
eco_map = [0 15 30 45 60];
sport_map = [10 25 40 55 70];
% 驾驶风格识别
persistent agg_factor;
if isempty(agg_factor)
agg_factor = 0.5;
end
agg_factor = 0.9 * agg_factor + 0.1 * (acc_pedal > 0.7);
% 坡度补偿
slope_comp = abs(slope) * 3;
% 动态换挡点
shift_points = eco_map * (1 - agg_factor) + sport_map * agg_factor + slope_comp;
% 换挡逻辑
if v > shift_points(current_gear+1) + 2 * (current_gear == 1)
gear = current_gear + 1;
elseif v < shift_points(current_gear) - 5 - slope_comp
gear = current_gear - 1;
else
gear = current_gear;
end
end
新增特性包括:
- 基于踏板深度的驾驶风格自适应
- 坡道工况下的换挡点自动调整
- 一档到二档的特殊延迟处理(避免频繁换挡)
4. 能量管理策略深度解析
4.1 再生制动协调控制
改进后的再生制动算法实现液压制动与电制动的无缝衔接:
matlab复制function [regen_trq, friction_trq] = braking_control(brake_demand, v, soc, gear)
% 最大回收扭矩计算
max_regen = 200 * (1 - (v-100)/100) * (0.2 + 0.8*soc) * (1 - 0.1*(gear-1));
% 需求分配
if brake_demand < 0.3
% 轻度制动优先用电制动
regen_trq = min(brake_demand * 250, max_regen);
friction_trq = brake_demand * 250 - regen_trq;
else
% 紧急制动按固定比例分配
regen_trq = min(0.6 * brake_demand * 250, max_regen);
friction_trq = brake_demand * 250 - regen_trq;
end
% 防抱死补偿
if friction_trq > v * 20
friction_trq = v * 20;
regen_trq = min(brake_demand * 250 - friction_trq, max_regen);
end
end
关键改进点:
- 考虑车速、SOC和档位对最大回收扭矩的影响
- 区分轻度制动和紧急制动策略
- 加入基于车速的防抱死逻辑
4.2 模式切换状态机优化
使用Stateflow重构模式切换逻辑,增加过渡状态:
stateflow复制[Idle] --> {油门>30%} [Engine_Start]
[Engine_Start] --> {转速同步完成} [Engine_Only]
[Engine_Only] --> {soc<25% & 车速<60} [Parallel_Prepare]
[Parallel_Prepare] --> {扭矩过渡完成} [Parallel]
[Parallel] --> {刹车深度>50%} [Regen]
[Regen] --> {车速<5kph} [EV_Prepare]
[EV_Prepare] --> {发动机冷却完成} [EV_Mode]
新增的过渡状态解决了:
- 发动机启动时的转速冲击问题
- 并联模式下的扭矩交接波动
- 发动机关闭前的冷却需求
5. 仿真与验证技巧
5.1 NEDC工况仿真设置
进行标准工况仿真时需要特别注意:
matlab复制% 仿真参数配置
simu_para = struct(...
'StopTime', 1180, ... % NEDC工况时长
'FixedStep', 0.1, ... % 固定步长
'Solver', 'ode4', ... % 龙格库塔法
'ZeroCross', 'on', ... % 过零检测
'SaveState', 'on', ... % 保存状态
'SaveOutput','on'); % 保存输出
% 初始状态设置
initial_state.battery_soc = 0.6;
initial_state.engine_temp = 70;
initial_state.gear_position = 1;
关键配置要点:
- 采用固定步长保证实时性
- 开启过零检测捕捉模式切换瞬间
- 合理设置初始状态避免冷启动误差
5.2 结果分析方法
推荐使用以下方法分析仿真结果:
matlab复制% 能耗计算
fuel_consumption = sum(fuel_rate) * 100 / distance;
electric_consumption = sum(abs(battery_power(battery_power>0))) / distance / 3600;
% 模式切换统计
mode_changes = diff(operation_mode) ~= 0;
mode_transition = sum(mode_changes);
% 关键指标可视化
subplot(2,2,1)
plot(time, speed, 'b', time, ref_speed, 'r--')
title('车速跟踪')
subplot(2,2,2)
plot(time, battery_soc)
title('SOC变化')
subplot(2,2,3)
stem(time(mode_changes), mode_transition(mode_changes))
title('模式切换点')
subplot(2,2,4)
plot(engine_rpm, engine_torque, '.')
title('发动机工作点分布')
6. 模型调优实战经验
6.1 参数灵敏度分析
通过DOE方法确定关键参数影响度:
matlab复制% 参数范围设置
torque_split_range = linspace(0.6, 1.0, 5);
regen_gain_range = linspace(150, 250, 5);
shift_delay_range = [3 5 7];
% 实验矩阵生成
[doe_matrix, factor_names] = fullfact([length(torque_split_range), ...
length(regen_gain_range), ...
length(shift_delay_range)]);
% 结果记录
results = zeros(size(doe_matrix,1), 3); % 油耗、电耗、平顺性
for i = 1:size(doe_matrix,1)
set_param('HEV_Model/Torque_Split', 'Gain', num2str(torque_split_range(doe_matrix(i,1))));
set_param('HEV_Model/Regen_Brake', 'Gain', num2str(regen_gain_range(doe_matrix(i,2))));
set_param('HEV_Model/Gear_Logic', 'Delay', num2str(shift_delay_range(doe_matrix(i,3))));
simout = sim('HEV_Model', simu_para);
results(i,1) = simout.fuel_consumption;
results(i,2) = simout.electric_consumption;
results(i,3) = std(diff(simout.acceleration));
end
6.2 常见问题排查指南
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| SOC持续下降 | 能量回收不足 | 检查再生制动扭矩曲线 | 调整regen_gain参数 |
| 模式切换顿挫 | 离合器接合过快 | 分析转速差信号 | 增加同步时间容差 |
| 换挡频繁 | 换挡MAP不合理 | 绘制工作点分布图 | 优化换挡点滞后量 |
| 高速动力不足 | 扭矩分配限制 | 检查动态权重计算 | 调整speed_comp系数 |
| 冷启动抖动 | 发动机温度补偿不足 | 记录启动时温度参数 | 修改temp_comp曲线 |
7. 模型扩展方向
7.1 硬件在环测试
将模型部署到实时系统进行HIL测试:
matlab复制% 模型配置修改
set_param('HEV_Model', 'RTWSystemTargetFile','slrealtime.tlc');
set_param('HEV_Model', 'RTWTemplateMakefile','slrealtime_default_tmf');
set_param('HEV_Model', 'RTWGenerateCodeOnly','on');
% 代码生成选项
rtwbuild('HEV_Model');
% 实时执行配置
tg = slrealtime;
tg.connect;
tg.load('HEV_Model');
tg.start;
7.2 智能控制算法集成
引入机器学习算法优化扭矩分配:
matlab复制% 强化学习环境设置
env = rlSimulinkEnv('HEV_Model','HEV_Model/RL_Agent');
obsInfo = getObservationInfo(env);
actInfo = getActionInfo(env);
% 神经网络定义
actorNetwork = [
featureInputLayer(obsInfo.Dimension(1))
fullyConnectedLayer(128)
reluLayer
fullyConnectedLayer(64)
reluLayer
fullyConnectedLayer(actInfo.Dimension(1))
tanhLayer];
% 训练参数配置
agentOpts = rlDDPGAgentOptions(...
'SampleTime',0.1,...
'TargetSmoothFactor',1e-3,...
'ExperienceBufferLength',1e6);
agent = rlDDPGAgent(actorNetwork,actInfo,agentOpts);
% 训练过程
trainOpts = rlTrainingOptions(...
'MaxEpisodes',1000,...
'StopTrainingCriteria','AverageReward',...
'StopTrainingValue',1000);
trainingStats = train(agent,env,trainOpts);
在实际项目中,我们发现将传统控制策略与智能算法结合能获得最佳效果。比如在基础扭矩分配算法上叠加RL算法的修正量,既保证了控制稳定性,又能逐步优化能耗表现。一个实用的技巧是先固定其他参数训练单一工况,再逐步扩展工况范围。