基于模型预测控制(MPC)与规则策略对比的P2并联混合动力汽车能量管理方法

主要内容概括:
该项目针对P2并联插电式混合动力汽车(PHEV)的能量分配问题,构建了一个非线性整车动力学仿真模型,并在此基础上设计了基于模型预测控制(MPC)的能量管理策略。模型采用后向纵向动力学结构,结合基于ADVISOR的发动机与电机效率特性图,以及基于功率平衡的电池SOC动态模型,对车辆在UDDS城市工况下的运行进行仿真分析。通过将传统50–50规则分配策略与线性时不变MPC策略进行对比,MPC方法利用未来工况预测与系统约束优化发动机与电机的功率分配,实现更优的燃油经济性与电池使用效率。仿真结果通过Simulink模型输出及多维性能曲线进行评估,验证了MPC在混合动力汽车能量管理中的有效性与工程应用价值。
在这里插入图片描述
UDDS 工况下的速度曲线对比。

ZOH: 即零阶保持,表现为阶梯状(stairs)的蓝色线条。
Original samples: 即原始采样点,表现为红色的点状(或密集的离散点)。

这通常用于电动汽车仿真、电池测试或控制系统中,用来模拟车辆在城市动态下的行驶速度。

MATLAB 代码示例

% 1. 准备数据 (由于没有原始数据文件,这里生成模拟的UDDS数据)
% 实际的UDDS工况通常包含1372个数据点,时长1372秒
% 这里为了演示效果,生成一段类似的模拟数据
dt = 1; % 采样时间 1秒
t_original = 0:dt:1372;
% 模拟UDDS的速度特征(多个加减速循环)
v_original = 0.01t_original.^2 - 0.00002t_original.^3 + sin(0.02t_original) + 2*randn(size(t_original));
v_original(v_original 阶梯状
% 使用 stairs 函数绘制阶梯图
figure(‘Color’, ‘white’, ‘Name’, ‘UDDS: linear vs ZOH’);
set(gcf, ‘Position’, [100, 100, 800, 500]); % 设置窗口大小

% 方法二:线性插值 (Linear Interpolation) 或 原始点
% 为了复现图片中的红点效果,我们直接绘制原始采样点或高分辨率的线性插值

% 4. 绘图
% 绘制 ZOH (蓝色阶梯线)
stairs(t_samples, v_samples, ‘LineWidth’, 1.5, ‘DisplayName’, ‘ZOH (stairs)’, ‘Color’, [0, 0.4470, 0.7410]);
hold on;

% 绘制 Original samples (红色点/线)
% 图片中红点非常密集且看起来像线性连接,这里用 plot 绘制红色线条模拟
plot(t_samples, v_samples, ‘r.’, ‘MarkerSize’, 8, ‘DisplayName’, ‘Original samples’);

% 5. 格式化图表
title(‘UDDS: linear vs ZOH’, ‘FontSize’, 14, ‘FontWeight’, ‘bold’);
xlabel(‘Time [s]’, ‘FontSize’, 12);
ylabel(‘Speed [m/s]’, ‘FontSize’, 12);
grid on;
box on;
legend(‘Location’, ‘northeast’);

% 设置坐标轴范围 (参考图片)
xlim([0 1400]);
ylim([0 30]);

代码解释

真实的 UDDS 数据通常存储在 .mat 或 .csv 文件中。代码中我用数学公式模拟了一段类似的波动曲线。
stairs 函数: 这是关键函数,用于生成蓝色的“阶梯状”波形,模拟数字控制系统中的 零阶保持器 效果。
plot 函数: 用于绘制红色的采样点。
格式化: 设置了标题、坐标轴标签(Time [s], Speed [m/s])以及图例,
在这里插入图片描述
(MPC)中使用的扰动预览向量,通常用于车辆动力系统或能量管理策略的仿真中。

横轴: 时间,范围约 0 到 1400 秒,这对应了标准的 UDDS 驾驶循环时长。
纵轴: 所需的轴功率,范围 0 到 40 kW。
标题: “MPC Disturbance Preview Vector D”。
图形特征: 这是一个随时间变化的功率需求信号,呈现出明显的阶梯状或离散变化,这是典型的驾驶循环功率需求特征。

MATLAB 代码示例

% 清除工作区
clear;
clc;
close all;

% 1. 模拟 UDDS 时间轴 (0 到 1372 秒)
t = 0:1372; % 1372秒是标准UDDS工况的时长
num_points = length(t);

% 2. 生成模拟的 “Required Shaft Power” 数据
% 真实的功率需求通常基于车辆动力学计算,这里使用随机数模拟其特征
rng(42); % 固定随机种子以保证结果可复现

% 基础功率波动 (模拟城市工况的频繁加减速)
power_base = 5 + 10 * rand(1, num_points);

% 添加一些高峰值 (模拟急加速)
spikes = zeros(1, num_points);
spike_indices = randperm(num_points, 20); % 随机选择20个点作为高峰
spikes(spike_indices) = 20 * rand(1, 20);

% 组合数据
P_sh_req = power_base + spikes;

% 限制最大功率不超过 40 kW (符合图片纵轴范围)
P_sh_req(P_sh_req > 40) = 40;

% 3. 绘图
figure(‘Color’, ‘white’, ‘Name’, ‘MPC Disturbance Preview Vector D’);
set(gcf, ‘Position’, [100, 100, 800, 500]);

% 使用 stem 或 bar 绘制离散信号,或者 plot 绘制连续信号
% 图片看起来像离散的柱状或阶梯,这里使用 plot 模拟连续预览
plot(t, P_sh_req, ‘LineWidth’, 1.2, ‘Color’, [0, 0.4470, 0.7410]); % 使用 MATLAB 默认蓝色

% 4. 设置图表属性
title(‘MPC Disturbance Preview Vector D’, ‘FontSize’, 12, ‘FontWeight’, ‘bold’);
xlabel(‘Time [s]’, ‘FontSize’, 10);
ylabel(‘Required Shaft Power, P_{sh_req} [kW]’, ‘FontSize’, 10, ‘Interpreter’, ‘latex’);

% 设置坐标轴范围
xlim([0 1400]);
ylim([0 40]);

% 添加网格
grid on;
set(gca, ‘GridLineStyle’, ‘–’, ‘GridAlpha’, 0.5);

% 添加图例 (虽然图片没显示,但为了完整性)
% legend(‘Preview Vector D’, ‘Location’, ‘northeast’);

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