首页 / 资讯中心 / 文章详情

增程器Cruise模型搭建与SOC、油耗调参避坑指南

增程器Cruise模型搭建与SOC、油耗调参避坑指南 ★ FEATURED ARTICLE
深夜两点半的办公室屏幕上SOC曲线像心电图一样在增程器启动阈值附近来回横跳发动机模型一会儿开一会儿停整车油耗数字看着就让人头大。这种场景对于调过增程器整车模型的人来说应该都不陌生。增程器这东西说白了就是燃油车和电动车之间的一个“和事佬”——它不像发动机直驱那样机械连接车轮也不像纯电池那样全靠电网吃饭而是用一台发动机加一台发电机在电池电量不足的时候补上能量缺口。而 Cruise 仿真模型就是我们这群工程师用来把这个“中间商”调出价值、调出竞争力的主战场。这篇内容不聊课件上的原理只聊我调增程器 Cruise 模型过程中踩过的坑、总结出的搭建顺序、能量管理策略的落地方式以及深夜排查SOC不收敛和油耗失真的完整链路。我默认看这篇内容的人要么是刚接手增程器整车仿真任务的工程师要么是已经在做混动/增程能量管理策略、但被模型细节折磨得够呛的同学。如果你只是听过 Cruise 这个软件的名字也没关系我会尽量把部件建模逻辑、联合仿真端口、参数标定顺序这些内容讲到能直接上手用。1. 增程器在整车里到底扮演什么“和事佬”1.1 一句话说清增程器的工作原理增程器Range Extender的核心逻辑并不复杂动力电池直接给驱动电机供电驱动电机驱动车轮当SOC降到某个下限时发动机启动带动发电机发电发出的电一部分直接供驱动电机使用另一部分富余的充进电池。发动机始终工作在某个转速区间不直接参与车轮驱动所以整车的驾驶特性跟纯电基本一致但续航焦虑又可以通过发动机发电来解决。这个“和事佬”的难处在于它要同时伺候三方电池想要寿命最好SOC别太低也别太高、充放电倍率别太猛整车想要油耗那发动机就得尽可能工作在高效区驾驶员想要动力和安静这要求发电功率得跟得上驱动需求还不能频繁启停、不能嗷嗷叫。三个需求放一起矛盾点就全出来了。这也是为什么增程器一定要做仿真模型的原因——没有模型之前纯粹靠标定工程师在实车上调一个工况一轮试验下来费用高、周期长而且中间任何一个策略参数改动了整车表现到底怎么变化很难在一两次试验里看清。1.2 为什么仿真模型是“和事佬”的练兵场我个人的理解是增程器整车模型做的不是“预测一个准数”而是把整车能量流里的各种博弈关系提前暴露出来。举个例子某一版策略里发动机启动阈值设得太高导致电池SOC还没怎么掉发动机就开始发电给电池充电。看着SOC很健康实际上电从电池出来、经过电机消耗掉一部分又由发动机发出来、充回电池这一圈下来等效于自己发电自己充机械能和电能来回转换白白多了两层损耗油耗就上去了。这类问题在 Cruise 模型里特别容易暴露出来因为整车的部件级模型把发动机油耗MAP、发电机效率MAP、电池充放电内阻损耗都放在一起算。对比实车模型里每一克油烧到哪、每一度电走到哪都看得见。我们常说增程器策略调的是什么调的就是每个工况下“谁来提供功率、谁在吸收功率、中间倒手了几次”。把这个基础逻辑想明白之后再去看 Cruise 里的模型搭建步骤、控制策略怎么接进去思路就顺了。这里我强烈建议不要上来就急着搭策略先把模型中每个部件的输入输出端口、每个信号的含义梳理清楚。2. 先搭骨架还是先定策略Cruise增程器模型的两步走2.1 部件级建模发动机、发电机、电池、驱动电机的填表细节新建一个 Cruise 项目时第一步是往车辆模型里拖入对应的部件并建立机械连接和电气连接。增程器的典型架构是串联式一般包含四到五个核心部件发动机Internal Combustion Engine、发电机Generator、动力电池Battery、驱动电机Electric Machine、主减速器加车轮。每个部件的关键参数我们逐个来看。发动机这边最重要的不是额定功率而是外特性数据和万有特性油耗MAP。在 Cruise 里发动机的负荷特性、外特性曲线通常以表格形式填入。如果项目早期没有台架实测数据可以先用相似排量发动机的数据凑合但一定要知道发动机MAP在低转速大扭矩区域最容易外推失真这一块在后面第五章里细说。发电机的建模相对简单主要填效率MAP和扭矩范围。注意发电机与发动机之间如果是通过齿轮或皮带耦合一定要把传动比填进去传动比直接决定发动机和发电机的工作点映射关系这个很多人容易漏结果发动机转速算出来跟实际结构对不上。电池部分推荐使用 Cruise 自带的等效电路模型最简单的 Rint 模型只需要内阻、开路电压OCV和容量一阶RC模型也不过是多一对极化电阻和电容。我个人的建议是如果你做整车主能量管理策略Rint 模型其实够了如果深入研究电池SOC估算和脉冲工况下的功率限制那就上阶数高一点的等效电路模型。驱动电机这边最关键的是效率MAP和外特性曲线。填表时要注意Cruise 的 Electric Machine 工作象限是可以选择的电动和发电的扭矩符号要分清。不少初学者在这里把电机效率的方向弄反了导致整车能量平衡计算出一堆离谱负数排查起来非常头疼。下表是我整理的一个增程器 Cruise 模型部件参数清单做新项目时照着这个清单核对一遍能省很多半夜排查的时间。部件关键参数常见遗漏点发动机外特性、万有特性油耗MAP、怠速转速、最高转速、转动惯量混动/增程专用MAP没区分发电机效率MAP、扭矩范围、转速范围、与发动机传动比传动比漏填或方向填反动力电池容量、OCV-SOC表、内阻矩阵、SOC初始值、电压上限/下限初始SOC设置不合理驱动电机电动外特性、发电外特性、效率MAP、扭矩响应时间常数扭矩响应时间常数为0主减速器传动比、效率、转动惯量把效率写成1导致模型过于理想化整车阻力空气阻力系数、迎风面积、滚阻系数、车重坡度阻力测试工况没做2.2 架构与信号流串联式增程器的机械/电气拓扑搭完部件画拓扑连接。串联式架构中发动机和发电机是机械轴连在一起的通常会有一个负责机械能到电能转换的节点发电机产生的直流电经过逆变器接到高压母线上驱动电机的逆变器也从这条母线上取电动力电池则直接并联在这条高压母线上。这里要特别强调一个仿真模型里常见的认知误区很多人以为电池在增程器工作时不参与能量流动其实恰恰相反。增程器工作时发电机发出的功率通常不等于驾驶所需的驱动功率多出来的往电池里充、不够的由电池补充。电池在整条高压母线上是天然的功率缓冲区所以 SOC 变化情况直接反映了发电功率和用电功率的平衡状态。在 Cruise 里电气连接是用电力总线来定义的。发电机、电池、驱动电机都接到同一个高压总线节点上。这种“总线并列”的方式意味着我们不需要手动分配电流方向模型内部会根据各部件的外特性自动平衡。2.3 先跑通纯电EV模式再加增程器——我建议的顺序我见过不少人一上来就把发动机、发电机、电池、电机全拖进去然后直接启动整车仿真结果报错报得满头雾水。这里非常建议分两步走。第一步先在模型里只保留电池、驱动电机、减速器、车轮和驾驶员模型跑一个纯电工况。先验证最基础的整车阻力、传动效率、电机扭矩输出和电池放电是否合理。比如 WLTC 测试工况下SOC 从 80% 掉到 50% 对应的行驶里程是否符合粗略估算电机功率能不能满足最大加速需求。只要这一步没问题就说明整车的基础机械传动部分是对的。第二步再把发动机、发电机加进去并先让热管理系统以简单的被动冷却方式运行。这时先不急着加上层能量管理策略可以手动给发动机一个固定的功率命令类似“发电功率恒为20kW”看SOC在混合工况下是否按照预期缓慢上升或下降。这一步跑通了再上完整的策略状态机和PI控制。这样做的最大好处是每一步出问题时的排查范围很小不会出现一堆部件数据错误叠在一起、报错信息互相干扰的情况。3. 和稀泥的规则能量管理策略在联合仿真里怎么落地3.1 从恒温器式到功率跟随式策略选型背后的取舍增程器的能量管理策略工程上常见的大体两类恒温器式和功率跟随式。恒温器式简单说就是SOC设成一个滞环区间比如低于0.6启动增程器、高于0.65停机。启动后发动机固定在一个最佳油耗功率点上发电发出来的电除了维持驱动电流外剩余充进电池。这种策略的好处是发动机工作点固定噪声振动和油耗都好控制实现也简单CVT变速箱工程师看了都流泪的简单逻辑缺点是电池充放电倍率忽大忽小尤其是低速小功率工况下发动机发多了电就往电池里硬塞对电池寿命并不友好。功率跟随式则要求增程器的发电功率跟随整车驱动功率需求再加上一个根据SOC偏差修正的充电功率。等于发动机为当前工况实时“动态调节功率”电池只承担功率波动的削峰填谷。这种策略对发动机工作点的控制要求高可能出现发动机在低效区运转的情况但对电池更友好整体等效油耗往往也更低。很多项目最终用的是折中方案SOC低时用恒温器式强制充电SOC中等时用功率跟随式SOC高时纯电。这个“模式切换”其实就是状态机。我个人经验是最开始做策略时不要贪多先把“EV、增程器充电、回馈制动”三个状态定义清楚跑通之后再加模式内的细分逻辑。3.2 Simulink/Cruise联合仿真的端口设置与同步步长Cruise 自带的控制模块可以搭简单的逻辑但稍微复杂的能量管理策略大家几乎清一色用 MATLAB/Simulink 做联合仿真。这时有一个关键点控制策略需要从 Cruise 里读到什么信号又要把什么信号写回去。实际项目中整车控制器VCU发出来的增程器控制命令一般是这样的组合增程器启停指令0或1、发动机目标转速或最小允许转速、发电机目标扭矩或发电功率请求。同时整车控制器会读取当前SOC、车速、驱动电机功率需求、电池当前电压电流、发动机转速等信号。把这些信号的名称和含义定好后在 Cruise 的 Data Bus 里逐个连接再在 Simulink 的输入输出端口里对应起来。这里最容易踩的坑是端口顺序。Cruise 与 Simulink 联合仿真时端口是按顺序匹配的而不是按名称匹配。曾经有一次我调整了 Simulink 输入端口的位置忘记同步改 Cruise 那边的信号映射结果车速信号传到策略里变成了SOC值SOC曲线在0.1到0.9之间疯狂摆动整个模型像喝醉了一样。排查到最后才发现是端口错位。所以强烈建议每次调整端口都要在 Simulink 模型里加信号注释并专门对照一遍 Cruise 的端口列表。步长设置上增程器能量管理策略对时间尺度没有那么敏感。我一般把联合仿真固定步长设为0.01s也就是10毫秒。这个量级既能捕捉到发动机点火、发电机扭矩变化等动态过程又不至于让一个多小时时长的测试工况仿真跑到天荒地老。如果做传动系统抖动相关的研究再把步长缩到1毫秒也不迟。3.3 SOC平衡点、滞环带和PI参数的调参顺序能量管理策略里最常调的就是SOC平衡点、启动/停止阈值和SOC偏差PI控制器参数。很多初学者上来就把PI参数往大了调觉得偏差收敛快是好事结果SOC曲线倒是稳发动机启停却像打摆子。正确的调参顺序应该是先把发动机启停阈值定死比如启动SOC设为0.60、停止SOC设为0.65在这个滞环内策略不动作。先把这条“规则底线”立住再去调功率跟随部分的PI参数。PI参数这块我建议把SOC偏差的基准单位先统一如果Cruise里的SOC信号是0到1的小数那PI比例系数就不要从几百开始试。以我调的典型增程器模型为例Kp的量级通常在0.002到0.01之间Ki就更小0.0001到0.001这个量级。每拿到一个模型先让小增益运行几个工况确认SOC能缓慢往目标值靠拢再逐步加大积分系数来消除稳态偏差千万不要一上来就追求响应速度。这个过程有点像是增程器本来就是个慢性子系统充其量需要的不是猛烈纠偏而是柔和持续的补偿。你调得越急系统振荡就越快最终丢的是油耗和启停平顺性。4. 深夜调模型的真正主战场SOC不收敛与油耗失真的排查链路4.1 高速巡航SOC持续下滑先怀疑发电机功率上限而不是电池先说一个我印象很深的排查案例。某一版模型里120km/h高速巡航工况下SOC从0.6一路滑到0.35怎么调策略都没用。我当时的第一反应是电池有问题要么容量偏小要么放电内阻填大了。于是我把电池容量反复改大、内阻改小SOC照样掉。最后静下心做了一遍功率平衡核算才发现问题是增程器发电功率上限撑不住巡航功率需求。120km/h左右的高速巡航整车驱动功率需求大体在25到35kW这个量级。而我那个模型里发电机加上发动机的可持续发电功率上限标定成了25kW相当于发电功率和巡航功率勉强持平但由于高压母线上的各种转换效率损耗实际能落到电池里的充电功率几乎为零。再加上电池充电功率请求又被策略钳制在一个很保守的数值上SOC可不就一路向下走。这个案例想说明的是SOC下滑排查链路里第一个要怀疑的不是电池而是发电机和发动机的组合功率上限是否超出实际需求。我把排查步骤总结成下面这张表。排查顺序检查对象典型现象处理方向1巡航功率需求驱动电机功率占发电功率比例接近100%计算对应工况的功率余额2发电机外特性发电功率上限低于需求功率提高发电机功率限制或进行动力性标定3策略发电请求请求功率被SOC相关限制钳住检查积分上限和请求钳位值4电池充电接受能力电池允许充电功率过低调整电池充电功率限制曲线5电池容量/内阻SOC下降速率超出物理可能核对容量参数和放电内阻如果你排查时发现以上几项都正常那就回头看一眼初始SOC是不是被设成了一个失衡值。有些模型把初始SOC设成0.9然后策略在SOC降到0.6才启动增程器那前半段纯电里程里的“油耗”本来就是零拿这种数据去跟别人对比是没有任何意义的。4.2 发动机启停振荡滞环、最小运行时间和斜坡限幅三件套另一个深夜经典问题是发动机在启动阈值附近反复启停。现象描述就是SOC曲线小幅波动发动机转速一会儿从0到额定一会儿又跌回0一小时仿真里启停次数能到几十次看着像模型在疯癫。这种问题在恒温器式策略里尤其常见因为单纯的滞环逻辑对变化的工况适应能力差。解决办法有三件套。第一把启动和停止阈值拉开滞环差。启动SOC设0.55停止SOC设0.62中间留出0.07个点的缓冲带。别小看这个缓冲带它相当于给策略一个“记忆”让系统不会因为SOC在边界上微小波动就反复切换。第二给发动机加最小运行时间和最小停机时间。一个是发动机启动后必须至少运行多少秒才能停机一个是停机后必须等待多少秒才能再次启动。这两个时间参数在 Cruise 里可以直接通过策略信号处理也可以在 Simulink 状态机里实现。加上了之后即使SOC越过了停机阈值发动机也会把手里这批燃料烧完再停避免频繁热机损失。第三对发电功率请求做斜坡限幅。发动机启动瞬间不要命令发电机直接就拉满功率而是以一个斜率比如每秒增加2至5kW的速度提升发电功率。这样做既保护了机械连接部件也让发动机进到高效工作点之前不至于有一大截冒黑烟的过渡工况。做完这三件事绝大多数启停振荡问题都能解决。如果还振荡那基本就是PI增益过大导致的拍频现象回到上一节重新调参数就行。4.3 等效油耗怎么算才对SOC初末值不一致时不许直接比油耗油耗处理是增程器仿真里另一个平时不太提、但一到写报告就出问题的细节。纯燃油车比油耗直接看百公里油耗就行增程器不行因为发动机发电既驱动了车辆行驶也可能会改变电池储存的能量。如果两次仿真起点SOC不同、终点SOC也不同那累计燃油消耗数字直接对比就是耍流氓。业界常用的处理方法是SOC等效修正。具体思路是把仿真前后电池SOC变化量换算成对应的能量变化再由发动机平均效率折算成等价燃油质量加到实测燃油消耗量上得到等效油耗。折算公式可以写成ΔE_bat (SOC_start - SOC_end) × Q_batt × V_nomm_fuel_eq ΔE_bat / (η_eng_avg × ρ_fuel_energy)其中Q_batt是电池总容量AhV_nom是额定电压Vη_eng_avg是发电工况下发动机到电能的平均转换效率通常取0.28到0.32比较合理ρ_fuel_energy是汽油能量密度按46MJ/kg算。如果SOC终点比起点低ΔE_bat为正说明电池亏电了这部分能量在等效油耗里要补回来反过来电池多了电等效油耗应该适当扣掉。我见过有人直接拿两版策略做对比明明SOC初值一个0.8一个0.6最后SOC终点都是0.5然后说第二版策略省油实际上那是因为第二版初始SOC本来就低、电池早就没什么电可放了。所以从第一天做增程器模型起就养成算等效油耗的习惯能省未来很多不必要的扯皮。5. 参数标定的一地鸡毛几个我反复踩过的模型精度坑5.1 发动机MAP外推的坑Cruise 里发动机的万有特性油耗MAP一般是转速和扭矩的二维表表内数据覆盖的面积毕竟是有限的。问题出在覆盖面积之外——如果策略里的工况点落在了表格边界之外仿真软件就会用外推算法给你补一个数值。关键是这种外推数值有时看着合理实际上误差非常大。举个我踩过的例子某个增程器发动机的油耗MAP只覆盖到2000到4500rpm区间而我为了在高速巡航时把SOC拉高把发电转速提到了5000rpm结果模型算出来的油耗率低得离谱仿佛发动机突然进入了热效率50%的魔法区间。一核查果然是MAP外推出来的数值。解决办法很简单第一尽量让MAP覆盖整个实际使用范围第二给MAP声明外推限制扭矩或转速超出范围时直接截断并报警而不是静默外推。5.2 电池内阻与温度模型的取舍很多增程器模型在标准工况下跑得很漂亮一到低温工况就出问题故障源头往往是电池内阻参数没有随温度变化。Cruise 的电池模型里内阻是可以按温度和SOC做二维查表的但有些人图省事就填了一组常温数据默认模型不启用热模型相当于全工况都用25摄氏度的内阻来算。这就导致仿真低温场景时电池的充放电效率虚高发动机该启动的时候不启动SOC掉得比实车晚。所以我的建议是如果只做常温WLTC工况热模型不开确实问题不大但只要你需要对比常温、高温、低温三组数据就老老实实把电池热容、冷却参数和内阻温度特性填进去。仿真准确性先不谈至少不会出现“低温比常温还省电”这种完全违背常识的结论。5.3 扭矩响应时间常数别设成理想值驱动电机模型里通常有一个扭矩响应时间常数用于描述电机从收到扭矩命令到实际输出扭矩达到目标值的过程。初学者很容易把这个常数设成0相当于默认电机扭矩瞬间响应到位。仿真当然稳但会掩盖掉一些真实工况下由电机动态响应引起的功率峰值波动。如果做的是稳态能量管理策略评估把时间常数设为0.02到0.05秒就已经足够了。但如果你发现仿真结果里电池功率峰值的毛刺特别多并且策略切换状态跟扭矩响应耦合在一起那就可以把时间常数从0.02调到0.05再跑一遍对比往往能解释很多“瞬态油耗忽高忽低”的现象。6. 收工前的验收清单写在深夜下班前6.1 能量守恒检查仿真模型的最终底线是能量守恒。一个可信的增程器 Cruise 模型不论工况怎么跑整车的能量输入汽油化学能应当等于整车输出车轮阻力功、制动功、电池充放电累积能量变化等再加上各部件损耗。 Cruise 自带的分析工具可以输出各部件的能量流我习惯跑完工况后先看总累积能量平衡经验法则是仿真结束时能量偏差小于1%模型基本可信超过2%就需要回头查数据。具体操作时我一般记录这样几项数据累计燃油消耗量对应的总化学能、电池SOC变化对应的电池能量变化、驱动电机输出到车轮的能量、制动回收的能量。如果发现“油烧了不少电池也没多充但没有对应到车轮功上”那能量要么通过内燃机热损失跑掉了要么建模环节里发电机效率MAP设错了。6.2 数据判读启停次数、发动机运行时间占比与模式切换计数单纯看SOC和油耗并不足以评估一个增程器策略的好坏。深夜收工前我建议把这三个指标也同时导出来。第一个是发动机启停次数。一小时工况里正常策略下启停次数应该控制在20次以内如果超过这个数说明滞环和最小运行时间的设定有问题发动机频繁冷启动会导致油耗和排放恶化。第二个是发动机运行时间占比。这个指标可以和启停次数配合看。如果运行时间占比很低、启停次数很高说明发动机每次开机都只跑了一小会儿工作点还没稳定下来就被命令停机——这通常不是好策略如果运行时间占比高、油耗也很高可能是发电请求太大了系统一直在让发动机背着一个过剩的负荷做工。第三个是模式切换计数也就是EV模式和增程器模式之间的切换次数。这个数字对实车驾驶的感受影响很大切换次数越多整车的NVH表现越差。把模式切换计数导出的方式是在 Simulink 状态机里做一个累加计数器输出给 Cruise 的记录器这样每次仿真结果里都能直接看到。6.3 一个小技巧用脚本批量跑工况和自动判据最后分享一个让我从“半夜两点还在手动点击仿真”里解放出来的小技巧。 Cruise 支持通过脚本比如 MATLAB 脚本调用 Cruise 接口和批处理方式运行仿真。我把常用的 CLTC、WLTC、高速巡航、冬季低温这四五个标准工况写成一组批处理任务每次调完参数一条命令把所有工况全跑一遍并且自动输出SOC终值、等效油耗、启停次数、模式切换次数这些判据到一份汇总表里。这样做的好处不只是省事关键是“自动判据”能避免人为只看一两个工况做局部优化。曾经有一个阶段我把某个策略在WLTC下调得油耗低了不少觉得万事大吉了结果批量跑完之后发现低温工况下发动机运行时间占比异常高、启停次数翻倍。如果按老办法只看WLTC这个问题可能到实车阶段才暴露出来。用脚本批量对比相当于每轮调参都能看到所有工况的整体表现。把这些批处理和自动判据配置好之后深夜调模型这件事就从一次次重复劳动变成了“等结果、看表格、定向改参”的节奏。增程器这个“和事佬”能不能把燃油车和电动车之间的能量博弈处理得漂亮终究还是靠这些肉眼可见的指标说了算。
阅读完成 · 觉得有帮助?
咨询建站