做纯电动整车仿真的朋友,应该都有过这种被动的时刻:方案评审会上,领导一句“这套电驱动系统的经济性和动力性到底是什么水平”,你手里却只有电机台架数据和电池厂家的规格书,说不出一套完整的数据来。我这回做的项目,就是一台A级纯电车型的整车性能仿真项目模型,基于Cruise软件搭建整车物理模型,用Simulink做控制策略,两边联合仿真,把NEDC、WLTC和CLTC工况都跑了一遍,输出续航、电耗、百公里加速、爬坡等关键指标。这篇文章把这个项目从架构设计、参数标定、联调联试到问题排查的全过程拆开讲,包括哪些参数最容易出错、Simulink和Cruise之间的接口为什么老是出问题、能量回收标定时该注意什么。不管你是刚接触整车仿真,还是已经搭过几版模型想查漏补缺,都应该能从里面拿到点直接能用的东西。
1. 项目模型整体设计与技术选型
1.1 这个项目要解决什么问题
很多团队做纯电车预研时,最大的痛点不是没有数据,而是数据散在各处:电池有电芯的充放电测试报告,电机有台架外特性曲线,整车有风阻系数和轮胎规格,但这些数据组合成一辆车之后,动力性、经济性是否达标,没人说得清。
这个项目的目标,就是把这些分散的数据在一套仿真模型里整合起来,形成一台“数字样车”。它要做到三件事:
第一,能跑标准循环工况,算出WLTC工况或CLTC工况下的续航里程和百公里电耗,这是项目立项阶段最核心的指标。
第二,能模拟极端工况,比如0到100公里每小时的加速时间、最大爬坡度、最高车速,这些动力性指标在竞品对标时要拿去和友商比。
第三,能支撑控制策略开发。纯电车型的扭矩控制、能量回收、热管理都需要一个整车级的环境去做验证,总不能每次都上实车标定,成本和风险都太高。
这三点决定了模型的架构不可能太简单。它不能像早期做理论计算那样用一个简单的纵向力平衡公式手算,而是要把动力系统每一环的效率、损耗、迟滞都建出来,同时还要给控制策略留一个可以实时交互的接口。
1.2 为什么选Cruise加Simulink这套组合
现在整车仿真工具不少,有做一维动力学的,也有做多体动力学的。我为什么在这次项目里选了Cruise和Simulink这套组合,核心原因有三条。
Cruise对整车纵向动力学的建模颗粒度很“对味”。它把车辆拆成一个个模块,电池、电机、减速器、车轮、制动器、驾驶员、控制策略接口,都是现成可拖拽的组件。这种模块化方式的好处很明显:参数录入直观,车辆拓扑一目了然,改配置的时候不用从头写方程。它不是一个白纸一张的数学工具,而是专门吃透“汽车动力传动系统”这一行的专业软件,内置了传动效率、转动惯量、滑行阻力等大量缺省模型,能省掉不少底层公式推导功夫。
Simulink则负责控制策略。纯电动车的控制策略逻辑很复杂:驾驶员踩加速踏板,扭矩怎么解析,功率怎么限制,电池SOC低了怎么降功率,制动时能量回收和液压制动怎么分配,这些控制逻辑用Simulink天然适合。它有状态机、有查表模块,能很方便地把策略从需求文档变成可运行的逻辑。
更重要的是,这两个软件之间有现成的联合仿真接口。Cruise里可以导入Simulink编译出来的动态链接库,或者通过接口模块实时交换信号,不需要自己写socket通信或者文件交换,省了很多底层联调的功夫。实际项目里,控制策略还在频繁迭代,今天改一版扭矩限制,明天改一版能量回收强度,联合仿真可以让策略更新之后马上在整车环境里看到效果。
1.3 项目模型的范围边界
搭建模型之前先划范围,这是项目里最容易忽略但又最重要的事。不是所有东西都要建模,建模越细,仿真越慢,调参越难,所以一开始就得明确“管什么,不管什么”。
这个项目模型重点覆盖纵向动力学范畴内的内容:驱动力、制动力、行驶阻力、能量消耗和回收。它不覆盖横向动力学,不涉及转向、悬架对操稳的影响,也不做高频振动分析。简单说,这辆车在模型里就像在一条平直虚拟道路上行驶,只关心沿着行驶方向的车速变化和能量流。
范围定了之后,很多决策就有依据了。比如轮胎模块,不需要建复杂的Magic Formula侧向力模型,只关心滚动阻力和纵向驱动力传递;悬架系统不需要建弹性运动学,只要把整车簧上质量、轴荷分配填对就行;热管理系统在第一版里甚至可以不做详细模型,只用一个简化的生热功耗模型。把范围切干净,后面建模效率高很多。
2. Cruise侧整车物理模型搭建
2.1 整车拓扑结构与模块选型
Cruise建模第一步是搭拓扑。打开Cruise界面,左边是模块库,右边是画布,你把需要用的模块拖到画布上,用线把它们连起来构成能量流和信号流。我这个项目的拓扑结构大致如下:
电池包模块连接高压总线,总线接DC/DC或者直接接电机控制器,控制器再接驱动电机,电机的输出轴接减速器,减速器输出接差速器(在某些拓扑里可以直接用传动比模块替代),然后通过左右半轴接到车轮模块。整个动力链上,驾驶员模块接收车速信号,把加速踏板和制动踏板信号传给控制策略,控制策略解析出扭矩需求后回传给电机模块和电池模块。
除了这条主链,还要挂上车身模块,用来定义整备质量、风阻系数、迎风面积、车轮半径这些整车基本参数;制动器模块放在每个车轮上,用于能量回收和液压制动的联合控制;还有一个非常重要的模块是负载附件,用来模拟空调压缩机、暖风PTC等低压高压耗电设备,纯电车冬季续航掉得厉害,这部分不能省。
接线的时候有个关键点要特别注意:Cruise里的绿线代表机械连接,传递转速和扭矩;黑线是电气连接,传递高电压和电流;蓝线是信号线,传递控制指令和反馈信号。很多新手容易把线接错,尤其是信号线和电气线的概念混淆,导致仿真能跑但结果完全不对。我个人的习惯是先接机械链路,再接电气链路,最后接信号链路,分三步走,每一步都检查一遍。
2.2 电驱动系统与动力电池模块参数
电驱动系统参数是这个模型里最核心的数据,直接决定仿真结果的可靠度。电机模块需要填的参数主要有:
电机额定电压、峰值功率、额定功率、最高转速、峰值扭矩、额定扭矩,还要录入外特性曲线数据。这个外特性曲线很关键,它描述的是电机在不同转速下的峰值扭矩和峰值功率边界。实际台架数据一般是一张表格,横坐标是转速,纵坐标是扭矩,形成两条曲线,一条是峰值外特性(持续大概几十秒),一条是持续外特性(可长时间运行)。Simulink里的控制策略限功率逻辑,也要根据这条曲线来做。
电池模块这边,我用的等效电路模型,需要填的参数包括额定电压、标称容量、初始SOC、内阻随SOC和温度变化的关系表、开路电压随SOC变化的关系表。如果模型版本支持,还可以填充放电倍率限制、温度修正系数。电池的建模精度直接决定了续航仿真能不能对标上实测数据,尤其是内阻参数,很多人图省事填一个常数,结果仿真电耗低速时偏高、高速时偏低,怎么调都调不对。
附件电气负载也在这里设置,比如大灯、娱乐系统的低压负载,空调压缩机的高压负载。这个参数在WLTC循环里影响不大,但跑CLTC或者城市工况时,怠速和低速占比高,附件功耗对续航的影响会被放大,不能随便填个几百瓦了事。
2.3 传动系、整车与行驶阻力模块
传动系方面,这个项目用的是单速减速器方案,也就是电机不带换挡机构,靠一个固定速比减速器把电机转速降下来输出到车轮。减速器模块需要填传动比和机械效率,我这个项目的减速比定为9.08,传动效率填0.96,这个值是基于齿轮箱的台架效率测试结果取的。如果是有挡位的车型,还需要填各挡速比、换挡时间、换挡逻辑等,但纯电车型绝大多数是单速,省了不少事。
整车模块的参数看起来简单,但细节决定成败。整备质量是1550kg,这里要算半载还是满载工况,可按项目要求分别设定。风阻系数0.29、迎风面积2.2平方米,这两项和空气阻力直接相关,高速行驶时空气阻力占行驶阻力的大部分,所以这两个参数影响高速电耗。车轮模块要填轮胎滚动半径,215/55R17的轮胎,空载滚动半径大约0.352米,但实际滚动时半径会变化,需要根据轮胎模型的设置填动态滚动半径。
行驶阻力还有一个重要来源是滚动阻力和坡度阻力。滚动阻力系数不是常数,它随车速和路面状况变化,工程上通常用一个公式拟合或者查表。坡度阻力在平路循环工况里不体现,但爬坡性能仿真时就是主角。还有滑行阻力曲线,如果手头有整车滑行试验数据,可以直接导入到Cruise里,用它替代理论公式算出来的阻力,这样模型的精度会明显上一个台阶。
3. Simulink侧控制策略模型搭建
3.1 控制策略整体架构
Simulink侧的控制策略模型,我按功能拆成几个相对独立的模块。顶层有两个输入来源:一个是Cruise过来的驾驶员需求信号和车辆状态反馈,包括加速踏板开度、制动踏板开度、当前车速、电机转速、电池SOC等;一个是策略内部的状态,比如当前整车是否处于充电状态、车速是否低到需要切换蠕行模式等。
第一层是驾驶需求解释模块。它把加速踏板开度转换成驾驶员的扭矩需求,这个转换不是简单的线性,而是要根据不同车速段做映射。举个例子,低速起步阶段,踏板开度对应的扭矩增益要大一点,让驾驶员感觉起步轻快;但是到高速阶段,同样踩下50%踏板,扭矩增益就要限制,避免突然的加速感让人觉得车发冲。这块逻辑在Simulink里通常用一维表格来表示,横轴是踏板开度,纵轴是扭矩因子,再叠加车速作为另一维输入,做成二维查表。
第二层是动力限制模块。整车控制器会根据当前电池的放电能力、电机的峰值扭矩边界、电池温度和电机温度,对驾驶需求扭矩做限幅。比如电池SOC低于20%时,峰值放电功率会有明显下降,如果这时候仍然按正常扭矩需求出功率,电池端电压会被拉低,严重时触发欠压保护。所以策略里要有一个线性降功率的逻辑,根据SOC和电池温度查表得出一个功率限制系数,乘以需求扭矩输出。
第三层是能量回收模块。松加速踏板或踩制动踏板时,电机进入发电状态,把动能转化为电能回充到电池。这个模块需要判断回收扭矩的大小、何时退出回收、与液压制动如何协调。具体标定逻辑后面单独讲。
第四层是模式管理模块,管理经济模式、运动模式、雪地模式等驾驶模式切换。不同模式下,踏板扭矩映射表、能量回收强度表、动力限制策略都会切换,Simulink里用状态机实现起来很方便。
3.2 扭矩解析与能量回收逻辑标定
扭矩解析逻辑是整个控制策略里最敏感的部分,也是实车标定中反复调整最多的功能。简单说,驾驶员踩下加速踏板后,期望扭矩等于踏板开度乘以某个基准扭矩,再乘以当前的可用系数。基准扭矩来自电机峰值扭矩,可用系数是SOC、温度、车速等多维查表的结果。我初始搭模型时用了一个简化逻辑:扭矩因子等于踏板开度,然后乘以车速修正表和SOC修正表。仿真跑下来,动力性基本够用,但经济性差一些,后来在修正表里加入了“高效区偏置”——在常用车速段,比如时速30到60公里,把扭矩因子略微调低,让电机工作点在效率map的高效区附近,能耗就降下来了。
能量回收标定是纯电项目里绕不开的重点,也是实车和仿真差异最容易暴露的地方。回收扭矩不是越大越好,因为回收扭矩直接加载在驱动轮上,如果超过路面附着极限,车轮就会抱死或打滑,这时需要马上撤掉回收扭矩,同时让液压制动接管。在这个项目模型里,我按减速度需求来划分回收区间:
轻松开加速踏板时,回收扭矩较小,大概提供0.05g的减速度,此时无液压介入,能量回收效率最高;中度踩制动踏板时,回收扭矩逐渐增加到约0.2g减速度对应的扭矩,同时液压制动轻微介入,但要注意回收扭矩退出时要平滑,否则驾驶员会明显感觉到制动顿挫;重踩制动踏板时,ABS触发风险增大,回收扭矩快速退出,全部交给液压制动,此时回收功能基本不参与。
这些逻辑在Simulink里由状态机和查表模块实现。Cruise侧把回收扭矩请求传给电机模块,电机负扭矩输出,同时也把实际回收功率传给电池模块。这个闭环在联合仿真里可以直接看到回收了多少电能,电池SOC曲线在工况结束时比不带回收时高多少。
3.3 与Cruise的接口信号设计
联合仿真的接口信号设计,直接决定了整个模型的调试效率。如果信号定义不清楚,联调时反复对信号名字都能耗掉两三天。
我建议把接口信号分成三类来管理。控制信号:驾驶员需求扭矩、能量回收扭矩请求、电机工作模式(驱动/发电/空转)、空调附件开关等,这些是Simulink发给Cruise的。状态反馈信号:当前车速、电机转速、电池SOC、电池电压、电池电流、电机温度、电池温度等,这些是Cruise反馈给Simulink的。事件触发信号:比如车辆下电指令、充电指令、蠕行模式激活指令,这些通常是离散的bool信号。
在这个项目里,我建立了一个接口信号定义表,每个信号都标明了信号名、数据类型、单位、范围、传输方向。千万不要觉得这是小事,实际项目里出问题最多的地方就是这里:两边单位不一致(Cruise用千米每小时,你策略里用了米每秒)、数据类型不匹配(一个double,一个int)、信号顺序错位(联合仿真时按数组索引对应,一旦中间加了一个信号没同步,全线错位)。后面我会展开讲这些坑。
4. 实操过程与关键步骤记录
4.1 Cruise端建模操作全流程
下面按我操作的顺序梳理一遍。
第一步,新建Cruise工程,选择车型类型为纯电动,进入建模画布。先在车辆数据模块里填入整车基本参数,包括整备质量、轴距、质心高度、风阻系数、迎风面积。轴荷分配和质心高度影响轴荷转移,加速和制动工况下的动态载荷分配都要用到,不要只填一个总质量就万事大吉。
第二步,拖入电池模块。在模块参数里选择电池类型为锂离子,录入电池容量(52kWh),额定电压(355V),初始SOC(按工况需求设定,NEDC通常从100%开始)。然后切到电池放电特性表,录入不同倍率和不同SOC下的电压曲线,这些曲线来自电芯的测试数据。如果只有电芯数据,需要按先串联后并联的组数换算成电池包电压和内阻,这一步最容易算错。
第三步,拖入电机模块。填入峰值功率和峰值扭矩后,要特别留意外特性曲线的数据格式,Cruise一般要求以表格形式录入,转速从零到最高转速,对应每一行填峰值扭矩和持续扭矩值。我把台架数据整理成了CSV文件,再导入到模块里,比手动一个个填高效很多,也不容易填错。
第四步,搭建机械连接。电机输出端接减速器输入端,减速器输出端接差速器输入端,差速器左右输出接两个车轮。Cruise里的连接线要连接到模块图标上对应的端口,连接完成后可以双击连接线查看传递的对象是转速还是扭矩,确认没有接反。
第五步,配置电气连接。电池正极接高压电气总线,电气总线再接电机控制器的DC端。如果要模拟低压电气系统,还要单独建一个12V低压网络,接一个DC/DC转换器,从高压总线降压给低压负载。这个项目里我建了一个简化低压网络,主要是为了算附件功耗对续航的影响。
第六步,设置驾驶员模型和仿真工况。驾驶员模块里选标准驾驶员,设定换挡策略(纯电是单速,无需挡位),设定制动踏板操作逻辑。工况方面,我从工况库里选取了WLTC和CLTC Class 3两种循环,以及一个自定义的0到100公里每小时加速工况和一个5%坡度爬坡工况。
4.2 Simulink控制策略搭建过程
Simulink侧我按前面说的四个功能区搭建。
驾驶需求解释模块用2D查表实现,横轴加速踏板开度,纵轴车速,输出扭矩因子。这个查表我用Matlab脚本生成,便于后续批量调整。
动力限制模块由几个限幅器组成。电池允许放电功率查表模块,输入是SOC和电池温度,输出是最大允许放电功率;电机峰值扭矩限制模块,输入是当前转速,查电机的峰值外特性得到当前转速下的最大扭矩。然后取这三个限制中最小值作为最终允许扭矩上限,把驾驶需求扭矩做限幅。
能量回收模块里建了一个状态机,分为“无回收”“轻回收”“强回收”“回收退出”四个状态。状态切换条件由制动踏板开度、车速、电池SOC共同决定。例如车速低于5km/h时强制退出回收,防止低速时回收造成停车冲击;电池SOC高于95%时退出回收,防止过充。
状态管理模块用状态机实现,包含Normal、Eco、Sport三个模式,模式切换由驾驶员的模式开关信号触发,每个模式有独立的查表参数。
然后定义输入输出接口。我在Simulink模型里建了一个接口子系统,所有输入信号(Cruise传来的状态量)接到子系统的输入端口,所有输出信号(控制指令)从输出端口引出。这样做的目的是保持底层策略模型干净,换接口时不用动核心逻辑。
4.3 联合仿真配置与运行
Cruise与Simulink联合仿真的配置,不同版本略有差异,但基本思路一致。我这里用的是动态链接库方式。
在Simulink里,先对你的策略模型进行配置。需要把求解器设为定步长,定步长时间设为0.01秒,这个值要跟Cruise里的仿真步长一致。Simulink端编译成DLL,编译前要确认你安装的编译器和Matlab版本兼容,否则会报找不到编译器之类的错误。
编译成功后,打开Cruise的仿真设置,在联合仿真相关选项里选择“外部DLL”或对应接口,指定DLL文件路径,然后在接口配置界面里按顺序排列输入输出信号。特别注意信号顺序,DLL接口是按数组顺序传递数据的,也就是说你在Cruise界面里定义的第一个输入信号,对应Simulink Input数组的第一个元素,依次对应。排错的方法很简单,在Simulink端加一个“把当前车速乘以2再返回”的临时测试逻辑,跑联合仿真,如果返回的车速是输入的两倍,说明信号通道没问题。
运行联合仿真时,Cruise作为主控方,每个仿真步长调用一次DLL,Simulink逻辑在这个步长里执行一次并返回结果。如果仿真速度很慢,优先检查是不是输出大量数据到工作空间导致的,这种慢多半是文件IO开销,而不是模型本身计算量大。我一般会把Simulink的Debug模式关掉,VisuaRun数据记录频率降低,仿真速度快很多。
5. 仿真结果分析与模型标定
5.1 动力性仿真结果解读
联合仿真跑完之后,第一件事就是读动力性指标。0到100km/h加速工况,输出车速随时间变化曲线,可以读出百公里加速时间。我这次项目模型的百公里加速仿真值大约在8.2秒左右,和实车标称值8.5秒有差异,原因之一是没有模拟电机的峰值功率持续时间限制,实际电机峰值功率只能维持几十秒,但百公里加速正好在这段时间内,所以差异最大来源其实是轮胎附着和路面阻力标定。
最高车速仿真就看车速能否达到电机最高转速和减速比对应的理论车速,如果达不到,最大可能原因是电池放电功率不够。爬坡性能仿真看5%坡度下匀速爬坡能力,以及15%坡度下起步能力,主要看电机低速大扭矩和电池峰值放电电流。
分析动力性时有一个通用检查逻辑:先看电机是否在峰值扭矩边界上,再看电池是否在峰值放电电流边界上,最后看轮胎是否在附着极限边缘。三者中最先到达边界的就是当前工况的制约因素。比如百公里加速时间如果比期望值长,先打开电机扭矩曲线,看看是不是扭矩请求一直顶着峰值曲线在跑,如果是,说明电驱本身没留余量;如果电机扭矩没顶着峰值,那就是控制策略里的扭矩限制模块把扭矩压低了,再去查SOC和温度功率限制表。
5.2 经济性仿真与能耗流向分析
经济性仿真的核心输出是续航里程和百公里电耗。CLTC工况跑完后,百公里电耗应该在12到14度电之间,如果明显偏高,就要做能量流向分析。
Cruise的结果浏览器里可以单独查看电池累计放电能量、电机消耗能量、附件消耗能量、回收能量等多项累计量。我习惯先把这些量做成一个能量平衡表,看看占比。比如电机消耗能量占电池放出能量的85%以上,说明电机效率较高;附件消耗如果占了8%以上,那就要检查是不是空调功率设得太高,或者低压用电器的功率不合理。
回收能量的占比也很关键。城市工况下,回收能量占驱动能量的比例一般在15%到30%之间。如果回收比例太低,优先检查能量回收扭矩是否被电池充电功率限制住了。我之前遇到过一次情况,回收扭矩明明很大,但回收能量比例还是很低,后来查数据发现电池充电电流限制设置了偏严的值,回收功率被削掉了一大半。
5.3 与实车数据的对标调优
仿真模型做得再好,不对标实车数据,心里总是没底。这个项目在完成一轮仿真后,拿实车的CLTC续航数据做了对标。第一次对标的偏差是百公里电耗差了8%左右,实车更低,仿真更高。
排查过程花了两天。第一步怀疑行驶阻力偏大,于是把滑行阻力曲线换成实车滑行数据,电耗降了一点,还是有5%的差距。第二步检查电机效率map,发现初始模型用的是量产同平台电机的效率map,和生产电机的实测map有偏差,最明显的是常用工况区电机效率比实际低了1到2个百分点,别看这个数字小,纯电续航对这种效率差异特别敏感。换成实测map后,电耗偏差缩到2%以内,基本可以接受。
这个经验想说明一点:整车仿真模型的精度上限,不是软件决定的,而是输入数据的精度决定的。软件再强,喂进去的是粗糙数据,出来的也只能是粗糙结果。有条件拿电驱台架实测数据、电池包测试数据、整车滑行数据的,尽量用实测数据,比任何理论公式都靠谱。
6. 项目过程中的高频问题与排查经验
6.1 联合仿真常见问题速查表
联调阶段最容易出问题的地方,我整理成了一张速查表,都是实际踩过的坑:
| 问题现象 | 可能原因 | 排查与解决 |
|---|---|---|
| 联合仿真初始化失败 | DLL文件路径错误或未找到 | 检查Cruise接口里DLL路径是否绝对路径,重新选择一次 |
| 仿真启动后车速一直为0 | 信号顺序错位,Cruise发给Simulink的车速信号被读成了另一个信号 | 在Simulink端临时输出所有输入信号,逐个核对值是否合理 |
| 电池SOC不变 | 电气连接断开,或者电池模块未接入高压总线 | 检查Cruise拓扑里电池到总线的电气线是否连接 |
| 电机扭矩输出远小于请求值 | 电机峰值扭矩限制表或电池放电功率限制表设置错误 | 打开限制模块输出,看哪个限制环节先饱和,再判断数据是否合理 |
| 回收能量一直为零 | 制动踏板信号未关联到回收逻辑,或能量回收退出条件一直被触发 | 检查Simulink状态机里的退出条件,尤其是SOC>95%的条件是否被误设 |
| 仿真速度越来越慢 | Simulink输出数据过多,写入工作空间太频繁 | 降低数据记录频率,只保留需要分析的信号 |
| 爬坡仿真时车速下跌严重 | 电池峰值放电电流限制偏低 | 查看电池电流限制值,对比电机峰值功率需求对应的电流 |
还有一类频率很高的坑是版本兼容问题。Cruise和Simulink都在不断更新,但两边接口插件的更新节奏不一样。我遇到过Cruise新版本和旧版本编译的DLL不兼容的情况,表现是加载DLL时报“入口点找不到”。解决办法有两种:用当前Cruise版本配套的接口组件重新编译一遍Simulink模型,或者干脆在项目启动前就把两边版本锁死,并在团队里发一个版本对照表。
6.2 仿真结果异常的定位思路
如果仿真跑完了,结果却明显不对,我建议按下面这个顺序排查,不要一上来就怀疑策略逻辑。
第一步查输入数据。把整车参数、电机参数、电池参数整个过一遍,看有没有单位错误、数量级错误。很多离谱的仿真结果,查到最后就是风速阻力填了个2.9而不是0.29,或者轮胎半径填了0.352米却写成了3.52米,车速曲线差得非常离谱。
第二步查连接关系。Cruise模型里最容易出问题的是机械连接顺序,比如把电机和减速器的连接线接到了车轮上,仿真不一定报错,但结果一定不对。所以排查时要回到拓扑图,从电池到车轮顺着线走一遍。
第三步查控制策略的输出。在Simulink里加几个信号记录点,把扭矩请求、扭矩限制、回收扭矩这几个关键中间量打印出来分析。对比正常情况,看看是哪个环节率先触发限制条件,导致输出和预期不符。
第四步查数值计算问题。步长太大、代数环没解开、Simulink模型里有单位不匹配等,都会造成数据震荡。典型表现是高频抖动,扭矩信号在某个值附近来回跳,这时候把步长调小一个数量级试试,如果震荡消失,说明是数值问题。
6.3 经验总结:少走弯路的几个习惯
项目收尾之后,我复盘了整个流程,有几点体会值得分享。
第一,参数统一管理。我会把整车所有标定参数集中在一个Excel表或Matlab脚本里,作为唯一数据源,Cruise和Simulink里的参数都从这份数据生成或手动录入。不要今天在Simulink里改一个SOC限制值,明天在Cruise里改一个电池内阻,到最后根本不知道仿真结果对应的参数是哪一版。
第二,模型版本控制。Cruise工程文件和Simulink模型文件用版本管理工具管理,每次重大修改后打一个标签。联合仿真项目里两边模型是配套关系,不做好版本管理,很容易出现拿Cruise旧模型配Simulink新策略的混乱情况。
第三,从简单工况起步。每次接好联合仿真,先用一个最简单的等速工况跑通,确认信号、连接、控制逻辑都正常,再上WLTC和CLTC工况。千万不要直接一上来就跑完整循环,一旦结果不对,变量太多根本无从下手。
第四,仿真结果要和理论计算互相验证。比如等速60km/h时,根据行驶阻力公式手算一个功率需求,然后看仿真里这个工况下的电池输出功率,两者差在合理范围内再继续。这个习惯能帮你尽早发现模型错误,而不是等到整个循环跑完才发现前面某个参数早就错了。
以我个人经验来看,这套Cruise加Simulink的联合仿真模型,只要输入数据精度可靠,仿真结果对前期方案评估和中期策略开发是完全够用的。后续项目如果要把热管理策略也放进来,可以考虑在Simulink里加上电机和电池的热模型,再把空调功耗做成与车速、温差相关的动态模型,仿真精度还能再往上走。做整车仿真,很多时候拼的不是工具用得多溜,而是对每一项参数背后物理意义的理解有多深。