防抱死制动系统建模
本例将演示防抱死制动系统(ABS)的建模。该模型模拟车辆在强制动条件下的动态行为,并代表一个车轮,可多次复制以创建多轮车辆模型。
模型概览:

车轮旋转的初始角速度与踩下制动踏板前的车速一致。我们使用两个速度来计算滑移,滑移在方程块中定义。车速用角速度表示。
方程组
在哪里?
-
-
-
-
从这些表达式中我们可以看出,当车轮速度和车辆速度相等时,滑移值为零;当车轮被锁定时,滑移值为 1。目标滑移值为 0.2,这意味着在相同车速下,车轮转速应为非制动模式转速的 0.8 倍。这将最大限度地提高轮胎抓地力,并在现有摩擦力下最大限度地减少制动距离。
轮胎与路面之间的摩擦系数μ是一个经验滑移函数,称为μ滑移曲线。我们使用 Simulink 查找表将 MATLAB 变量传递到流程图中,从而创建了μ-滑移曲线。该模型将摩擦系数 mu 乘以车轮重量,得出作用在轮胎圆周上的摩擦力。摩擦力除以车辆质量得到减速度,模型对减速度进行积分得到速度。
在该模型中,我们使用了一个理想的防抱死制动控制器,该控制器根据实际滑移和期望滑移之间的差值进行控制。我们将期望滑移量设定为缪滑移曲线达到最大值时的滑移量,也就是最小制动距离的最佳值(见下文注释)。
注:在实际车辆中,无法直接测量滑移量,因此这种控制算法并不实用。在本示例中,它用于说明这种仿真模型的概念构造。这种模拟的真正工程价值在于,在解决具体实施问题之前,展示控制概念的潜力。
启用 ABS 运行模型
连接后台 - 图形显示方法:
using Plots
gr()
决定 ABS 是否开启的初始条件:
ctrl = 1.0; # АБС включена
加载并启动模型:
try
engee.close("absbrake", force=true) # закрытие модели
catch err # в случае, если нет модели, которую нужно закрыть и engee.close() не выполняется, то будет выполнена её загрузка после catch
m = engee.load("/user/start/examples/controls/absbrake/absbrake.engee") # загрузка модели
end;
try
engee.run(m, verbose=true) # запуск модели
catch err # в случае, если модель не загружена и engee.run() не выполняется, то будут выполнены две нижние строки после catch
m = engee.load("/user/start/examples/controls/absbrake/absbrake.engee") # загрузка модели
engee.run(m, verbose=true) # запуск модели
end
从 simout 变量中分配描述制动距离和滑动的数据:
sleep(5)
data1 = collect(simout)
将模型中的数据定义为相关变量:
slp1 = collect(data1[2])
stop_distance1 = collect(data1[1])
可视化时间滑移的幅度:
plot(slp1[:,1],slp1[:,2])
关闭 ABS 运行模型
ctrl = 0.0;
更改模型参数:
try
engee.close("absbrake", force=true) # закрытие модели
catch err # в случае, если нет модели, которую нужно закрыть и engee.close() не выполняется, то будет выполнена её загрузка после catch
m = engee.load("/user/start/examples/controls/absbrake/absbrake.engee") # загрузка модели
end;
try
engee.run(m, verbose=true) # запуск модели
catch err # в случае, если модель не загружена и engee.run() не выполняется, то будут выполнены две нижние строки после catch
m = engee.load("/user/start/examples/controls/absbrake/absbrake.engee") # загрузка модели
engee.run(m, verbose=true) # запуск модели
end
从simout变量中提取描述制动距离和滑动的数据:
sleep(5)
data2 = collect(simout)
将模型中的数据定义为相关变量:
slp2 = collect(data2[2])
stop_distance2 = collect(data2[1])
可视化时间滑移的幅度:
plot(slp2[:,1],slp2[:,2])
有防抱死制动系统和无防抱死制动系统制动距离计算结果的比较:
plotlyjs()
plot(stop_distance1[:,1], stop_distance1[:,2]./3.28084, label="Торможение с АБС", xlabel="Время, с", ylabel="Тормозной путь, м")
plot!(stop_distance2[:,1], stop_distance2[:,2]./3.28084, label="Торможение без АБС")
结论
本例演示了防抱死制动系统的模拟。有防抱死制动系统和无防抱死制动系统的制动距离比较结果表明,有防抱死制动系统的制动效果最好。