Engee 文档
Notebook

为 MIC32 生成代码(Engee 徽标)

该演示展示了Engee模型的开发过程,该模型用于向MIK32V2微控制器的两个 DAC 通道输出带有组成Engee徽标的点的坐标的矢量。

简介

本演示中使用的目标设备是基于 K1948VC018 MIK32 Amur 微控制器的 MIK32 NUKE V0.3 调试板。在本例开发的Engee模型中,变量信号X和Y的产生是在两个DAC通道上进行的,当示波器显示Y(X)函数时,得到Engee标志。将代码编译并加载到微控制器中是通过 VS 代码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]:

由于微控制器的 DAC 为 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 。除了 DAC 输入变量的设置方式外,该模型与mik32_dac.engee 相似。

dac_engee_logo.png

为了设置 DAC 信号的变量,将获得的标识点New_XNew_Y 的坐标变量写入图块Repeating Sequence Stair 中。我们可以重现模型,并确保模型中的给定点的构建与之前的图形类似,但我们不再赘述。下面我们继续生成代码。

代码生成和项目构建

In [ ]:
# @markdown **Генерация кода:**  
# @markdown Папка для результатов генерации кода будет создана в папке скрипта:
папка = "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
[ Info: Generated code and artifacts: /user/start/examples/codegen/mik32_engee_logo/code

带有模型的项目在集成开发环境 VS Code+PlatformIO 中组装,组装过程与示例 MIC32: 锯齿波信号发生器中的过程类似。下面开始在微控制器上执行代码。

在 MIK 32 上执行代码

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

mik32_engee_logo.gif

正如您在动画中看到的那样,DAC 通道播放的是建立 Engee 徽标的可变信号。

结论

我们利用我们的早期工作--以极坐标建立 Engee 徽标和使用 MIC 32 微控制器的数模转换器为例--安排将具有复杂功能依赖性的变量输出到模拟输出。