增程式电动车(EREV)作为混合动力技术的重要分支,近年来在乘用车和商用车领域都获得了广泛应用。与传统混动系统不同,增程式采用串联式动力架构,发动机仅作为发电机使用,完全不参与机械驱动。这种设计使得发动机可以始终工作在最佳效率区间,显著提升燃油经济性。
在MATLAB/Simulink环境下搭建完整的增程式电动车模型,需要整合多个关键子系统。我基于多年汽车电控系统开发经验,梳理出建模的7大核心模块:工况选择模型、驾驶员模型、工作模式控制器、发动机模型、电机模型、电池模型、传动系统模型和整车动力学模型。每个模块都需要考虑物理特性与控制策略的协同,才能实现准确的系统级仿真。
提示:Simulink建模的优势在于可以分模块开发测试,最后进行系统集成。建议按照"部件级→子系统级→系统级"的顺序递进验证。
增程式的核心特征是动力传递路径:
code复制发动机 → 发电机 → 动力电池 → 驱动电机 → 传动系统 → 车轮
这种架构下,发动机与车轮完全解耦。我的建模方案采用以下信号流设计:
为确保各子系统能正确耦合,必须统一接口标准:
工况模型决定了车辆的运行场景,我通常构建三类典型工况:
matlab复制% 标准驾驶循环(如NEDC、WLTC)
cycData = drivecycle('WLTC');
% 自定义斜坡工况
userCycle = [0 0; 10 30; 20 15; 30 0]; % [时间(s) 速度(km/h)]
% 实时交互模式(连接驾驶模拟器)
set_param('EREV_Model/DriverInput','RuntimeObject','on');
驾驶员模型的核心是速度跟踪算法。我的实现方案:
matlab复制function [throttle, brake] = DriverPID(targetV, actualV, dt)
persistent errSum lastErr;
% PID参数(需标定)
Kp = 0.8; Ki = 0.1; Kd = 0.05;
error = targetV - actualV;
errSum = errSum + error * dt;
dErr = (error - lastErr) / dt;
output = Kp*error + Ki*errSum + Kd*dErr;
lastErr = error;
% 输出归一化
throttle = max(0, min(output, 1));
brake = max(0, min(-output, 1));
end
增程式主要有5种工作模式,我的状态机设计:
mermaid复制stateDiagram
[*] --> 纯电模式: SOC>30%
纯电模式 --> 增程模式: SOC<25%
增程模式 --> 纯电模式: SOC>28%
增程模式 --> 急加速模式: 油门开度>85%
急加速模式 --> 增程模式: 油门开度<70%
所有模式 --> 制动回馈: 刹车信号
实际实现时采用Stateflow模块,关键逻辑包括:
采用准静态建模方法,核心是万有特性曲线:
matlab复制% 发动机效率MAP(转速×扭矩→效率)
engineSpeed = [800 1500 2000 2500 3000]; % rpm
engineTorque = [20 40 60 80 100]; % Nm
efficiencyMap = [0.28 0.31 0.30 0.29 0.27
0.30 0.33 0.32 0.30 0.28
0.29 0.32 0.34 0.33 0.30
0.27 0.30 0.33 0.35 0.32
0.25 0.28 0.31 0.33 0.30];
% 燃油消耗率计算
fuelRate = (engineTorque'*engineSpeed*pi/30) ./ (efficiencyMap*42e6);
永磁同步电机采用dq轴方程建模:
code复制电压方程:
Vd = Rs*Id + Ld*dId/dt - ωe*Lq*Iq
Vq = Rs*Iq + Lq*dIq/dt + ωe*(Ld*Id + ψf)
电磁转矩:
Te = 3/2*P[ψf*Iq + (Ld-Lq)*Id*Iq]
Simulink实现要点:
采用二阶RC等效电路模型,参数辨识方法:
code复制1. 脉冲放电测试获取OCV-SOC曲线
2. EIS扫描确定R0、R1、C1、R2、C2
3. 温度补偿系数通过温箱实验获得
SOC估算采用扩展卡尔曼滤波:
matlab复制function [soc, var] = ekfBattery(vMeas, iMeas, socPrev, varPrev)
% 状态方程:soc(k) = soc(k-1) - (η*iMeas*Δt)/Q
% 观测方程:vEst = OCV(soc) + iMeas*R0 + V1 + V2
% 预测步
socPred = socPrev - (0.98*iMeas*1)/3600;
varPred = varPrev + processNoise;
% 更新步
C = dOCVdsoc(socPred) + dV1dsoc + dV2dsoc;
K = varPred*C' / (C*varPred*C' + measNoise);
soc = socPred + K*(vMeas - vEst);
var = (1 - K*C)*varPred;
end
包含减速器、差速器和半轴模型,关键参数:
code复制减速比:9.65:1(电动车常用大速比)
传动效率:0.98(每级齿轮)
半轴刚度:1200 Nm/deg(影响扭矩响应)
振动问题需考虑:
代数环问题解决:
仿真速度优化:
纯电模式验证:
增程模式验证:
极端工况测试:
| 错误现象 | 可能原因 | 解决方案 |
|---|---|---|
| 代数环警告 | 直接反馈路径 | 插入Unit Delay或Memory模块 |
| 发散振荡 | 积分器不稳定 | 减小步长或换用ode15s |
| 参数突变 | 数据类型不匹配 | 统一使用double类型 |
| 仿真速度慢 | 过小步长 | 对机械系统启用local solver |
发动机MAP外推:
matlab复制% 使用gridfit进行二维插值
[x,y] = meshgrid(origRpm, origTorque);
[xi,yi] = meshgrid(newRpm, newTorque);
zi = gridfit(x(:),y(:),effMap(:),xi,yi);
电池参数温度补偿:
code复制R0(T) = R0_25℃ * exp(3150*(1/T - 1/298))
Q(T) = Q_25℃ * (1 - 0.002*(T-25))
电机效率MAP处理:
某项目仿真与实测对比结果:
| 指标 | 仿真值 | 实测值 | 误差 |
|---|---|---|---|
| 0-100km/h加速 | 8.7s | 9.1s | 4.4% |
| 纯电续航 | 82km | 78km | 4.9% |
| 综合油耗 | 2.1L/100km | 2.3L/100km | 8.7% |
差异主要来自:
将模型部署到dSPACE SCALEXIO:
matlab复制slbuild('EREV_Plant','RTWTargetOS','Linux')
基于DP算法的全局优化:
matlab复制% 状态变量:SOC
% 控制变量:发动机功率
% 代价函数:燃油消耗+电池衰减
for k = N:-1:1
for soc = 0:0.01:1
minCost = inf;
for P_eng = P_min:P_step:P_max
cost = fuelCost(P_eng) + ...
batteryCost(soc,P_eng) + ...
J_kp1(nextSOC);
if cost < minCost
minCost = cost;
u_opt(soc,k) = P_eng;
end
end
J_k(soc) = minCost;
end
end
通过OPC UA实现与实车数据交互:
matlab复制uaClient = opcua('localhost',4840);
connect(uaClient);
engNode = findNodeByName(uaClient.Namespace,'EngineSpeed');