☰
增程车仿真:AVL Cruise恒功率base模型搭建与标定全记录
2026/9/30 12:43:01 网站建设 项目流程

刚接到一个增程车的能量管理预研任务,手里只有台架数据和一堆参考文献,策略方案还没影。我做的第一件事不是翻论文,而是先在AVL Cruise里搭了一版带恒功率控制的仿真模型,也就是大家常说的base模型。这个模型不追求策略最优,核心是把增程车的纵向动力学、能量流、控制接口全部跑通,让后续任何能量管理策略都能直接在这套模型上做快速验证。这篇文章就把这个base模型的搭建思路、恒功率控制的实现方式、参数标定方法,以及我实际踩过的坑完整记录下来,给同样在做cruise增程仿真的朋友做个参考。

1. 这个base模型到底解决了什么问题

1.1 为什么先搭base模型而不是直接上策略

做整车仿真这几年,我见过太多项目死在策略之前——模型跑不通、信号接反、工况一加载就发散,最后所有人都以为是算法错了,其实底层物理模型根本就没立住。base模型的价值就在这里:先建立一套可信的、可以反复迭代的整车仿真骨架。

所谓base模型,我理解就是一套参数化、模块化的整车仿真架构。它把车辆本身的物理特性——整车质量、风阻、滚阻、电机效率、电池内阻、发动机油耗map——全部固化下来,同时把能量管理的控制接口预留好。在这个骨架上,你可以换电池、换发动机、换整车参数,也能随时挂不同的控制策略,而不需要每次从零开始搭建车辆模型。这就像做软件开发先把框架搭好,业务逻辑只写在独立的控制层,底层基础设施不轻易改动。

在Cruise里,base模型具体包含完整的车辆纵向动力学模型、增程器模型、电池与电机模型,以及一个最简单的能量管理控制策略。这个控制策略我选了恒功率控制,原因很简单:它只有一个目标参数要标定,逻辑清晰,非常适合作为验证整车模型正确性的工具。你只要把恒功率控制跑通,整条信号链路的正确性基本就有保证了。

1.2 恒功率控制:整车仿真的“稳压器”

恒功率控制这个名字听起来简单,但在增程车能量管理里,它是非常有代表性的一种控制范式。它的工作逻辑是:发动机-发电机(增程器)始终工作在一个恒定功率输出点上,不论当前是加速、爬坡还是滑行,增程器输出的电功率基本不变。车辆实际需求的功率与增程器输出功率之间的差额,由动力电池来吸收或补充。需求功率大,电池放电;需求功率小,电池充电。

这就像家里同时开着空调、热水器和电饭煲,你设定总功率固定,再看电表决定是从电池取电还是给电池充电,逻辑非常直观。相比功率跟随控制(增程器跟随整车需求功率实时变化),恒功率控制让发动机长时间稳定在一个工作点上,避免频繁变工况,油耗和NVH特性都更容易控制。当然它的代价是电池SOC波动更大,可能出现过充或过放,所以必须配合SOC滞环控制来决定增程器的启停时机。

为什么base模型选恒功率而不是更复杂的策略?我个人的经验是:变量越少,越容易定位问题。恒功率控制需要对外的标定参数就一个目标功率值,加上SOC上下限阈值,一共三个参数顶天了。一旦仿真结果不合理,要么是物理模型参数错了,要么是信号连接断了,排查范围非常小。这对刚开始接触Cruise的人尤其友好。

2. 模型架构与核心模块拆解

2.1 整车骨架怎么搭

打开Cruise界面,左侧组件库里的元件非常多——Vehicle、Engine、Electric Motor、Battery、Rack and Pinion、Brake、Wheel……第一次用的人很容易懵。但增程车的base模型结构相对固定,核心组件就这些:整车(Vehicle)、牵引电机(Electric Motor)、动力电池(Battery)、增程器(发动机加发电机)、油箱(Fuel Tank)、减速器(Transmission或Reduction Gearbox)、差速器(Differential)、车轮(Wheel)、制动器(Brake),以及驾驶员模块(Driver)。

组件之间的连接方式要区分三种:机械连接(旋转/扭矩传递)、电气连接(功率/电流传递)和信号连接(控制指令)。机械连接就是轴和齿轮之间的关系,比如电机轴到减速器再到车轮;电气连接是把电池、电机、增程器的直流侧接在一起,共享一个母线;信号连接则用来传递SOC、启停指令、目标扭矩这些控制信息。

