基于Simulink的EVT功率分流混动系统建模与能耗仿真

基于Simulink的EVT功率分流混动系统建模与能耗仿真 1. 为什么功率分流架构值得用Simulink拆开研究先说结论丰田这套THSToyota Hybrid System之所以被称作EVTElectrically Variable Transmission核心不是电机和发动机本身而是中间那个不起眼的行星齿轮排。它让发动机转速和车速彻底解耦发动机可以待在高效区发电也可以直接通过机械路径驱动车轮两条路径的能量比例实时可调——这就是“功率分流”四个字的来源。我在接手EVT建模这个活儿之前对混动的理解还停留在“发动机发电、电机驱动”的串联逻辑上。真正在Simulink里把行星排转速关系、电机四象限效率map、电池SOC闭环全串起来之后才意识到这套架构的精妙之处它在低速工况下是串联混动的效率特性在高速工况下又接近并联混动但整个切换过程没有任何离合器和档位动作转速和扭矩的连续变化全靠电机调速完成。这意味着你想在仿真里复现它的能耗表现不能只把发动机和电机当两个独立部件拼在一起必须把行星排的约束方程作为整个模型的中枢。这篇文章不是泛泛地讲混动原理而是把我从零搭建一套可用于能耗电耗仿真的EVT功率分流模型的全过程拆给你看模型架构怎么设计、发动机和电机的建模粒度怎么选、电池为什么用Simscape Battery而不是传统查表模型、控制策略怎么落地、WLTC工况下的仿真结果怎么解读以及最后那几处让我熬夜排查的坑。内容偏工程实践适合正在做整车能量管理仿真、混动控制策略开发或者刚入门Simulink整车建模、想找一个完整案例练手的工程师。2. 行星排的物理约束先敲定转速和扭矩的数学关系2.1 一个公式看透THS的转速耦合功率分流机构的本体是单排行星齿轮三个端口分别连接三样东西行星架Carrier接发动机太阳轮Sun接MG1电机齿圈Ring接MG2电机和输出轴。Simulink模型里所有能量流计算都要落在这条转速约束方程上[ n_s \cdot Z_s n_r \cdot Z_r n_c \cdot (Z_s Z_r) ]或者写成更常用的比例形式[ n_c \frac{n_s \rho \cdot n_r}{1 \rho} ]其中 (\rho Z_s / Z_r)也就是太阳轮和齿圈的齿数比。以THS-Ⅱ代典型参数为例太阳轮 (Z_s 30)齿圈 (Z_r 78)那么 (\rho \approx 0.3846)。这个 (\rho) 直接决定功率分配比例是整个EVT模型里最重要的一个标定量。在Simulink里我不会直接用Simscape的齿轮箱模块而是用一个Fcn模块或者MATLAB Function把转速约束写成显式表达式。为什么因为Simscape齿轮箱模块虽然物理上更“真实”但仿真步长和求解器选择会受到刚性约束而且后续做C代码生成、硬件在环测试时一个纯数学表达式的转速耦合器更容易移植和调试。对于整车级别的能耗模型精度够用速度还快。2.2 扭矩平衡与四种运行模式识别转速关系解决的是“三个端口转速互相制约”的问题但能量怎么流还得看扭矩平衡。稳态下行星排内部的扭矩关系是[ T_s \frac{\rho}{1\rho} \cdot T_c,\quad T_r \frac{1}{1\rho} \cdot T_c ]注意符号约定我规定发动机输出正扭矩到行星架MG1发电时扭矩为负MG2驱动时扭矩为正齿圈到车轮的扭矩为正。这个正方向约定如果不在建模一开始就统一后面调试会让你怀疑人生——我见过有同事把MG1的扭矩正负号搞反仿真出来的结果是“发动机一边驱动、MG1一边反向拖动发动机”油耗直接翻倍数据还看着“合理”。有了转速方程和扭矩平衡我就能在模型里实时识别当前处于什么工作模式这对能耗分析非常重要。我用的判据是纯电模式发动机转速 (n_c \approx 0)转速接近0时不喷油MG2单独驱动功率分流模式发动机工作、MG1调速/发电、MG2驱动/发电机械功率和电功率同时流向齿圈——这是EVT最核心的工作区间行车发电模式MG1发电量大于MG2驱动用电多余电量充入电池制动能量回收模式发动机停机MG2作为发电机把动能转成电能。在Simulink里我通过一个Stateflow图表监测 (n_c)、(n_s)、(n_r) 和油门刹车踏板信号实时切换模式。这里要提一个我踩过的坑Stateflow的转移条件如果用浮点数相等判断比如 (n_c 0)会永远进不了纯电模式。正确做法是设定滞回区间比如 (|n_c| 30) rpm且持续0.5秒以上才进入纯电模式否则模式切换会非常频繁后续能耗统计完全没法看。2.3 EVT和普通串并联架构的本质区别很多人在初学时会问EVT和本田i-MMD那种串并联架构到底差在哪从建模角度看区别体现在功率路径的数量和连续性上。串并联架构在高速时通过离合器把发动机和车轮硬连接动力路径是“0或1”的切换而EVT没有离合器发动机功率从低速到高速始终同时存在机械路径和电功率路径只是比例连续变化。用一个具体数字例子来说明。假设发动机输出功率 (P_e 100) kW发动机转速 (n_c 2200) rpm输出轴转速 (n_r 1500) rpm。代入上面的公式[ n_s (1\rho)\cdot n_c - \rho\cdot n_r 1.3846 \times 2200 - 0.3846 \times 1500 \approx 2469 \text{ rpm} ]再按扭矩平衡算电功率路径占比[ \frac{P_s}{P_e} \frac{T_s \cdot \omega_s}{T_c \cdot \omega_c} \frac{\rho}{1\rho} \cdot \frac{n_s}{n_c} \approx 0.278 \times \frac{2469}{2200} \approx 31.2% ]也就是说大约31%的发动机功率走“发动机→MG1发电→电池→MG2驱动”这条电功率路径剩下69%走“发动机→行星架→齿圈→车轮”这条纯机械路径。这个比例不是固定的而是由ECU根据车速和负载实时调整。建模的时候一定要把这个比例关系算对否则后面算电池SOC变化、算电耗占比都是错的。3. 模型架构设计从整车需求到Simulink模块映射3.1 顶层架构五个子系统和两条因果链一套完整的能耗电耗仿真模型顶层至少要有五个子系统驾驶员模型、控制策略、功率分流机构、动力源发动机双电机、整车纵向动力学。再加上电池系统和热管理系统就是完整的七个子系统。我不是一上来就铺开全部细节而是先建立一条“因果链”驾驶员需求功率 → 控制策略分配扭矩 → 行星排约束输出转速扭矩 → 整车动力学反馈车速 → 驾驶员再根据目标车速修正踏板。这条链闭合模型才跑得起来。我用的是前向仿真架构Forward Simulation因为要考察能量管理策略对部件工作点的影响。后向仿真虽然计算快但无法模拟“控制策略决定发动机开关”这类因果逻辑。Simulink里用GoTo/From标签跨层传递信号避免信号线穿越多个子系统导致连线混乱。顶层参数我把它做成一个结构体变量或Simulink Bus对象比如veh.mass 1650kg、veh.Cd 0.26、veh.Af 2.25m²、tire.r 0.32m、ratio.final 3.2。这样后续做参数扫描比如整车重量从1450到1850kg特别方便不需要打开每个模块改参数。3.2 发动机建模的粒度选择准静态map加一阶惯性发动机模型我建议用准静态效率map加一阶惯性环节而不是建燃烧模型。原因很简单整车能量管理的仿真步长在10ms量级燃烧过程的特征时间在毫秒以下把发动机建模到“缸内压力”的精度对能耗仿真的边际贡献几乎为零却会把仿真速度拖慢几个数量级。我选择的建模方案是输入目标扭矩 (T_{cmd})、当前转速 (n_e);输出实际扭矩带一阶惯性、实时油耗率从BSFC map插值、排气温度后面热管理模型用;参数BSFC map以表格形式存放横轴是转速纵轴是扭矩表中数值是有效燃油消耗率g/kWh;限制扭矩上升斜率限制1500 Nm/s下降斜率限制2000 Nm/s模拟进排气和涡轮迟滞。一阶惯性时间常数我取0.2秒左右。这个值别调太大否则油耗动态响应太慢WLTC工况下油耗会偏高也别太小太小会出现扭矩突变导致车速振荡。我实测下来0.15~0.25秒之间比较合理。BSFC map的数据来源最理想是真实台架数据没有的话可以先用GT-Suite或Ricardo Wave仿真软件生成但要注意map的边界外特性曲线必须和发动机最大扭矩吻合否则控制策略在高速大负荷工况下会让发动机请求一个“根本给不出的扭矩”仿真结果会异常。3.3 双电机与逆变器效率map四象限与电压影响MG1和MG2虽然物理结构类似但在EVT架构里角色完全不同。MG1主要工作在发电模式扭矩为负负责调节发动机转速MG2主要工作在驱动模式扭矩为正负责提供车轮驱动力。所以在建模时虽然我用了同一个电机效率模型模板但MG1和MG2的效率map是分别标定的不能共用一张表。电机效率模型我采用“输入转速和扭矩输出母线电流/电压”本质是查效率map。map覆盖四个象限正扭矩驱动、正扭矩发电下坡工况可能、负扭矩发电制动回收、负扭矩驱动倒车。每个象限的效率特性不同建模时要注意map的边界是“峰值扭矩随转速变化曲线”通常是低速恒扭矩区加高速恒功率区。这里有一个容易被忽视的工程细节逆变器的效率不是恒定值。电机控制器在低负载时效率较低高负载时接近97%左右。我干脆把逆变器效率折进电机效率map里也就是“电机逆变器综合效率map”。实测下来这个折合对纯电续航仿真结果影响很大——综合效率map在低扭矩区比单个电机map低5个百分点左右对SOC下降速度的影响是累积性的几十公里跑下来差距非常明显。4. 电池建模为什么用Simscape Battery而不是传统查表4.1 一阶RC等效电路模型的核心价值以前做混动电池模型很多人直接在Simulink里建一个受控电压源加内阻SOC靠电流积分。这个模型在纯并联架构里勉强够用但放在EVT里就露馅了——因为EVT工况下电池电流波动非常剧烈MG1和MG2的功率波动直接砸在电池上简单的内阻模型会把电压压降和SOC变化算得过于乐观导致控制策略过度依赖电池功率仿真结果偏“省油”但实际上路不可能实现。我改用Simscape Battery工具箱搭建了一阶RC等效电路模型。相比内阻模型它多了两个关键元件极化电阻 (R_1) 和极化电容 (C_1)。这组RC并联结构描述的是电池端电压在电流变化时的“弛豫效应”——电流突增时端电压不会立刻跳到最终值而是先跳一个欧姆压降再按时间常数 (\tau R_1 \cdot C_1) 逐渐趋近稳态。这个动态特性在WLTC这种电流频繁波动的工况下对SOC估算和功率限制判断的影响非常大。4.2 电芯参数设置与串并联组包Simscape Battery里建模的单位是“电芯”然后用串并联组包。以THS那类功率型锂离子电池为例单节电芯的典型参数是参数数值说明标称电压3.6 V三元锂或磷酸铁锂略有差异容量4.08 Ah功率型电池容量不大主打高倍率R00.01 Ω欧姆内阻越小功率能力越强R10.008 Ω极化内阻C1200 F极化电容决定弛豫时间常数SOC初始值0.6混动车一般把电量维持在40%-60%如果整车电池母线电压是240V左右那就需要约60节电芯串联240V ÷ 4V ≈ 60。在Simscape Battery里直接拖一个60串的电池组模型然后把R0、R1、C1、OCV-SOC曲线填进去。OCV-SOC曲线是电池模型精度的关键注意不能直接用一个线性函数——真实的OCV-SOC曲线在中段20%~80%相对平缓两端0%~10%和90%~100%急剧变化。这个特性直接影响到SOC估算和充放电功率边界如果用线性OCVSOC高估或低估会非常严重。4.3 热模型要不要建我的取舍完整的热模型会让仿真规模膨胀不少。我的取舍是这样在能耗电耗分析阶段只要电池温度在动态范围变化不大比如从25℃升到38℃就不建详细的热网络模型只用一个集总热容模块计算电池包平均温度再把这个平均温度反馈给R0、R1的插值表。做了这一步之后你会发现电池内阻随温度升高而略微下降放电能量会增加一点。这个效应虽然只有几个百分点的量级但在评估冬季续航衰减场景时它是必须出现在模型里的否则你对“低温环境电耗增加”的解释就站不住脚。5. 控制策略规则式能量管理的落地实现5.1 电量维持与SOC滞回不把电池当储能电站混动车的电池容量很小电池本质上是一个“能量缓冲池”不是储能电站。所以控制策略的第一原则是电量维持Charge SustainingSOC必须维持在某个目标值附近。我在模型里把目标SOC设定为0.6上下限分别为0.55和0.65并且加入滞回控制避免发动机频繁启停。具体逻辑用伪代码描述if SOC 0.55 engine_on true; elseif SOC 0.65 engine_on false; else engine_on engine_on; % 保持之前状态 end这个滞回区间的作用我实测下来非常重要。如果不加滞回SOC在目标值附近抖动时发动机会以几秒为周期反复启停不仅油耗恶化还会让仿真出现明显的数值振荡。把滞回区间拉大之后发动机启停频率显著下降WLTC工况的油耗表现也更贴近真实车辆的“两段式”工作节奏。5.2 发动机最优工作线从BSFC map里找“甜点”EVT的好处是发动机转速可以脱离车速自由选择所以控制策略的核心任务之一是在当前发动机需求功率下选择“转速-扭矩”组合使燃油消耗率最低。把BSFC map里每个功率等级下的最低油耗点连起来就得到一条发动机最优工作线OOL, Optimal Operating Line。在Simulink里我通过查表实现输入是需求功率 (P_{req})输出是目标发动机转速 (n_{e,opt}) 和目标扭矩 (T_{e,opt})。表格里的数据我事先用MATLAB脚本从BSFC map离线计算好而不是在仿真里实时寻优——实时优化对整车仿真来说计算开销太大而且非线性规划求解器在Simulink里容易出数值稳定性问题。一个我反复提醒自己的点OOL是在稳态条件下算出来的实际发动机工作在动态工况时油耗点会偏离OOL。模型里的一阶惯性环节已经部分模拟了这个动态偏差但是如果你发现仿真油耗比预期高很多先检查是不是OOL表格插值越界——当需求功率超过发动机最大功率时查表会跑到外插区域这时候必须饱和处理否则会出现负油耗这种荒谬结果。5.3 电机扭矩分配功率平衡公式的一行代码控制策略最后一步是把需求扭矩分配给MG1和MG2。我的实现基于前面提到的行星排扭矩平衡公式[ T_{mg1} \frac{\rho}{1\rho} \cdot T_e ]MG2的扭矩则由整车需求扭矩减去齿圈直接输出的机械扭矩得到T_mg2 T_drive_req - T_r * ratio_final; % T_r (1/(1rho)) * T_e这部分是发动机直接传到齿圈的机械扭矩而MG1的目标转速由转速约束方程决定w_mg1_ref (1 rho) * w_engine - rho * w_output_shaft;这时候MG1既可能正转也可能反转既可能发电也可能电动。控制策略图里我直接把这个转速闭环接到MG1的转速PI控制器上扭矩作为PI输出。注意PI参数要单独标定因为MG1的转动惯量比MG2小响应速度快但积分饱和问题也更突出——在转速误差大且持续一段时间时PI输出扭矩会顶到最大限值一旦转速追上又反向超调形成振荡。解决办法是给积分项加抗饱和anti-windup限制这是Simulink里最容易被忽略但效果最明显的参数之一。6. WLTC工况下的能耗电耗分析仿真结果怎么解读6.1 功率流拆解把“省油”落在数据上模型搭好之后我用WLTC工况时长1800秒、总里程约23.27km跑了一轮仿真。整车质量1650kg初始SOC 60%发动机为2.5L阿特金森循环自然吸气发动机最大功率131kWMG2峰值功率88kWMG1峰值功率42kW。关键仿真环境设置是求解器用ode23t步长上限0.01秒Simscape局部求解器默认配置。第一轮跑完我最关心的不是总油耗数字而是能量流平衡表。在Simulink里我给每个能量路径都加了积分模块发动机燃油化学能、发动机输出机械能、MG1发电量、MG2耗电量、电池充放电电量、车轮驱动能量、制动回收能量。最终检查能量守恒误差在5%以内模型才算可信。WLTC循环的实际功率流拆解结果大致是发动机是主动力源纯电起步段和低速蠕行段由MG2提供驱动功率发动机在中高速段介入MG1在功率分流模式下大部分时间充当发电机给电池充电的同时为MG2提供电能制动阶段MG2回收能量回收功率峰值可以达到40kW以上。电池SOC在循环结束时回到60%左右说明电量维持策略正常。6.2 油耗与电耗的换算系统效率的一体两面面对最终结果时你肯定会遇到一个问题电耗和油耗怎么一起看这辆混动车在WLTC下百公里综合油耗接近官方值的水平但如果你仅仅看油耗不看电量变化可能会误判。比如某一段工况电池SOC从60%降到45%那这一段油耗低是因为“欠了电”这叫电耗向油耗转移不是控制系统省油了。我的做法是规定所有油耗分析必须在SOC始末一致的条件下进行如果SOC末值低于初值补偿一个等效油耗。工程上常用“油电转换系数”来折算即1kWh电能约等于0.113升汽油按发电效率和燃料热值折合。在模型里我直接加了一个后处理脚本先判断SOC偏差再折算调整。这个做法可能和国标“电量消耗模式”规定不完全一致但作为工程分析和趋势判断完全够用。6.3 模式切换统计能耗不是平均出来的除了总量我还会统计各个模式下的累计时间和累计能量占比。这个统计对优化控制策略特别有用。比如WLTC低速段有大量纯电行驶时间如果你发现纯电模式下MG2的效率不高可能不是电机本身的问题而是电池电压偏低导致母线电流偏大铜损增加。这时候与其改电机map不如提高SOC目标值从0.55提高到0.65让电池工作在高电压区间整体电耗反而下降。另外我也会做“发动机启停次数”统计。混动车发动机每启动一次喷油、扭矩建立、转速同步都要消耗额外能量WLTC循环发动机启停次数超过20次就偏高我实测在15次左右比较健康。仿真时把启停次数做成一个计数器这个数字也是校准控制策略参数的重要指标。7. 调试和标定中踩过的几个坑7.1 代数环莫名其妙发散的元凶第一次跑通整个模型时车速曲线在模式切换处出现振荡幅度不大但很烦人。排查了很久最后用Simulink的“代数环”诊断工具定位到问题行星排转速约束方程和MG1转速PI控制器形成了代数环——PI控制器输出的扭矩瞬态依赖转速而转速又瞬时依赖扭矩。Simulink在每一个步长内迭代求解这个环数值上非常容易振荡。我的解决方案有两步第一步在转速反馈路径上加入一个传输延迟Memory模块打破代数环第二步把MG1的转速PI控制器改成“扭矩斜坡输出”结构控制效果相近但数值更稳定。这个坑如果你把模型的控制周期设置成离散采样时间比如10ms代数环的问题会自动消失因为离散模块天然带一步延迟。但我的模型是纯连续时间仿真所以必须手动处理。7.2 求解器类型与步长Simscape模型不能瞎选Simscape Battery模型对求解器类型有要求。第一次用普通ode45跑结果电池电压波形上出现高频噪声而且仿真速度极慢——因为ode45是显式求解器为了满足误差容限步长会被压缩到微秒级来捕捉电池模型中较快的动态。后来我切到ode23t梯形算法适合中等刚性问题步长上限设为0.01秒仿真速度提升了约10倍波形也干净了。顺带说一句Simscape语言描述的物理连接Physical Signal和普通Simulink信号Simulink Signal混用时求解器会自动在两边插入转换接口。接口过多会降低仿真效率所以顶层设计时我尽量把“物理建模区域”限制在电池模块内部与外面控制部分的信号转换控制在10个以内。7.3 初始化与复位工况起点乱七八糟初始SOC设成0.6看起来很简单但整车模型不是只有SOC一个状态量。发动机的进气歧管压力、电机转子转速、动力电池极化电容的初始电压这些“隐藏状态”都必须初始化否则仿真的前几秒会出现大幅瞬态油耗统计直接从0.5秒开始偏差。我习惯的做法是先跑一个短周期的“暖机”循环比如NEDC工况前300秒让所有状态量进入正常区间然后重置积分器再从WLTC起点正式记录数据。这个做法相当于台架试验前的热机准备能让每次仿真结果的初始条件保持一致两个不同策略对比时才公平。7.4 模式切换时刻的扭矩冲击加斜率限制EVT没有离合器但模式切换比如纯电切到功率分流时发动机扭矩会瞬间介入行星排如果直接阶跃给定齿圈输出扭矩会出现一个明显的尖峰表现到整车上是加速度突变。解决方法是给发动机扭矩指令和MG2扭矩指令都加斜率限制器。注意斜率限制器的参数要和发动机一阶惯性时间常数匹配否则会“双重延迟”导致驱动响应迟钝。我最后把发动机扭矩上升斜率限制在1000 Nm/sMG2扭矩上升斜率限制在3000 Nm/s这组参数在WLTC工况下测得的纵向加速度冲击小于0.5 m/s³体感上基本没有闯动。8. 模型验证和后续扩展的几个方向一个整车模型值不值得信任最后还是要靠验证。我没有台架数据所以采用了两层验证第一层是单体模块验证——把发动机map模型单独拿出来输入固定转速和扭矩序列对比油耗积分和管理系统数据第二层是整车能量平衡验证——把WLTC全程的燃油化学能减去所有能量消耗和回收误差在5%以内。验证通过之后这套模型能做的事就多了。我自己最常用它做三件事第一控制策略参数的批量扫描比如SOC滞回门槛、发动机启停延迟时间、电量维持目标值每个参数扫10个点一晚上跑完就能画出油耗响应面第二部件升级评估比如把MG2的峰值功率从88kW换成110kW看纯电续航和加速性能改善了但WLTC综合油耗是否恶化——EVT架构里电机功率变大不一定是好事因为电机重量上升、整车质量变大油耗可能不降反升第三和ADAS联合仿真把能量管理策略和巡航控制结合起来研究预测性驾驶对能耗的影响。如果你想把模型进一步工程化还可以做C代码生成。Simulink模型里我用到的模块几乎都能用Embedded Coder生成嵌入式代码但要注意把Simscape Battery部分替换成纯数学模型因为物理模型组件的代码生成支持不够完善。这一步做完模型就可以跑在快速控制原型RCP或硬件在环HIL平台上了。我在实际搭建这套模型的过程中最大的体会是EVT模型的核心不是Simulink操作技巧而是对功率分流架构物理关系的理解深度。行星排的转速扭矩约束公式写对了模型就成功了一半控制策略的参数标定决定了模型“好不好用”而能耗分析时对SOC变化和模式切换统计的关注度则决定你最终能不能从仿真结果里读出真正的工程价值。如果你也在搭建类似的混动模型建议先把行星排方程推导清楚再动手连线。