Документация Engee
Notebook

Модель работы привода c двигателем постоянного тока

В данном материале рассмотрим модель привода на базе двигателя постоянного тока. Особенностью этого примера является использование базовых блоков и блоков физического моделирования.


Состав модели

Модель ee_dc_motor_ctl состоит из ряда подсистем.

  • Подсистема регулирования скорости Controller выполнена с использованием базовых блоков. Это позволяет легко задать алгоритм управления;
  • Объект управления - двигатель постоянного тока DC Motor. Он представлен в виде блоков физического моделирования библиотеки "Электричество";
  • Для задания скорости двигателя используется подсистема Driver;
  • Чтобы определить скорость вала двигателя нужен датчик, который реализован в подсистеме Sensor.

Подсистема регулятора скорости

Подсистема Controller реализует ПИ-регулятор с фильтром нижних частот. Схема регулятора показана ниже.

ee_dc_motor_ctl_1_1719570364109.png

Принцип действия контроллера прост. На вход регулятора поступает желаемое значение скорости и значение текущей скорость вращения вала двигателя. Однако, управление двигателем осуществляется через напряжение, поэтому все скорости следует преобразовать. На схеме это реализовано в виде умножения на коэффициент 0.00125. На следующем этапе расcчитывается рассогласование в блоке Add. После формируется скорректированное значение, которое будет подано на вход драйвера. Поскольку драйвер реализован в виде физически блоков, для формирования выходного напряжения используется источник напряжения Controlled Voltage Source.

Подсистема драйвера двигателя

Подсистема Driver представляет собой модель схемы драйвера в виде физических блоков. Блок Controlled PWM Voltage генерирует ШИМ-сигнал на основе напряжений на его портах ref+ и ref-. Блок H-Bridge представляет собой схему Н-моста, которая дает возможность менять полярность приложенного напряжения.

ee_dc_motor_ctl2_27_06_24.png

Напряжение сформированное на выходе драйвера идет на вход двигателя. Подробнее о параметрах блока можно почитать в документации в разделе DC Motor.

Подсистема датчика

Подсистема Sensor содержит базовые блоки и физический блок Ideal Rotational Motion Sensor. Данный блок позволяет определить частоту вращения вала двигателя.

ee_dc_motor_ctl_1_1719569515454.png

После считывания скорости необходимо перевести ее значение в вольты для дальнейшего регулирования в блоке Controller.

Получение даных системы

Запустим модель и посмотрим, как отрабатывает заданную скорость регулятор в данной модели.

In [ ]:
# Подключение вспомогательной функции запуска модели.
function run_model( name_model, path_to_folder )
    
    Path = path_to_folder * "/" * name_model * ".engee"
    
    if name_model in [m.name for m in engee.get_all_models()] # Проверка условия загрузки модели в ядро
        model = engee.open( name_model ) # Открыть модель
        model_output = engee.run( model, verbose=true ); # Запустить модель
    else
        model = engee.load( Path, force=true ) # Загрузить модель
        model_output = engee.run( model, verbose=true ); # Запустить модель
        engee.close( name_model, force=true ); # Закрыть модель
    end

    return model_output
end
Out[0]:
run_model (generic function with 1 method)
In [ ]:
run_model("ee_dc_motor_ctl",@__DIR__) # Запуск модели.
Building...
Progress 8%
Progress 33%
Progress 58%
Progress 83%
Progress 100%
Progress 100%
Out[0]:
Dict{String, DataFrames.DataFrame} with 2 entries:
  "Wref"      => 7×2 DataFrame…
  "SensedRPM" => 60001×2 DataFrame
In [ ]:
# Считывание из simout залогированных сигналов
Wref = simout["ee_dc_motor_ctl/Wref"];
Wref = collect(Wref);

SensedRPM = simout["ee_dc_motor_ctl/Sensor/SensedRPM"];
SensedRPM = collect(SensedRPM);

Построим графики заданной скорости и скорости, полученной с датчика.

In [ ]:
using Plots

plot(Wref.time, Wref.value, label = "Wref")
plot!(SensedRPM.time, SensedRPM.value, label = "SensedRPM")
Out[0]:

Вывод

По графикам можно сделать вывод, что скорость вала двигателя достигла заданной за 3 секунды. Время достижения желаемого результата можно уменьшать за счет изменения составляющих ПИ-регулятора.

Блоки, использованные в примере