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

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

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

После считывания скорости необходимо перевести ее значение в вольты для дальнейшего регулирования в блоке Controller.
Получение даных системы
Запустим модель и посмотрим, как отрабатывает заданную скорость регулятор в данной модели.
# Подключение вспомогательной функции запуска модели.
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
run_model("ee_dc_motor_ctl",@__DIR__) # Запуск модели.
# Считывание из simout залогированных сигналов
Wref = simout["ee_dc_motor_ctl/Wref"];
Wref = collect(Wref);
SensedRPM = simout["ee_dc_motor_ctl/Sensor/SensedRPM"];
SensedRPM = collect(SensedRPM);
Построим графики заданной скорости и скорости, полученной с датчика.
using Plots
plot(Wref.time, Wref.value, label = "Wref")
plot!(SensedRPM.time, SensedRPM.value, label = "SensedRPM")
Вывод
По графикам можно сделать вывод, что скорость вала двигателя достигла заданной за 3 секунды. Время достижения желаемого результата можно уменьшать за счет изменения составляющих ПИ-регулятора.