混合动力电动汽车(HEV)Matlab 建模仿真

混合动力电动汽车(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;         % 空气密度

三、物理模型(核心方程)

  1. 车辆纵向动力学
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
  1. 发动机 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
  1. 电机效率图(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);
  1. 电池内阻模型
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

四、能量管理策略

  1. 规则型 EMS(Rule-Based)
function [Peng,Pmot,Pbat] = rule_based_EMS(Pdem, SOC, v)
% Pdem > 0 为驱动,< 0 为制动回收
if SOC < 0.3
    Pbat = -max(0, min(Pdem, 20));      % 强制充电
elseif SOC > 0.8
    Pbat = min(Pdem, 30);               % 纯电优先
else
    if 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
  1. 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 type
    case 'NEDC'
        data = xlsread('NEDC.xlsx');  % 秒级数据
    case 'WLTP'
        data = xlsread('WLTP.xlsx');
    otherwise
        data = (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

十、如何扩展

  1. 换整车参数:修改 param.m
  2. 增加 PHEV:在模型中增加发动机启停逻辑
  3. 实时硬件:用 Simulink Real-Time 或 dSPACE 替换 main.m
posted @ 2025-10-21 16:55  别说我的眼泪有点咸  阅读(30)  评论(0)    收藏  举报