1. 项目背景与整体思路
做整车仿真这行当久了,你大概率会碰到这样的场景:领导丢过来一个增程式混动车型方案,说“三天内给我一个三电和动力总成的初步仿真结果”。三天时间,实车肯定是没影的,台架也没有,手里唯一能指望的就是仿真软件。这时候,一套用得顺手的整车仿真模型比啥都重要。
我这次的项目,就是用AVL Cruise搭一个增程式混合动力汽车(串联式混动构型)的整车仿真模型。目标很直接:验证整车的动力性、经济性(油耗电耗)、各部件工作状态是否合理,以及控制策略是否有效。这里说的“增程式”不是那种复杂的功率分流构型,而是最简单的串联式:发动机只管发电,驱动全靠电机,发动机永远工作在高效区附近。这种构型结构简单、控制逻辑清晰、对动力电池的依赖又比纯电小,是很多增程车型的首选。
为什么选Cruise?因为AVL Cruise是车辆纵向动力学及能耗仿真的主流工具之一,在发动机、电机、电池、变速器建模上都有成熟的标准模块,同时支持外接Matlab/Simulink控制策略做联合仿真。对增程式这种“模型不算太复杂、但控制策略是核心”的车型来说,Cruise可以很快搭建整车物理模型,把精力集中在策略调试上,而不是耗在底层物理方程上。我个人体感是:如果只是简单评估方案可行性,Cruise加内置控制函数就够;如果要迭代优化策略,接Simulink是标配。
这篇内容适合三类人看:正在接触增程车型的整车工程师、做三电系统匹配的刚入门仿真工程师、以及高校里做混动仿真课题的学生。看完你至少能知道Cruise里怎么搭串联混动模型、各部件参数怎么填、控制策略怎么挂上去,以及踩坑后怎么排查。
2. 增程式构型的技术特点与建模思路
2.1 增程器与纯电驱动系统的解耦逻辑
增程式混动的核心是“解耦”两个字。发动机的输出轴和车轮之间没有任何机械连接,发动机—发电机组成增程器(Range Extender),只管在需要的时候发电,把机械能转换成电能;行驶动力完全由驱动电机提供,电能来源可以是动力电池也可以是增程器直接发的电。
这种解耦带来的最大优势是:发动机工况可以完全避开怠速、低负荷、高转速瞬态等恶劣区域。传统燃油车在城市拥堵工况下,发动机经常在低效区徘徊,热效率也就20%出头;增程器可以固定转速带发电,把发动机压到最高效点附近运行,实测热效率能到35%-38%,这是增程车市区油耗能做得很低的核心原因。
仿真的关键也在这里:你不需要像建模行星齿轮混动那样精细去算发动机和车轮的转速耦合关系,只需要建立能量流方向清楚、功率分配关系正确的电气化动力总成模型。具体拆解下来,模型里至少要有这么几个角色:
一是发动机模型,只负责输出轴上的转速和扭矩;二是发电机模型,吸收发动机机械功率、转换成电功率;三是动力电池模型,作为能量缓冲池,接受发电机补电、给驱动电机放电;四是驱动电机模型,负责把电功率转换为机械功率驱动车轮;最后是整车动力学模块,负责车轮到整车的纵向运动。
在Cruise里建模时,物理连接的逻辑顺序要非常清晰:发动机输出轴接发电机转子,发电机定子电缆接电池母线,电池母线再接驱动电机的逆变器,驱动电机输出轴通过主减速器接差速器再到车轮。电功率是单向馈线,机械功率是独立路径,这两条线千万别接错了,接错极性或不加合适的负载会导致仿真直接发散。
2.2 为什么串联式构型适合先用Cruise仿真
可能有人会问:既然结构这么简单,直接用Simulink纯模型算不行吗?如果车型的机械结构很简单,当然可以直接搭一维纵向动力学方程,但现实工作中通常要评估发动机万有特性、电机效率MAP、电池内阻随SOC的变化等,这些数据光有方程不够,还要有可靠的source数据表。Cruise里预制了完整的标准部件库和各类型负载模型,你做数据填表和MAP导入非常方便。
另一个重要原因是Cruise的“驾驶循环”和“任务工况”管理很好用。你可以在CRUISE里直接选NEDC、WLTC、CLTC、FTP75等标准循环,也可以在工况编辑器里自由定义。增程器控制策略通常在Simulink里写,Cruise作为被控对象(被控整车模型),这样整个联合仿真环境干净利落。
还有一点容易被忽略:Cruise自带的后处理工具可以直接输出发动机运行点散布图、电池SOC轨迹、增程器启停次数、各部件累计能量统计等。做增程车仿真,你最关心的不是某一个时刻的扭矩大小,而是整个工况下的能量路径是否合理、增程器启停是否频繁、SOC波动是否可控。Cruise的在线分析工具Quantifier能直接算出各能量流动项的占比,这个东西省去了大量Excel后处理时间。
我在实际项目中的思路是:Cruise负责整车物理层(车辆动力学+部件效率+能量存储),策略层用两个阶段实现。第一阶段直接用Cruise内建的Function模块写简单规则策略;第二阶段在Simulink中做完整的增程器功率跟随策略和启停管理,通过DLL接口接入Cruise,这样两条腿走路,前期快速验证结构,后期精细调策略。
3. Cruise模型搭建与关键参数设置
3.1 车辆结构树规划
打开Cruise以后,先别急着往里拖模块,而是先在草稿纸上或者脑子里把整车拓扑理清楚。我通常把模型分成五个分区:动力源区(发动机、发电机、电池)、驱动区(驱动电机、逆变器)、机械传动区(主减速器、差速器、车轮)、整车控制区(Cruise的Vehicle、Cockpit、Control模块)和负载附件区(空调负载、低压电气负载等)。
以一个中型SUV增程车为例,整车布置大概是这样:前舱有一台1.5L自然吸气发动机与一台峰值功率60kW的永磁同步发电机同轴连接,构成增程器总成;车辆后轴(或前轴)布置一台峰值功率150kW的驱动电机;动力电池是30kWh左右的锂离子电池组,支持快充和对外放电接口。当然具体数值可以按项目调整,但结构就是这个结构。
在Cruise的Vehicle树里新建模型时,我习惯按“Front-Left wheel、Front-Right wheel、Rear-Left wheel、Rear-Right wheel、Differential、Gear Box/Reduction Gear、E-Machine、Battery、Generator、Engine”的顺序依次创建。注意:如果驱动电机只有一个,那你需要选择是放在前轴还是后轴,两个前轮之间的扭矩分配由差速器模块统一处理。
有一个细节让我刚开始时吃了亏:增程器中的发电机方向和驱动电机的旋转方向,默认逻辑不一定相同。发动机曲轴转向和发电机输入轴方向如果不一致,会在信号连接时出现负数扭矩或转速方向报错。要养成好习惯,在建立每个模块时打开“Direction”页签核对正方向定义。
3.2 发动机、发电机、电池、电机的参数标定方法
部件参数怎么填,直接决定仿真结果准不准。下面我按关键模块逐个说。
发动机模块:在Cruise里选Internal Combustion Engine(ICE),需要填入的主要是排量、缸数、最高转速、转动惯量、外特性扭矩曲线(WOT)和万有特性油耗MAP。对于增程器来说,外特性曲线实际只影响启动和最高功率工况,日常工况其实是在BSFC map的低油耗区附近选点。所以最关键的是BSFC MAP要准确,数据来源一般是发动机台架试验得到的速度—扭矩—燃油消耗率三张数据表。在Cruise里,你可以在“Fuel Consumption Map”里直接导入三列数据(转速、扭矩、有效比油耗BSFC),软件会自动插值生成等油耗线。
发电机模块:Cruise里有Generator模块,核心需要填额定电压、额定功率、转速范围、效率MAP(驱动/发电双向)、转动惯量和最大扭矩限制。发电机和驱动电机本质是同一种物理设备,但工作方向不同。填效率MAP时,建议把电动和发电两个象限都填上,不然在能量回收工况下发电机工作的效率数据缺失,会影响电池SOC的预测精度。
电池模块:Cruise的电池模型可以选择“Simplified”和“Detailed”两种。如果做系统级能量管理仿真,Simplified就够了,它需要你提供电池容量(Ah)、额定电压、内阻随SOC和温度变化的R矩阵、OCV随SOC变化的曲线以及充放电电流限制。这里有个容易出错的点:内阻要分充电内阻和放电内阻,很多新手只填一组,结果导致再生制动时电池压降或温升估算失真。我建议至少用两组:一组充电内阻,一组放电内阻,温度维度可以先用常温,后期有条件再加。
驱动电机模块:Cruise里的Electric Machine模块支持电动机和发电机双向工作,填最大扭矩外特性曲线(转速—扭矩包络)、效率MAP(转速—扭矩—效率表)、额定电压、转动惯量、齿轮比等。这里要注意,如果你的电机效率MAP是三维表,那么坐标轴的物理量必须和Cruise里设定一致,一般是转速(rpm)和扭矩(Nm)。如果单位不一致,直接在Excel里换算好再导入,否则效率和功率计算会差出一个数量级。
整车动力学模块:主要是整备质量、轴距、质心高度、迎风面积、风阻系数、滚动阻力系数、车轮滚动半径、转动惯量等参数。这些参数对动力性和能耗的影响很大,尤其是风阻系数和滚动阻力。在早期方案阶段这些值通常是估算的,没关系,但在模型文件里要标注为“assumption”,方便后续更新。
3.3 驾驶循环与任务工况配置
Cruise的任务运行模式主要是两种:Cycle Run(循环运行)和Constant Drive(定速行驶)。增程式混动仿真最常用的是Cycle Run,在它里面可以定义多个驾驶循环串联成一个任务。比如一个完整测试可以是“CLTC城郊片段+WLTC高速片段”或者自定义工况。
在添加驾驶循环时,我建议速度和坡度两个维度都加上,不要只加速度。城市、山路、高速三种典型路段的坡度特性差异很大,坡度对功率需求影响明显,增程器启停策略在坡道上的表现也值得重点关注。Cruise的Cycle Run里可以直接给每一个时间点指定坡度百分比,使用非常方便。
还有一点是“Initial SOC”的设置。增程车仿真时,初始SOC的取值会导致两种典型策略场景:一个是纯电优先(CD)阶段,SOC从满电开始一路消耗到阈值再启动增程器;另一个是电量保持(CS)阶段,SOC围绕某个平衡点上下波动。你要做的就是分别设置不同的初始SOC,看看整段工况的油耗和电耗表现,评估整车在不同电量状态下的综合效率。
我建议在项目起始阶段就不要只跑一个循环。通常至少要跑三个状态:满电初始SOC=90%、中等电量SOC=50%、低电量SOC=25%。因为增程车的长测经济性、控制策略鲁棒性,都不是只看满电状态就能说明白的。
3.4 控制策略接口的配置要点
控制策略是增程车仿真的灵魂。Cruise支持两种策略嵌入方式,这个前面提过。对于增程式串联混动,策略的核心就三块:增程器什么时候启动、什么时候停机,以及启动后发电机发多少功率。
先说简单版:用Cruise的Function模块。你可以在数学函数里写这样的规则逻辑:
当电池SOC低于阈值(比如25%)且整车需求功率大于设定值,启动增程器,并让发动机工作在某个最优功率点;当SOC回升到阈值+回差(比如30%)时,停掉增程器;如果整车需求功率很大,增程器可以适度增加输出功率。
用代码表示大概是这样(在Cruise的Function模块里用MATLAB格式的表达式或C脚本):
if SOC <= 0.25 && PowerDemand > 2000 EnginePower = 30000; % 30kW,单位根据模型参数设定 GeneratorTorque = ...; % 发电扭矩标定值 elseif SOC <= 0.25 && PowerDemand <= 2000 EnginePower = 15000; % 小功率充电 elseif SOC >= 0.30 EnginePower = 0; % 停机 else EnginePower = 0; end这种简单版适合做结构验证和参数敏感性分析,但它的缺点也明显:没有考虑发动机动态过渡过程的油耗瞬态修正、没有控制启停延时、也没有考虑电池温度和发动机水温对启停的约束。因此,最终量产级仿真通常要走Simulink联合仿真路线。
联合仿真的核心配置是:在Cruise的External Vehicle Control接口里选MATLAB DLL(或MATLAB API),在Simulink模型里用Cruise提供的接口模块订阅整车状态信号,计算控制命令再输出给Cruise。通常需要交互的信号包括:车速、加速踏板位置、制动踏板位置、挡位信号、电池SOC、发动机转速、发电机转速、电机扭矩、CAN启停状态等。信号名称两边一定要对齐,这是联合仿真报错的头号原因。
4. 增程式整车仿真模型的调试与结果分析
4.1 从模型搭建到第一个运行结果
模型搭好、参数填完、策略挂上,第一件事不是直接跑工况,而是先做静态校验。我最常用的做法是:先不接任何控制信号,把发动机、发电机、电池、电机的信号线断开,手动输入一个固定电池电压和电机目标扭矩,跑一个“10秒起步加速”任务,看看各模块是否正常工作。如果这一步就报错,基本都是信号方向没接对、模块参数单位错误、或者某个模型缺了必要的输入。
静态校验没问题后,再加控制策略,先跑一个简单的NEDC循环。NEDC比较平稳,加减速不猛,能把基础能量流跑通。跑完后别急着看经济性数值,先看三点:第一个是SOC轨迹是否在合理范围内波动,有没有断崖式的跳变;第二个是增程器启停次数是否频繁,有没有在短时间内反复启动的情况;第三个是发动机转速、扭矩、电池充放电功率的变化曲线是否平滑,有没有振荡。
通常第一次跑完,SOC要么一路下降不回升,要么在某个时刻陡增。前者大概率是增程器功率不够或者启停阈值设置不合理;后者可能是发电机扭矩限幅设置过大、电池充电限流没设置好。把这两个问题调好,循环能耗才有参考意义。
4.2 关键性能指标的计算逻辑
增程车仿真最核心的指标有两个:动力性指标和能耗经济性指标。
动力性方面,主要是0-100km/h加速时间、最高车速、最大爬坡度。在Cruise的Task里可以专门建“Acceleration”和“Climbing”任务来仿真。加速时间对电池放电倍率、驱动电机扭矩外特性、主减速比、整车质量都敏感。跑加速任务的时候要注意:如果你是电量很低的初始状态跑的加速,结果跟满电状态差距会很大,因为电池无法提供足够的峰值功率。在做动力性评估时,一般要说明初始SOC条件,否则结果没有对比意义。
经济性方面,增程车不能只盯油耗也不能只盯电耗,通常用等效油耗或综合能耗来衡量。等效油耗的计算逻辑是先把电耗折算成油耗,再与真实油耗相加。Cruise本身没有直接给这个等效油耗的算法,一般需要在Excel后处理里算。折算公式大概是:
等效油耗 = 纯油耗 + (电量变化量 × 发电油耗系数) / 行驶里程
其中发电油耗系数就是用“增程器在最优工作点的平均BSFC”来计算电耗对应的燃油消耗。这个系数的取法会直接影响经济性排名,所以在项目汇报时要把折算方法和系数取值写清楚,不然评审专家或领导可能会质疑你的结论。
另外还有一个很重要的指标是“燃油消耗率分布”。增程车的发动机始终工作在一小块转速扭矩区间,所以你要看发动机工作点散布图有没有集中在一个椭圆区域。如果散布太散,说明你的策略没有把发动机压在最佳经济区,策略还有优化空间。这一步用Cruise自带的在线数据分析功能可以很容易生成散点图。
4.3 仿真结果的可视化与后处理技巧
Cruise的离线后处理界面能输出相当丰富的波形图、散点图和数值表。我的习惯是:每次跑完都输出这些关键曲线——车速跟随曲线(对比目标车速和实际车速,检查驾驶循环有没有lost track)、SOC轨迹曲线、增程器启停状态信号、发动机转速和扭矩曲线、电池电压电流曲线、电机转速扭矩曲线。这组曲线能覆盖95%的调试需求。
如果你要跟Simulink策略做联合仿真,后处理时一定注意时间轴对齐。Cruise输出的步长和Simulink的采样时间不一定一致,有可能出现曲线错位或数据点稀疏的现象。建议在联合仿真配置中设置统一的固定步长(比如0.01秒),这样后处理才能直接对比。
还有一个小技巧:在Cruise里做参数扫描(Parameter Variation),比如改变增程器启停阈值SOC、改变发动机发电功率点、改变主减速比,系统可以自动跑多组案例并输出对比表格。但在实际使用中,这个功能如果参数组合多,计算量会很大。我通常是在Excel里手工改几个关键参数,用任务批处理跑,效率也不错。
4.4 增程器工作点与能量流分析
把模型调通之后,我强烈建议做一次“能量流审计”。这一步不是为了算油耗,而是为了看清楚整个系统的能量都去哪了。比如驱动电机消耗了多少电、增程器发了多少电、电池充了多少电、放了多少电、制动回收了多少能量、附件消耗了多少电,这些数值加在一起是否守恒。
Cruise的在线分析工具能够基于能量平衡原理计算出各部件的能量流占比。这个结果对汇报特别有用,也是发现模型错误的利器。我曾经有一版模型跑完,发现电池放电能量减去充电能量永远小于电机消耗的净电能,差值越来越大,排查了半天才发现是发电机模块的效率MAP里有一半区域是空的,导致软件插值出来一个不合常理的高效率值。把效率MAP补齐后,能量平衡才闭合。
如果你是做策略优化的,能量流分析还能帮你判断增程器在工作时发出的电是“直接驱动电机”多还是“先充进电池再放出来”多。在串联混动里,电从发电机到电机,中间经过电池会产生额外的充放电损耗。好的策略是让增程器尽量按需求功率发电,避免大功率充电再大功率放电这种“绕路”行为。这条经验在调整发电机功率跟随策略时非常实用。
5. 常见问题与排查技巧实录
5.1 车速跟随误差大、SOC持续异常
跑Cycle Run时,表现类型的问题基本都是这几个方向。车速跟随不上,优先检查车辆模型参数有没有填对,比如整车质量翻倍、减速比填反、电机扭矩限制过小等。如果参数没问题,那就要看是不是任务定义里的道路阻力系数错误,比如坡度过大导致功率需求超出动力上限。
SOC持续下滑的情况,优先排查增程器有没有按策略正常启动。可以在后处理里看增程器启停信号的时间点,如果该启动的时候没启动,大概率是策略里的SOC阈值判定条件写错了,或者输入给策略的SOC信号单位不等于预期(小数0.25和百分数25这种最容易搞混)。这个坑我踩过不止一次,两次项目都是因为这个导致SOC轨迹异常。
SOC持续上涨到100%?那可能是增程器功率设置过大,或者电池充电功率限制没设置好,电池一直在满负荷充电。长期跑大功率充电对电池伤害很大,仿真策略上一般要叠加“当SOC达到较高值后降功率充电,同时开启发动机定时保养电量”的逻辑。
5.2 增程器启停频繁,振荡不止
这是增程车策略调试的重灾区。原因通常是阈值和回差(hysteresis)设置得太小。比如SOC低于25%启动增程器、高于26%停机,这1%的回差在整车大功率波动情况下很快就会被越过,增程器就会频繁启停。每次启动都要经历发动机暖机、转速拉升、发电机并网一个过程,频繁启停既费油又伤部件,实车绝对不允许出现这种控制逻辑。
解决办法有几个,一是增大回差,比如25%启动、32%停机,这样能给一个明确的滞回区间;二是加启停间隔时间约束,比如启动后至少运行5分钟才能停机,停机后至少10分钟才能再次启动;三是引入滤波,对SOC信号做一阶低通滤波后再参与阈值判断,消除噪声导致的误触发。
5.3 联合仿真断点与信号不匹配
Cruise和Simulink联合仿真,最常见的报错之一是“Signal not found”或者“Data type mismatch”。这问题几乎都是两边模型里信号名或数据类型不一致导致的。我的建议是:建立一张信号映射表,表格里列清楚Simulink内的信号名、Cruise内的信号名、单位、数据类型、方向,两个团队协作时这张表就是对接的合同。另外,在Simulink侧最好在建好的接口模块上做一个信号检查脚本,在仿真开始前自动比对一遍全部订阅信号是否存在,这样能省去大量排查时间。
还有一类问题是联合仿真步长不匹配。Simulink侧如果用了变步长求解器,两个软件之间的数据交换会产生很大的时间延迟误差。建议把Simulink求解器设置为固定步长,并且步长和Cruise的任务步长保持一致。一般0.01秒或者0.001秒,具体看计算资源。
5.4 参数灵敏度与策略校验的经验
模型跑通后,别急着出报告,做一轮参数灵敏度分析会更有说服力。比如电池起始SOC、发动机启停阈值、发电机最大功率、主减速比,这四个参数分别扰动±10%,看对百公里综合油耗的影响幅度。这些分布结果可以帮助你判断:当前方案的最优性能是否稳定,还是某个参数的微小变化就会导致性能大幅恶化。
我对增程车仿真的经验是:策略逻辑的影响远大于部件效率的影响。假设你把驱动电机效率MAP整体换高2个百分点,综合油耗可能改善1%不到;但如果你把增程器启停策略从“固定SOC阈值”改成“根据导航工况预测动态调节”,综合油耗可能下降3%-5%。所以精力和时间要优先投在策略优化上,这是增程车项目性价比最高的仿真方向。
6. 项目复盘与实操心得
做增程式Cruise仿真项目,最深的体会是:不要急着让模型跑起来,而是要先把整个能量流路径在Excel或纸上捋清楚。哪一部分是机械功率、哪一部分是电功率、哪一部分是化学反应能量,每一步的转换效率是多少,这些搞清楚了,模型搭起来只是时间问题。我见过太多同事一上来就拖模块,结果信号线接得乱七八糟,跑出来的结果自己都不敢信。
另外,参数管理一定不要偷懒。所有参数表要有版本号、来源、单位、更新时间。发动机BSFC map、电机效率map、电池内阻曲线这类核心数据,尽量用真实台架测试数据,早期没有数据时用参考数据也要标注。仿真模型的精度上限就是由这些输入数据的质量决定的,这部分不严谨,后续所有策略优化都是空中楼阁。
还有一点想多说一句:增程车仿真和纯电车仿真有一个很大的心态区别。纯电车的SOC基本是单调下降,控制策略相对简单,仿真的重点在于续驶里程。增程车则不同,SOC是一个动态平衡过程,增程器的介入退出、电量维持策略、噪声振动性能(增程器启停时的振动冲击在整车NVH仿真里也要关注)等都会影响最终评价。所以仿真的时候,看待结果不能只看一个数字,而要关注整个能量管理策略在时间维度上的表现是否合理。
最后分享一个实操小技巧:在Cruise里跑增程器启停策略验证时,可以故意在工况里插入几个急加速片段(例如从静止到100km/h的急加速瞬间),观察增程器在高功率需求瞬态下的响应延迟和功率缺口的补偿能力。这一步虽然简单,但对验证策略鲁棒性非常有帮助。就是因为这几个插入的片段,我先后发现了增程器功率限制设置过小、发电机扭矩响应过慢两个问题,避免了两版错误方案继续往下走。