汽车全主动悬架最优控制仿真

简介

汽车全主动悬架是一种具有做功能力的悬架,在悬架系统中附加一个可控制作用力的力发生器,因此需要一套提供能量的设备。全主动悬架可根据汽车载荷、路面状况、行驶速度、驱动、制动、转向等行驶条件的变化,自动调节悬架的刚度、阻尼和车身高度等控制参数,同时满足汽车行驶平顺性和操纵稳定性的要求。

使用说明

一、实验目的

1.建立汽车全主动悬架数学模型

2.建立汽车全主动悬架最优控制数学模型

3.建立汽车全主动悬架评价指标传递函数

4.求汽车全主动悬架最优控制参数

5.绘制汽车全主动悬架输出变量的时域特性曲线

6.绘制汽车全主动悬架输出变量的频域特性曲线

二、仿真数据

汽车全主动悬架最优控制仿真所需参数见表6-12-1。

表6-12-1 汽车全主动悬架最优控制仿真所需参数
悬挂质量/kg 非悬挂质量/kg 轮胎刚度/(N/m) 下截止频率/Hz
280 50 180000 0.07
路面不平度系数 车速/(km/h) 仿真时间/s
5×10⁻⁶ 60 10

三、实验步骤

1.建立汽车全主动悬架数学模型

原理参考教材第六章实例12

2.建立汽车全主动悬架最优控制数学模型

原理参考教材第六章实例12

3.建立汽车全主动悬架评价指标传递函数

原理参考教材第六章实例12

4.求汽车全主动悬架最优控制参数

根据汽车全主动悬架最优控制数学模型,编写求汽车全主动悬架最优控制参数的MWORKS程序如下。

# 系统参数
ms = 280
mw = 50
kw = 180000
q1 = 300000000
q2 = 4000000
q3 = 200
q4 = 1
# 系统状态空间矩阵
A = [0 1 0 -1
0 0 0 0
0 0 0 -1
0 0 kw/mw 0]
# 输入矩阵
B = [0 1.0 / ms 0 -1 / mw]'
# 输出矩阵
E = [0 0 1 0]'
# 权重矩阵
Qd = [q2 0 0 0
0 0 0 0
0 0 q3*kw^2 0
0 0 0 0]
# 控制权重
Rd = q4 + q1 / ms^2
# 平衡状态权重
Nd = [0 0 0 0]'
# 计算最优增益矩阵
K, S, E = lqr(A, B, Qd, Rd, Nd)
println("K = ", K)

在MWORKS编辑器中输入这些程序,点击运行按钮,就会得到汽车全主动悬架最优控制参数为

k1 = 33.59,k2 = 146.74,k3 = 5637.28,k4 = - 888.41

5.绘制汽车全主动悬架输出变量的时域特性曲线

根据汽车全主动悬架特性数学模型,编写绘制车身垂直加速度、悬架动挠度和轮胎动载荷时域特性曲线的MWORKS程序如下。

ms = 280
mw = 50
Kw = 180000
k1 = 32.33
k2 = 136.38
k3 = 4933.68
k4 = -680.75
u = 16.67
f0 = 0.07
Sq = 0.000005
# 定义状态空间矩阵 A
A = [0 1 0 -1
-k1/ms -k2/ms -k3/ms -k4/ms
0 0 0 -1
k1/mw k2/mw Kw/mw+k3/mw k4/mw]
# 定义输入矩阵 B
B = [0 0 1 0]'
# 定义输出矩阵 C
C = [-k1/ms -k2/ms -k3/ms -k4/ms
1 0 0 0
0 0 Kw 0]
# 生成随机白噪声
white_noise = 1 .- 2 * 1 * rand(1, 1000)
# 初始化位移和速度数组
q = Array{Float64}(undef, 1001)
dq = Array{Float64}(undef, 1000)
# 模拟系统响应
for i = 1:1000
    q[1] = 0
    q[i+1] = 0.01 * (-2 * pi * f0 * q[i] + 2 * pi * (sqrt(Sq * u)) * white_noise[i]) + q[i]
    global dq = 100 .* diff(q)
end

x = Array{Float64}(undef, 4, 1001)
y = Array{Float64}(undef, 3, 1000)
# 模拟系统响应
for i = 1:1000
    x[:, 1] = [0; 0; 0; 0]
    # 创建连续时间状态空间模型
    sysc = ss(A, B, zeros(size(A)), zeros(size(B)))
    # 将连续时间状态空间模型转换为离散时间状态空间模型
    sysd = c2d(sysc, 0.01)
    # 获取离散时间状态空间模型的矩阵
    G = sysd.A
    H = sysd.B
    # 计算下一个时间步的状态
    x[:, i+1] = G * x[:, i] + H * dq[i]
    # 计算输出
    y[:, i] = C * x[:, i]
end

# 绘制位移随时间的变化曲线
figure(1)
t = 0:0.01:10
plot(t, q)
xlabel("时间/s")
ylabel("路面位移/m")
# 绘制输出y[1,:]随时间的变化曲线
figure(2)
t1 = 0.01:0.01:10
plot(t1, y[1, :])
xlabel("时间/s")
ylabel("车身垂直加速度/(m/s²)")
# 绘制输出y[2,:]随时间的变化曲线
figure(3)
t1 = 0.01:0.01:10
plot(t1, y[2, :])
xlabel("时间/s")
ylabel("悬架动挠度/m")
# 绘制输出y[3,:]随时间的变化曲线
figure(4)
t1 = 0.01:0.01:10
plot(t1, y[3, :])
xlabel("时间/s")
ylabel("轮胎动载荷/N")

在MWORKS编辑器中输入这些程序,点击运行按钮,就会得到路面位移时域特性曲线(图6-12-2)、车身垂直加速度时域特性曲线(图6-12-3)、悬架动挠度时域特性曲线(图6-12-4)、轮胎动载荷时域特性曲线(图6-12-5)。由于路面位移是随机产生的,所以每次运行得到的图形都会不同。

image.png

图6-12-2 路面位移时域特性曲线

image.png

图6-12-3 车身垂直加速度时域特性曲线

image.png

图6-12-4 悬架动挠度时域特性曲线

image.png

图6-12-5 轮胎动载荷时域特性曲线