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

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

3天内不再提示

基于RP2040 Raspberry-pi-Pico实现的极简任意波形发生器设计方案

科技观察员 来源:wolf2018 作者:wolf2018 2022-04-08 17:51 次阅读

在这个项目里,我大约花了60欧元(合计410人民币)构建了这个带有简单用户界面的任意波形发生器工具 (AWG)。

用户可以选择基本波形,设置频率、幅度、偏移和其他一些参数

基本规格:

频率范围:20Hz - 15MHz 正弦波(并非所有波形都能很好地工作到 15MHz)

DAC 分辨率 8 位或 10 位

用于 AC/DC 耦合和输出电阻的输出开关 Zout low/50Ohm

输出电压 6Vpp 无负载,2.8Vpp 带 Zout 开关至 50Ohm 和 50 Ohm 终端

波形:正弦波、脉冲(锯齿波、三角波、方波)、高斯、sinc、指数、噪声(全部重复使用 rgco 的软件)

我在一个 6.5 厘米 x 13 厘米的带有铜条纹的原型板上构建。

在这个教程中,我将专注于如何构建一个独立的 AWG,如果您按照说明构建自己的 AWG 工具,您应该具备一些手工焊接电子元件的基本技能。如果需要调试,使用(简单)示波器很方便。我建议你在他的 github 网站上阅读 rgco 的教程和 Peter Hinch 的自述文件。

补给品

pYYBAGJQBXuAPKjEAAeaXF0WP_w097.png

构建 AWG 的主要部分是:

1 个树莓派 Pico 板

1 2.8“ 彩色 LCD TFT 显示屏,带 SPI 接口

19 个精密电阻器 10x 2k .1% 和 9 x 1k .1%

