
四轮独立驱动电动汽车转矩分配控制:基于CarSim与Simulink的离散LQR三自由度车
辆模型控制方法及其控制器详细文档
四轮独立驱动电动车就像给车轮装上了独立开关,每个电机都能单独控制扭矩输出。这种结构在弯
道里能玩出很多花样——通过调整四个轮子的扭矩分配,车辆横摆响应能像猎豹扑食一样精准。今天咱们就
聊聊怎么用Matlab和CarSim联手调教这匹电动野兽。
先得搞明白车辆到底咋动的。三自由度模型把车辆运动拆成了三个方向:踩油门往前冲的纵向运动
、左右晃的横向运动、还有原地打转的横摆运动。用状态方程表示就是:
```matlab
% 三自由度状态方程参数
m = 1500; % 整车质量(kg)
Iz = 2500; % 横摆转动惯量(kg·m)
lf = 1.2; % 前轴到质心距离(m)
lr = 1.5; % 后轴到质心距离(m)
```
这里有个坑要注意:CarSim输出的数据单位可能和咱们模型不匹配。有次仿真车辆突然原地托马斯
回旋,查了半天发现是把英制单位的横摆角速度当国际单位用了...
接下来是控制器的重头戏——离散LQR设计。传统LQR在连续域玩积分,但实际ECU都是离散系统。咱们
用零阶保持器做离散化:
```matlab
% 连续系统离散化
sysc = ss(A, B, C, D);
Ts = 0.01; % 10ms控制周期
sysd = c2d(sysc, Ts, 'zoh');
% LQR权重矩阵
Q = diag([10, 5, 2]); % 状态量权重
R = eye(4)*0.1; % 控制量权重
[Kd, S, e] = dlqr(sysd.A, sysd.B, Q, R);
```
这段代码里的门道在于Q矩阵的调节——横摆角速度权重大说明我们更看重车辆的转向响应。但别把
R矩阵设太小,否则控制器会疯狂输出扭矩导致电机过热,别问我是怎么知道的...
联合仿真时CarSim和Simulink的通信设置是另一个容易翻车的地方。需要确保CarSim的输出端口
和Simulink的S-Function对接正确: