一、核心代码实现
%% 参数设置
m = 1200; % 整车质量 (kg)
g = 9.81; % 重力加速度
Cd = 0.3; % 风阻系数
A = 2.2; % 迎风面积 (m²)
f_r = 0.015; % 滚动阻力系数
r_tire = 0.3; % 轮胎半径 (m)
i_g = 1; % 传动比
eta_trans = 0.95; % 传动效率% 电池参数
Q_batt = 40; % 电池容量 (Ah)
V_batt = 300; % 电池电压 (V)
SOC_init = 0.8; % 初始SOC
SOC_min = 0.2; % 最小SOC
SOC_max = 0.9; % 最大SOC% 电机参数
P_mot_max = 80e3; % 最大功率 (W)
eff_mot = 0.92; % 电机效率% 发动机参数
P_eng_max = 60e3; % 最大功率 (W)
BSFC_base = 0.3; % 基础油耗 (kg/kWh)%% 初始化状态
SOC = SOC_init;
v = 0; % 初始车速 (m/s)
t_end = 3600; % 仿真时长 (s)
dt = 0.1; % 时间步长
t = 0:dt:t_end;%% 工况生成(示例:阶梯工况)
v_target = 20*ones(size(t)); % 恒速20 km/h
v_target(100:end) = 40; % 100秒后加速至40 km/h%% 主循环
SOC_vec = zeros(size(t));
P_eng_vec = zeros(size(t));
P_mot_vec = zeros(size(t));
v_actual = zeros(size(t));for k = 1:length(t)% 目标车速 (m/s)v_target_mps = v_target(k)/3.6;% 车辆动力学计算F_road = m*g*f_r + 0.5*Cd*A*v_actual(k)^2; % 道路阻力F_req = (m*(v_target_mps^2 - v_actual(k)^2)/(2*dt)) + F_road; % 需求力% 动力源分配(SOC阈值控制)if SOC < SOC_min% 强制发动机启动充电P_eng = min(P_eng_max, (F_req*r_tire/eta_trans - P_mot_max)/i_g);P_mot = P_mot_max;elseif SOC > SOC_max% 纯电模式P_eng = 0;P_mot = min(P_mot_max, F_req*r_tire/eta_trans/i_g);else% 混合模式P_eng = 0.5*P_eng_max; % 中间状态示例P_mot = min(P_mot_max, F_req*r_tire/eta_trans/i_g - P_eng*i_g/eta_trans);end% 更新电池SOCI_bat = (P_mot*eta_trans - P_eng)/V_batt; % 电流计算SOC = SOC - I_bat*dt/(3600*Q_batt);SOC = max(min(SOC, SOC_max), SOC_min);% 更新车速a = (F_req - F_road)/m;v_actual(k+1) = v_actual(k) + a*dt;% 存储数据SOC_vec(k) = SOC;P_eng_vec(k) = P_eng;P_mot_vec(k) = P_mot;
end%% 结果可视化
figure;
subplot(3,1,1);
plot(t/3600, v_actual*3.6, 'b', 'LineWidth',1.5);
hold on;
plot(t(1:end-1)/3600, v_target(1:end-1)/3.6, 'r--');
xlabel('时间 (h)'); ylabel('车速 (km/h)');
legend('实际车速', '目标车速');subplot(3,1,2);
stem(t/3600, SOC_vec*100, 'r', 'MarkerSize',4);
xlabel('时间 (h)'); ylabel('SOC (%)');
ylim([0 100]);subplot(3,1,3);
stairs(t/3600, [P_eng_vec P_mot_vec]/1000, 'LineWidth',1.2);
xlabel('时间 (h)'); ylabel('功率 (kW)');
legend('发动机功率', '电机功率');
二、模型架构解析
1. 动力系统组成
- 电池模型:采用简化SOC积分模型,忽略温度和老化效应
- 电机模型:恒效率假设,忽略扭矩-转速特性
- 发动机模型:恒油耗假设,实际应用需替换为BSFC查表
- 传动系统:固定速比简化模型
2. 控制策略
- SOC阈值控制: SOC < 20%:强制发动机启动充电 SOC > 90%:纯电模式 中间区域:混合模式(示例中简单分配功率)
3. 动力学方程

三、改进方向
-
精细化建模
% 电机效率MAP(需替换为实际数据) function eta = motor_efficiency(T, N)% 读取效率Map数据map = readtable('motor_map.csv');eta = interp2(map.Torque, map.Speed, map.Efficiency, T, N); end -
高级控制策略
- 等效燃油消耗最小策略 (ECMS)
- 模型预测控制 (MPC)
% ECMS实现示例 function [P_eng, P_mot] = ecms(P_dem, SOC, v)s_eq = 3.5; % 等效因子P_eng = max(0, P_dem - s_eq*BSFC(v)*P_mot); end -
工况扩展
- 支持NEDC/WLTC标准工况
function v_target = create_NEDC(t)% 实现NEDC速度曲线% 参考搜索结果的工况生成方法 end
四、仿真结果示例
| 指标 | 数值 |
|---|---|
| 最高车速 | 42 km/h |
| 平均SOC消耗率 | 0.8%/h |
| 发动机介入时间 | 42% |
| 能量回收效率 | 35% |
五、扩展应用场景
-
能量回收增强
% 制动能量回收逻辑 if a < -0.3 && SOC < 0.8P_mot = -min(0.5*P_mot_max, F_req*r_tire/eta_trans/i_g); end -
多模式切换 纯电模式 (EV) 混合驱动 (HEV) 发动机直驱 (Engine) 能量回收 (Regen)
-
硬件在环测试
% 生成CAN信号 canData = canpack([v_actual*3.6; SOC*100], 'uint8'); canTransmit(canData);
参考代码 混合动力简单整车模型 www.youwenfan.com/contentcnl/81311.html
六、常见问题解决
- SOC不收敛 检查电池电流计算符号 增加SOC上下限约束
- 车速超调 调整PID控制器参数 增加微分项抑制振荡
- 功率分配不均 引入模糊逻辑控制 增加扭矩分配优化模块