Сообщество Engee

Система управления автоматической коробкой передач

Автор
avatar-akhmedakhmed
Соавторы
avatar-aldrzhukaldrzhuk
Notebook

Система управления автоматической коробкой передач

В данном примере демонстрируется работа
автоматической коробки переключения передач
при различных сценариях движения автомобиля.

Описание модели

image_2.png

Модель включает в себя подсистемы двигателя, алгоритма
переключения передач
, коробки переключения передач, модели автомобиля, а также блок Сценарии движения, формирующий управляющие сигналы.

Двигатель

image_3.png

Подсистема Двигатель содержит блок 2-D Lookup Table, который интерполирует крутящий момент
двигателя в зависимости от положения дросселя
и скорости вращения двигателя.

Входными сигналами подсистемы являются
Момент на турбинном колесе и степень
открытия дроссельной заслонки Газ, а выходным - Угловая скорость вала двигателя.

Для отображения скоростной характеристики двигателя
зададим следующие переменные:

thvec = [0, 20, 30, 40, 50, 60, 70, 80, 90, 100];                                               # Степень открытия дроссельной заслонки, %
nevec = [800, 1200, 1600, 2000, 2400, 2800, 3200, 3600, 4000, 4400, 4800];                      # Скорость вращения двигателя, об/мин
emap = [-40 -44 -49 -53 -57 -61 -65 -70 -74 -78	-82;                                            # Крутящий момент двигателя, фут-фунт 
        215	117	85	66	44	29	10	-2	-13	-22	-32;
        245	208	178	148	122	104	85	66	48	33	18;
        264	260	241	219	193	167	152	133	119	96	85;
        264	279	282	275	260	238	223	208	189	171	152;
        267	290	293	297	290	275	260	256	234	212	193;
        267	297	305	305	305	301	293	282	267	249	226;
        267	301	308	312	319	323	319	316	297	279	253;
        267	301	312	319	327	327	327	327	312	293	267;
        267	301	312	319	327	334	334	334	319	305	275];

emap_SI = emap * 0.7376;                                                                        # Крутящий момент двигателя, Н*м 

Теперь отобразим скоростную характеристику двигателя:

import Pkg
Pkg.add("Plots")        # Добавление пакета PLots
using Plots

plt = plot(title="Скоростная характеристика двигателя", xlabel="Угловая скорость, об/мин", ylabel="Крутящий момент, Н*м", legend=:outertopright)

for i in 1:length(thvec)
    plot!(nevec, emap_SI[i, :], label="Дроссель $(thvec[i])%", grid=true)
end

display(plt)

Коробка переключения передач

image_2.png

Подсистема Коробка переключения передач, в свою очередь, состоит
из двух других подсистем: Гидротрансформатора и Передаточного
числа коробки переключения передач
.

Входными сигналами подсистемы являются
Угловая скорость вала двигателя, Номер передачи
и Угловая скорость вала коробки передач, а выходными - Момент на турбинном колесе и Выходной момент.

  • Гидротрансформатор

image_2.png

Модель гидротрансформатора содержит блоки 1-D Lookup
Table

FactorK и TorqueRatio, которые интерполируют значения коэффициента момента
входного звена и коэффициента передачи крутящего момента соответственно в зависимости от кинематического
передаточного отношения Nin/Ne.

Для отображения характеристик гидротрансформатора
зададим следующие переменные:

kfactor = [137.4652089938063, 137.065019156851974, 135.864449645989055, 135.664354727511892,    # Коэффициент момента входного звена
           137.565256453044867, 140.366585311725089, 145.268910814415392, 152.87251771654735, 
           162.977311099643742, 164.277928069745201, 166.178829795278233, 167.979684061572641, 
           170.080680705582751, 172.781962105024377, 175.383196045227407, 179.585189333247655, 
           183.587087702790825, 189.89007763482121, 197.693779455430274, 215.902417036851546, 
           244.515990379084855, 301.7431370635518, 330.35671040578524];

speedratio = [0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.81, 0.82, 0.83,                      # Кинематическоге передаточное отношение
              0.84, 0.85, 0.86, 0.87, 0.88, 0.89, 0.9, 0.92, 0.94, 0.98, 1];

torqueratio = [2.232, 2.075, 1.975, 1.846, 1.72, 1.564, 1.409, 1.254, 1.096,                    # Коэффициент передачи крутящего момента
             1.08, 1.061, 1.043, 1.028, 1.012, 1.002, 1.002, 1.001, 0.998, 
             0.999, 1.001, 1.002, 0.97, 0.9];

Теперь отобразим характеристику гидротрансформатора:

using Plots.PlotMeasures

efficiency = speedratio .* torqueratio  # КПД

p1 = plot(speedratio, efficiency, 
          xlabel="Nin/Ne", 
          ylabel="КПД",
          linewidth=2, 
          color=:green,
          label="КПД",
          left_margin=10mm,
          top_margin=10mm)

p2 = plot(speedratio, torqueratio, 
          xlabel="Nin/Ne", 
          ylabel="Коэффициент трансформации",
          linewidth=2, 
          color=:blue,
          label="Коэффициент трансформации")

plot(p1, p2, layout=(2,1), bottom_margin=10mm, size=(500, 800), legend=:outertopright)
  • Передаточное число коробки переключения передач

image.png

Данная подсистема также содержит блок 1-D Lookup Table
Table, который определяет значение Nin/Nout в зависимости от номера передачи Gear.

Gear = [1, 2, 3, 4];
Ratio = [2.393, 1.450, 1.000, 0.677];

Представим эту зависимость в виде таблицы:

println("Gear   Ratio")
println("----------------")
for (g, r) in zip(Gear, Ratio)
    println(lpad(g, 4), "   ", lpad(r, 5))
