尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

P2架构混动整车能量管理仿真:Cruise与Simulink联合仿真全流程解析

P2架构混动整车能量管理仿真:Cruise与Simulink联合仿真全流程解析 在混合动力整车开发里P2架构的仿真模型是绕不开的一块硬骨头。很多人拿到Cruise和Simulink两套工具第一步就卡在“怎么把整车模型和控制策略真正跑通”上。这篇文章把我实际搭建P2混动整车能量管理仿真模型的过程完整拆开讲从P2架构的选型逻辑、Cruise整车建模、Simulink策略开发到两者联合仿真的配置、标定和排错全部按实操顺序来。适合正在做混动控制策略、整车动力经济性仿真的工程师也适合想用仿真验证能量管理思路的研究生。1. 项目背景与整体方案设计1.1 P2架构混动系统为什么选它P2架构指电机位于发动机与变速器之间的混动架构中间通过一个离合器K0连接发动机。这个位置很有意思——电机和发动机同轴K0分离时发动机可以完全停机电机单独驱动车辆K0结合时发动机和电机扭矩叠加共同出力。相比P1电机怼在发动机前段轮系上、P3电机放在变速器之后这些方案P2最大的优势是既保留了传统动力总成的基本结构又能实现纯电行驶、启停、回馈、扭矩耦合等常用混动功能改造量小、成本可控、工程化难度适中。大众、宝马以及国内很多PHEV项目都用过或正在用P2架构行业里工程资料和经验沉淀丰富遇到问题不容易卡住。选择P2还有一层现实考量仿真阶段如果选P4或双电机混联控制复杂度上升一个量级而P2的扭矩耦合路径清晰模式边界明确特别适合先用仿真把能量管理策略验证成熟。后期迁移到实车、或者往P2.5电机集成在变速器内部做衍生策略框架基本可以复用。文章里的模型就按P2单电机混动来搭重心放在整车能量管理的完整闭环上。1.2 CruiseSimulink联合仿真的分工逻辑整车能量管理仿真天然分成“整车对象”和“控制策略”两块。Cruise擅长整车动力学建模——发动机、离合器、变速器、电机、电池、车轮、制动、车身阻力这些物理部件它都内置了成熟的模型库Simulink擅长逻辑运算和复杂控制——状态机、查表、滤波、标定、逻辑判断写起来比Cruise内部的功能块灵活得多。所以推荐的分工是Cruise负责把被控对象建出来Simulink负责把控制器写出来中间用接口把信号打通。这种分工在AVL官方的支持下也走得很顺。Cruise提供Matlab/Simulink接口模块把Simulink模型编译成DLL后由Cruise在仿真中调用两者在每个仿真步长里交换信号。从工程习惯来看Cruise作为主仿真环境Simulink作为策略容器数据流向是Cruise把整车状态车速、SOC、发动机转速、挡位、踏板开度等送给策略策略算出扭矩指令和模式指令返给CruiseCruise执行物理响应后再把新的状态送出来循环往复。这样整车模型和控制策略可以分别维护控制策略团队只改Simulink整车建模团队只改Cruise版本边界清晰配合效率高。1.3 模型整体架构与数据流我搭的这套模型整体分三层。最底层是Cruise整车物理模型包括发动机、K0离合器、DCT变速器、驱动电机、动力电池、主减速器、车轮、车身、制动系统中间是接口层把物理模型的反馈信号汇聚成策略输入总线再把策略输出的指令总线分发到各个部件最上层是Simulink能量管理策略包含驾驶意图解析、模式判断、扭矩分配、SOC管理、回馈控制这几个子模块。信号流概括起来就是驾驶需求到模式决策再到扭矩分配然后指令执行整车响应最终状态反馈形成完整闭环。这里要特别强调一点接口层的信号一定要做成Bus结构避免散线满天飞。Cruise接口模块支持自定义输入输出列表把信号按类别打包比如Feedback总线、Control总线在Simulink里对应Bus Object来接收和发送后面排查问题、增加信号都方便得多。2. 整车模型搭建与关键参数2.1 软件版本匹配与编译环境准备先说版本这块如果不提前查后面大概率踩坑。Cruise和Simulink的接口对版本匹配比较敏感建议选用官方兼容性列表里明确支持、且周边资料较多的组合。我个人用的是AVL CRUISE 2019级别以上的版本配MATLAB R2020a/R2021a编译器用Visual Studio 2019。装好之后第一步不是建模型而是先把Mex编译器配好——在MATLAB命令行执行mex -setup把默认编译器指向VS的对应版本。这一步不做Simulink模型编译DLL时必然报错。另外一个容易忽略的点路径里不要有中文和空格Cruise工程路径、MATLAB工作目录、策略工程路径都建议统一放到英文字符的目录下。很多“查找不到模型”“DLL加载失败”的怪问题最后查出来都是路径里有中文或者系统环境变量不干净导致的。另外建议在MATLAB里提前把需要用的脚本和Bus对象定义放到初始化脚本StartupFcn里保证模型一打开就有完整的信号定义避免仿真中途找不到Bus的报错。2.2 整车参数定义仿真模型能不能反映真实车关键看参数。我参考了一台典型P2插电混动轿车的参数整理如下表。需要说明的是这些参数在工程上都有对应出处——发动机外特性来自台架数据电机MAP来自供应商电池参数来自电芯测试大家在做自己项目时尽量用真实数据不要拍脑袋填。参数项数值整车整备质量1600 kg迎风面积2.2 m²风阻系数0.29滚动阻力系数0.012车轮滚动半径0.315 m发动机1.5T直喷最大功率120 kW 5500 rpm发动机峰值扭矩250 Nm 1500-4000 rpm驱动电机永磁同步峰值功率80 kW峰值扭矩200 Nm电机最高转速10000 rpm动力电池三元锂容量13 kWh额定电压350 VSOC工作窗口20%-95%变速器7挡DCT主减速比3.8DCT各挡速比单独列一下1挡3.752挡2.193挡1.464挡1.065挡0.866挡0.727挡0.62。这套参数覆盖了P2插混的主流水平动力性不算激进但能耗经济性有代表性。如果你手头有具体车型的参数直接把表里的值替换掉就行模型结构不用变。2.3 Cruise各部件建模要点先说发动机。Cruise里的发动机模型可以选性能模式或油耗模式做能量管理仿真必须把油耗MAP标进去也就是全工况的燃油消耗率BSFC二维表。台架数据一般给的是转速-扭矩网格上的BSFC值单位是g/(kWh)直接在Cruise里填矩阵就行。发动机外特性曲线一定单独确认最大扭矩随转速下降的拐点要跟真实数据一致否则后面扭矩分配会明显失真。电机模型方面Cruise里电机要填两个MAP一个是驱动模式下不同转速扭矩对应效率一个是发电模式下的效率。注意效率MAP的单位和方向电机的扭矩在Cruise里用正负号区分驱动和发电效率表格也要相应分开填反了仿真结果完全没法看。电池模型我用的Simplified模型填容量、内阻可用一维表随SOC变化、开路电压OCV随SOC变化表。这里有个新手容易犯的错误——OCV曲线必须单调且覆盖整个SOC工作区间如果缺了边界数据初始化时容易计算出负数电压。离合器和变速器要一起看。K0离合器在P2架构里核心作用是模式切换Cruise里离合器参数主要是最大传递扭矩、接合/分离时间、迟滞特性。DCT变速器按实际挡位速比填表注意每挡的效率可以单独设置。整车部件里还需要设置质量和转动惯量车身阻力里填风阻和滚阻。这些参数看着琐碎但每一个都直接影响仿真结果的置信度我见过有人整车质量填错一位数结果加速性曲线看起来完全不像话排查了半天才发现是参数的问题。2.4 Simulink控制策略模型结构Simulink侧的策略模型我按模块化思路搭。顶层模型包含四个模块输入总线解析模块、模式判断模块、扭矩分配模块、输出总线打包模块。输入总线里包含车速、SOC、踏板开度、发动机转速、电机转速、挡位信号输出模块里包含发动机扭矩指令、电机扭矩指令、K0离合器指令、目标挡位指令。这里建议模式判断用Stateflow来写状态机不要用一堆If/Else层层套。状态机的可读性和扩展性好太多——后续增加新模式、调整切换条件直接在状态图上改一眼能看到模式间的关系。扭矩分配用MATLAB Function写比搭一堆Lookup Table更清晰也方便加注释和做参数化。我实测下来这套结构在联合仿真里跑得很稳后期标定时只需要改参数脚本不用动模型结构。输入信号还要注意一个事Cruise给出来的信号频率和Simulink的采样时间要做好匹配。联合仿真时一般设置固定步长比如10ms或20ms控制策略的运算步长跟接口的步长保持一致。如果策略里用到滤波滤波时间常数要比仿真步长大一个数量级以上否则离散化误差会很明显。3. 能量管理策略设计与实现3.1 混动工作模式划分P2架构的工作模式按照动力流路径可以划分为几个核心模式。EV模式是K0分离、发动机停机、电机单独驱动并联驱动是K0结合、发动机和电机共同输出发动机直驱是K0结合、电机不输出或工作在弱回馈点行车充电是K0结合、发动机输出大于需求、富余扭矩带动电机发电制动能量回收是K0分离、电机负扭矩回馈、液压制动补充不足部分怠速充电则是扭矩需求很低或停车时发动机维持工作点、电机发电。模式离合器K0发动机电机适用场景EV模式分离停机驱动低速、电量充足并联驱动结合驱动助力急加速、爬坡发动机直驱结合驱动不输出中高速巡航行车充电结合驱动发电电量低、中高负荷制动回收分离停机发电减速、制动怠速充电结合驱动发电停车、蠕行模式划分的原则是让系统尽量工作在高效区、同时保证动力性和SOC平衡。工程上最常用的是基于规则的方法因为它计算量小、行为可解释、适合实车标定。仿真阶段先按基于规则做一版跑出来的能耗结果就是后续优化策略的baseline。3.2 模式切换与SOC滞回控制模式切换最大的坑是振荡。比如SOC在充电阈值附近波动一会儿切EV一会儿切充电不仅仿真结果难看实车上更会被驾乘人员投诉。解决方法是引入SOC滞回控制——充电判断用低阈值退出充电用高阈值两条线之间留出滞回带宽。我用的是一个实际项目里验证过的SOC滞回方案设定SOC目标带30%到70%当SOC低于30%时强制进入充电模式当SOC高于70%时允许EV模式中间区域再根据驾驶需求和车速灵活选择发动机是否介入。模式切到纯电、切回混合的判定条件分开写清楚避免同一边界进出的问题。滞回带宽一般是5%到8%具体数值要看电池容量和工况剧烈程度容量越大带宽可以越窄。除了SOC模式切换还要考核车速和踏板变化率。比如低速蠕行时即使SOC允许也要谨慎进入发动机直驱踏板深踩急加速时直接从EV切换到并联驱动跳过行车充电可能是更合理的选择。这些都是标定内容仿真阶段先把基础逻辑跑通再逐步加条件。3.3 扭矩分配计算扭矩分配是能量管理的核心计算。我的做法是根据踏板开度和车速查需求扭矩表得到整车需求扭矩T_req然后根据当前模式计算发动机扭矩和电机扭矩。EV模式下电机扭矩等于需求扭矩发动机扭矩为0并联驱动模式下需要分配发动机扭矩和电机扭矩。优先让发动机在其高效区工作电机负责削峰填谷由于电机响应快、高效率区间宽动态变化的部分由电机吸收发动机尽量稳态输出。一个简单实用的分配是固定发动机一个目标工作点根据车速和挡位换算到发动机转速查高效扭矩电机补偿差值。但这个方案在需求扭矩低于发动机最优扭矩时会“过剩”所以工程上一般做动态过滤——把踏板需求高频变化用低通滤波处理滤波后的稳态部分给发动机高频部分给电机。我在模型里用的是基于规则的高效区扭矩分配策略先根据当前车速和挡位计算发动机转速再查发动机外特性和高效扭矩表得到发动机优化工作点然后按模式计算电机扭矩指令。为了平顺性所有扭矩指令都加了一阶惯性环节限幅限制上升/下降斜率防止模式切换瞬间扭矩跳变过大。策略类型计算复杂度实时性能耗接近最优程度标定难度基于规则低好中等低DP动态规划高差优高ECMS等效消耗中高中较优中强化学习高中较优高仿真阶段用DP做离线对比很有价值能得到全局最优的能耗下限用来评估规则策略还有多少提升空间。但落到实处工程车量产的还是规则加标定这个路线。3.4 制动能量回收策略制动回收是P2混动油耗贡献很大的来源。策略逻辑是松开油门时先进入回收根据回收需求和电机能力计算电机制动扭矩踩制动踏板时先用电机制动不足部分由液压制动补。这里有个细节——回收扭矩不能一步到位要按一个斜率爬升否则扭矩冲击会让人很不舒服同时要满足制动法规和车辆稳定性约束简化模型里至少要把电机负扭矩能力限制在某个值以内。我在仿真里设置的是制动踏板开度在0到20%范围内回收扭矩按电机峰值负扭矩的百分比插值超过20%液压制动的比例线性增加电机回收扭矩逐渐退出。这样既保证了回收效率也避免“一脚刹车到底全靠电制动”这种不合理场景。制动回收只在K0分离且电池允许充电时生效SOC高于95%要关闭回收防止过充。4. 联合仿真配置与结果分析4.1 接口配置流程Cruise和Simulink联合仿真我按下面的步骤操作每一步都列了容易出错的点。第一步在Simulink中完成策略模型确保模型能单独仿真通过可以先用信号发生器喂几个典型输入确认逻辑正常。第二步在Cruise中打开接口配置界面选择Matlab/Simulink接口添加接口模块。第三步在接口模块里定义输入信号列表和输出信号列表。输入是Cruise送给策略的信号输出是策略返回给Cruise的指令。第四步在Simulink模型中添加Cruise提供的接口输入输出接口一般是通过S-Function或者Bus对象对接确保信号名称和接口列表完全一致。第五步在MATLAB中编译策略模型为DLL编译器提前配好。第六步在Cruise中指定DLL路径运行仿真。最容易出错的环节是第四步和第六步。第四步信号名称不匹配的问题——接口名称是大小写敏感的比如Matlab接口里定义的SOC和Simulink里的Bus字段“soc”不完全一致编译能过、仿真开始就报错第六步一定要确保DLL编译时的工作目录和运行时的工作目录一致否则加载不到。4.2 工况设置与仿真流程能量管理仿真的标准工况国内项目常见有NEDC、WLTC结合用户数据还会有CLTC或者自定义循环。我的做法是先用WLTC完整跑一遍看整体SOC平衡和燃油消耗再用自定义的拥堵循环低速频繁启停和高速循环分别验证策略的表现——低速看回收和启停逻辑高速看直驱和充电效率。仿真流程上先做整车基础校验——电机单独驱动下车辆能否按工况速度曲线跑完再做混合驱动跑工况。每次仿真前检查初始SOC是否符合设定因为P2策略对初始SOC很敏感。能耗结果一般用“油耗电耗折算”口径比如SOC修正后的等效油耗法别直接拿原始油耗比较否则SOC大量下降时油耗数据会虚低。4.3 结果分析与标定思路仿真跑完重点看三个指标SOC变化曲线、发动机工作点分布、整车能耗等效值。如果SOC曲线在工况结束比初始值低了不少说明策略充电不足如果发动机工作点大量落在低效区说明扭矩分配策略要调整高效工作点边界如果等效能耗比预期高优先检查制动回收是否充分介入。标定思路是分步来先标定模式切换边界再标定扭矩分配最后微调SOC管理。每次只改一个参数跑同样的工况对比结果不要一次性改多个参数否则分不清是哪个改动起的作用。这个“单变量标定”的原则在工程上非常重要我在实际项目中吃过亏——同时改了两个参数结果因为两个方向的作用互相抵消看起来没有变化排查半天才发现问题。5. 常见问题与排查技巧5.1 问题速查表联合仿真过程中遇到的问题我把高频的几个整理成速查表方便大家直接对照。问题现象可能原因解决方法DLL编译失败编译器未配置或版本不匹配执行mex -setup配置VS编译器DLL加载失败路径有中文或空格统一使用英文字符路径仿真开始即报信号不匹配接口名称与Bus字段不一致核对名称和大小写SOC越界或持续下降初始SOC设置问题或充电策略边界不合适调整充电阈值和滞回带宽模式切换频繁振荡SOC滞回不够或切换条件太敏感增加滞回带宽和持续时间判断仿真速度极慢步长过小或接口频率过高适当加大步长检查接口采样时间5.2 几个我踩过的坑编译环境这个坑我印象最深。第一次做联合仿真的时候Cruise版本和MATLAB版本搭配不合适DLL编译出来在Cruise里加载就崩折腾了一整天才查清楚是编译器版本不匹配。后来我固定了“CRUISE 2019 MATLAB R2020a VS2019”这套组合再也没有出现过加载问题。建议你们也在项目开始前就把版本矩阵固定下来写成环境说明文档放到项目目录下新同事加入直接照做。还有一个坑是关于步长的。我一开始把Simulink固定步长设成1ms结果仿真速度惨不忍睹一个WLTC工况跑了快三个小时。后来把步长调到10ms联合仿真结果精度几乎没差别耗时却降到了不到半小时。步长不是越小越好一定要结合接口需求和模型动态特性先粗跑确定趋势再细化看细节。最后分享一个接口信号排查技巧如果怀疑信号不对别闷头看代码直接在Cruise的在线测量里把关键信号拉出来画曲线比如实时扭矩指令和实际扭矩两条线一对比就能看出问题在哪。数据分析工具用起来比盲猜快得多。我自己做完这一整套P2架构仿真模型后最大的体会是能量管理策略的仿真难点往往不在控制理论本身而在于把整车模型、策略逻辑、接口配置、标定方法串成一个闭环。这个闭环一旦跑通后续从仿真到实车的路就顺了。你们在实际搭建过程中肯定会遇到各种编译和信号匹配的怪问题希望这篇文章的排查思路能帮你们少走点弯路。也欢迎在评论区交流你们在联合仿真中踩过的坑一起把P2架构能量管理这块的经验攒起来。
返回列表