1. 前后双电机架构的门道:为什么这个构型值得建一套联合仿真
前后双电机纯电动汽车这几年在工程圈讨论度一直很高,各大车企和零部件公司都在推自己的分布式驱动方案。一部分原因是政策与市场对能耗和动力性的双重苛刻要求,另一部分原因则是双电机构型在整车控制层面给工程师留了很大的“可操作空间”。我参与某整车厂预研项目时,最直观的感受是:电机数量翻倍意味着控制自由度翻倍,而控制自由度翻倍意味着你必须有一套可靠的仿真工具去验证策略,否则台架测试和实车标定的成本会让你怀疑人生。
所谓前后双电机,最简单的理解就是前轴一台驱动电机、后轴一台驱动电机,每个电机独立驱动各自所在的车轴。结构上省掉了传统的中央传动轴和分动箱,两个电机通过各自的减速器直接作用于左右车轮;如果需要更高的集成度,还可以进一步做轮边电机甚至轮毂电机。相比前置电机前驱或者后置电机后驱的单电机方案,双电机带来的直接好处有三个:一是动力响应叠加,峰值功率可以做得很大;二是能量回收覆盖的轴荷范围更广,制动时前、后轴同时具备再生制动能力;三是转矩分配可以在前后轴之间动态调整,这在雨雪路面和弯道工况下就是天壤之别。
但我们做工程的人都知道,结构上多一个电机,绝不意味着控制上只是“把一套逻辑复制两份”。前后轴动态载荷转移、两个电机各自效率区间的差异、轮胎附着力限制、电池功率峰值限制、甚至电机响应延迟的差异,都会耦合到最终的前后轴转矩分配结果里。这个问题在实车上很难直接通过标定穷举覆盖所有工况,因为工况矩阵实在太大了——环境温度、SOC、载荷、坡度、路面附着系数,每个维度都有连续变化。
所以当我拿到“Cruise与Simulink联合仿真模型”这个项目需求时,第一反应就是:这个方案的技术路径是对的。AVL Cruise负责提供高保真的整车动力学环境——轮胎、制动器、传动系效率、驾驶员模型、行驶阻力这些由Cruise模型负责;Simulink则跑我们的VCU控制策略——踏板解析、模式判断、转矩分配、滑转控制。两层软件各司其职,通过联合仿真接口进行信号交互,把“控制策略开发”和“整车动力学响应验证”拆开但又紧密耦合。这样做的好处是,控制策略工程师不需要自己用Simulink重写一个整车模型——那样做既费时间又很难校准;而整车动力学工程师也不需要去理解控制逻辑里的每个状态机。
对于读者来说,这套方法的价值不单单是“能跑通仿真”,更关键的是它能回答一群工程上必须回答的问题:双电机前后轴的最优转矩分配到底该怎么算?在不同工况下最优分配比例有什么规律?固定分配比动态分配到底差多少?这些都是实车标定阶段代价极其昂贵的试验内容,而在联合仿真环境里,我们可以把这些问题提前到研发早期,用相对低的成本把策略框架和核心规律摸清楚。
本文接下来会把我在这类项目里趟出来的经验完整记录下来,从整车参数匹配、控制策略分层、最优转矩分配算法到联合仿真平台搭建、典型工况验证、问题排查思路,一步一步展开。适合正在做新能源车辆动力系统仿真的工程师、相关方向的在校研究生,以及准备从单电机整车控制过渡到双电机分布式控制的同行参考。
2. 整车参数与动力系统选型:联合仿真模型的地基
2.1 基本参数确定:一切仿真结果的前提
在Cruise里搭整车模型之前,必须先把整车参数定清楚。这一步看似基础,但很多人容易忽略它的重要性,导致后期仿真结果跟实车差异很大。我们的模拟项目X用的是一台A级纯电SUV,基本参数如下:
| 参数 | 数值 | 说明 |
|---|---|---|
| 整车整备质量 | 1820 kg | 不含驾驶员和载荷 |
| 满载质量 | 2180 kg | 含5名乘员及行李 |
| 轴距 | 2760 mm | |
| 质心高度 | 540 mm | 空载状态 |
| 前轴到质心距离 | 1190 mm | 空载 |
| 滚动阻力系数 | 0.012 | 良好沥青路面 |
| 空气阻力系数 | 0.31 | |
| 迎风面积 | 2.35 m² | |
| 车轮滚动半径 | 0.352 m | |
| 轮胎型号 | 235/55 R18 | 用于Cruise轮胎模型 |
这些参数从哪里来?整车概念设计阶段的CAD数据和悬架硬点布置是最准确的来源。如果还没有实车数据,也可以用经验公式估算:质心高度通常取轮胎半径的1.5到1.7倍,前后轴分配比例基于满载/空载的轴荷目标来反推。有一点值得提醒,质心位置不是固定的——随着载荷和SOC变化(电池包位置固定,但乘客重量分布会变),前后轴荷比例会变化。在联合仿真时,最好设置几组不同的载荷状态做对比分析,尤其是做最优转矩分配分析时,前后轴载荷变化直接改变轮胎附着能力,进而影响可分配的转矩上限。
仿真模型省掉一些对结果影响不大的附属系统没问题,但悬架弹性运动学特性(K&C)导致的载荷转移、轮胎的非线性侧偏特性、传动系的扭转刚度这三个要素不要轻易忽略。它们对双电机整车的中高速稳定性、瞬态响应和驾驶性仿真结果影响非常大。Cruise模型里如果不能精细设置悬架K&C,至少要把轴荷转移的静力学效应算正确,也就是加速度引起的纵向载荷转移必须体现在前后轮垂直载荷上。
2.2 前后电机与电池的参数匹配逻辑
前后双电机的功率匹配不是简单的前后一样大就完事。我们当时的匹配逻辑是:前轴电机承担主要的高速巡航工况,后轴电机承担瞬态加速和低速爬坡的大转矩需求。为什么这样分?因为前驱车在高速工况下整车阻力主要集中在克服空气阻力,此时驱动轮受到的重向力因为空气升力效应会有所减小,而后驱布置在后轴的重向载荷天然更大,附着条件更充裕。反过来在低速大扭矩起步加速阶段,车辆重心后移,后轴载荷显著增加,用后轴电机提供大扭矩会更不容易打滑。
模拟项目X的最终选型如下:
| 部件类型 | 参数 | 数值 |
|---|---|---|
| 前轴电机 | 峰值功率 | 100 kW |
| 前轴电机 | 峰值转矩 | 180 Nm |
| 前轴电机 | 最高转速 | 14000 rpm |
| 前轴电机 | 减速器速比 | 11.2 |
| 后轴电机 | 峰值功率 | 135 kW |
| 后轴电机 | 峰值转矩 | 260 Nm |
| 后轴电机 | 最高转速 | 12000 rpm |
| 后轴电机 | 减速器速比 | 9.8 |
| 动力电池 | 额定容量 | 82 kWh |
| 动力电池 | 标称电压 | 350 V |
前后电机功率合计235kW,对你没看错,这就比许多单电机后驱版本多了将近一倍。你可能觉得这纯属堆硬件,但我们目标工况里包含12%以上的长坡道和满载持续爬坡,加上高环上的持续高速巡航,单电机方案很难同时兼顾低速大扭矩和高速功率这两个矛盾的性能指标。双电机最大的优势就是两个电机可以分别工作在各自的最佳效率区间,用匹配差异来覆盖更宽的工况带。
电池这块我们需要较准确的能力限制模型。Cruise里的电芯模型可以基于内阻建立,需要输入OCV-SOC曲线、不同温度下的内阻曲线、容量衰减模型等。如果项目早期没有电芯实测数据,可以参考同规格NCM三元电芯的典型公开数据建模,但要标注“基于43Ah方形电芯的拟合数据”。电池包的总电压和容量直接决定了双电机峰值功率同时输出时的工作电压范围,这一步匹配不好会导致联合仿真中频繁触发动功率限制,看起来像是控制逻辑有问题,其实是电池模型参数给的太保守。
2.3 Cruise整车模型的建立顺序心得
在AVL Cruise里建立车辆模型,我的习惯顺序是这样的:先创建整车(Vehicle)和驾驶员(Driver),然后布置车轮和制动器,连传动系(减速器、差速器),再放电机和电池系统,最后接控制信号。这个顺序是从“机械能传递路径”出发的——能量从电池到电机到减速器到车轮,Cruise的信号连接需要你把物理连接和控制连接分开处理,机械连接用“连接元素”建立扭矩-转速流,信号连接用Data Bus建立控制流,这两者混在一起是最常见的报错来源。
前后双电机模型与单电机的显著区别是:前驱动桥和后驱动桥分别有独立的电机、减速器、半轴和车轮;它们之间没有直接的机械耦合,唯一的耦合点是车身。因此在Cruise里需要建两条平行的驱动支路,同时把整车参数(质量、质心位置、轴距)作为“统一车身”的属性赋给整车模块,让两条驱动支路都连接到这个车身上。此时,差速器模块会自动把电机转矩分配到左右车轮,但前后轴之间不会自动分配——这正是我们控制策略模块需要介入的地方。
这里有一个我自己踩过的重要细节:Cruise里的“驾驶员模型”默认会按照标准的驾驶员意图来请求驱动/制动扭矩。联合仿真时,通常要切换成外部控制模式,由Simulink里的VCU逻辑直接接管驾驶员请求转矩。如果你忘了关掉Cruise自带的驾驶员扭矩请求,你会看到Simulink给的转矩指令和Cruise实际执行的值对不上,仿真曲线在同一个时间点出现莫名其妙的跳变。我第一次搭建时被这个问题绕了两个晚上,最后逐行查信号才发现是驾驶员模型没有完全切换为外部模式,前轮电机转矩里叠加了Cruise内部驾驶员的请求值。
3. 驱动转矩控制策略的分层设计与接口划分
3.1 分层架构:上层策略和底层策略各干各的
驱动转矩控制策略的设计,我坚持用分层架构。这是从ISO 26262功能安全开发经验里延伸出来的习惯——分层之后每层的验证范围清晰,标定参数解耦,出了问题也好定位。
我们约定三层结构:
- 驾驶员意图解析层:把加速踏板开度、制动踏板开度、挡位信号、车速信号解析为整车的需求驱动转矩和需求制动转矩。这一层的核心数据是踏板开度-转矩-车速的三维Map(或者三维Map加PI补偿),以及蠕行扭矩、起步扭矩、舒适性扭矩限制这些功能逻辑。
- 转矩分配层:把整车需求转矩按照控制目标(经济性优先/动力性优先/路面附着优先)在前后轴之间进行分配,输出为前轴电机目标转矩和后轴电机目标转矩。这一层就是我们说的“最优转矩分配策略”的所在层。
- 执行层:把前/后电机目标转矩转换为电机控制器的请求信号,包括峰值功率限制、峰值扭矩限制、转矩变化率限制、过温降额保护、故障等级仲裁等。执行层也要对来自VCU的目标转矩做合理性校验,防止信号错误导致整车安全事件。
底层逻辑不在这篇文章展开太多,重点说分层接口。接口的信号命名和单位规范一定要从一开始就定好。我见过太多失败的联合仿真项目,最后找不到问题原因,排查下来是转矩信号在某个环节被乘了减速比、转速信号被除以了2π等等。我们的统一约定是:TorqueReq_Front和TorqueReq_Rear的单位是“电机输出轴端的Nm”,不是“轮端Nm”;Speed_Front和Speed_Rear的单位是rpm;踏板开度是0到1的标么值;转矩的符号约定是正值驱动、负值回馈。凡是涉及减速器速比的换算,统一放在执行层做,分配层永远工作在“电机输出轴域”。
3.2 驾驶员意图解析:需求转矩从何而来
驾驶员意图解析是控制策略的一个人机交互接口。实车标定中这一层的体验感最强——踏板曲线决定驾驶员对车辆动力响应的第一主观印象。在联合仿真阶段,我们的做法是:直接用加速度请求来反算需求扭矩。
给定目标加速度a_req(通过踏板开度乘以最大可用加速度,再经舒适性滤波),需求驱动转矩近似为:
T_drive ≈ (m * a_req + F_res(v) ) * r / (η_drive * i_total)
其中F_res(v)是总行驶阻力(滚动阻力+空气阻力+坡度阻力),r是车轮半径,η_drive是传动效率,i_total是总减速比(电机轴到车轮)。如果前、后两个电机的减速比不一致,这里就要注意了——同一个整车加速度需求作用下,前轴电机和后轴电机各自对应的转矩命令并不相等,因为电机的转速不同,工作点不同。
仿真环境中我们做了三组不同的踏板特性Map,分别对应经济模式、标准模式、运动模式。经济模式的踏板Map在小开度段的增益更低,标准模式线性度最好,运动模式在中高开度段的增益陡然增大。模式切换在Simulink中做状态机,切换时要求执行“转矩增量滤波”,避免模式切换瞬间需求转矩突变导致车身顿挫。
有一个细节很多人会漏掉:能量回收时的驾驶员意图解析应该是“负转矩请求”,而不是简单地让制动踏板直接控制液压制动。我们的策略里,轻踩制动踏板时优先增加再生制动强度,只有当再生制动能力达到上限(电机峰值回馈功率、电池充电功率限制、附着极限)时,才叠加液压制动。这个逻辑必须在Simulink里建模,因为后轴和前轴的再生能力不同,如果缺少这个协调逻辑,联合仿真时你会看到SOC回收量明显偏低。
3.3 执行层到底做了什么
执行层大概是最容易被低估的部分。很多人觉得把分配层的转矩目标发给电机模型就行了,但实际上执行层的逻辑直接关系到仿真结果能不能代表真实车辆表现。
执行层里最关键的是三块:
- 峰值限制仲裁:每个仿真步长内检查目标转矩是否超过当前转速下的电机峰值转矩曲线、是否超过电池当前可用的充放电功率对应的转矩上限。如果超限,不能简单截断——要按比例或按优先级降额,否则一个超限引发连锁错误。
- 转矩变化率限制:电机转矩的物理响应受逆变器电流环带宽限制,电机轴端转矩变化率通常在几百到几千Nm/s这个量级。仿真模型中如果完全不设限制,瞬态转矩阶跃会造成车身纵向加速度冲击过大,和实车表现差异明显。
- 故障仲裁和降级逻辑:某台电机温度过高、通讯故障或者检测到旋变异常时,执行层要能够将对应电机的转矩请求置零,并把所有需求转矩转移到另一台电机上(注意不能超过另一台电机的峰值能力)。双电机的一个初心就是系统冗余,这个功能在仿真中要专门做故障注入测试。
在整个联合仿真模型中,执行层的Simulink块是连接VCU控制器和Cruise整车模型之间的最后一站。我习惯把执行层独立封装成一个Subsystem,这样在调试时可以单独对执行层做单元测试,而不需要每次都跑完整的联合仿真,几轮迭代下来能节省大量时间。
4. 最优转矩分配的核心算法:从查表到在线优化
4.1 为什么固定比例分配远远不够
前后双电机最简单粗暴的分配策略当然是固定比例,比如一直50:50。这种策略的优势在于逻辑极简、代码可靠、标定工作量小,但它有一个致命弱点:完全无视了两个电机和两个驱动轴在各工况下的效率差异、附着差异和功率限制差异。
举个最直白的例子:低速大扭矩加速工况下,车辆轴荷明显后移,后轮垂直载荷大于前轮,后轴电机能承受的峰值转矩理论上更大。如果你依然按50:50分配,后轴的潜力被浪费(加速性能受限),前轴反而因为接近附着极限更容易滑转。反过来,在高速小扭矩巡航工况下,我们希望尽可能让工作点处于电机高效区的前轴电机多出力,而固定比例分配做不到这种智能切换。
实测数据更能说明问题。我们在CLTC工况下对比了三组策略:
| 策略 | 工况总能耗 | 相比最优分配 |
|---|---|---|
| 固定50:50 | 13.84 kWh/100km | +7.6% |
| 固定前轴优先40% | 13.56 kWh/100km | +5.4% |
| 动态最优分配 | 12.86 kWh/100km | 基准 |
动态最优相比固定50:50,整车百公里电耗降低了接近1kWh,折算到续航就是大约6到8%的差异。这在如今比拼续航宣传的市场环境下,已经不是可以忽略的量级了。
4.2 最优转矩分配的建模与目标函数设计
所谓“最优转矩分配”,本质上是一个带约束的优化问题。数学上定义如下:给定整车需求总转矩T_req,求解前轴转矩T_f和后轴转矩T_r,使得电机消耗的总电功率最小,同时满足约束条件。
目标函数:
min J = ∑_{i∈{f,r}} P_elec_i(T_i, ω_i)
其中P_elec_i是第i个电机的输入电功率,由电机效率Map决定:P_elec_i = T_i * ω_i / η_i(T_i, ω_i)。效率Map是二维查表,横轴转速、纵轴转矩,来自电机台架实测或电磁仿真数据。
约束条件:
- T_f + T_r = T_req(转矩平衡约束)
- T_i_min(ω_i) ≤ T_i ≤ T_i_max(ω_i)(电机峰值转矩包络约束)
- |T_f| ≤ μ·N_f·r(前轴附着约束)
- |T_r| ≤ μ·N_r·r(后轴附着约束)
- |T_i·ω_i| ≤ P_batt_limit(电池功率约束)
注意这里的前后轴垂向载荷N_f和N_r不是常数——他们随纵向加速度动态变化:
N_f = (m·g·b - m·a_x·h_g) / L
N_r = (m·g·a + m·a_x·h_g) / L
其中a和b分别是质心到前、后轴的距离,h_g是质心高度,L是轴距,a_x是纵向加速度。这个动态载荷转移方程必须在分配策略里考虑到,因为加速工况下后轴允许的最大转矩是增加的,制动能量回收时前轴允许的回馈转矩是增加的。
理论上这个优化问题可以用序列二次规划(SQP)求解器在线求解,每步更新一次约束条件然后求最优解。我们在实验室阶段确实这么做过,结果精度很理想,但在实车控制器和快速原型上的实时性堪忧——完整SQP一次求解大约需要几十毫秒,这对一个控制周期10ms的转矩分配任务来说是不可接受的。
4.3 工程可行的实现路径:离线最优查表+在线插值
因此工程上更常用的是离线优化在线查表的两阶段方法。原理并不复杂:在开发阶段,我们利用高保真模型在不同工况点(不同车速、不同需求转矩、不同SOC、不同坡度、不同载荷状态)用SQP求解完整优化问题,把最优解记录下来形成多维表;实车运行或实时仿真时,控制器只需要查找邻近工作点做线性插值即可。
具体来说,我们把最优分配系数k作为查表输出:
k = T_f / T_req
查表输入是车速v、需求总转矩T_req、SOC和载荷状态。这样实际在线计算只要做一个多维插值,耗时在微秒级别,完全满足实时性要求。同时,为了让转速同步,我们把前后轴减速比差异导致的转速差也纳入约束中——当车速超过某个阈值时,前轴电机转速可能已经逼近后轴电机的最高转速,此时前轴可用转矩需要相应限制。
离线优化的结果通常会产生一个有趣的现象:经济模式下的最优分配曲线在低速段强烈偏向后轴,高速段偏向效率更高的前轴。这是因为低速段后轴电机峰值转矩大、效率高,且加速时轴荷后移改善了后轮附着;高速段前轴电机的转速效率区间更合适,前轴分担更多扭矩有利于整车保持高效区。而在运动模式下,优化结果更激进,转矩分配会在瞬态过程中大幅波动以追求最大加速度,但这种波动会让驾驶员觉得动力响应“神经质”,实际标定时也会加入平滑性约束去抑制这种剧烈波动。
我还尝试过一种更进阶的策略——基于行驶工况预测的动态最优分配。利用导航信息和历史车速统计预测未来一段时间的车速轨迹,把优化的目标函数改成“未来30秒的总电耗最小化”而不是“当前瞬时电耗最小化”。这种MPC思想在前瞻性场景中效果出色,但依赖工况预测的准确性,预测错了反而比即时最优更差。我个人建议新团队先不用碰预测控制,把瞬时最优做扎实了再谈预测扩展。
4.4 附着极限约束与低附着路面的转矩分配
转矩分配不能只看效率最优,附着极限是安全红线。在低附着系数路面(冰雪、积水、湿滑沥青),过大的前轴或后轴驱动力都会导致打滑,严重时引起车辆失稳。因此分配策略需要根据路面附着系数估计值来约束轴端最大可用转矩。
实现上是在执行层加入一个“滑转保护”模块:每个车轮的转速信号与参考车速进行比较,如果某根轴的滑转率超过阈值(比如0.15),该轴的电机转矩请求就按比例或者按PI控制进行动态削减,削减下的转矩转移到未打滑的轴去补偿动力需求。这是一种简易TCS逻辑,它的介入优先级高于经济性最优分配——安全永远优先于效率。
联合仿真中做这个测试很有意义,我可以直接在Cruise的轮胎模型里把附着系数从0.85改到0.3,然后跑一遍全油门加速工况,观察分配策略是否能够自动调整到“后轴少扭矩、前轴多扭矩”的安全状态。实测结果表明,带附着约束的分配策略在低附着路面上的加速时间只比高附着路面多了约0.8秒,而不带约束的策略会出现明显的前轮打滑振荡,加速时间反而更长,同时横向稳定性指标严重恶化。
5. 联合仿真平台搭建:Cruise与Simulink接口配置全流程
5.1 接口架构与信号映射表
Cruise与Simulink的联合仿真在AVL软件体系里叫“Cruise Interface for Simulink”或老版本的“Co-Simulation”,本质上是通过Cruise模型里添加外部接口模块,把Cruise模型编译为一个S-function,然后在Simulink侧直接调用这个S-function模块,实现两者在相同时间步长上的数据交换。
我们的典型信号映射表如下:
| 接口方向 | 信号名称 | 单位 | 说明 |
|---|---|---|---|
| Cruise -> Simulink | V_Signal_RoadSpeed | km/h | 整车实际车速 |
| Cruise -> Simulink | AccPedalPos | % | 加速踏板开度(驾驶员模型) |
| Cruise -> Simulink | BrkPedalPos | % | 制动踏板开度 |
| Cruise -> Simulink | Speed_FrontMotor | rpm | 前电机转速 |
| Cruise -> Simulink | Speed_RearMotor | rpm | 后电机转速 |
| Cruise -> Simulink | SOC | % | 电池荷电状态 |
| Cruise -> Simulink | VehicleAcceleration | m/s² | 整车纵向加速度 |
| Simulink -> Cruise | TorqueReq_Front | Nm | 前电机转矩指令(电机轴端) |
| Simulink -> Cruise | TorqueReq_Rear | Nm | 后电机转矩指令(电机轴端) |
| Simulink -> Cruise | GearReq | - | 挡位请求(电动车常置D挡) |
| Simulink -> Cruise | ModeReq | - | 驾驶模式请求(经济/标准/运动) |
这里信号命名单位一定要白纸黑字写清楚,尤其是转速:Cruise模型里电机模块显示的转速如果用的是rpm,那Simulink侧查效率Map时必须保持同一个单位。很多初学联合仿真的人在这上面翻车,效率Map的横轴单位不统一,插值结果直接错乱。
联合仿真的步长设置也很关键。Cruise默认支持变步长,但我们强制使用固定步长——10ms是推荐的控制策略周期。如果你的策略里还有更快的调制型控制(比如电机的DTC或FOC算法级仿真),那就不适合放在联合仿真平台里跑,联合仿真只负责“整车级/策略级”验证,电机内部的电磁控制就不要在Simulink里建了,直接用电机效率Map和峰值外特性替代即可。这种假设误差很小,但能显著降低仿真计算压力。一次CLTC工况(约30分钟)联合仿真,在台式机上大约需要5到8分钟计算时间,用变步长在某些瞬态工况会把计算时间拖到半小时以上。
5.2 联合仿真模型搭建的实际流程
搭建联合仿真的完整流程,按我的经验分成以下六个步骤:
- Cruise整车模型自测:先在Cruise里独立运行模型,不挂Simulink,用自带的驾驶员模型跑一个WLTC工况,确认整车模型本身没有错误而且性能参数基本合理。
- 创建接口模块:在Cruise的模型树中添加“Simulink Interface”(或者老版本的External Interface),把需要交互的信号从各个模块连线到接口模块里。
- 生成S-function:在Cruise的“General”页签里选择生成供Simulink使用的联合仿真接口文件(通常是一组包含busin/busout定义的DLL或S-function源文件)。这一步需要确保MATLAB的编译器环境配置正确,MATLAB版本和Cruise版本兼容性最好查一下官方兼容矩阵。
- Simulink模型搭建:在Simulink里创建总模型,顶层模型里放上Cruise提供的S-function模块、VCU策略模块、信号解析重组模块、Scope和To Workspace记录模块。建议信号记录使用Simulink的Dataset格式,后面用仿真数据检查器比较方便。
- 信号对接联调:先把VCU策略模块内部用最简单的“直通逻辑”——即TorqueReq_Front等于整车请求的一半、TorqueReq_Rear等于另一半——跑通整个联合仿真。先确保通信链路正确,再换入完整控制策略。
- 工况与结果后处理:在Cruise的工况任务(Task)里设置仿真工况(如CLTC、WLTC、自定义加速工况),把结果文件输出路径配置好。联合仿真结束后可以用后处理工具或MATLAB脚本分析结果。
5.3 一个必须重视的时序问题:仿真时钟与信号初始值
联合仿真中有一个极易“调三天找不到原因”的坑——仿真启动瞬间的信号初始值不一致。
Cruise和Simulink是两个独立的求解环境,它们通过外部接口在每个步长交换数据。仿真开始的前几个步长内,Cruise里的车速可能还是0或者某个初始值,而Simulink里的VCU策略模块因为内部状态变量初始化为默认值,可能输出一个非零的转矩请求。这个非零转矩请求立刻被Cruise执行,导致车辆在仿真开始的0.1秒内出现一次不应该有的冲击和加速度尖峰。
为了处理这个问题,我习惯在Simulink策略模块里加一个使能逻辑——只有在车速信号>1 km/h且SOC信号正常(大于20%且小于100%)且电机转速信号有效时,策略模块才从“初始安全状态”切换为“正常运行状态”。初始安全状态下,转矩输出强制为0。这个简单的逻辑可以避免几乎所有初始步长的非物理瞬态。
另外,仿真结束时的数据记录也要注意:Cruise的结果文件里默认记录的是整车层面的大量物理量,Simulink侧则需要主动把优化分配系数k、前后轴目标转矩、实际输出转矩、电机工作点(转速-转矩坐标)等关键信号用To Workspace或者Export to MAT-File记录下来。这些信号是做策略迭代和后处理分析的核心依据,宁可多记,不可少记。
5.4 计算性能优化:怎么让联合仿真跑得更快
联合仿真的最大痛点就是计算速度慢。一次典型续航工况仿真动辄跑几十分钟,如果策略迭代频繁,时间成本很高。我在多个项目里优化计算性能的经验可以总结为以下几条:
- 降低信号采样频率:Simulink里的记录块(To Workspace)如果用默认的每步都记录,会产生海量数据,拖慢仿真。把记录频率设置为50Hz或者10Hz足够用于策略分析。
- 简化高频动力学模块:Cruise模型里如果打开了复杂的悬架多体动力学模块,计算量会暴增。做转矩分配策略验证时,可以暂时关闭悬架K&C的详细模块,只保留轴荷转移的准静态计算,计算速度至少快一倍以上。
- 将Cruise求解器步长固定为10ms或20ms:更小的步长(比如1ms)带来的精度提升对整车级分析而言微乎其微,但对计算时间的消耗是指数级的。
- 批量仿真利用任务队列:AVL Cruise本身支持批量任务(Task Folder),可以一次把CLTC、WLTC、加速、爬坡等多个工况排好,夜间一次跑完,早上起来直接看结果对比。
6. 典型工况下的仿真验证与结果分析
6.1 加速性能与爬坡性能:动力性验证
联合仿真模型跑动力性工况是最直接的验证手段。我们在模拟项目X上执行了三组典型测试:
第一组是0-50 km/h全油门加速测试。固定50:50分配策略下,实测仿真0-50km/h加速时间为4.32秒;动态最优分配策略下,加速时间缩短到4.05秒。这0.27秒的提升主要来自起步阶段,由于充分使用后轴电机的峰值大扭矩和更好的后轮附着条件,车辆能更快进入峰值加速度区。
第二组是60-100 km/h的中段加速能力。这里动态最优分配的优势反而不大,因为中高速段整车需求功率处于电机峰值功率非线性区,前后轴转矩分配受电池功率限制影响较大。我们通过联合仿真发现了一个十倍有意思的现象:在电池放电功率受限制时,动态最优分配策略会自动减少效率略低的后轴电机功率、把可用的电池功率尽量划给效率更高的前轴电机,相比固定分配避免了后轴电机在低效区的消耗,整段加速时间缩短约0.15秒。
第三组是12%坡度爬坡测试。满载状态下,总需求转矩大约是平地的三倍。动态最优分配策略在爬坡时把大约65%的转矩分给后轴,因为爬坡时车辆重心显著后移,后轮附着力更大。在低速爬坡段,后轴的260Nm峰值扭矩被充分利用,爬坡全程的电机温升(如果开启热模型)也明显低于固定50:50策略——这个结果对电机寿命和持续功率能力都有积极意义。
6.2 CLTC与WLTC续航能耗验证
能耗验证是我们这个项目的重头戏。我们在CRUISE模型里把工况任务设置为CLTC和WLTC,比较三组策略下的电耗和SOC轨迹。
CLTC工况仿真结果显示:
| 策略 | 电耗(kWh/100km) | SOC终点值 | 能量回收电量占比 |
|---|---|---|---|
| 固定50:50 | 13.84 | 80.2% | 23.4% |
| 经济模式最优分配 | 12.86 | 81.5% | 28.1% |
| 运动模式最优分配 | 14.22 | 79.1% | 22.8% |
经济模式最优分配相比固定分配省电接近1度每百公里,核心来源是两处:一是中低速段更倾向于使用高效后轴电机,二是能量回收阶段更激进的后轴回馈分配。WLTC工况因为高速比例更高,前轴高效率的优势被放大,经济模式最优分配相比固定分配的电耗差约为0.72kWh/100km,比CLTC工况的差异略小,但依然明显。
分析联合仿真结果时我还关注电机工作点的分布。把前后轴电机各自的转速-转矩工作点画在效率Map上,你会直观看到固定分配策略下前后电机工作点都散布在中等效率区域,而动态最优分配策略下的工作点分布会更集中在高效椭圆区内。这种可视化对向管理层汇报策略价值特别有用,一目了然。
6.3 能量回收工况的分配策略差异
制动能量回收的最优分配和驱动工况的最优分配还不是同一个问题。制动时车辆轴荷是向前转移的——前轮垂直载荷变大,前轴能提供的最大回馈转矩上限更高。所以制动回收阶段的最优分配策略整体上是“前轴多回收、后轴看情况回收”。
但这里有个微妙的约束:如果前轴电机承担的再生制动转矩过多,可能导致前轮制动温度高、制动磨损不均匀,也会在低附着路面上引发前轮抱死风险。所以我们给回收策略加了“回收平滑限制”——前轴回馈转矩在制动力请求中的比例不允许超过80%,并且当车速低于10km/h时逐步退出再生制动,防止低速下制动力阶跃变化造成停车点头感。
联合仿真中我们专门设计了一个连续减速工况:从80km/h以固定制动减速度(0.3g和0.5g两组)减速至0km/h。结果表明动态回收分配策略相比固定50:50回收分配,回收电能提升约12%,同时车辆减速过程的车身纵向加速度平滑度也有改善——因为两个轴的回馈扭矩叠加更符合制动需求曲线的形状。
6.4 仿真结果的合理性质疑与校核
做仿真时间长了,我有一个强烈的习惯:拿到新结果的第一反应不是惊喜,而是怀疑。联合仿真的结果是否合理,需要从多个维度校核。
第一校核能量守恒。给电池输入的电流与SOC变化能否对应——如果SOC下降速度与电池能量输出明显不符,大概率是效率Map或者电池模型参数出了问题。第二校核功率限制。任何一个电机工作点都不能超出外特性包络线,联合仿真日志中如果频繁出现“Power Limited”状态位翻转,说明你的转矩分配策略频繁试图调用不存在的功率。第三校核行驶阻力。在空载、平路、无风、恒速工况下车速是否稳定,整车需求功率是否与理论阻力功率一致——这里能快捷发现Cruise车辆模型里滚动阻力系数或者空气阻力系数设置错误。
在模拟项目X的多次迭代中,我至少三次通过能量守恒校核发现了问题:一次是电池模型的充电/放电内阻用反了,一次是效率Map插值方法从线性切换到样条导致个别低效点被过度外推,还有一次是Cruise的传动效率设成了双向相同但实际驱动和滑行工况的效率差异被忽略了。每次发现的都是早期数据处理细节的问题,但若不校核,这些错误会悄悄扩散到最终结果里。
7. 联合仿真调试中的高频问题与排查思路
7.1 Cruise与Simulink信号不匹配:先查单位,再查总线定义
联合仿真最常见的故障就是信号不匹配导致的仿真中断或异常跳变。排查路径我总结为“三步走”:
第一步查单位换算。Cruise内部有一些模块的单位习惯(比如车速为km/h),Simulink控制策略通常用m/s计算,如果你没有在接口模块里加入单位换算,车速信号直接错了千倍。我们项目里专门在Simulink接口模块前段加了一个“Unit Conversion”子模块,集中处理km/h和m/s、rpm和rad/s的换算,出错时只需要查这一个模块。
第二步查总线定义。Cruise生成的S-function使用Bus对象传递信号,如果你修改了Cruise模型里的接口信号列表但没重新生成S-function,或者Simulink侧的Bus对象定义和S-function实际输出不一致,仿真会在初始化阶段直接报错。解决方案很简单:每次修改了Cruise接口后,必须重新编译生成S-function,并且在Simulink侧用“Update Model”刷新Bus定义,不能只改动bus对象而不重新生成。
第三步查信号时序。Cruise和Simulink的交互数据在跨步长对齐上偶尔会出现一个步长的延迟或者超前。如果发现Simulink观察到的车速信号比实际值滞后一个步长(10ms),在整车级控制策略里影响通常可以忽略,但如果是电机转速信号用于效率Map插值,一个小步长的偏差在瞬态工况会导致转矩分配系的瞬时跳变。
7.2 仿真发散与震荡问题:先缩小边界,再细分定位
仿真发散是联合仿真调试中的噩梦之一。现象各异:有转矩信号逐渐增大最后溢出报错的,有车速信号在某个频率持续振荡的,还有SOC出现非物理波动的。
排查仿真发散,我的思路是“最小化复现”:把模型中的策略模块简化到最简(比如固定比例分配),把工况简化到单一稳态工况(比如60km/h恒速平路),然后看问题是否消失。如果最简模型没有发散问题,再逐步恢复策略逻辑;如果最简模型依然发散,问题大概率出在Cruise车辆模型本身或者接口配置。
一个典型案例是初始步长的转矩振荡:Cruise车辆模型在起步瞬间驾驶员请求转矩和Simulink策略输出的驱动转矩叠加,可能形成一个正反馈环——Simulink检测到车速低于目标值就增加转矩,Cruise因转矩增加而加速度增大,车速上升,Simulink又因为车速上升而继续增加转矩维持“目标加速度”,最终转矩请求打满峰值甚至超限。解决方法是限制需求转矩的变化率和峰值,同时在策略里加一个“车速误差死区”,车速在目标值附近小范围内时,转矩请求增量强制为0。
7.3 计算时间过长与结果数据量过大:先减记录,再调步长
联合仿真还有一个常见抱怨:“跑一个工况要一个多小时,太慢了。”大多数人第一反应是压缩步长,但我的经验是首选削减数据记录量——Simulink的To Workspace如果记录了所有仿真步长的所有信号,数据量巨大,不仅拖慢仿真,还把磁盘空间占满。将关键信号记录频率降到50Hz后,计算时间至少减少30%。
其次再考虑步长优化。Cruise求解器的步长从默认值调整为10ms或20ms,联合仿真计算量显著下降。如果你的策略里有快速逻辑(比如滑转控制的PI周期为5ms),那步长只能维持5ms或10ms,不能再放大,否则控制效果失真。不过以我们模拟项目X的经验,整车级转矩分配策略的周期10ms已经足够,更快的策略层属于电机控制器的范畴,通常不放在联合仿真里。
如果做完上面两件事依然慢,就要检查复杂模块——悬架多体动力学、热管理液路模型、电磁干扰模型这些明显增加求解刚度的模块是否真的需要同时开启。做策略验证时关闭它们,需要时再单独打开,这是充分利用联合仿真效率的必要取舍。
7.4 仿真结果与预期不符的排查方法论
最后说一个方法论层面的经验。联合仿真的结果与理论预期不符时,最忌讳直接埋头修改参数——那样容易“修好一个指标,弄坏另外三个”。我通常按照以下优先级排查:
- 先确认模型本身正确:整车质量、速比、轮胎半径、阻力系数这些基本参数有没有手误造成数量级错误。
- 再确认信号链路正确:Simulink发出的转矩指令是否真的原样到达了Cruise电机模块,有没有被其他模块截胡或叠加。
- 然后校准控制器参数:PI增益、转矩变化率限制、滤波时间常数是否合理,在Simulink里用信号跟踪工具看输入输出的跟随质量。
- 最后检查优化目标函数边界:目标函数中的效率Map插值是否出现外推,约束条件有没有写漏——比如漏掉电池功率约束就会导致离线优化表出现不可实现的工作点。
这个排查顺序之所以重要,是因为它遵循“从物理到算法”的逻辑次序。你不可能用一个错误的整车模型得到可信的控制策略结论;也不可能在信号链路错误的前提下讨论最优分配表的插值精度。我把这个顺序固化成了联合仿真项目的默认排查清单后,问题定位的平均时间从两天缩短到了半天以内。
8. 写在最后的实操体会
项目做到中期,联合仿真模型逐渐稳定之后,我最大的体会是:这套平台的价值不在于“跑通那一刻”,而在于之后无数次的策略迭代和边界探索。比如我们可以快速验证某一种新转矩分配算法的效果——把离线优化表换成一套在线SQP求解器,在仿真环境里跑5个工况就能知道它的实时性瓶颈在哪里,收益是否显著。这种低成本试错能力,正是Simulink和Cruise联合仿真相比纯实车标定的最大优势。
个人经验里还有一个小技巧想分享:联合仿真模型建议做成“策略可插拔”的架构——Simulink顶层模型保留固定的S-function和信号接口,策略模块(驾驶员意图解析、转矩分配、执行层)各自独立成Subsystem,通过Simulink的模型引用方式加载。这样每次修改某个层的算法,不需要动整个联合仿真框架,只需要替换对应的子系统或参数文件。我在模拟项目X里靠这个架构至少节省了一半以上的调试时间。
从技术演进角度看,这套联合仿真平台后续还有两个延伸方向很值得探索:一是把电机和电池的热管理模型加入联合仿真,让转矩分配策略能够感知电机温度,在持续大功率工况下动态降额限制,做到“效率与热安全的联合最优”;二是接入硬件在环(HIL)测试设备,把真实的VCU控制器硬件接进来,让联合仿真模型直接驱动原型控制器,在实验室里就能完成一部分原本需要实车路面进行的标定工作。这两块做扎实之后,这套平台就已经从一个“仿真验证工具”升级为完整的“控制策略开发与验证环境”了。