Engee 文档
Notebook

MIC32代码生成(Engee标志)

该演示展示了Engee模型的开发,用于向MIK32V2微控制器的两个DAC通道发出包含构成Engee标志的点坐标的矢量。

导言

本演示中使用的目标设备是MIK32NUKE v0调试板。3基于微控制器*[K1948VK018MIK32Amur](https://mikron.ru/products/mikrokontrollery/mk32-amur /)。 在本例开发的Engee模型中,在两个DAC通道上产生可变信号X和Y,并使用Y(X)函数获得Engee标志。 代码通过PlatformIO扩展从VS Code*编译并上传到微控制器。

接收可变信号

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]:

由于微控制器的Dac是12位的,因此传输给它们的变量(标志点的X和Y坐标)必须具有格式 uint16_t 并属于一个数值范围 . 让我们转移和缩放点:

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的输入变量是如何设置的。

dac_engee_logo.png

置DAC的变量信号,得到的标志点坐标的变量为 New_XNew_Y 它们是用块写的 Repeating Sequence Stair. 我们可以重现模型,并确保模型中指定的点与之前的图形绘制类似,但我们不会重复自己。 让我们继续代码生成。

代码生成和项目汇编

In [ ]:
# @markdown **Генерация кода:**  
# @markdown Папка для результатов генерации кода будет создана в папке скрипта:
cd(@__DIR__)
папка = "code" # @param {type:"string"}
имя_модели = "mik32_engee_logo" # @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,组装过程类似于示例中的过程*[MIC32:锯齿信号发生器](https://engee.com/community/ru/catalogs/projects/mik32-generator-piloobraznykh-signalov )*。 让我们继续在微控制器上执行代码。

在MIK32上执行代码

在成功组装和编译项目后,我们将一个示波器连接到微控制器的两个DAC通道,并将示波器反映在函数Y(X)中。

mik32_engee_logo.gif

正如您在动画中看到的,DAC通道再现了构建Engee标志的可变信号。

结论

我们使用了早期的开发--在极坐标上构建Engee标志的例子,并与MIC32微控制器的DAC一起工作--来组织具有复杂功能依赖性的变量到模拟输出的输出。