AnyMath 文档
Notebook

[医]全国人民的生命.

很明显,在网上运行。

导言

直接数字合成的任务是在具有可调参数的发生器的输出端生成给定形状的信号。 在这个例子中,将实现在五个输出波形之间切换外部离散信号-具有正斜率和负斜率的锯齿波,三角形,正弦和弯曲。 输出信号的频率和幅度将使用两个外部模拟信号进行调整。

硬件部分

在此过程中,Arduino MEGA2560可用于连接设备。 没有。9处产生。 给您留下一个完整的模型. 普华永道? )(萝卜青菜 过滤顺序为2。 [经]: .

输出波形开关信号由上拉电阻上带有嘎嘎声消除电路的按钮触点送至数字输入2号 和并联电容 .

为了控制输出信号的频率和幅度,电阻电位器连接到Arduino调试板的模拟输入A0和A1 .

元件的连接图如下图所示。

arduino_dds_bb.png

输出信号由低通滤波器输出端的亨达DSO示波器捕获。 还用于通过限流电阻经滤波后输出信号至扬声器。 基本面3.5mm。

模型描述

与模型中的控制器外围设备交互 arduino_dds 使用四个块 C Function:

  • DigitalInput_Mode -初始化数字输入2号,轮询输入状态。 在AnyMath中,它会产生实时性的信息,以及在计算机上的计划。 ModeCounter 并切换输出波形。
  • AnalogInput_Freq 整条机场的收费机。 在anymath中文版 .
  • AnalogInput_Amp 整条机的机型。 在anymath中你应该拥有的产品 .
  • HFPWM_Output -以最大可用频率(62.5kHz)在9号输出处初始化PWM操作,并将新的占空比值传输到PWM控制器模块。

关于外围块的操作的细节在对这些块中的代码的注释中给出。

image_2.png

计算五种指定波形的算法在子系统中定义: PositiveSaw -具有正斜率的锯齿, NegativeSaw -带负斜率的锯齿, Triangle -三角形, Sinusoidal -正弦和 Square -具有50%钻孔的蜿蜒流。 块用于在输出波形算法之间切换 Multiport Switch,其从子系统控制 ModeCounter. 在子系统中 ModeCounter 输入信号的负边沿突出显示,并对击键次数进行计数。

的。AnyMath中建模时,具有恒定频率和幅度设置的输出信号将在指定波形之间周期性地切换。

模拟结果

下载并执行创建的模型:

In [ ]:
Pkg.add(["WAV"])
In [ ]:
if "arduino_dds" in [m.name for m in engee.get_all_models()]
    m = engee.open( "arduino_dds" );
else
    m = engee.load( "$(@__DIR__)/arduino_dds.engee" );
end

data = engee.run(m);

从获得的模型数据中,我们将绘制生成的信号。:

In [ ]:
using Plots
plotlyjs()
plot(data["pwmduty"].time, data["pwmduty"].value,
    legend=false, size=(900,300), lw=2, st=:step)
xlabel!("时间,秒")
ylabel!("意义")
Out[0]:

正如你所看到的,大约每0.2秒输出信号改变其形状。

[医][医][医][医][医][医][医]

要达到Arduino,要达到。:

In [ ]:
engee.generate_code( "$(@__DIR__)/arduino_dds.engee",
                     "$(@__DIR__)/arduino_dds_code")
[ Info: Generated code and artifacts: /user/start/examples/codegen/arduino_dds/arduino_dds_code

我们将连接用户草图中指定目录中生成的文件。 arduino_dds.ino. Arduino IDE将实现Arduino MEGA*。

所附草图定义宏和全局变量,添加自定义生成的文件和第三方库,并调用模型的初始化和循环计算函数。 草图还包含注释,以解释代码的工作原理。

N.科学。

成功编译并将草图上传到目标设备后,我们将在RC滤波器的输出端连接一个Hantec DSO数字示波器,并捕获生成信号的形状。 测量实验显示了在产生的形状之间切换,随后产生具有可调频率的锯齿信号,然后具有可调幅度。

dds_good1.gif

为完成整个换热工作,将完成整个换热工作。 arduino_dds_audio.wav. 下一个代码单元格允许您将接收到的音频文件上传到脚本并播放它。 播放音轨以确保开发的模型正常工作。 它在输出波形依次切换时记录声音,然后以正斜率调整锯齿信号的频率和幅度。

In [ ]:
using WAV, Base64
x, fs = wavread( "$(@__DIR__)/arduino_dds_audio.wav" );

buf = IOBuffer();
wavwrite(x, buf; Fs=fs);
data = base64encode(unsafe_string(pointer(buf.data), buf.size));
markup = """<audio controls="controls" {autoplay}>
              <source src="data:audio/wav;base64,$data" type="audio/wav" />
              Your browser does not support the audio element.
              </audio>"""
display( "text/html", markup );

结论

在本演示中,开发了一个频率和幅度可调的直接数字信号合成模型,并能够在锯齿波正负、三角形、正弦和弯曲之间切换波形。 *的结果和结果是没有的,并且