✅博主简介:本人擅长数据处理、建模仿真、程序设计、论文写作与指导,项目与课题经验交流。项目合作可私信或扫描文章底部二维码。
1. 车辆动力学模型建立
在对分布式四驱电动汽车进行横摆稳定性研究时,首先需要建立车辆动力学模型。该模型能够准确描述车辆在各种工况下的动态行为,为横摆稳定性分析提供基础。车辆动力学模型通常包括以下几个主要方面:
- 质心侧偏角(β):描述车辆在横向上的偏离程度。
- 质心侧偏角速度(r):描述车辆横向运动的变化率。
- 车速(v):影响车辆的横向稳定性。
- 路面附着系数(μ):影响轮胎与路面之间的摩擦力,从而影响横摆稳定性。
- 前轮转角(δ):影响车辆的转向响应和横摆行为。
基于这些变量,绘制了不同车速、路面附着系数以及前轮转角下的质心侧偏角-质心侧偏角速度相平面,并建立了稳定边界模型。将相平面划分为稳定区、临界区和失稳区三个部分,并计算了当前工况点的失稳度系数和协调控制系数。这些数据为后续的控制策略设计提供了依据。
2. 分层控制策略设计
针对横摆稳定性的需求,提出了分层控制策略,包括:
-
上层控制:
- 稳定区:在稳定区内,采用滑模控制策略制定附加横摆力矩,重点跟随期望横摆角速度。这种控制方式能够在稳定条件下有效抑制横摆。
- 失稳区:在失稳区内,基于线性二次型(LQR)控制理论来制定附加横摆力矩,侧重于跟踪期望的质心侧偏角。LQR控制可以有效应对较为严重的稳定性问题。
- 临界区:通过协调控制系数调节两种附加横摆力矩的权重,根据当前工况计算最终的期望附加横摆力矩。这种方式能够在临界区内实现平衡,防止车辆从稳定状态转入失稳状态。
-
下层控制:
- 基于前、后轴垂直载荷分配各轮驱动转矩。通过合理分配驱动力矩,提升车辆的整体稳定性和操控性能。
3. 驱动系统失效控制策略
为了确保在驱动系统出现故障时车辆仍能保持稳定性,设计了以下失效控制策略:
-
模糊控制的驱动系统故障诊断策略:
- 通过比较实际输出转矩与期望输出转矩的比值及其变化率,设计模糊控制器。这种控制器可以对驱动电机的工作状态进行准确判断,并识别故障模式。
-
基于规则的驱动系统失效控制策略:
- 根据故障诊断结果,识别驱动系统的失效模式。基于规则的控制策略通过重构未失效电机的输出转矩,调整车辆的驱动状态,以控制车辆维持预期的行驶状态。
4. MATLAB/Simulink 与 CarSim 联合仿真
为验证设计的横摆稳定性和失效控制策略的有效性,使用MATLAB/Simulink与CarSim进行了联合仿真。仿真环境下,验证了控制策略在多种工况下的表现。仿真结果显示:
- 设计的横摆稳定性控制策略能够有效跟踪期望的横摆角速度和质心侧偏角,确保车辆处于稳定区。
- 失效控制策略能够及时准确地诊断电机工作状态,在驱动系统失效时基于规则重构电机转矩,从而保持车辆的稳定性和动力性。
% 控制系统模型配置
model = 'DistributedDriveCarModel';
load_system(model);
simTime = 60; % 仿真时间(秒)
stepSize = 0.01; % 仿真步长(秒)
% 运行仿真
sim(model, simTime);
% 提取仿真结果
result = get_param(model, 'SimulationOutput');
time = result.time;
yawRate = result.signals.values(:,1);
sideSlipAngle = result.signals.values(:,2);
% 绘制仿真结果
figure;
subplot(2,1,1);
plot(time, yawRate);
title('横摆角速度');
xlabel('时间 (s)');
ylabel('角速度 (rad/s)');
subplot(2,1,2);
plot(time, sideSlipAngle);
title('质心侧偏角');
xlabel('时间 (s)');
ylabel('侧偏角 (rad)');
% CarSim 模型配置
% 载入 CarSim 模型
carSimModel = 'CarSimModel';
load_system(carSimModel);
% 运行 CarSim 仿真
sim(carSimModel, simTime);
% 提取 CarSim 仿真结果
carSimResult = get_param(carSimModel, 'SimulationOutput');
carTime = carSimResult.time;
carYawRate = carSimResult.signals.values(:,1);
carSideSlipAngle = carSimResult.signals.values(:,2);
% 绘制 CarSim 仿真结果
figure;
subplot(2,1,1);
plot(carTime, carYawRate);
title('CarSim 横摆角速度');
xlabel('时间 (s)');
ylabel('角速度 (rad/s)');
subplot(2,1,2);
plot(carTime, carSideSlipAngle);
title('CarSim 质心侧偏角');
xlabel('时间 (s)');
ylabel('侧偏角 (rad)');