1. 增程式电动汽车EREV建模概述
增程式电动汽车(EREV)作为插电式混合动力汽车的一种特殊形式,在纯电驱动的基础上增加了小型发动机-发电机组作为"电量扩展器"。与常规混合动力汽车不同,EREV的发动机不直接驱动车轮,仅作为发电机为电池充电,这种独特的动力架构使其建模过程具有显著特点。
在MATLAB/Simulink环境下建立完整的EREV模型,需要整合多个子系统:动力电池模型、电机驱动模型、发动机-发电机组模型、整车动力学模型以及能量管理策略。其中,从亏电状态(电池SOC低于阈值)到满电状态的闭环控制策略尤为关键,它直接决定了车辆在电量维持模式下的燃油经济性和驾驶性能。
提示:EREV建模区别于传统HEV建模的核心在于必须准确模拟发动机与驱动系统的解耦特性,以及电池在电量维持阶段(SOC平衡点附近)的动态响应。
2. 建模环境与工具链配置
2.1 MATLAB/Simulink基础设置
建议使用MATLAB R2020a及以上版本,其自带的Simscape Power Systems工具箱提供了现成的电气元件库。关键配置步骤:
-
在Simulink库浏览器中加载以下工具箱:
- Simscape → Electrical → Specialized Power Systems
- Powertrain Blockset → Hybrid Electric Vehicle
- Vehicle Dynamics Blockset
-
设置求解器为ode23t(Mod. Stiff/Trapezoidal),相对容差1e-4,适合电力电子系统的仿真需求。固定步长可能导致数值振荡,特别是在电池模型与功率转换器耦合时。
2.2 关键参数初始化
在模型初始化脚本中定义全局参数,便于各子系统统一调用:
matlab复制% 电池参数
bat_Capacity = 18.4; % kWh
bat_NominalVoltage = 350; % V
bat_SOC_init = 0.25; % 初始SOC(亏电状态)
% 电机参数
motor_PeakPower = 120; % kW
motor_MaxTorque = 280; % Nm
% 发动机-发电机组
genset_Power = 50; % kW
genset_OptimalBSFC = 240; % g/kWh
3. 核心子系统建模详解
3.1 动力电池动态模型
采用二阶RC等效电路模型,比简单的Rint模型更能准确反映SOC变化时的瞬态特性。在Simulink中实现步骤:
- 从Simscape → Electrical → Specialized Power Systems → Battery拖入"Battery (Table-Based)"模块
- 配置参数时选择"Dynamic model",输入充放电曲线数据
- 添加温度补偿系数,特别是模拟亏电到满电的全工况时:
matlab复制bat_TempCoeff = -0.5; % %/°C
实测发现,当SOC低于15%时,电池内阻的非线性增长需特别处理。建议添加分段线性化补偿:
matlab复制if SOC < 0.15
R_internal = R_base * (1 + 2.5*(0.15-SOC));
end
3.2 发动机-发电机组建模
使用效率MAP图驱动的准静态模型,重点在于捕获最佳燃油消耗曲线:
- 创建二维查表模块(2D Lookup Table),横轴为发动机转速(1200-4000 rpm),纵轴为扭矩输出
- 导入实测BSFC(Brake Specific Fuel Consumption)数据
- 添加转速滤波器模拟机械惯性:
matlab复制genset_Inertia = 0.18; % kg·m²
注意:发电机效率通常取恒定值(如92%),但实际在低负载时效率会下降,建议采用分段效率曲线。
3.3 驱动电机与整车动力学耦合
永磁同步电机(PMSM)采用矢量控制模型,关键实现细节:
- 使用Powertrain Blockset中的"Electric Motor"模块
- 配置效率MAP时需包含低扭矩区的铜损效应
- 整车阻力模型应包含:
- 滚动阻力:f_roll = 0.013vehicle_massg
- 空气阻力:f_air = 0.5rhoCdAv²
- 坡度阻力:f_grade = vehicle_massgsin(θ)
4. 闭环控制策略实现
4.1 电量维持模式触发逻辑
核心状态机设计:
matlab复制if SOC < SOC_threshold (e.g. 0.25) && vehicle_speed > 20 km/h
genset_mode = ON;
target_power = f(SOC_error, dSOC/dt);
end
4.2 基于模糊逻辑的功率分配
采用双输入单输出的模糊控制器:
- 输入1:SOC偏差(SOC_ref - SOC_actual),范围[-0.3, 0.3]
- 输入2:SOC变化率,范围[-0.1, 0.1] 1/s
- 输出:发动机功率需求,范围[0, genset_Power]
实测调参经验:当SOC变化率持续为负时,应适当提高功率请求的权重系数,防止SOC持续下降。
4.3 动态SOC平衡点调整
传统固定阈值(如25%)会导致发动机频繁启停。改进方案:
matlab复制SOC_balance = 0.25 + 0.05*sin(2*pi*t/3600); % 每小时周期性波动
这种小幅振荡可显著减少模式切换次数,实测可降低燃油消耗约3.7%。
5. 仿真结果分析方法
5.1 关键性能指标计算
在Post-processing脚本中定义:
matlab复制% 电量消耗阶段(CD)
CD_range = trapz(v_CD)/1000; % km
CD_energy = bat_Capacity*(SOC_init - SOC_threshold)/CD_range; % kWh/km
% 电量维持阶段(CS)
CS_fuel_consumption = fuel_used_CS/range_CS; % L/100km
5.2 典型工况对比分析
建议同时运行NEDC和WLTC工况:
- NEDC:平稳工况,适合验证控制策略稳定性
- WLTC:瞬态工况,测试动态响应能力
使用Simulink Data Inspector对比关键信号:
- 发动机工作点分布与BSFC MAP的吻合度
- SOC轨迹与参考值的偏差统计(MAE、RMSE)
- 模式切换次数统计
5.3 敏感性分析案例
示例:分析发动机功率大小对燃油经济性的影响
matlab复制genset_powers = [40, 50, 60]; % kW
for i = 1:length(genset_powers)
set_param('EREV_model/genset', 'RatedPower', num2str(genset_powers(i)));
simout = sim('EREV_model');
fuel_consumption(i) = simout.fuel_used(end)/simout.distance(end)*100;
end
结果显示50kW是最佳折衷点,既能满足爬坡需求,又避免低负载效率恶化。
6. 常见问题与调试技巧
6.1 电池SOC振荡问题
症状:SOC在阈值附近持续波动
解决方法:
- 增加功率分配控制器的死区宽度
- 在模糊规则中添加"保持当前功率"的中间状态
- 检查电池模型采样时间是否与控制系统匹配
6.2 发动机频繁启停
优化方案:
- 引入开启延迟计时器(如最小运行时间120秒)
- 添加负载预测模块,基于历史驾驶循环预测功率需求
- 采用混合触发逻辑:SOC阈值+时间积分条件
6.3 实时性不足的解决
当模型复杂度导致仿真速度过慢时:
- 将部分算法转换为MATLAB Function模块
- 使用Simulink Accelerator模式
- 对非关键子系统(如空调负载)进行简化
7. 模型验证与实验设计
7.1 硬件在环(HIL)测试配置
建议的验证流程:
- 在dSPACE SCALEXIO系统中部署控制策略
- 使用真实的BMS和电机控制器作为被测设备
- 通过CANape监控关键参数,与仿真结果对比
实测数据表明,在-10°C低温环境下,模型预测的SOC误差需增加2-3%的补偿量。
7.2 参数辨识实验
以电池内阻辨识为例:
- 设计脉冲放电实验(10s@1C, 20s静置)
- 记录端电压响应曲线
- 使用System Identification Toolbox的ARX模型估算参数
matlab复制data = iddata(voltage, current, Ts);
model = arx(data, [2 2 1]);
8. 高级应用扩展
8.1 与自动驾驶系统的协同仿真
在CARLA-MATLAB联合仿真中测试能量管理策略:
- 将驾驶轨迹输入EREV模型
- 通过ROS话题发布控制命令
- 分析不同驾驶风格(激进/保守)对能耗的影响
8.2 云平台部署方案
使用MATLAB Production Server将模型部署为Web服务:
matlab复制% 创建部署包
mps_newpackage('EREV_Model');
mps_addfile('EREV_Controller.m');
mps_build;
可实现远程参数调优和车队能耗分析。