整车参数上,我用的是一台中型增程SU V的参考数据,整车整备质量约1800kg,风阻系数0.30,迎风面积2.6平方米,滚动阻力系数0.012。这些参数在Cruise的Vehicle模块里直接填入即可,它们是纵向动力学计算的基础。模型搭建完成后,先不急着加控制,用一套最简单的工况(比如NEDC或WLTC)跑一遍纯电动模式,确认车速跟踪、能量消耗量都合理,再做增程器控制。

2.2 增程器模块的搭法

增程器在Cruise里不是现成的一个模块,通常用发动机(Engine)加发电机(Generator)组合实现。这里有一个关键点:发动机和发电机之间是机械连接,增程器和驱动轮之间没有任何机械联系,它的输出只能以电功率形式注入到高压母线上。这是增程架构和混联架构的本质区别。

发动机模块的参数以map为主。需要准备的数据包括外特性曲线(油门全开时的扭矩-转速关系)、BSFC油耗map(不同转速扭矩点对应的有效燃油消耗率)、怠速转速、最低稳定转速等。如果手头没有实测数据,可以用Cruise自带的参考发动机数据替换,后续再做参数校准。发电机模块需要的是效率map,也就是各转速、扭矩点下的发电效率,一般在85%到95%之间。

连接方式上,发动机曲轴和发电机转子通过机械连接直接相连,转速比设为1:1。这样发动机转速等于发电机转速,发电机扭矩直接作用在发动机输出轴上,增程器启动时发电机的发电功率就等于发动机输出机械功率乘以发电机效率。控制上需要给发动机一个目标转速或目标功率,由发动机的调速器闭环控制扭矩,这个环节后面在控制实现部分再细说。

2.3 电池与电机别用错模型

电池模型我选的是Cruise自带的Rint模型,就是最简单的内阻加开路电压模型。这个模型假定电池等效为一个理想电压源串联一个内阻,电压源的电压(OCV)和内阻都随SOC变化。标定数据需要至少一组表:不同SOC下的OCV、充电内阻和放电内阻。

以40Ah、额定电压350V的电池包为例,大约14kWh电。OCV表大致是SOC为0.9时约360V,SOC为0.5时约350V,SOC为0.2时约335V,具体数值按电芯实测填充。充放电内阻大约在0.08欧姆到0.15欧姆之间,注意充电内阻和放电内阻要分开填。SOC计算用的是安时积分法加电压修正,初始SOC在仿真开始前在模块里设置。

电机模型这里容易踩坑。Cruise里的Electric Motor模块同时支持电动和发电两个方向,需要分别勾选电机模式(Motoring)和发电模式(Generating),并填入对应的效率map。增程车里的牵引电机既是驱动电机又是制动能量回收发电机,效率map建议填二维表:横轴是转速,纵轴是扭矩,表格内容是效率值。外特性也要同时给出峰值外特性和持续外特性,我在模型里设的是峰值功率120kW、持续功率60kW,峰值扭矩280Nm,持续扭矩约140Nm,模拟一个典型永磁同步电机的特性。

3. 恒功率控制的参数计算与标定实操

3.1 恒功率目标值怎么算

恒功率控制最关键的一个数就是目标功率P_target。设得太小,电池持续放电,SOC越跑越低;设得太大,电池频繁充电,还可能过充。比较务实的做法是让增程器输出功率接近车辆在当前工况下的平均需求功率,再考虑各环节效率适当上浮。

我的标定方法是先跑一个纯电动模式下的预设工况(比如WLTC),统计整车需求功率的变化情况。以一台中型增程SUV为例,WLTC循环的总时长是1800秒,累计需求能量约6到8千瓦时,算下来平均需求功率大约12到16千瓦。但由于整个能量传递链存在损耗(电机控制器效率约0.95、电机平均效率约0.9、电池充放电效率约0.95,增程器发电机组效率约0.9),增程器需要输出的电功率会比整车平均需求功率高一些。

用这个公式估算,P_apcu = P_req_avg除以总效率,总效率大约0.95乘以0.90乘以0.95再乘以0.9,算出来约0.73。带入平均需求15kW,算下来P_apcu大概在20kW出头。实际标定时我先给了20kW,再通过仿真观察SOC的变化曲线微调。如果SOC在循环中的终值和初值基本一致,说明这个目标功率基本匹配工况的平均能耗,这就是一个合格的恒功率设定点。

