Полунатурное моделирование на КПМ РИТМ (Регулятор тока ДПТ на STM32)¶
Один из сценариев тестирования в реальном времени, реализуемый на КПМ РИТМ в Engee, это полунатурное моделирование. С его помощью мы можем, например, моделировать реальный физический объект, обмениваясь сигналами с системой его управления, работающей на микроконтроллере. Этот пример показывает, как перенести регулятор на контроллер и провести полноценное полунатурное моделирование. Объектом управления здесь является контур тока двигателя постоянного тока на КПМ РИТМ, а системой управления - ПИ-регулятор тока на микроконтроллере STM32F446RE.
Введение¶
Полный справочный список инструментария и подходов, используемых в этом примере:
Среда модельно-ориентированного проектирования Engee
Приложение РИТМ.Управление машинами
Интеграция внешнего оборудования в Engee
Маски кодовых ячеек скрипта
Комплекс полунатурного моделирования РИТМ (КПМ РИТМ)
Сценарий тестирования в реальном времени - полунатурное моделирование (HIL)
Модуль общего назначения RITMeX GP-LC-45: 2 канала ЦАП, 1 канал АЦП с терминалом GP-LC-45-Terminal v1.0
Автоматическая генерация С-кода из модели Engee
Отладочная плата Nucleo с микроконтроллером STM32F446RE
- 2 канала АЦП, 1 канал ШИМ
IDE VS Code
-
Пакет поддержки STM32F4
Фрэймворк stm32duino
-
Hardware-In-the-Loop (HIL)¶
Технология полунатурного моделирования, или Hardware-In-the-Loop (HIL), основана на замене отдельных подсистем на их модели, работающие в реальном времени. Эти модели обмениваются данными с другими подсистемами по тем же интерфейсам, по которым общаются реальные подсистемы. Контроллеры или агрегаты работают в том же режиме, что и обычно, а перед инженером открываются широкие возможности для разработки и испытаний [1].
В этом примере мы рассмотрим полунатурное моделирование системы автоматического регулирования тока (контур тока) двигателя постоянного тока независимого возбуждения. Модель физического объекта будет моделироваться на КПМ РИТМ в реальном времени. Регулятор тока из модели сгенерируем в код и загрузим на микроконтроллер STM32F446RE. Соединив аналоговые входы и выходы микроконтроллера и комплекса полунатурного моделирования проведём полунатурное моделирование в реальном времени.
Конечная задача такого сценария - перенести часть модели (регулятор) на реальный физический объект (микроконтроллер), и с применением HIL добиться идентичности результатов при имитационном и полунатурном моделированиях.
Модель примера¶
Модель текущего примера является функциональным продолжением модели, рассмотренной в примере автоматизации тестирования в реальном времени. Отличия от исходной модели следующие:
- В обратных вызовах опорное напряжение системы управления принимает значение $U_{ref} = 1\ В$ (вместо $10\ В$)
- Источник сигналов заданного тока - блок генератора прямоугольных импульсов (вместо блока ступенчатой функции) с периодом $2\ с$, процентом заполнения $D = 50\%$ и амплитудой $0,5\ В$,
- Параллельно регулятору тока добавлена цепочка с интерфейсными блоками GP-LC-4x DAC и ADC для приёма-передачи данных по аналоговым входам и выходам с микроконтроллером.
- Добавлены блоки для смещения, ограничения и извлечения сигнала при работе с интерфейсными блоками.
- Перед моделированием источник сигнала регулирования для модели объекта управления может быть переключен при помощи блока ручного переключателя.
Модуль GP-LC-4x сконфигурирован следующим образом:
DAC: модуль: $1$, каналов: $2$, шаг расчёта: $-1$;
ADC: модуль: $1$, каналов: $1$, уровень напряжения: $\pm\ 5 В$, режим: с общей землёй, шаг расчёта: $0,001\ с$.
Уровни смещения следует откалибровать до начала полунатурных испытаний. Уровни насыщения на входе блока ЦАП устанавливаются по максимальным уровням входного напряжения АЦП микроконтроллера: $0 \div 3,3\ В$.
Подключение к КПМ РИТМ¶
Для минимизации ручных операций при полунатурном моделировании воспользуемся пакетом поддержки внешнего оборудования в Engee.
Установим этот пакет.
engee.package.install("Engee-Device-Manager");
С настройкой подключения в клиентской программе и работой с методами пакета поддержки можно ознакомиться в примере автоматизации тестирования в реальном времени.
На этом этапе также необходимо подключить РИТМ, установить соединение с ним из Engee, и при необходимости обновить его операционную систему и пакет поддержки. Как это сделать, подробно и пошагово представлено в примере быстрого старта с КПМ РИТМ.
После подготовки установим соединение с КПМ РИТМ:
# @markdown ## Подключение КПМ РИТМ
IP = "192.168.56.3" # @param {type:"string",placeholder:"192.168.56.3"}
порт = "8000" # @param {type:"string",placeholder:"8000"}
using Main.EngeeDeviceManager.Targets
using Main.EngeeDeviceManager.Targets.RITM_API
ritm = Targets.RITM.Ritm()
Targets.RITM_API.setUrl(ritm, "http://$IP:$порт/")
println("КПМ РИТМ подключен: ", RITM_API.isConnected(ritm))
Теперь перейдём непосредственно к моделированию. Для начала повторим опыт имитационного моделирования в реальном времени из исходного примера.
Моделирование в реальном времени на КПМ РИТМ¶
Запустим модель примера на КПМ РИТМ:
# @markdown ## Запуск модели в режиме Standalone
имя_модели = "hil_dcm" # @param {type:"string",placeholder:"hil_dcm"}
path = joinpath(@__DIR__, "$имя_модели.engee")
model = engee.load(path)
resp = Targets.upload_model(ritm, model)
println("\n", "Загрузка модели: ", resp)
resp = Targets.generate_executable_code(ritm, model, false)
println("\n", "Генерация кода: ", resp)
resp = Targets.compile_model(ritm, model)
println("\n", "Компиляция: ", resp)
Targets.start_model(ritm, model)
engee.close(model; force=true)
Имитационное моделирование в реальном времени прошло успешно, на мониторе КПМ РИТМ наблюдаются заданный сигнал и графики тока якоря и эдс преобразователя. Получим скриншот монитора:
RITM_API.getScreenshot(ritm, "model.png")
Регулятор настроен на модульный оптимум, на графике тока наблюдаются соответствующие перерегулирование и запаздывание переходного процесса. Теперь перейдём к полунатурному моделированию.
Подготовка к HIL¶
В первую очередь, перенесём часть модели - регулятор тока в физику: сгенерируем код из подсистемы ПИ-регулятора и загрузим его на микроконтроллер.
Генерация кода¶
# Генерируем код из подсистемы:
engee.generate_code(joinpath(@__DIR__, "$имя_модели.engee"), joinpath(@__DIR__, "cg_res"); subsystem_name="PI_reg")
# Перенесём сгенерированные файлы в папки проекта PlatformIO
for file in readdir("cg_res")
if file == "main.c" # шаблонный main.c не переносим, так как уже есть готовый main.cpp
nothing
elseif last(file)=='h'
mv(joinpath(@__DIR__, "cg_res", file), joinpath(@__DIR__, "PlatformIO_proj/include", file); force=true)
else
mv(joinpath(@__DIR__, "cg_res", file), joinpath(@__DIR__, "PlatformIO_proj/src", file); force=true)
end
end
# Удалим лишнее
rm(joinpath(@__DIR__, "cg_res"); recursive=true)
Полученные в папке PlatformIO_proj
файлы необходимы для сборки проекта в VS Code PlatformIO. Скачаем их и добавим в проект во внешней IDE.
Проект примера в VS Code PlatformIO¶
Добавленные файлы в проекте PlatformIO выглядят следующим образом:
Перед сборкой проекта нужно убедиться, что необходимые для PlatformIO пакеты поддержки установлены, после чего можно переходить к сборке проекта:
Перенос кода на MCU¶
Запустим сборку проекта:
Сборка проекта успешна, можно переходить к загрузке кода на микроконтроллер. Подключим контроллер и загрузим в него скомпилированный код:
После загрузки сгенерированного кода на микроконтроллер установим подключение аналоговых входов/выходов КПМ РИТМ и NUCLEO-F446RE.
Подключение к MCU¶
Перед подключением напряжение с устройств должно быть снято, кроме того, следует избегать воздействия статического электричества на микросхемы. Установим подключения, как показано на схеме.
Соединим общие контакты аналоговых выходов и аналоговых входов терминала, общие контакты макетной платы и микроконтроллера.
Аналоговые входы терминала DAC1
, DAC2
соединены с аналоговыми входами микроконтроллера A0
, A1
соответственно.
Аналоговый выход микроконтроллера D9
соединён с аналоговым входом терминала X01
через каскадный RC-фильтр нижних частот. Частота среза $f_с = 7\ кГц$, параметры цепи: $R_ф = 330\ Ом$, $С_ф = 68\ нФ$.
Часть моделируемой системы перенесена на микроконтроллер STM, после всех подключений подачи питания на схему можно перейти к полунатурному моделированию.
Полунатурное моделирование контура тока ДПТ¶
Прежде всего, отредактируем нашу модель: переключим ручной переключатель, так объект управления в модели будет получать сигналы регулирования от микроконтроллера:
# Загрузка модели
имя_модели = "hil_dcm"
path = joinpath(@__DIR__, "$имя_модели.engee")
model = engee.load(path)
# Изменение положения переключателя
engee.set_param!("$имя_модели/Ручной переключатель", "PortValue" => true)
# Сохранение изменений
engee.save(model, path; force = true)
# Закрытие модели
engee.close(model)
Теперь загрузим изменённую модель на РИТМ и выполним её:
# @markdown ## Запуск модели в режиме Standalone
имя_модели = "hil_dcm" # @param {type:"string",placeholder:"hil_dcm"}
model = engee.load(joinpath(@__DIR__, "$имя_модели.engee"))
resp = Targets.upload_model(ritm, model)
println("\n", "Загрузка модели: ", resp)
resp = Targets.generate_executable_code(ritm, model, false)
println("\n", "Генерация кода: ", resp)
resp = Targets.compile_model(ritm, model)
println("\n", "Компиляция: ", resp)
Targets.start_model(ritm, model)
engee.close(model; force=true)
Полунатурное моделирование прошло успешно, на мониторе КПМ РИТМ также наблюдаются заданный сигнал и графики тока якоря и эдс преобразователя. Получим скриншот монитора:
RITM_API.getScreenshot(ritm, "model.png")
Как видно по графику тока, перерегулирования в этом режиме моделирования больше, устоявшееся значение меньше. Динамические и статические ошибки САР говорят о неэффективной настройке регулятора, что является результатом отсутствия учёта в модели задержек и искажений, вносимых электронной схемой передачи аналоговых сигналов между MCU и РИТМом. Для дальнейшего развития проекта необходимо учесть эти элементы в модели Engee.
Заключение¶
В этом примере мы рассмотрели процесс переноса части модели - регулятора системы автоматического регулирования на цифровой микроконтроллер с помощью генерации кода из модели Engee, пошагово разобрали процесс подготовки и проведения эксперимента полунатурного моделирования, а также использовали автоматизацию работы с внешним оборудованием для эффективного моделирования в Engee на РИТМ.