0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Arduino波形发生器的制作

454398 来源:工程师吴畏 2019-08-26 11:34 次阅读

步骤1:技术注意事项

制作模拟信号

Arduino Uno和Nano的一个缺点是它没有数字信号 - 模拟(DAC转换器,因此无法直接在引脚上输出模拟电压。一种解决方案是R2R梯形图:8个数字引脚连接到电阻网络,因此可以达到256级输出。通过直接端口访问,Arduino可以通过一个命令同时设置8个引脚。对于电阻网络,需要9个值为R的电阻,8个值为2R的电阻。我使用10kOhm作为R的值,它将引脚的电流保持在0.5mA或更低。我猜R = 1kOhm也可以工作,因为Arduino可以轻松地为每个引脚提供5mA电流,每端口40mA。重要的是R和2R电阻之间的比率确实为2.通过将2个R值的电阻串联起来,总共25个电阻最容易实现。

相位累加器

生成波形然后重复向Arduino引脚重复发送一系列8位数字。波形存储在256字节的数组中,并对该阵列进行采样并发送到引脚。输出信号的频率取决于通过阵列前进的速度。一个强大,精确和优雅的方法是使用相位累加器:32位数字以固定间隔递增,我们使用8个最高有效位作为数组的索引

快速采样

中断允许在明确定义的时间采样,但中断的开销将采样频率限制在~100kHz。无限循环更新相位,采样波形并设置引脚需要42个时钟周期,从而实现16MHz/42 = 381kHz的采样率。旋转或推动旋转编码器会导致引脚更改和从环路中断的中断以更改设置(波形或频率)。在此阶段,重新计算阵列中的256个数字,以便不需要在主循环中执行波形的实际计算。可以产生的绝对最大频率是190kHz的一半,但是每个周期只有两个样本,因此对形状的控制不大。因此,接口不允许将频率设置在100kHz以上。在50kHz时,每个周期有7-8个采样,并且在1.5kHz和低于所有存储在阵列中的256个数据每个周期都被采样。对于信号平滑变化的波形,例如正弦波,跳过样本没有问题。但对于具有窄尖峰的波形,例如占空比较小的方波,存在这样的危险:对于高于1.5 kHz的频率,单个样本丢失会导致波形表现不尽如人意

频率的准确度

每个样本相位递增的次数与频率成正比。因此,频率可以设置为381kHz/2 ^ 32 = 0.089mHz的精度。实际上,几乎不需要这种精度,因此界面限制以1mHz的步长设定频率。频率的绝对精度由Arduino时钟频率的精度决定。这取决于Arduino类型,但大多数指定频率为16.000MHz,因此精度为~10 ^ -4。该代码允许修改频率和相位增量的比率,以校正16MHz假设的小偏差。

缓冲和放大

电阻网络具有高输出阻抗,因此如果负载是,则其输出电压会快速下降连接。这可以通过缓冲或放大输出来解决。这里,缓冲和放大是用运算放大器完成的。我使用的是LM358,因为我有一些。它是一个慢速运算放大器(压摆率为每微秒0.5V),因此在高频和高幅度时信号会失真。一个好处是它可以处理非常接近0V的电压。然而,输出电压限制在低于轨道约2V,因此使用+ 5V功率将输出电压限制为3V。升压模块结构紧凑,价格低廉,为运算放大器提供+ 20V电压,可产生电压高达18V的信号。 (注意,原理图说LTC3105,因为那是我在Fritzing中发现的唯一升级。实际上我使用的是MT3608模块,请参阅后续步骤中的图片)。我选择对R2R DAC的输出应用可变衰减,然后使用其中一个运算放大器缓冲信号而不放大,另一个放大5.7,这样信号可以达到约20V的最大输出。输出电流相当有限,约为10mA,因此如果信号要驱动大型扬声器或电磁铁,则可能需要更强的放大器。

步骤2:所需组件

核心波形发生器

Arduino Uno或Nano

16x2 LCD显示屏+ 20kOhm微调和100欧姆用于背光的串联电阻器

5针旋转编码器(带集成按钮)

25个10kOhm电阻

用于缓冲器/放大器

LM358或其他双运算放大器

升压模块基于MT3608

50kOhm可变电阻

10kOhm电阻

47kOhm电阻

1μF电容

步骤3:构造

我在7x9cm原型板上焊接了所有东西,如图所示。由于所有电线都有点乱,我试着给带正电压红色的引线和带黑色的引线涂上颜色。

我使用的编码器有5个引脚,一边是3个,2个是另一边。有3个引脚的一侧是实际的编码器,带有2个引脚的一侧是集成按钮。在3引脚侧,中央应接地,另外两个接到D10和D11。在2引脚侧,一个引脚应连接到地,另一个应连接到D12。

这是我做过的最丑陋的事情,但它有效。放入一个外壳会很好,但是现在额外的工作和成本并没有真正证明它的合理性。 Nano和显示器附有针头。如果我要建一个新的,我不会再那样做了。我没有在板上放置连接器来拾取信号。相反,我用突出的铜线上的鳄鱼引线拾取它们,标记如下:

R - 来自R2R DAC的原始信号

B - 缓冲信号

A - 放大信号

来自引脚9的T - 定时器信号

G - 接地

+ - 来自升压的正“高”电压模块

步骤4:代码

代码是一个Arduino草图,附上并应上传到Arduino。

已有20个波形预定义。添加任何其他wave应该是直截了当的。请注意,随机波填充具有随机值的256值数组,但每个周期都会重复相同的模式。真正的随机信号听起来像噪声,但这种波形听起来更像是哨声。

该代码在引脚D9上用TIMER1设置1kHz信号。这对于检查模拟信号的时序非常有用。这就是我如何计算时钟周期数为42:如果我假设41或43,并产生1kHz信号,它显然与引脚D9上的信号具有不同的频率。使用值42,它们完全匹配。

通常,Arduino每毫秒都会中断以使用millis()函数跟踪时间。这会干扰准确的信号生成,因此禁用特定的中断。

编译器说:“Sketch使用7254字节(23%)的程序存储空间。最大值为30720字节。全局变量使用483字节(23%)动态内存,为局部变量留下1565个字节。最大为2048个字节。“因此,有足够的空间可以使用更复杂的代码。

步骤5:用法

只需通过Arduino的mini-USB线缆即可为设备供电纳米。最好使用移动电源,这样它就不会与可能连接的设备发生意外的接地回路。

接通电源时会产生100Hz的正弦波。通过旋转旋钮,可以选择其他20种波形中的一种。通过按下旋转,可以将光标设置为频率的任何数字,然后可以将其更改为所需的值。

可以使用电位计调节振幅,也可以使用缓冲器或可以使用放大的信号。

使用示波器检查信号幅度非常有用,特别是当信号向另一个设备提供电流时。如果汲取的电流太大,信号将被削波并且信号严重失真

对于非常低的频率,输出可以通过LED与10kΩ电阻串联来显示。用扬声器可以听到音频。确保将信号设置为非常小~0.5V,否则电流过高,信号开始削波。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 波形发生器
    +关注

    关注

    3

    文章

    284

    浏览量

    31186
  • Arduino
    +关注

    关注

    184

    文章

    6427

    浏览量

    184826
收藏 人收藏

    评论

    相关推荐

    proteus波形发生器怎么找 proteus波形发生器叫什么

    Proteus是一款常用的电子电路仿真软件,它提供了各种元件和工具,方便工程师进行电路设计、仿真和调试。其中,Proteus波形发生器是一种常见的模块,可用于产生各种类型的波形。本文将详细介绍
    的头像 发表于 02-23 16:49 1681次阅读

    浅谈任意波形发生器及通道合并功能

    浅谈任意波形发生器及通道合并功能  任意波形发生器(AWG)是一种能够产生各种复杂波形的信号发生器
    的头像 发表于 01-19 15:54 190次阅读

    信号发生器的特点 信号发生器可以产生哪些波形

    信号发生器的特点 信号发生器可以产生哪些波形? 信号发生器是一种用于产生各种频率、振幅和波形的电信号的设备。它是电子测试仪器中常用的一种,广
    的头像 发表于 12-21 15:05 716次阅读

    基于STM32的波形发生器设计

    信号发生器在生产实践和科技领域中有着广泛的应用,各种波形曲线均可以用三角函数方程式来表示。能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波的电路被称为函数信号发生器
    的头像 发表于 12-12 15:16 1261次阅读
    基于STM32的<b class='flag-5'>波形</b><b class='flag-5'>发生器</b>设计

    波形发生器电路设计方案

    波形信号发生器,正弦波、三角波、方波、矩形波等这几种较为常见信号的发生装置。该发生器通过将滞回电压比较器的输出信号通过RC电路反馈到输入端,即可组成矩形波信号
    发表于 11-30 09:55 1525次阅读
    <b class='flag-5'>波形</b><b class='flag-5'>发生器</b>电路设计方案

    采用单片机89S51和SPWM波形发生器SA8281制作控制器

    电子发烧友网站提供《采用单片机89S51和SPWM波形发生器SA8281制作控制器.pdf》资料免费下载
    发表于 11-06 10:16 0次下载
    采用单片机89S51和SPWM<b class='flag-5'>波形</b><b class='flag-5'>发生器</b>SA8281<b class='flag-5'>制作</b>控制器

    40 第22讲--DAC波形发生器 - 第6节

    dac波形发生器
    充八万
    发布于 :2023年08月19日 11:34:37

    40 第22讲--DAC波形发生器 - 第5节 #硬声创作季

    dac波形发生器
    充八万
    发布于 :2023年08月19日 11:33:47

    40 第22讲--DAC波形发生器 - 第3节 #硬声创作季

    dac波形发生器
    充八万
    发布于 :2023年08月19日 11:32:06

    40 第22讲--DAC波形发生器 - 第2节

    dac波形发生器
    充八万
    发布于 :2023年08月19日 11:31:16

    40 第22讲--DAC波形发生器 - 第1节 #硬声创作季

    dac波形发生器
    充八万
    发布于 :2023年08月19日 11:30:26

    关于波形发生器,你知道多少?

    信号发生器系列波形发生器你知道多少?虹科信号发生器系列波形发生器
    的头像 发表于 08-05 08:07 1975次阅读
    关于<b class='flag-5'>波形</b><b class='flag-5'>发生器</b>,你知道多少?

    AFG3101C任意波形发生器

    泰克AFG3101C任意波形发生器 AFG3101C 是 Tektronix 的 100 MHz 任意波形发生器。任意波形
    的头像 发表于 06-28 14:12 266次阅读
    AFG3101C任意<b class='flag-5'>波形</b><b class='flag-5'>发生器</b>

    使用AD9850模块和Arduino制作频率信号发生器

    电子发烧友网站提供《使用AD9850模块和Arduino制作频率信号发生器.zip》资料免费下载
    发表于 06-25 10:37 3次下载
    使用AD9850模块和<b class='flag-5'>Arduino</b><b class='flag-5'>制作</b>频率信号<b class='flag-5'>发生器</b>

    泰克AFG3101C任意波形发生器

    泰克AFG3101C任意波形发生器 AFG3101C 是 Tektronix 的 100 MHz 任意波形发生器。任意波形
    发表于 06-05 17:26 165次阅读
    泰克AFG3101C任意<b class='flag-5'>波形</b><b class='flag-5'>发生器</b>