1. 项目概述:双电机纯电驱动的联合仿真实践
在新能源汽车研发领域,前后双电机架构正成为高性能电动车型的主流选择。这种布局不仅能实现四驱功能,更重要的是可以通过智能扭矩分配策略显著提升车辆的动力性和能效。传统单电机方案在应对复杂路况时往往力不从心,而双电机系统则像两位默契的舞者,能够根据路况实时调整各自的出力比例。
我最近完成的一个校企合作项目,就是基于AVL Cruise和MATLAB Simulink搭建了一套完整的联合仿真平台。这个平台最核心的价值在于:
- 实现了车辆动力学(Cruise)与控制算法(Simulink)的闭环仿真
- 开发了可动态调整的扭矩分配DLL模块
- 建立了参数化的建模流程,支持快速车型适配
2. 仿真环境搭建与工具链配置
2.1 软件环境准备
工欲善其事,必先利其器。我们选择的工具组合是:
- AVL Cruise 2021:行业标杆的整车仿真软件,特别擅长传动系统建模
- MATLAB R2021a:算法开发的金标准,Simulink版本要确保与Cruise兼容
- Visual Studio 2019:用于编译生成DLL文件,注意要安装对应的C++组件
安装时有个容易踩的坑:Cruise的接口模块需要特定版本的MATLAB Runtime。我们项目中使用的是v9.7,如果版本不匹配会导致联合仿真时出现神秘的"找不到入口点"错误。
2.2 联合仿真接口配置
让两个专业软件"对话"需要一些技巧:
- 在Cruise中启用MATLAB接口:
Options > Preferences > MATLAB里设置正确的MATLAB安装路径 - 配置仿真步长:建议设置为1ms,这个值需要在Cruise和Simulink中保持一致
- 内存分配:在cruise.ini配置文件中增加
[MATLAB] MaxHeapSize=2048避免内存溢出
重要提示:首次联调前,务必单独测试Cruise和Simulink的基础模型能否正常运行。很多联调问题其实源自各自模型的独立错误。
3. 整车动力学模型构建
3.1 基础参数设置
在Cruise中搭建整车模型时,这几个参数对仿真精度影响最大:
matlab复制% 典型B级电动车参数
vehicle.mass = 1680; % 整备质量[kg]
vehicle.wheelbase = 2.72; % 轴距[m]
vehicle.frontTrack = 1.55; % 前轮距[m]
vehicle.cgHeight = 0.5; % 质心高度[m]
vehicle.dragCoef = 0.28; % 风阻系数
特别要注意质心位置的设定,双电机车型的重量分布与传统车差异很大。我们通过实测某原型车的重量分布,发现前轴载荷占比达到58%,这在建模时需要准确体现。
3.2 电机与传动系统建模
前后电机采用相同的技术参数(便于备件通用),但在Cruise中需要分别建模:
- 永磁同步电机,峰值功率150kW
- 减速比9.3:1(针对城市工况优化)
- 电机效率MAP图要导入实测数据
传动系统建模有个实用技巧:在Mechanical Brake模块中设置初始拖滞扭矩(约5Nm),这能模拟真实车辆的滚动阻力,避免仿真中出现不现实的滑行距离。
4. 控制策略开发与实现
4.1 驱动扭矩控制架构
在Simulink中搭建的分层控制架构包含:
- 上层控制器:解析驾驶意图(踏板信号)
- 中层分配器:计算总需求扭矩
- 底层执行器:分配前后电机扭矩
核心算法采用状态机实现不同驾驶模式:
matlab复制switch drivingMode
case 'Normal'
totalTorque = pedalPos * maxTorque * 0.7;
case 'Sport'
totalTorque = pedalPos * maxTorque;
case 'Eco'
totalTorque = pedalPos * maxTorque * 0.5;
end
4.2 最优扭矩分配算法
我们开发了基于效率优化的动态分配策略:
matlab复制function [frontTorque, rearTorque] = torqueAllocation(totalTorque, speed)
% 效率最优工作点查询
frontEff = interp2(frontEffMap, speed, totalTorque*0.5);
rearEff = interp2(rearEffMap, speed, totalTorque*0.5);
if frontEff > rearEff
bias = 0.6; % 前轴偏置系数
else
bias = 0.4;
end
frontTorque = totalTorque * bias;
rearTorque = totalTorque * (1 - bias);
end
这个算法的创新点在于:
- 实时查询电机效率MAP图
- 考虑车速对电机效率特性的影响
- 引入平滑过渡机制避免扭矩突变
5. DLL模块开发与集成
5.1 S-Function Builder配置
将算法封装成DLL的关键步骤:
- 在Simulink中新建S-Function Builder模块
- 导入所有.c和.h源文件
- 设置正确的库路径和编译器选项
- 指定输入/输出端口的数据类型
编译时常见的一个报错是"LNK2005符号重复定义",这通常是因为头文件中包含了变量定义而非声明。解决方法是在头文件中使用extern关键字。
5.2 Cruise接口适配
在Cruise中调用DLL需要:
- 将生成的.dll文件放入Cruise项目目录
- 在
Interface模块设置正确的函数调用约定(通常是__stdcall) - 配置参数传递方式(我们选择指针传递提高效率)
测试时建议先用简单的测试用例验证接口功能,比如固定输入固定的扭矩请求值,检查输出是否符合预期。
6. 仿真分析与优化
6.1 典型工况测试
我们设计了多组对比测试:
- 加速性能:0-100km/h全油门
- 爬坡能力:30%坡度起步
- 能耗测试:CLTC-P循环工况
结果显示,动态扭矩分配策略比固定50:50分配方案能耗降低7.3%,同时0-100km/h加速时间缩短0.4秒。
6.2 参数灵敏度分析
通过DOE实验设计,我们发现对能耗影响最大的三个参数依次是:
- 电机效率MAP的精度(±3%能耗影响)
- 车速估计误差(±1.5%)
- 扭矩分配更新频率(±0.8%)
这为后续的硬件选型提供了明确方向:必须优先保证电机测试数据的准确性。
7. 工程实践经验分享
7.1 调试技巧实录
在项目推进过程中,我们积累了一些宝贵经验:
-
信号同步问题:当Cruise和Simulink的仿真步长设置不一致时,会出现扭矩指令滞后。解决方法是在Simulink中使用Rate Transition模块进行信号同步。
-
内存泄漏排查:长时间仿真后程序崩溃,最终发现是DLL中动态分配的内存没有释放。使用Visual Studio的内存分析工具定位到了问题代码。
-
实时性优化:将效率MAP查询改为预计算+插值法,使算法运行时间从12ms降至3ms。
7.2 模型扩展建议
这套平台还有很大的扩展空间:
- 集成电池热模型,实现更精确的能耗预测
- 加入道路坡度信息,优化爬坡时的扭矩分配
- 开发基于机器学习的自适应分配策略
对于想尝试类似项目的同行,我的建议是从简单的单电机模型开始,逐步增加复杂度。同时要建立完善的版本控制机制,因为联合仿真会产生大量的模型文件和配置参数。
