汽车平顺性仿真
简介
汽车平顺性是指汽车以正常车速行驶时能保证乘员不致因车身振动而引起不舒适和疲乏感觉以及保持运载货物完整无损的性能。由于汽车平顺性主要是根据乘员的舒适程度来评价,所以它有时又称为乘坐舒适性。要获得良好的汽车行驶平顺性,需要对悬架系统进行合理设计和匹配。根据汽车整车性能对悬架系统的要求,通常用车身垂直加速度、悬架动挠度和车轮动载荷来评价悬架系统的优劣。
使用说明
一、实验目的
1.建立1/2汽车平顺性数学模型
2.绘制时域路面不平度曲线
3.绘制汽车输出变量随时间变化的曲线
4.利用MWORKS对汽车平顺性仿真
二、仿真数据
汽车平顺性仿真所需参数见表6-9-1。
| 悬挂质量/kg | 转动惯量//kg·m² | 前非悬挂质量/kg | 后非悬挂质量//kg |
|---|---|---|---|
| 690 | 1222 | 40.5 | 45.4 |
| 前悬架刚度/(kN/m) | 后悬架刚度/(kN/m) | 前悬架阻尼系数/(kN·s/m) | 后悬架阻尼系数/(kN·s/m) |
| 17 | 22 | 1.5 | 1.5 |
| 前轮胎刚度/(kN/m) | 后轮胎刚度/(kN/m) | 车身质心至前轴距离/m | 车身质心至后轴距离/m |
| 192 | 192 | 1.25 | 1.51 |
三、实验步骤
1.建立1/2汽车平顺性数学模型
原理参考教材第六章实例9
2.绘制时域路面不平度曲线
编写绘制时域路面不平度曲线的MWORKS程序如下。
n00 = 0.011 # 定义n00的值
u = 16.67 # 定义u的值
f0 = 2 * pi * n00 * u # 计算f0的值
Sq = 0.000256 # 定义Sq的值
white_noise = 1 .- 2 .* rand(1, 1000) # 生成一个1000个元素的随机数数组white_noise
q = Array{Float64}(undef, 1001) # 创建一个包含1001个未定义元素的数组q
for i = 1:1000 # 对于i从1到1000的循环
q[1] = 0 # 将q的第一个元素设为0
q[i+1] = 0.01 * (-2 * pi * f0 * q[i] + 2 * pi * sqrt(Sq * u) * white_noise[i]) + q[i] # 计算q的下一个元素的值
dq = 100 * diff(q) # 计算dq,使用diff函数计算q的差分并乘以100
end
t = 0:0.01:10 # 创建时间数组t,从0到10,步长为0.01
plot(t, q) # 绘制t与q的图形
xlabel("时间/s")
ylabel("路面位移/m")
在MWORKS编辑器中输入这些程序,点击运行按钮,就会得到时域路面不平度曲线图,如图6-9-2所示。改变速度,可以得到不同速度下的路面时域曲线。

