Генерация кода для МИК32 (Логотип Engee)¶
В этом демонстрационном примере представлена разработка модели Engee для выдачи в два канала ЦАП микроконтроллера MIK32V2 векторов с координатами точек, составляющих логотип Engee.
Введение¶
Целевое устройство, используемое в этом демонстрационном примере - отладочная плата MIK32 NUKE V0.3 на базе микроконтроллера K1948ВК018 MIK32 Amur. В разрабатываемой в этом примере модели Engee осуществляется генерация на двух каналах ЦАП переменных сигналов X и Y, при осциллографировании функции Y(X) получить логотип Engee. Компиляция и загрузка кода в микроконтроллер произведена из VS Code с расширением PlatformIO.
Получение переменных сигналов¶
Мы уже представляли демонстрационный пример, рисующий логотип Engee.
# Переходим в директорию примера
cd("/user/start/examples/base_simulation/polar_plot_engee_logo/");
# Выполняем скрипт примера
engee.script.run("/user/start/examples/base_simulation/polar_plot_engee_logo/draw_polar_engee_logo.ngscript");
После выполнения скрипта примера в рабочей области должны появиться все необходимые переменные. Построим по точкам получившийся логотип.
gr()
plot( s["y"].value, s["x"].value; aspect_ratio=:equal, seriestype = :scatter)
Так как ЦАП микроконтроллера 12-разрядные, передаваемые на них переменные (координаты X и Y точек логотипа) должны иметь формат uint16_t
и принадлежать диапазону значений $[0, 4095]$. Сделаем сдвиг и масштабирование точек:
# Инвертируем значения
X = -s["x"].value
Y = -s["y"].value
# Масштабируем диапазоны значений
Y_max = maximum(Y)
Y_min = minimum(Y)
Y_rng = Y_max-Y_min
Y = (Y .- Y_min)./ Y_rng .* 4095
X_max = maximum(X)
X_min = minimum(X)
X_rng = X_max-X_min
X = (X .- X_min)./ X_rng .* 4095
# Преобразуем в целочисленный формат
X = convert.(Int,X.÷1);
Y = convert.(Int,Y.÷1);
# Прореживаем вектора для экономии памяти контроллера
New_X = Vector{Int}(undef, 250);
New_Y = Vector{Int}(undef, 250);
for i in 1:length(New_X)
New_X[i] = X[i*4]
New_Y[i] = Y[i*4]
end
# Построим логотип по прореженным, отмасштабированным значениям
plot( New_X, New_Y; aspect_ratio=:equal, seriestype = :scatter)
Описание модели¶
Модель этого примера - mik32_engee_logo.engee
. Она аналогична модели mik32_dac.engee
, исключение лишь составляет то, как задаются входные переменные для ЦАП.
Для задания переменных сигналов ЦАП полученные переменные координат точек логотипа New_X
и New_Y
вписаны в блоки Repeating Sequence Stair
. Можно воспроизвести модель, и убедиться, что заданные точки в модели строятся аналогично предыдущему графику, но мы не будем повторяться. Перейдем к генерации кода.
Генерация кода и сборка проекта¶
# @markdown **Генерация кода:**
# @markdown Папка для результатов генерации кода будет создана в папке скрипта:
папка = "code" # @param {type:"string"}
# @markdown Генерация кода для подсистемы:
включить = false # @param {type:"boolean"}
if(включить)
подсистема = "" # @param {type:"string"}
engee.generate_code( "$(@__DIR__)/"*имя_модели*".engee", "$(@__DIR__)/"*папка;
subsystem_name = подсистема)
else
engee.generate_code( "$(@__DIR__)/"*имя_модели*".engee", "$(@__DIR__)/"*папка)
end
Проект с моделью собирается в IDE VS Code+PlatformIO, процесс сборки аналогичен процессу из примера МИК32: Генератор пилообразных сигналов. Перейдём к выполнению кода на микроконтроллере.
Выполнение кода на MIK 32¶
После успешной сборки и компиляции проекта подключим к обоим каналам ЦАП микроконтроллера осциллограф и отразим осциллограмму в функции Y(X).
Как видно в анимации, каналы ЦАП воспроизводят переменные сигналы, строящие логотип Engee.
Заключение¶
Мы использовали ранние наработки - примеры с построением логотипа Engee в полярных координатах и работой с ЦАП микроконтроллера МИК 32, чтобы организовать выдачу в аналоговые выходы переменных со сложной функциональной зависимости.