end
Gear   Ratio
----------------
   1   2.393
   2    1.45
   3     1.0
   4   0.677

Алгоритм переключения передач

image_4.png

Подсистема Алгоритм переключения передач
содержит блоки Chart
Состояние текущей передачи и Переключение передач из библиотеки Конечных автоматов,
а также подсистему Расчет пороговой скорости движения.

Входными сигналами подсистемы являются степень открытия дроссельной заслонки
Газ и Скорость автомобиля, а выходным - Номер передачи.

  • Состояние текущей передачи

image.png

Данная диаграмма представлена четырьмя состояниями
в соответствии с количеством передач, переключение
между которыми происходит посредством сигнала gear_state_change.
При переходе в новое состояние значение выходной переменной Gear
обновляется.

  • Расчет пороговой скорости движения

image.png

Подсистема Расчет пороговой скорости движения
состоит из двух блоков 2-D Lookup Table, которые
определяют текущие верхние up_th и нижние down_th
значения пороговой скорости.

Зададим эти зависимости:

UP_TH_BP = [0,25,35,50,90,100];                 # Степень открытия дроссельной заслонки, %

UP_TABLE = [10  30	50	1000000;        # Значение верхней пороговой скорости, мили/ч
        10	30	50	1000000;
        15	30	50	1000000;
        23	41 	60      1000000;
        40	70	100	1000000;
        40	70	100	1000000];

UP_TABLE_kmph = UP_TABLE*1.609;                 # Значение верхней пороговой скорости, км/ч

DOWN_TH_BP = [0,5,40,50,90,100];                # Степень открытия дроссельной заслонки, %

DOWN_TABLE = [0	5	20	35;             # Значение нижней пороговой скорости, мили/ч
        0	5	20	35;
        0	5	25	40;
        0	5	30	50;
        0	30	50	80;
        0	30	50	80];

DOWN_TABLE_kmph = DOWN_TABLE*1.609;             # Значение нижней пороговой скорости, км/ч

Построим графики зависимости скорости автомобиля
от степени открытия дроссельной заслонки при всех возможных
переключениях передач:

plt = plot(xlabel="Степень открытия дроссельной заслонки, %", 
           ylabel="Скорость автомобиля, км/ч", 
           legend=:outertopright)

for i in 1:(length(Gear)-1)
    plot!(UP_TH_BP, UP_TABLE_kmph[:, i], 
          label="Переключение передачи $(Gear[i])-$(Gear[i+1])", 
          grid=true,
          markershape=:utriangle,
          markersize=5, 
          markerstrokewidth=1.5)
end

for i in 2:(length(Gear))
    plot!(DOWN_TH_BP, DOWN_TABLE_kmph[:, i], 
          label="Переключение передачи $(Gear[i])-$(Gear[i-1])", 
          grid=true,
          markershape=:dtriangle,
          markersize=5, 
          markerstrokewidth=1.5)
end

display(plt)
  • Переключение передач

image.png

Данная диаграмма содержит три состояния: исходное
состояние steady_state, повышение передачи upshifting и
понижение передачи downshifting. Переключение между состояниями
зависит от текущей скорости автомобиля VehicleSpeed и пороговых значений скорости
движения up_th и down_th: при превышении верхнего порогового значения выходной
сигнал gear_state_change принимает значение 1, соответствующее
повышению передачи, при снижении скорости ниже нижнего порогового значения
сигнал gear_state_change принимает значение -1, соответствующее
понижению передачи.

Автомобиль

image.png

Подсистема Автомобиль содержит модель
изменения Скорости автомобиля и Угловой скорости вала коробки передач. Входными сигналами
являются Выходной момент коробки переключения передач
и Тормоз.

Сценарии движения

Блок Сценарии движения является маскированным
блоком Engee Function.
Блок позволяет выбрать сценарии изменения управляющих сигналов
Газ и Тормоз из предложенных вариантов:

  • движение накатом,
  • постепенное ускорение,
  • резкое торможение,
  • обгон

image.png

Симуляция модели

Для выполнения симуляции модели зададим значения остальных переменных:

Iei = 0.021991;
Rfd = 3.23;
Iv = 12.094;
N20 = 0;
rload0 = 40;
rload2 = 0.02;
TWAIT = 2;
Rw = 1;

Далее запустим симуляцию модели:

if "autotrans" in [m.name for m in engee.get_all_models()]
    m = engee.open( "autotrans" )
else
    m = engee.load( "autotrans.engee" )
end
results = engee.run(m, verbose=true)
t = results["Газ"].time;                                        # Время, с
Throttle  = results["Газ"].value;                               # Степень открытия дроссельной заслонки, %
Ne  = results["Угловая скорость вала двигателя"].value;         # Угловая скорость вала двигателя, об/мин
VehicleSpeed  = results["Скорость автомобиля"].value*1.609;     # Скорость автомобиля, км/ч

Наконец, построим графики результата симуляции:

using Plots.PlotMeasures

p1 = plot(t, Ne, 
          xlabel="Время, с", 
          ylabel="Угловая скорость вала двигателя, об/мин",
          linewidth=2, 
          color=:green,
          label="Угловая скорость вала двигателя")

p2 = plot(t, Throttle, 
          xlabel="Время, с", 
          ylabel="Газ, %",
          linewidth=2, 
          color=:blue,
          label="Газ")

p3 = plot(t, VehicleSpeed, 
          xlabel="Время, с", 
          ylabel="Скорость автомобиля, км/ч",
          linewidth=2, 
          color=:red,
          label="Скорость автомобиля")

plot(p1, p2, p3, layout=(3,1), left_margin=10mm, size=(800, 1000), bottom_margin=10mm, legend=:outertopright)