3.2 SOC滞环控制逻辑

恒功率控制如果没有滞环,会出现一个非常尴尬的现象:增程器在阈值附近反复启停。比如你设定SOC低于40%启动增程器,高于45%关停,电池经过这个小区间只需要几分钟,增程器刚热机又停机,不仅浪费燃油,仿真里还会让油耗数据异常难看。所以必须用滞环控制加延时。

我常用的控制逻辑是这样:设定SOC低阈值30%、SOC高阈值85%。当SOC降到30%以下时,增程器启动;启动后持续运行,直到SOC充到85%以上才关闭;中间区间内保持当前的启停状态不变。这样增程器一旦启动就会运行一段时间,给电池充入足够的电量,而不是在临界点反复横跳。

另外建议增加一个最小运行时间限制,例如增程器启动后至少运行300秒,即使SOC已经超过高阈值也强制输出一段时间再停机,进一步减少启停次数。代码逻辑用MATLAB风格写大概是这样:

% 增程器恒功率滞环控制 if (SOC <= SocLow) && (Extender_ON == false) Extender_ON = true; % 启动增程器 APU_Power = P_target; % 目标功率恒定 elseif (SOC >= SocHigh) && (Extender_ON == true) Extender_ON = false; % 关停增程器 APU_Power = 0; end if Extender_ON && (RunTime < MinRunTime) % 强制继续运行至 MinRunTime APU_Power = P_target; RunTime = RunTime + Delta_T; end

这段逻辑在Cruise里通常用Function模块实现,也可以用Matlab DLL联合仿真,但在base模型阶段我强烈建议用内置Function,减少外部依赖。

3.3 Cruise里控制信号怎么接

控制逻辑写好了,信号怎么接入Cruise需要特别注意。Cruise里的控制模块(Function或Control Module)有输入输出端子,需要明确指定这些端子连接在哪些物理信号上。

输入侧至少要接三路信号:电池的SOC值、整车的点火钥匙信号(Key ON)用于判断整车是否上电、当前车速用于可能的工况判断。SOC信号从电池模块的SOC状态输出口引出,连到控制模块的一个输入端。输出侧需要给出增程器启停指令和增程器目标功率,这两路信号再分别接到发动机模块和发电机模块的使能端(On/Off)与目标功率/目标扭矩接口。

这里有个细节:在Cruise里,增程器的目标功率不能直接发给发动机说“给我输出20kW”,因为发动机的控制是基于扭矩和转速的。我们真正能控制的是发电机目标扭矩和发动机目标转速。恒功率控制一般这样配合:发动机工作在最佳油耗转速附近,比如2500rpm,Cruise里的发动机调速器会通过扭矩调节把转速稳住;发电机的目标扭矩用目标功率除以当前转速乘以一个系数得到,P_target除以发电机转速,得到扭矩目标值。

实际我在base模型中,是把目标功率传给一个计算函数,在函数内部实时计算发电机的目标扭矩,再传给发电机模块的扭矩输入接口。转速则由发动机控制器闭环维持。这套信号链路跑通后,增程器才能稳定输出目标电功率。

4. 常见问题与排查技巧实录

4.1 增程器频繁启停

这个是最常见的问题。现象是SOC在阈值附近来回穿越,增程器启停指令不断翻转。第一次遇到时我以为模型坏了,后来发现纯粹是滞环策略的问题。

我当时设置的启停区间是35%到40%,只有5个百分点的宽度,电池在WLTC循环里很容易反复穿越这个区间。结果一个循环跑下来,增程器启停了十几次,油耗曲线简直没法看。后来把阈值改成30%到85%,并在启动后加了一个300秒的最小运行时间,启停次数直接降到两次。排查时可以用Cruise的在线监控同时绘制SOC时间曲线和增程器启停指令信号,非常直观地看到二者的对应关系。

4.2 电池SOC越跑越低但不启机

更诡异的问题是SOC已经跌破30%下限,增程器却一动不动。这个问题的排查思路要集中在信号链路上。

第一步检查控制模块的输入SOC信号是否真的连到了电池模块的SOC输出,有时候在连线的时候接错口了。第二步检查控制模块的输出使能信号是否接到了发电机/发动机的On/Off输入,注意有些发动机模块的启用接口名字不叫On/Off,可能是Enable或Start,要看清帮助文档。第三步在Cruise的在线监控里查看控制模块的输出数值是否发生变化,如果输出一直停留在0,说明逻辑没有执行,检查Function模块的触发条件是否设了触发信号(比如周期触发)。

