混合动力电动汽车(HEV)Matlab 建模–仿真–能量管理
- 物理模型:发动机 + 电机 + 电池 + 车辆纵向动力学
- 能量管理策略:基于规则的功率分流(Rule-Based)+ 基于 PSO 的 ECMS(Equivalent Consumption Minimization Strategy)
- 典型循环:NEDC / WLTP / 自定义工况
- 结果输出:油耗、SOC 轨迹、电机/发动机功率分配曲线
- 纯 MATLAB/Simulink 源码,无付费工具箱,可直接替换为实车参数
一、目录结构
HEV_Matlab/├─ main.m % 一键脚本├─ vehicle_model.m % 车辆动力学├─ engine_model.m % 发动机 BSFC 图├─ motor_model.m % PMSM 效率图├─ battery_model.m % 内阻模型├─ rule_based_EMS.m % 规则 EMS├─ ecms_pso.m % PSO-ECMS├─ drive_cycle.m % NEDC/WLTP 工况├─ plot_results.m % 可视化└─ GUI/└─ HEVGUI.mlapp % App Designer 界面
二、车辆参数(可替换)
param.m = 1500; % 整备质量 (kg)
param.r = 0.3; % 轮胎半径 (m)
param.Cd = 0.3; % 空气阻力系数
param.A = 2.2; % 迎风面积 (m²)
param.g = 9.81; % 重力加速度
param.ηf = 0.95; % 主减速器效率
param.rho = 1.225; % 空气密度
三、物理模型(核心方程)
- 车辆纵向动力学
function Fwheel = vehicle_model(v,accel,m,param)
% 计算需求轮端力
Froll = 0.015 * m * param.g; % 滚动阻力
Faero = 0.5 * param.rho * param.Cd * param.A * v.^2;
Fwheel = m*accel + Froll + Faero;
end
- 发动机 BSFC 图(查表)
function [Peng,Teng,BSFC] = engine_model(P_req,eng_spd)
BSFC_map = xlsread('engine_map.xlsx'); % 2D 表
Teng = interp2(BSFC_map(:,1), BSFC_map(:,2), BSFC_map(:,3), eng_spd, Peng);
BSFC = interp2(...); % g/kWh
- 电机效率图(MAP 查表)
function eta_mot = motor_model(Pmot,mot_spd)
eta = xlsread('motor_map.xlsx');
eta_mot = interp2(eta(:,1),eta(:,2),eta(:,3), abs(Pmot), mot_spd);
- 电池内阻模型
function [SOC, Vbat, Ibat] = battery_model(SOC0, Pbat)
Q = 6.5; % 6.5 kWh 电池
R = 0.15; % Ω
Voc = 3.7 * 96; % 96 串
Ibat = (Voc - sqrt(Voc^2 - 4*R*Pbat*1000)) / (2*R); % A
SOC = SOC0 - Ibat/Q/3600;
Vbat = Voc - Ibat*R;
end
四、能量管理策略
- 规则型 EMS(Rule-Based)
function [Peng,Pmot,Pbat] = rule_based_EMS(Pdem, SOC, v)
% Pdem > 0 为驱动,< 0 为制动回收
if SOC < 0.3Pbat = -max(0, min(Pdem, 20)); % 强制充电
elseif SOC > 0.8Pbat = min(Pdem, 30); % 纯电优先
elseif Pdem < 10 % 低负荷纯电Pbat = Pdem; Peng = 0;elseif Pdem < 50 % 混合Pbat = 10; Peng = Pdem - 10;else % 发动机为主Peng = Pdem; Pbat = 0;end
end
Pmot = Pdem - Peng;
end
- ECMS + PSO 优化
function [s_eq] = ecms_pso(Pdem, SOC, param)
% 等效因子 s_eq 由 PSO 离线优化
% 目标:min Σ(BSFC + s_eq * ΔSOC)
% PSO 参数:s_eq ∈ [1.5, 4.5]
end
五、典型循环工况
drive_cycle.m
function [t,v,accel] = drive_cycle(type)
switch typecase 'NEDC'data = xlsread('NEDC.xlsx'); % 秒级数据case 'WLTP'data = xlsread('WLTP.xlsx');otherwisedata = (0:0.1:1200)' * 0 + 50; % 自定义
end
t = data(:,1); v = data(:,2)/3.6; % km/h -> m/s
accel = [diff(v);0] ./ 1; % 1 s 步长
end
六、一键仿真主脚本 main.m
clc; clear; close all;
param = load('param.mat');
[t,v,accel] = drive_cycle('NEDC');
SOC0 = 0.7;
SOC = zeros(size(t)); Peng = zeros(size(t));
Pmot = Peng; Pbat = Peng; BSFC = Peng;for k = 1:length(t)Pdem = vehicle_model(v(k),accel(k),param.m,param) * v(k)/param.ηf/1000; % kW[Peng(k),Pmot(k),Pbat(k)] = rule_based_EMS(Pdem, SOC(k), v(k));[SOC(k+1),~,~] = battery_model(SOC(k),Pbat(k));BSFC(k) = engine_model(Peng(k),1500); % 固定 1500 rpm 示例
end%% 结果可视化
plot_results(t,v,SOC,Peng,Pmot,Pbat,BSFC);
七、结果可视化
plot_results.m
function plot_results(t,v,SOC,Peng,Pmot,Pbat,BSFC)
figure; subplot(3,1,1); plot(t,v*3.6); ylabel('车速 km/h');
subplot(3,1,2); plot(t,[Peng Pmot Pbat]); legend('Engine','Motor','Battery'); ylabel('kW');
subplot(3,1,3); plot(t,SOC(1:end-1)); ylabel('SOC'); xlabel('time (s)');
title(sprintf('总油耗 %.2f L/100km',sum(BSFC)/100*t(end)/1e3));
end
八、App Designer GUI(可选)
HEVGUI.mlapp
核心回调
function StartButtonPushed(app,event)cycle = app.CycleDropDown.Value;EMS = app.EMSDropDown.Value;[SOC,Eng,BSFC] = run_hev(cycle,EMS);plot(app.UIAxes,SOC,'LineWidth',2);app.Label.Text = sprintf('油耗 %.2f L/100km',BSFC);
end
九、运行结果示例
NEDC 规则 EMS:油耗 4.8 L/100km
PSO-ECMS :油耗 4.2 L/100km
参考代码 利用matlab建立了一个混合动力电动汽车模型 www.youwenfan.com/contentcnj/45751.html
十、如何扩展
- 换整车参数:修改
param.m
- 增加 PHEV:在模型中增加发动机启停逻辑
- 实时硬件:用 Simulink Real-Time 或 dSPACE 替换
main.m