1. 混动系统开发为何让人头秃?
混动汽车的动力系统开发,本质上是在解一道多目标优化难题。传统燃油车的动力传递路径相对简单,发动机转速和车轮转速之间存在固定的机械连接关系。而混动系统引入了电机、电池、功率分流装置等新元素,使得能量流动路径呈现出复杂的网状结构。
我至今记得第一次看到Dmi系统能量流图时的震撼——发动机输出轴通过行星齿轮组同时连接着发电机和驱动电机,电池组作为能量缓冲池随时准备充放电。这种架构下,发动机可以完全解耦于车轮转速,理论上能在任意车速下保持最佳工作区间。但随之而来的问题是:如何实时决策该让发动机发电还是直接驱动?电池该充电还是放电?电机该助力还是回收能量?
2. 正向开发框架的四大核心模块
2.1 能量管理策略(EMS)
EMS模块是整个系统的决策中枢,其核心是一个有限状态机。在Dmi系统中,我们定义了6种基础工作模式:
- 纯电驱动(EV)
- 串联模式(发动机发电→电机驱动)
- 并联模式(发动机直驱+电机辅助)
- 行车充电
- 能量回收
- 怠速充电
状态切换的触发条件涉及SOC(电池荷电状态)、油门开度、车速等12个关键参数。在Simulink中,我们使用Stateflow模块实现这个逻辑,每个状态都关联着特定的扭矩分配算法。
经验之谈:状态切换时的扭矩补偿是关键。我们曾因未处理好模式切换时的扭矩衔接,导致车辆在串联转并联时出现明显顿挫。后来通过在切换前后各100ms内引入扭矩渐变算法解决了这个问题。
2.2 扭矩分配算法
这是整个系统最精妙的部分。当驾驶员踩下油门时,需求扭矩需要动态分配给发动机和电机。我们的分配原则是:
- 优先用电(效率更高)
- 发动机工作时尽量运行在高效区间(通过BSFC图确定)
- 考虑电池充放电功率限制
在Simulink中实现的算法框架如下:
matlab复制function [T_eng, T_mot] = torque_distribution(T_req, SOC, V_spd)
% 获取当前发动机最佳工作点
[eng_opt_spd, eng_opt_trq] = get_optimal_engine_point(V_spd);
if SOC > 0.3 && T_req < motor_max_trq
% 纯电模式
T_eng = 0;
T_mot = T_req;
elseif SOC < 0.7 && abs(T_req - eng_opt_trq) < 20
% 发动机直驱+电机微调
T_eng = eng_opt_trq;
T_mot = T_req - T_eng;
else
% 串联模式
T_eng = eng_opt_trq;
gen_trq = eng_opt_trq * 0.8; // 考虑发电效率
T_mot = T_req + gen_trq;
end
end
2.3 动态协调控制
混动系统存在多个执行器(发动机、电机、离合器)需要协同工作。我们开发了一个动态协调控制器,主要处理:
- 模式切换时的执行器时序控制
- 扭矩响应延迟补偿
- 故障时的降级策略
这个模块的调试最耗时,因为涉及多个ECU之间的CAN通信延迟。我们最终采用前馈+反馈的复合控制策略,将模式切换时间控制在150ms以内。
2.4 硬件在环(HIL)测试平台
正向开发离不开完善的验证体系。我们的HIL平台包含:
- 实时仿真机(运行车辆动力学模型)
- 电池模拟器
- 功率级电机模拟器
- 故障注入单元
测试用例库覆盖了2000+个场景,包括极端工况如:
- 高速行驶时突然深踩油门
- 低SOC下长上坡
- 严寒天气冷启动
3. Simulink建模的五个关键技巧
3.1 模块化分层设计
将模型分为四个层级:
- 应用层(策略算法)
- 功能层(子系统实现)
- 接口层(信号处理)
- 基础服务层(底层驱动)
每个子系统都配有完整的输入输出验证模块,便于单独测试。
3.2 数据字典管理
所有信号和参数都存储在数据字典中,避免出现"魔数"。例如:
matlab复制Bus: EMS_Inputs
- pedal_position (0-100%)
- vehicle_speed (km/h)
- battery_SOC (0-1)
- motor_temp (degC)
3.3 模型覆盖率分析
通过Simulink Coverage工具确保测试用例覆盖所有决策分支。我们要求关键模块的MC/DC覆盖率必须达到100%。
3.4 自动代码生成配置
优化代码生成设置以获得高效嵌入式代码:
- 启用inline函数
- 设置合适的存储类别(Imported/Exported)
- 配置合理的栈大小
- 启用代码优化选项
3.5 模型版本控制
使用Git管理模型变更,配合Simulink Project实现:
- 差异比较
- 变更注释
- 版本回滚
4. 调试过程中踩过的坑
4.1 CAN通信时序问题
初期未考虑CAN消息的传输延迟,导致实际车辆中扭矩指令不同步。解决方案是在模型中加入基于实测的延迟补偿模块。
4.2 数值稳定性
某次软件更新后,车辆在长时间下坡时出现SOC计算漂移。原因是积分算法在极端工况下累积误差。改用带修正因子的闭环SOC估算算法后解决。
4.3 极端温度影响
-20℃环境下,电机扭矩响应明显变慢。我们增加了温度补偿系数表,根据实测数据动态调整扭矩指令。
4.4 生产代码与模型差异
早期出现过自动生成代码与模型行为不一致的情况。后来建立了严格的代码验证流程,包括:
- 背靠背测试
- 代码审查清单
- SIL/PIL测试
5. 性能优化的三个维度
5.1 算法层面
- 将BSFC查表运算改为多项式拟合,减少80%计算量
- 采用滑动窗口法简化SOC估算
- 使用定点数替代浮点数运算
5.2 软件架构
- 将控制周期从10ms延长到20ms(经验证不影响性能)
- 采用事件触发机制替代全周期运行
- 优化任务调度顺序
5.3 硬件匹配
- 选择支持硬件浮点单元的MCU
- 合理分配CPU负载(EMS任务不超过60%)
- 优化CAN消息发送策略
这套开发框架最终实现的性能指标:
- 模式切换时间 <150ms
- 控制周期抖动 <±50μs
- CPU负载率 <70%
- 代码体积 <512KB
从油电耦合逻辑到最终量产代码,每个环节都需要严谨的工程化思维。混动系统的魅力就在于,你永远能在效率、平顺性、成本之间找到新的优化空间。