我还犯过一个低级错误:把启停信号接在了发电机的扭矩输入上而不是使能端,结果发电机一直在输出一个小扭矩,发动机却根本没启动。这种问题在信号连接检查里很容易忽略,一定要逐点核对每个信号的连接目标。

4.3 功率输出振荡

恒功率控制的另一个典型问题是发电机输出功率高频振荡。表现为母线电压、发电机功率曲线像锯齿一样上下抖动。

大部分情况是目标功率信号没有滤波。恒功率控制如果直接让发电机的扭矩指令跟随目标功率实时计算,而目标功率本身没有平滑处理,叠加电池内阻随SOC变化的跳变,就会引起控制环的振铃。解决办法是在目标功率和扭矩计算中间加一个低通滤波器,时间常数给0.5到2秒。Cruise里可以直接拖一个PT1(一阶惯性)模块放在控制模块和增程器之间,设定好时间常数即可。加完滤波后,功率曲线瞬间平滑很多。

另外,如果电池模型的内阻表相邻点之间跳变过大,也会引起功率波动。建议内阻表取点尽量平滑,相邻SOC区间的内阻差值不要超过20%,否则安时积分和功率计算容易出现数值抖动。

4.4 仿真不收敛、跑得慢

Cruise模型报不收敛的情况在base模型阶段也经常遇到,尤其是恒功率控制这种外环逻辑存在时。如果用的是变步长求解器,模型刚性比较大时容易步长被压得很小,仿真速度慢得离谱。

我的做法是先把求解器设为固定步长,典型值1e-3秒(1毫秒),这样每步计算量可控,模型也不容易发散。如果固定步长模型还能收敛,再把步长适当放大到2e-3或5e-3尝试,提高仿真速度。另一个技巧是关闭不影响本次仿真目标的物理细节模块,比如热模型、电池温度效应,这些在base模型阶段都可以不启用,能让仿真速度快不少。正常跑一个WLTC循环,Cruise的仿真时间通常在几分钟到十几分钟,如果超过半小时就要怀疑仿真设置有问题了。

下面把常见问题整理成一个速查表,方便直接对照:

表现可能原因排查方法解决建议
增程器频繁启停滞环区间过窄看SOC曲线与启停指令重合加宽阈值,加最小运行时间
SOC低却不启机信号连接错误在线监控控制模块输出逐点核对输入输出连接
功率/电压振荡目标功率无滤波看功率时间曲线是否锯齿加PT1滤波,时间常数0.5~2s
仿真发散/慢步长设置不当检查求解器日志固定步长1e-3,关闭热模型等模块
油耗异常偏高发动机工作点不合理看发动机转速与扭矩工作点调整目标转速至最佳油耗区

5. 扩展方向:base模型怎么长出更多策略

恒功率base模型稳定跑通之后,它的使命才刚刚开始。我在完成这个模型后,陆续在上面叠加了两种更实用的策略。

第一是功率跟随控制。把恒功率的单一目标功率改成一张二维表:输入是整车需求功率和电池SOC,输出是增程器目标功率。制表时会考虑几个因素——SOC偏低时目标功率大一些,SOC偏高时目标功率小一些,整车需求功率低时功率跟随,需求功率高时增程器加大输出。这张表本质上是一个静态查表控制器,效果远好于恒功率,但标定工作量大一点。这个策略直接复用了base模型的控制模块替换,底层物理模型完全不用动。

第二是接入Matlab/Simulink联合仿真做动态优化。把base模型作为被控对象,通过FMU或DLL把Simulink里写的模型预测控制或动态规划策略加载进来,速度比纯用Cruise内置逻辑快得多。这时base模型的信号接口就非常关键,我提前预留了目标功率、启停指令、电池SOC反馈、车速、增程器功率六个标准接口,联合仿真时只需要把Simulink模型的输入输出和这几个接口对应上即可。

最后再分享一点个人经验:恒功率控制看起来简单,但它是最好的测试载体。因为它的控制逻辑只有三四个参数,一旦仿真结果和你预期不一致,问题基本锁定在物理模型参数或信号连接上,排查成本极低。而如果一开始就用复杂的能量管理策略,出了问题根本分不清是控制策略错了、参数标定错了,还是整车模型本身有问题。先把base模型跑稳,再做复杂策略,这条路我走过好几次,是最稳妥的增程车仿真落地方式。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询