1 AD8055(300MHz电压反馈放大器

NTE2633和NTE2634晶体管各1个。作为替代方案,我测试了 2N2219 和 2N2905 晶体管,它们也运行良好。频率上限为~5MHz

2个晶体管散热器

1 个 79L05 和 78L05 稳压器为 AD8055 供电

+-12V 电源

1 6.5cm x 13cm 原型板

用于连接显示器、开关和编码器的面包板线

还有一些小零件电阻、电容排针、电线……

请参阅随附的所有电子元件材料清单。

我正在使用通孔组件,因为它们更容易焊接,而且大部分都在我的“组件库存”中。最终,我选择将所有部件放在一个漂亮的外壳中。

关于电源的备注:我开始使用Meanwell 5V,+-12V开关电源,只是为了得知发电机信号被电源的开关噪声严重失真。我最终使用 2x15V 变压器构建了一个简单的线性电源,两个桥式整流器带有两个 1000uF 电解电容器和稳压器 7812,7912(输出缓冲器为 +-12V)和 Pico 的 L7805CV。我在所有三个稳压器上都放了一个散热器。

第 1 步:概念概述

poYBAGJQBXaAPt7cAAJZNFDpuwM207.png

AWG 由三个主要功能块组成:

用户界面,选择波形并可以输入/调整波形的所有参数。选择波形时,将相应的参数设置为默认值。

AWG 内核,用于计算波形样本并将其存储在内存中。使用 RP2040 的 PIO 和 DMA 功能从内存开始输出波形。

输出缓冲级,其中信号被放大 2 倍,AB 类输出级将提供低输出阻抗和短路保护。通过开关,输出阻抗可以在低阻抗和 50 欧姆之间切换,也可以选择交流或直流耦合。对于低频,建议使用直流耦合。

用户界面和 AWG 内核在运行于 Pico 的 RP2040 CPU 上的 micro-python 中实现。

备注:我正在使用 RP2040 的两个内核进行实验,一个用于生成器,一个用于用户界面。这工作正常,但没有优势。所以,为了简单起见,我决定在一个内核上运行整个程序。(AWG_overview.pdf)

第 2 步:构建硬件

poYBAGJQBXCAKko0AATISpMsaoQ353.png

pYYBAGJQBW2AOrGFAAdzhmh1nTw463.png

在示意图中,您可以找到被“蓝框”包围的三个功能块。使用 AWG 的 8 位或 10 位版本的原理图来构建您自己的。

所有部件都焊接到原型板上。按照示意图从左到右。确保有一个中央接地点,将电源的接地线连接到 Pico 板的接地引脚、两个稳压器和输出连接器。我在开始时创建了接地回路,这会在输出信号上产生额外的噪声。

注意事项:

如果您不需要输出缓冲级的全部 20MHz 带宽,请将 Q1 和 Q2 替换为 2N2219 和 2N2905。这些晶体管更便宜并且具有更好的可用性。测试显示带宽上限约为 5MHz。还要为这些晶体管添加散热器。

如果您不需要低输出阻抗,您可以简化输出级,只使用 AD8055。取 R6 之后的信号(参见示意图中的“TP 1”)。然后,AWG 可以将负载驱动至约 50 欧姆。

相关附件下载

AD8055.pdf

AWG10bit_schematics.pdf

AWG8bit_schematics.pdf

第 3 步:安装软件包

poYBAGJQBWiAOT3jAAErMubHbd8840.png

pYYBAGJQBWSAfS28AACdA2cH5Yg636.png

AWG 是使用 micro-python 实现的。作为第一步,请将micropython加载到 Pico。使用版本 1.17 ( rp2-pico-20210902-v1.17.uf2 ) 或更新版本。旧版本无法使用,因为它们缺少 micro-gui 所需的功能。

本教程假设您对如何使用 Pico 板、将 micro-python 和 python 模块加载到 Pico 有一些基本知识。如果您需要帮助,请在raspberry pi pico 上找到开始使用 micropython的分步指南。

由于我无法在此处附加档案或压缩文件,请安装以下软件包:

1. 安装micro-gui。如果您使用的是 Linux,请创建一个项目目录并使用 git 将 micro-gui 复制到项目目录。例如:git clone https://github.com/peterhinch/micropython-micro-gui。

使用 mpfshell、rshell 或您喜欢的 micropython IDE 将 micro-gui 模块复制到 Pico。

如果您使用的是 Windows,请访问micro-gui github站点,单击“代码”按钮并下载 zip 文件(见图)。您可以使用您喜欢的工具将文件下载到 Pico。

2. 安装硬件驱动程序。将 AWG 驱动程序文件复制到 Pico:

hardware_setup.py - 复制到根目录,包含按钮、编码器和显示驱动程序的信息

colors.py - 替换原始模块,因为 AWG 使用更多颜色,将附件复制到 Pico 上的 gui/core 目录

3. 安装 AWG 文件:

8 位和 10 位版本的 AWG 文件不同。由于我无法附加包裹,因此我将包裹分成了这个教程的两个步骤。

从第 8 步下载 8 位版本的软件

从第 9 步下载 10 位版本的软件

然后将文件复制到 pico。10 位版本的文件名显示在下面的文本中的括号 [ ] 中。

ui.py [ui10.py] - 复制到根目录,这是AWG主程序

wave_gen.py [wave_gen10.py] - 复制到根目录,该模块计算波形并对 Pico 的 PIO 和 DMA 进行编程

main.py - 复制到根目录,启动后调用模块,导入 ui.py [ui10.py] 启动 AWG

我添加了一张图片来显示 Pico 上文件和目录结构的图形表示。图片仅显示 AWG 所需的文件。如果您将 micro-gui 作为一个整体下载,您将获得更多文件,例如 micro-gui 的演示或其他字体,这些文件不被 AWG 使用。您可以只复制所需的文件,如图所示。

备注:我已经清理了这个教程,只附上了最新版本的文件。如果您已经构建了 AWG,建议您升级到具有 8 位 DAC 或 10 位 DAC 的版本的最新版本。

代码下载:

hardware_setup.py

颜色.py

第 4 步:AWG 的核心

python 模块wave_gen.py [wave_gen10.py] 包含用于计算波形和对 Pico 的 PIO 和 DMA 进行编程的代码。我重用了 Rgco 创建的代码。附加的模块支持六种基本波形。AWG 可以做更多事情,例如将两个波相加或相乘,如果您需要更多功能,请参阅Rcgo 的教程。

对原代码的改动:

代码有两种版本,一种用于 8 位 DAC,一种用于 10 位 DAC。

Pico 超频了,CPU 运行在 250MHz 而不是 125MHz

我正在使用 DMA 通道 2 和 3 而不是 0 和 1。DMA 通道 0 和 1 由其他功能使用,例如 TFT 显示器的 SPI 接口

在测试时,我观察到“内存不足错误”,因此我在计算完成后调用垃圾收集器 (gc) 模块并填充波缓冲区以释放未使用但仍分配的内存。

备注:Pico 的 CPU 和 USB 连接在 250MHz 下运行非常可靠

第 5 步:用户界面

pYYBAGJQBVyAEIjEAAWp-425hRU030.png

用户界面 (UI) 由两个按钮、一个带按钮的旋转编码器、2.8” TFT 显示器和 python 模块ui.py [ui10.py] 组成。该模块定义了屏幕布局和 AWG 控件。在简而言之,当按下按钮或旋转编码器时会发生什么。在以下 UI 元素中以斜体字母显示,例如setup指向屏幕上的设置按钮。您可以在下一步。

用户界面原则:

所有用户输入都被收集并存储在一个名为“wave”的字典中。按下设置生成器按钮后,模块 wave_gen [wave_gen10] 使用存储在字典中的数据来计算和输出波形。

AWG 在屏幕上显示其当前状态。状态是以下之一——初始化——、计算波、运行或停止。每个状态都非常自我解释,并在模块 ui.py [ui10.py] 中进行了简要描述。

UI 允许通过功能下拉菜单选择波形。When a wave is selected the parameters of the wave are set to default values, which are “mid points” of the parameters. 如果您使用默认值按下设置生成器按钮,您会得到一个工作正常的波形。通常,您希望根据需要调整频率。

如果您选择不同的波形,频率不会改变,但所有其他参数都设置为默认值。

在 UI 中,只有与所选波形相关的参数处于活动状态并且可以更改。不需要的参数是“灰色的”。

显示使用的样本数和波形的结果输出频率。

备注:AWG 是一种数字波发生器。这意味着例如频率、幅度和偏移量会逐步变化,这会导致一些限制:

输出频率可能会偏离 UI 中设置的频率,例如,如果设置频率“介于”两个数字频率步长之间。

第 6 步:AWG 快速参考指南

poYBAGJQBVmABwpvAAOqutBJEj8138.png

用户界面硬件由硬件中的两个按钮和一个旋转编码器组成。AWG 控件和设置/停止发生器按钮在 UI 软件中实现。

Next按钮将焦点移动到下一个控件,该控件变为活动状态。焦点由白色边框表示。例如,在图片中,您可以看到具有焦点的功能下拉列表。

上一个按钮将焦点移回上一个控件。

旋转编码器必须起作用。(a) 按下编码器作为输入按钮, (b) 转动编码器增加或减少一个值或在下拉列表中上下移动。

有关详细信息,请参阅随附的快速参考指南。

备注:如果输出信号被削波或失真,请尝试调整幅度、偏移或参数。这样做通常会减少削波或失真。微调参数以优化输出,例如对于脉冲:不要将上升和下降时间设置为 0,而是将其设置为较小的值,例如 0.05。这通过限制压摆率来减少信号的过冲。

第 7 步:限制和改进

pYYBAGJQBVOAT2wAAAGWTNbxmzo367.png

AWG 的设计易于使用、易于复制和低成本。

实施了六个基本波。如果 Pico 板连接到 PC 上,基本上任何波形都可以通过在模块 wave_gen.py 中添加波形的公式来产生。如果波形应该在 AWG 中持久存在,请将波形名称和控件添加到 ui.py 模块。

AWG 的输出级是基本的 AB 类设计。它经过短路验证并提供 6V pp 摆幅。可以添加一个输出滤波器来降低较高频率的数字噪声。

为 AWG 10 位实施了包围。根据要求可以移植到 AWG 8 位。

在最近的软件中,显示更新(SPI 接口)在 AWG 启动时会关闭。这显着降低了输出信号上的数字噪声(见图)。在原型板上构建或进行 PCB 布局时,请注意避免走线或电缆之间的串扰,从而进一步降低噪声。

为了进一步降低噪音,使用两个 Pico 板也可以降低输出噪音。一个用于发生器的 Pico 板和一个用于用户界面的 Pico 板,将它们与例如串行接口连接。非常欢迎任何改进和评论。

第 8 步:用于 AWG 的软件,带有 8 位 DAC

附上使用 8 位 DAC实现 AWG 时要上传到 Pico 的三个文件。(参见第 3 步)

在停止生成器时保留参数值,而不是每次都初始化它们。

sinc 和指数参数现在被“括起来”,因此它们无法设置为导致波形不可用的值。

ui.py

wave_gen.py

主文件

第 9 步:带 10 位 DAC 的 AWG

附上使用 10 位 DAC实现 AWG 时要上传到 Pico 的三个文件。(参见第 3 步)

一些用户要求在停止生成器时保留参数值,而不是初始化它们。

sinc 和指数参数现在被“括起来”,因此它们无法设置为导致波形不可用的值。

ui10.py

wave_gen10.py

主文件

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

    关注

    4

    文章

    1357

    浏览量

    61593
  • AWG
    AWG
    +关注

    关注

    1

    文章

    48

    浏览量

    16814
  • 波形发生器
    +关注

    关注

    3

    文章

    288

    浏览量

    31334
收藏 人收藏

    评论

    相关推荐

    5分钟内将Raspberry Pi Pico变成简单的示波器+波形发生器

    5 分钟内将 Raspberry Pi Pico(或任何 RP2040 板)变成简单的示波器+波形发生器
    的头像 发表于 03-04 09:14 1792次阅读
    5分钟内将<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> <b class='flag-5'>Pico</b>变成简单的示波器+<b class='flag-5'>波形</b><b class='flag-5'>发生器</b>

    pico-ice:RP2040 plus Lattice iCE40UP5K FPGA 开发板 介绍

    pico-ice是一个小型、低成本的开发板,带有Raspberry Pi Pico RP2040微控制
    发表于 06-28 15:45

    ubuntu上交叉编译rp2040

    连接到rp2040 ,所以使用另一块pico作为调试,需要给pico调试下载固件,也就是picoprobe 地址 https://git
    发表于 08-27 08:00

    树莓派Pico迷你开发板及所使用的RP2040 MCU芯片有哪些特性

    Raspberry Pi Pico是什么?树莓派Pico迷你开发板及所使用的RP2040 MCU芯片有哪些特性?
    发表于 09-14 06:50

    Raspberry Pi 4/3B的Pico开发板

    总线 (GPIO) 对 Raspberry Pi Pico 进行编程。无论您拥有 Raspberry Pi
    发表于 07-26 07:14

    基于RP2040 arm微控制制作的定制Arduino

    描述Athduino-RP2040使用新的 Raspberry pi pico 的基于 RP2040 arm 的微控制
    发表于 08-31 06:03

    【BPI-Pico-RP2040 开发板】与Banana BPI-Pico-RP2040的第一次亲密接触

    RP2040芯片的微控制开发板,其最显著的特性是,在尽量保留Raspberry Pi Pico的功能,外形尺寸,引脚布局的前提下,增加一颗
    发表于 03-17 23:03

    RP2040

    RP2040是一种基于ARM Cortex-M0+核心的微控制芯片,由Raspberry Pi公司设计和生产。它主要用于树莓派计算模块和树莓派相机模块V2等产品中,同时也适用于各种低
    发表于 09-15 09:04

    4美元的微控制PicoRP2040芯片

    今天我们来认识一下Raspberry Pi Pico,一个小小的微控制,可以让你在微控制上运行一些代码来构建硬件项目。更有趣的是,
    发表于 01-22 15:51 2465次阅读

    基于树莓派产品 Raspberry Pi微控制板的优缺点

    早在1月份, Raspberry Pi就推出了使用 RP2040Raspberry Pi Pico
    的头像 发表于 06-12 09:13 2842次阅读

    e络盟现货发售Arduino Nano RP2040 Connect和Raspberry Pi Pico

    Raspberry Pi Pico是首款采用Raspberry Pi自研RP2040微控制
    发表于 09-23 14:26 3193次阅读
    e络盟现货发售Arduino Nano <b class='flag-5'>RP2040</b> Connect和<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> <b class='flag-5'>Pico</b>

    Arduino Raspberry Pi Pico/RP2040以太网:W5100S EVB Pico

    电子发烧友网站提供《Arduino Raspberry Pi Pico/RP2040以太网:W5100S EVB Pico.zip》资料免费
    发表于 06-14 14:29 1次下载
    Arduino <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> <b class='flag-5'>Pico</b>/<b class='flag-5'>RP2040</b>以太网:W5100S EVB <b class='flag-5'>Pico</b>

    将MicroPython从Raspberry pi(RP2040)移植到Wiznet5K

    电子发烧友网站提供《将MicroPython从Raspberry pi(RP2040)移植到Wiznet5K.zip》资料免费下载
    发表于 06-14 10:54 0次下载
    将MicroPython从<b class='flag-5'>Raspberry</b> <b class='flag-5'>pi</b>(<b class='flag-5'>RP2040</b>)移植到Wiznet5K

    RP2040 Raspberry Pi Pico遇见LoRa

    电子发烧友网站提供《RP2040 Raspberry Pi Pico遇见LoRa.zip》资料免费下载
    发表于 06-15 09:25 1次下载
    <b class='flag-5'>RP2040</b> <b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b> <b class='flag-5'>Pico</b>遇见LoRa

    RP2040Raspberry Pi的区别

    作为 Raspberry Pi 基金会推出的首款微控制产品,RP2040 标志着以单板计算机 (SBC) 而闻名的 Raspberry
    的头像 发表于 11-16 17:37 862次阅读
    <b class='flag-5'>RP2040</b>和<b class='flag-5'>Raspberry</b> <b class='flag-5'>Pi</b>的区别