1. 项目概述
两轮独立驱动电动汽车是当前新能源汽车领域的一个重要研究方向。这种驱动方式通过左右轮独立控制,可以实现更灵活的转向和动力分配。我在最近的一个项目中,使用CarSim和Simulink搭建了差动驱动电动汽车的联合仿真平台,主要目的是验证不同控制策略对车辆性能的影响。
这个仿真平台的核心在于如何精确模拟两轮独立驱动的特性,并通过控制算法实现预期的车辆行为。CarSim负责车辆动力学模型的搭建,Simulink则用于控制策略的开发。两者通过接口进行数据交换,形成一个闭环仿真系统。
提示:联合仿真时要注意CarSim和Simulink的采样时间设置必须一致,否则会导致仿真结果不准确甚至仿真失败。
2. 系统架构设计
2.1 硬件在环仿真平台搭建
我们的仿真平台采用以下配置:
- CarSim 2019.1版本
- MATLAB/Simulink R2019b
- 实时仿真机(用于硬件在环测试)
- CANoe(用于CAN总线信号分析)
系统架构如下图所示(文字描述):
- CarSim提供车辆动力学模型,包括车身、悬架、轮胎等子系统
- Simulink实现控制算法,包括电机控制、差速控制等
- 两者通过S-Function接口进行数据交互
- 实时仿真机运行Simulink模型,与CarSim实时通信
2.2 车辆模型参数设置
在CarSim中设置了两轮独立驱动电动汽车的关键参数:
| 参数名称 | 数值 | 单位 | 说明 |
|---|---|---|---|
| 整车质量 | 1500 | kg | 含电池和乘员 |
| 轴距 | 2.7 | m | 前后轮中心距离 |
| 轮距 | 1.6 | m | 左右轮中心距离 |
| 电机峰值功率 | 80 | kW | 单电机功率 |
| 电池容量 | 60 | kWh | 锂离子电池 |
3. 控制策略实现
3.1 差动驱动原理
两轮独立驱动的核心在于左右轮转矩的独立控制。当车辆转向时,内外轮需要不同的驱动力来实现平稳转向。我们的控制策略基于以下原理:
- 根据方向盘转角计算目标横摆角速度
- 通过PID控制器调节左右轮转矩差
- 考虑车辆实际横摆角速度反馈
- 结合车速调整控制参数
在Simulink中实现的差动控制算法框图主要包括:
- 参考模型(计算期望横摆角速度)
- 反馈控制器(比较实际与期望值)
- 转矩分配模块(计算左右轮目标转矩)
3.2 电机控制模型
每个轮毂电机采用独立的矢量控制策略:
code复制// 电机控制伪代码
void motorControl(double targetTorque) {
// 电流环控制
i_d = 0; // 直轴电流设为0(最大转矩控制)
i_q = targetTorque / kt; // 交轴电流计算
// 坐标变换
i_alpha = i_d * cos(theta) - i_q * sin(theta);
i_beta = i_d * sin(theta) + i_q * cos(theta);
// SVPWM调制
generatePWM(i_alpha, i_beta);
}
注意:实际实现时需要加入电流限制、弱磁控制等保护逻辑。
4. 联合仿真实现细节
4.1 CarSim接口配置
CarSim与Simulink的接口配置步骤如下:
- 在CarSim中设置VS Solver为"MATLAB"
- 配置输入输出变量:
- 输入:左右轮转矩指令
- 输出:车速、横摆角速度、轮速等
- 生成S-Function模块
- 将生成的C代码编译为Simulink可调用的模块
4.2 Simulink模型搭建
Simulink模型主要包含以下子系统:
- 驾驶员模型(生成加速/制动/转向指令)
- 车辆控制策略(核心算法)
- 电机模型(模拟电机动态响应)
- 数据记录和显示模块
关键仿真参数设置:
- 固定步长:0.001s
- 求解器:ode4 (Runge-Kutta)
- 仿真时长:30s
5. 仿真结果分析
5.1 双移线工况测试
在双移线工况下,我们对比了三种控制策略:
| 控制策略 | 最大侧偏角(°) | 横摆角速度误差(%) | 轨迹跟踪误差(m) |
|---|---|---|---|
| 无差动控制 | 5.2 | 25.3 | 0.78 |
| 基本PID控制 | 3.1 | 12.7 | 0.42 |
| 自适应控制 | 2.3 | 8.5 | 0.21 |
从结果可以看出,自适应控制策略在各种指标上都表现最优。
5.2 阶跃转向测试
在车速60km/h下进行阶跃转向测试,观察车辆的横摆响应:
- 无差动控制:出现明显过度转向,需要驾驶员修正
- 差动控制:转向响应平稳,横摆角速度快速收敛
- 自适应控制:响应更快,超调量更小
6. 常见问题与解决方案
6.1 仿真不收敛问题
问题现象:仿真过程中出现数值发散,结果异常。
可能原因及解决方案:
-
采样时间不一致:
- 检查CarSim和Simulink的步长设置
- 确保两者使用相同的固定步长
-
初始条件冲突:
- 检查车辆初始速度是否为0
- 确认控制器的初始输出为0
-
模型代数环:
- 在反馈回路中加入单位延迟
- 使用Memory模块打破代数环
6.2 实时性问题
问题现象:硬件在环测试时出现超时错误。
优化方案:
-
简化模型:
- 降低电机模型的复杂度
- 使用查表法代替复杂计算
-
代码优化:
- 启用Simulink Coder的优化选项
- 使用定点运算代替浮点
-
硬件升级:
- 增加实时机的CPU核心数
- 使用更高性能的处理器
7. 实际应用中的经验分享
在完成这个项目的过程中,我总结了以下几点经验:
-
模型验证要循序渐进:
- 先验证开环响应
- 再测试闭环控制
- 最后进行复杂工况仿真
-
参数调试技巧:
- 先调P,再调I,最后调D
- 从较小值开始逐步增加
- 记录每次调整的效果
-
结果分析方法:
- 同时观察时域和频域响应
- 对比多个性能指标
- 进行敏感性分析
这个仿真平台后续还可以扩展以下功能:
- 加入电池模型,实现能量管理
- 集成ADAS功能,测试自动驾驶算法
- 添加路面模型,研究不同附着系数下的控制策略
