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

Генерация кода для МИК32 (Логотип Engee)

В этом демонстрационном примере представлена разработка модели Engee для выдачи в два канала ЦАП микроконтроллера MIK32V2 векторов с координатами точек, составляющих логотип Engee.

Введение

Целевое устройство, используемое в этом демонстрационном примере - отладочная плата MIK32 NUKE V0.3 на базе микроконтроллера K1948ВК018 MIK32 Amur. В разрабатываемой в этом примере модели Engee осуществляется генерация на двух каналах ЦАП переменных сигналов X и Y, при осциллографировании функции Y(X) получить логотип Engee. Компиляция и загрузка кода в микроконтроллер произведена из VS Code с расширением PlatformIO.

Получение переменных сигналов

Мы уже представляли демонстрационный пример, рисующий логотип Engee.

In [ ]:
# Переходим в директорию примера
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");

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

In [ ]:
gr()
plot( s["y"].value, s["x"].value; aspect_ratio=:equal, seriestype = :scatter)
Out[0]:

Так как ЦАП микроконтроллера 12-разрядные, передаваемые на них переменные (координаты X и Y точек логотипа) должны иметь формат uint16_t и принадлежать диапазону значений $[0, 4095]$. Сделаем сдвиг и масштабирование точек:

In [ ]:
# Инвертируем значения
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,X1);
Y = convert.(Int,Y1);

# Прореживаем вектора для экономии памяти контроллера
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)
Out[0]:

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

Модель этого примера - mik32_engee_logo.engee. Она аналогична модели mik32_dac.engee, исключение лишь составляет то, как задаются входные переменные для ЦАП.

dac_engee_logo.png

Для задания переменных сигналов ЦАП полученные переменные координат точек логотипа New_X и New_Y вписаны в блоки Repeating Sequence Stair. Можно воспроизвести модель, и убедиться, что заданные точки в модели строятся аналогично предыдущему графику, но мы не будем повторяться. Перейдем к генерации кода.

Генерация кода и сборка проекта

In [ ]:
# @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).

mik32_engee_logo.gif

Как видно в анимации, каналы ЦАП воспроизводят переменные сигналы, строящие логотип Engee.

Заключение

Мы использовали ранние наработки - примеры с построением логотипа Engee в полярных координатах и работой с ЦАП микроконтроллера МИК 32, чтобы организовать выдачу в аналоговые выходы переменных со сложной функциональной зависимости.

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