ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

AVL Cruise混合动力整车仿真:从建模到Simulink联合仿真全流程

AVL Cruise混合动力整车仿真:从建模到Simulink联合仿真全流程 做混合动力整车仿真AVL Cruise这名字你肯定绕不过去。前阵子我就在做一款P2并联混动车型的动力性与经济性仿真从整车建模、动力性任务配置、经济性工况分析到最后把能量管理策略放到Simulink里做联合仿真一路踩了不少坑。这篇博文就当作一次项目复盘把整套流程和那些文档里不会明说的问题都摊开讲一讲。我默认看这篇文章的人是正要入门整车性能仿真、或者已经在用Cruise但想往混动控制策略方向靠的工程师和研究生。我们直奔主题。1. 方案整体设计与思路拆解1.1 为什么选择AVL Cruise来做混动动力经济性仿真混动整车仿真的工具其实不少有ADVISOR这类逆向仿真工具也有直接在Simulink里从零搭模型的。但真到项目级应用AVL Cruise的出场率非常高原因归纳起来就几条第一Cruise是正向仿真工具。这意味着驾驶员模型是真的踩油门和刹车根据目标车速与当前车速的偏差实时调节踏板开度再经过控制策略分配扭矩给发动机、电机最后通过传动系驱动车轮。这个逻辑和实车行驶过程完全一致。而ADVISOR那种逆向工具是先算需求功率再反推部件状态做概念估算够用但精细评估动力性和经济性就力不从心了。第二Cruise在整车建模上足够模块化。发动机、电机、电池、变速箱、离合器、主减速器、车轮、制动器、驾驶员、控制策略全是现成模块拖动连线即可成型。相比从零搭Simulink整车模型能省掉大量物理建模的时间尤其是在传动系动力学、换挡逻辑、离合器滑摩这些细节上Cruise自带模型已经很成熟。第三接口开放。Cruise可以导出整车模型到Simulink也可以把Simulink控制策略编译成DLL加载进来这就是我们常说的联合仿真。做混动项目控制策略往往是核心不能困死在Cruise的内置Function里联合仿真几乎是必经之路。我这次选的是P2并联构型即发动机和电机在同一个动力轴系上发动机输出端接一个离合器离合器后面是电机电机输出直接进变速箱。这个构型可以发动机单独驱动、电机单独驱动、两者共同驱动也可以制动时电机回馈发电发动机还能带动电机发电给电池充电非常适合演示动力性和经济性的完整分析流程。1.2 仿真链路与项目目标任何仿真项目动手前先把链路想清楚。我的整车仿真链路是这样的整车参数和部件外特性输入到Cruise模型然后根据任务类型给定工况加速工况、爬坡工况、循环工况驾驶员模型按目标车速输出踏板信号控制策略根据踏板信号和车辆状态车速、转速、SOC、挡位解析出动力源扭矩请求最后扭矩经传动系作用到车轮得到整车响应和能耗数据。这个链路里有两层需要分别验证一是机械层也就是发动机、电机、变速箱、整车参数是否匹配二是策略层即能量管理策略是否合理。前者靠Cruise原生能力解决后者靠联合仿真解决。项目目标参数我定成了这样项目目标值0-100km/h加速时间小于12s最大爬坡度大于30%最高车速大于160km/hNEDC综合油耗HEV模式小于5.0L/100km电量维持段SOC波动控制在±3%以内这几个指标既有动力性又有经济性牵引出整个仿真流程。下面我按实际执行顺序一块一块拆。2. 动力性仿真建模与任务配置实操2.1 整车模型搭建与关键部件参数录入动力性仿真的基础是整车模型参数准确。很多初学者喜欢直接拿默认参数跑结果加速能力差了十万八千里还以为是工具问题其实多半是参数乱填。整车基本参数我按中型轿车水平设的整备质量1600kg迎风面积2.2m²风阻系数0.28滚动阻力系数0.012轮胎滚动半径0.32m。这几个参数直接影响行驶阻力行驶阻力算错后续所有加速、爬坡、油耗结果全部失真。动力源方面发动机最大功率110kW3000rpm峰值扭矩220Nm电机峰值功率30kW峰值扭矩120Nm最高转速8000rpm。电池选用6.5Ah、320V的高压电池充放电内阻按SOC分段填入。这里特别提醒一句发动机模块和电机模块的外特性曲线一定要输入完整而且要包含低速区。电机模块不仅要填驱动工况的外特性还要填发电工况的扭矩和效率map。我早期做联合仿真时电机发电区效率map随手填了个常数值结果电池SOC在制动回收时几乎不涨后来才发现发电效率map没给对。变速箱我用了5挡DCT速比大致为1挡3.8、2挡2.2、3挡1.4、4挡1.0、5挡0.8主减速比4.1。换挡逻辑在Cruise里可以用换挡图谱也可以用Simulink策略控制后面联合仿真部分细说。电池模块还有一个容易被忽视的点最大充放电功率限制。动力性测试中急加速时电机要从电池取电如果电池放电功率上限设得太低电机会被削顶扭矩上不去加速成绩自然差。这个参数要查电池厂商的数据手册别拍脑袋填。2.2 动力性任务配置方法Cruise的动力性计算任务在Calculation Task里面配置常用的有四类Full Load Acceleration全负荷加速、Climbing Performance爬坡性能、Maximum Velocity最高车速、Max Traction Force最大牵引力。Full Load Acceleration用来算0-100km/h加速时间。配置时选好起始车速和终止车速驾驶员模型设为全负荷模式即油门踏板踩到底。换挡策略可以选择Cruise内置换挡逻辑也可以指定换挡时刻。如果是自动挡模型建议先启用Cruise的Auto Shift它会按换挡图谱自动换挡省事。Climbing Performance算最大爬坡度时Cruise会以一定车速扫描计算能克服的坡度。这个任务通常要锁定在低挡位我一般锁1挡按0-30km/h范围逐步扫描。最大爬坡度看的是低速大扭矩能力此时电机和发动机要联合输出电池放电功率限制同样会影响结果。Maximum Velocity相对简单在平直道路上最高挡全负荷跑看稳态车速。需要注意的是如果混动策略在高速段触发了纯电模式最高车速可能由电机单独维持我在做联合仿真时遇到过一次最高车速不符合预期的问题就是策略在高速段强制纯电而电机功率不足以维持目标后面通过调整策略的SOC门限解决了。2.3 动力性结果分析与调参心得跑完加速任务后我习惯先看三条曲线车速-时间曲线、加速度-时间曲线、发动机和电机扭矩输出曲线。车速-时间曲线能直观看到0-100km/h在哪一刻达标。加速度曲线能看出换挡瞬间的功率中断正常的换挡点会出现加速度小幅回落这是允许的。真正需要警惕的是曲线在中后段变得平缓说明驱动力接近行驶阻力加速无力那就该查最大牵引力或者电池功率限制了。有一次仿真结果0-100km/h到了15秒距离目标差太多。排查后发现是变速箱换挡图谱设置得过于保守1挡升2挡车速点设得太低导致发动机转速长时间掉出峰值功率区间。调整换挡图谱后加速时间缩短到11.8秒。这个经验说明动力性不足别急着改发动机参数先检查换挡逻辑合不合理。还有一点要提电机瞬时峰值扭矩和持续扭矩在Cruise里是分开定义的短时加速可以使用峰值扭矩但持续爬坡工况最好按持续扭矩评估。如果拿峰值扭矩去算长爬坡电池和电机热负荷会异常结果偏乐观。3. 经济性仿真与能量管理策略建模3.1 循环工况选择与SOC设定经济性仿真的核心工况国内现在主流是CLTC但NEDC在不少对标项目里仍是必跑项WLTC也偶尔用于欧洲对标。三者的差异主要是平均车速、怠速比例、加减速强度。我这次NEDC和CLTC都跑了目标油耗先用NEDC评估这样便于与历史车型数据对比。在Cruise里工况可以在Course模块中选择标准循环也可以导入自定义工况数据。选好工况后务必确认初始SOC设置。HEV非插电混动的目标是电量维持我一般把初始SOC设在60%跑完一个循环后看SOC终值是否回到55%-65%区间。如果SOC一路下滑说明策略中发动机充电补偿不足如果SOC一路上涨说明发动机过度发电油耗必然偏高。3.2 基于规则的能量管理策略设计做经济性仿真没有控制策略就是裸奔。Cruise内置Function模块可以写C语言逻辑适合简单规则。但P2混动的规则策略真心建议放到Simulink里做联合仿真这样后期换MPC、动态规划等算法也方便。我设计的规则策略核心逻辑是车辆状态SOC条件控制动作起步/低速巡航SOC 40%纯电驱动发动机停机中速巡航SOC 40%需求扭矩较小发动机驱动电机不工作急加速任意SOC发动机电机联合驱动制动减速SOC 85%电机回馈制动中高速巡航且SOC 45%发动机富余扭矩给电池充电这个策略的核心思想是让发动机尽量工作在高效区低负荷用电机补高负荷用电机削峰制动能量尽可能回收。SOC下限定在30%低于30%时强制发动机驱动并且只要电池SOC低于45%且发动机效率高于目标值就适当提高发动机负荷给电池充电。在Simulink里我把这套规则写成了Stateflow状态机比纯逻辑判断清晰也方便后续扩展。规则本身不复杂难的是阈值标定。比如SOC充电门限设40%还是45%直接影响发动机启停频率和油耗需要做参数扫描。3.3 经济性指标计算逻辑经济性仿真跑完循环后Cruise会在结果里给出总油耗和百公里油耗。但这些数值对混动车来说只是一个维度还得看电耗和SOC变化。对于HEV正确做法是看电量维持阶段的油耗也就是SOC初值等于SOC终值时的油耗。如果SOC终值比初值低说明电池在净放电油耗被掩盖了反之SOC上涨油耗虚高。我一般把NEDC跑完后SOC终值与初值误差控制在1%以内数据才有横向可比性。对于PHEV就得区分电量消耗CD和电量维持CS两个阶段综合油耗按国标公式折算。Cruise本身不直接输出这种折算值但可以通过跑两段仿真一段从满电开始记录纯电续航和CD段油耗一段在低SOC下跑CS段油耗再按照标准折算公式自己算Excel里拉个表就搞定。这里分享一个细节Cruise的百公里油耗单位是L/100km但如果要做排放对标有时候需要g/km按汽油密度0.725kg/L换算就好别直接把两个单位混用。4. Cruise与Simulink联合仿真的实现4.1 联合仿真方式选择Cruise与Simulink联合仿真有两种典型路径第一种是Simulink作为主控Cruise模型被打包成S-Function嵌入Simulink里。这种方式的优点是控制策略编写、调试、信号监视都在Simulink环境里适合策略快速验证和硬件在环前期的算法开发。第二种是Cruise作为主控把Simulink控制策略模型编译成DLL文件在Cruise模型里通过接口模块加载。整车模型、驾驶员模型、循环工况、求解器都在Cruise侧运行Simulink只负责策略计算。这种方式更贴近整车性能仿真的概念也是我这次项目选用的方案。两者的选择逻辑很直接如果你更关心策略怎么变选第一种如果你更关心整车在这个策略下到底什么性能水平选第二种。从工程交付角度看我建议性能仿真环节统一用第二种因为计算任务配置、工况切换、批量扫描都在Cruise里完成逻辑一致性好。4.2 联合仿真环境准备与接口配置联合仿真的环境配置是踩坑重灾区。先列一个checklist确认MATLAB版本与Cruise版本匹配。不同版本Cruise支持的MATLAB版本不同建议查AVL官方兼容矩阵。我这次用Cruise 2019R1配MATLAB R2018a实测稳定。安装Visual Studio C编译器并且在Matlab里执行mex -setup让Matlab能找到编译器。这一步不做Simulink模型根本编译不了DLL。如果要生成DLL需要Simulink Coder许可。模型路径和工程路径不能有中文路径层级不要太深。配置步骤我也梳理一下在Cruise中打开Interfaces目录拖入Matlab DLL模块放到模型上。双击配置模块设置MATLAB版本、Simulink模型文件名、采样时间步长。在Simulink侧新建控制策略模型在模型顶层使用Cruise提供的接口S-Function块分别定义输入信号和输出信号。配置Simulink模型为定步长求解器我通常选ode4步长0.01s。编译生成DLL放到Cruise模型指定目录下。运行Cruise任务观察联合仿真是否正常推进。4.3 输入输出信号定义与数据交互联合仿真里最容易出问题的就是信号定义不一致。Cruise传给Simulink策略的信号和Simulink返回给Cruise的信号必须严格对应信号名、单位、数据类型都不能有偏差。我的策略模型输入输出清单是这样的方向信号Cruise到Simulink车速、油门踏板开度、制动踏板开度、发动机转速、SOC、挡位Simulink到Cruise发动机扭矩需求、电机扭矩需求、挡位请求、发动机启停指令还有一组信号是可选的比如电池电压电流、电机转速视策略需求而定。在Simulink侧我会用Bus对象统一管理信号避免端口顺序错乱。之前遇到过一次发动机扭矩一直保持默认值不响应策略的问题排查到最后就是Simulink模型输出端口顺序和Cruise接口配置顺序对不上数据错位了。所以接口配置完优先做一个小步长仿真在Simulink示波器里看Cruise传来的信号是否合理。4.4 仿真步长、求解器与稳定性联合仿真的稳定性很大程度上取决于步长设置。Cruise原生仿真步长如果是0.01sSimulink侧最好也用0.01s定步长不要用变步长。变步长求解器在信号交互时刻需要插值控制指令和车辆响应之间容易出现微小错位扭矩波动一多经济性结果就会不干净。还有一点联合仿真速度会明显变慢一个NEDC循环可能从几秒钟变成几分钟。这是正常现象。想提速的话把Simulink模型里的示波器、Scope、Display全部关掉减少不必要的数据落盘Cruise侧也可以减少保存数据的通道数量。如果发现联合仿真在某个时刻卡住不动先看是不是Simulink模型里出现了代数环或者状态冲突。常见的原因是策略里存在没有初值的积分模块或者状态机的初始状态与Cruise传入信号不一致。把所有状态模块的初值显式设好能省去大量调试时间。5. 常见问题与排查技巧实录5.1 联合仿真编译与版本兼容问题联合仿真最常见的报错就是failed to load DLL或者Matlab to Cruise interface failed。这个错误背后十有八九是DLL文件没编译成功或者编译环境与运行环境不匹配。我排查路径一般是先在Simulink里单独编译一次模型看是否报错。编译报错的话重点检查编译器配置和模型里的语法错误。编译成功后检查生成的DLL文件是否存在于Cruise指定目录。确认Matlab Compiler RuntimeMCR版本与编译时MATLAB版本一致。有些机器装了多个MATLAB版本MCR版本错乱会导致运行时找不到动态库。确认Cruise配置的模型文件名和路径与实际一致注意千万别有中文路径。还有一个问题是32位和64位混用。Cruise、MATLAB、编译器的位数必须一致否则接口根本加载不上。我在一台64位机器上装了32位的MATLAB折腾了一晚上才反应过来。5.2 联合仿真结果异常诊断联合仿真跑通了结果不一定对。我把几个典型异常列出来SOC曲线一路下滑甚至跌到零。这说明发动机充电补偿不足或者策略里电驱动占比太高。检查规则里SOC门限值以及发动机给电池充电的扭矩请求有没有真正传到Cruise。SOC曲线快速上升同时油耗明显偏高。这属于发动机过度发电电池充太满了策略的充电门限需要下调。HEV在电量维持阶段SOC应该是缓慢波动而不是单调上升。0-100km/h加速时间与纯Cruise仿真差异很大。这种情况通常是策略里的扭矩限制写死了比如发动机扭矩上限设成了经济驾驶模式的最大值导致全负荷加速时动力源没有输出全部能力。检查策略中扭矩请求是否受SOC或驾驶模式条件限制。循环工况中发动机频繁启停。混动车发动机启停次数过多不仅油耗变差平顺性也受影响。我遇到过因为SOC充电门限设计得太激进导致发动机在低负荷工况下一会儿启动充电、一会儿停机滑行像抽风一样。后来在策略里加入了滞回区间比如充电门限降到42%才启动、充到46%才停机故障才消失。5.3 从纯Cruise到联合仿真的调试顺序最后给新手一个建议联合仿真不要一上来就把整个Simulink策略模型接进去。我会按下面这个顺序逐步推进先用纯Cruise模型跑通一个最简单的循环工况确认整车模型和计算任务没问题。在Cruise里用Function模块写一个极简策略比如发动机常开跑一个循环确认动力传动链路通畅。把策略移到Simulink先固定发动机扭矩请求为常数看联合仿真是否能稳定运行。逐步加入SOC判断、纯电模式、回馈制动每加一个功能块跑一次短工况验证。全功能接好后跑完整循环重点审查SOC曲线、油耗、发动机启停频率。这套流程看着繁琐但能极大减少排查问题的范围。我一共做了三个项目只要严格按这个顺序来联合仿真相关的问题基本都能控制在半小时内定位。6. 多工况批量仿真与参数扫描6.1 用Cruise Dataset做批量参数扫描混动策略标定阶段一个绕不过去的工作就是参数扫描。比如SOC门限到底设多少最优靠一次仿真定不下来必须在一个区间里扫描对比。Cruise的Dataset功能可以自动化这个流程。你可以把某个参数设为变量定义一组扫描值Cruise会自动生成多个计算任务并批量运行最后统一输出结果。我经常用它来扫发动机启停阈值、电池充电功率限制、换挡点车速这几个关键参数。批量仿真跑完后用Cruise的后处理工具把不同参数对应的油耗、SOC、加速时间汇总成一张表很容易就能看出参数变化趋势。比如充电功率上限从10kW提到20kW油耗下降了但SOC波动变大这就需要权衡。这种权衡纯靠手动改参数调一次跑一次累死也调不出好结果。6.2 典型工况联合分析的思路动力性和经济性仿真放到同一个项目里最终要回答的问题是动力性达标的前提下经济性做到什么水平。所以我会把两组仿真结果放在一起看。比如0-100km/h加速时间达标了但NEDC油耗超标那就要看是不是电机功率选大了在循环工况里经常处于低效运行区或者发动机启停次数太多。反之油耗达标但加速性能不够则要看电池放电功率限制和电机峰值扭矩。还有一种更麻烦的情况改动力性参数导致经济性恶化。比如为了加速能力把电机的峰值扭矩标得很大但电机在低速高扭矩区间的效率很低循环工况频繁使用这个区域油耗就上去了。这种关联性问题只有把动力性和经济性仿真放在同一个平台里反复迭代才能发现这也是AVL Cruise这类整车级仿真工具的核心价值所在。我实际迭代过三轮参数最终在加速时间11.8s和油耗4.8L/100km的平衡点上收住了。说实话做混动车性能仿真你面对的不是一个优化问题是一组强耦合的权衡问题仿真平台的意义就是让你在项目早期就能看到这些权衡而不是等样车出来再后悔。
返回列表