3.绘制汽车输出变量随时间变化的曲线
根据车身垂直加速度数学模型和路面输入模型,编写绘制汽车输出变量随时间变化的曲线MWORKS程序如下。
ms = 690 # 定义ms的值
Isy = 1222 # 定义Isy的值
mwf = 40.5 # 定义mwf的值
mwr = 45.4 # 定义mwr的值
Ksf = 17000 # 定义Ksf的值
Ksr = 22000 # 定义Ksr的值
Csf = 1500 # 定义Csf的值
Csr = 1500 # 定义Csr的值
Kwf = 192000 # 定义Kwf的值
Kwr = 192000 # 定义Kwr的值
a = 1.25 # 定义a的值
b = 1.51 # 定义b的值
L = a + b # 计算L的值
n00 = 0.011 # 定义n00的值
u = 16.67 # 定义u的值
f0 = 2 * pi * n00 * u # 计算f0的值
Sq = 0.000256 # 定义Sq的值
A = [0 0 0 0 0 0 1 0 0 0
0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 0 0 0 1
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
-1*(Ksf+Ksr)/ms (a*Ksf-b*Ksr)/ms Ksf/ms Ksr/ms 0 0 -1*(Csf+Csr)/ms (a*Csf-b*Csr)/ms Csf/ms Csr/ms
(a*Ksf-b*Ksr)/Isy -1*(a*a*Ksf+b*b*Ksr)/Isy -1*a*Ksf/Isy b*Ksr/Isy 0 0 (a*Csf-b*Csr)/Isy -1*(a*a*Csf+b*b*Csr)/Isy -1*a*Csf/Isy b*Csr/Isy
Ksf/mwf -1*a*Ksf/mwf -1*(Ksf+Kwf) 0 Kwf/mwf 0 Csf/mwf -1*a*Csf/mwf -1*Csf/mwf 0
Ksr/mwr b*Ksr/mwr 0 -1*(Ksr+Kwr)/mwr 0 Kwr/mwr Csr/mwr b*Csr/mwr 0 -1*(Csr/mwr)];
B = [0 0; 0 0; 1.0 0; 0 0; 0 0; 0 0; 0 0; 0 1; 0 0; 0 0];
C = [-1*(Ksf+Ksr)/ms (a*Ksf-b*Ksr)/ms Ksf/ms Ksr/ms 0 0 -1*(Csf+Csr)/ms (a*Csf-b*Csr)/ms Csf/ms Csr/ms
(a*Ksf-b*Ksr)/Isy -1*(a*a*Ksf+b*b*Ksr)/Isy -1*a*Ksf/Isy b*Ksr/Isy 0 0 (a*Csf-b*Csr)/Isy -1*(a*a*Csf+b*b*Csr)/Isy -1*a*Csf/Isy b*Csr/Isy
1 -1*a -1 0 0 0 0 0 0 0
1 b -1 0 0 0 0 0 0 0
0 0 -1*Kwf 0 Kwf 0 0 0 0 0
0 0 0 -1*Kwr 0 Kwr 0 0 0 0];
white_noise = 1 .- 2 .* 1 .* rand(1, 1000) # 生成一个包含1000个随机数的数组
q = Array{Float64}(undef, 1001) # 创建一个大小为1001的空数组q
dq = Array{Float64}(undef, 2, 1000) # 创建一个大小为2x1000的空数组dq
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]
dq[1, :] = 100 .* diff(q)
end
dq[2, :] = dq[1, :] # 将dq的第二行设置为dq的第一行
x = Array{Float64}(undef, 10, 1001) # 创建一个大小为10x1001的空数组x
y = Array{Float64}(undef, 6, 1000) # 创建一个大小为6x1000的空数组y
for i = 1:1000
x[:, 1] = [0; 0; 0; 0; 0; 0; 0; 0; 0; 0] # 将x的第一列设置为全零向量
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)
t1 = 0.01:0.01:10
plot(t1, y[1, :])
xlabel("时间/s")
ylabel("车身垂直加速度/(m/s²)")
figure(2)
t1 = 0.01:0.01:10
plot(t1, y[2, :])
xlabel("时间/s")
ylabel("车身俯仰角加速度/(rad/s²)")
figure(3)
t1 = 0.01:0.01:10
plot(t1, y[3, :])
xlabel("时间/s")
ylabel("前悬架动挠度/m")
figure(4)
t1 = 0.01:0.01:10
plot(t1, y[4, :])
xlabel("时间/s")
ylabel("后悬架动挠度/m")
figure(5)
t1 = 0.01:0.01:10
plot(t1, y[5, :])
xlabel("时间/s")
ylabel("前轮胎动载荷/N")
figure(6)
t1 = 0.01:0.01:10
plot(t1, y[6, :])
xlabel("时间/s")
ylabel("后轮胎动载荷/N")
在MWORKS编辑器中输入这些程序,点击运行按钮,就会得到车身垂直加速度随时间变化曲线,如图6-9-3所示;车身俯仰角加速度随时间变化曲线如图6-9-4所示;前悬架动挠度随时间变化曲线如图6-9-5所示;后悬架动挠度随时间变化曲线如图6-9-6所示;前轮胎动载荷随时间变化曲线如图6-9-7所示;后轮胎动载荷随时间变化曲线如图6-9-8所示。






登录账号即可下载资源、参与讨论。