CSDN话题挑战赛第2期
参赛话题:学习笔记
白色金属盒,带 LCD 面板和控件在过去的几个周末,我组装了一个基于 AD9850 DDS 模块的射频信号发生器,该模块由 ATmega328 微处理器控制。在这篇文章中,介绍了物理构造和其操作背后的 arduino pcb。
我原本打算将基于 AD9850 的 DDS 用作 HF 接收器中的 VFO,在 QRP Quarterly 的 Pete Juliano,N6QW 和 Ben Kuo,KK6FUT 的 Let’s Build Something 文章的第一部分中进行了描述。然而,由于时间比较紧了,我直到文章发表几年后才开始建设,第二部分已经出来了。在第二部分中,我们了解到基于第一部分接收器的最终收发器项目实际上将围绕si5351 模块而不是 AD9850 构建。然而,当 AD9850 模块刚面世时,我已经订购了一些模块——我认为最好在每个模块达到 4 美元时“低价购买”——所以我继续推进,打算将独立式作为基准测试设备。
很多人以前都这样做过,AD7C 的代码写得特别好。N6QW 在 QQ 和他的网站上的描述足以开始,但他的网站上的代码是故意的准系统。用于轮询旋转编码器的例程对我来说效果不佳,随着项目的进行,我最终放弃了大部分代码。
由于在我居住的地方订购零件需要很长时间,因此我的构建受到使用手头上的组件的限制。另外,我想要以下功能:
覆盖 DDS 模块的全部可用范围,即 100khz 至约 40 Mhz。
允许相对快速调整但硬件最少的用户界面;理想情况下,只有旋转编码器。
为了方便起见,有几个 VFO 记忆。
上电时用户配置的频率。
由 13.8V 电源供电,可在我的工作台上使用。理想情况下,如果使用电池供电,则可以在较低电压下运行。
使用 arduino 环境进行开发,但只保留生产所需的元素(即使在我的情况下生产是一次性的)。
足够有用的输出功率,例如高达 7-9 dBm 左右。
硬件
该项目实际上是一组模块:电源、微处理器、微处理器的 I/O(LCD 面板、按钮、旋转编码器)、DDS 本身和小型射频放大器。我将描述每一个,然后详细介绍该软件。
电源
项目的数字部分(微处理器、AD9850 板、LCD 显示器)需要 5V,RF 放大器需要标称 12V。我在工作台上有一个 13.8V 线性电源,我构建了几乎所有通过电源杆连接器插入的东西。
我在数字板上放了一个 5V 线性稳压器,虽然这不是获得 5V 的最性感方式,但输出很干净,并且在 RF 放大器附近没有发出嘎嘎作响的开关噪声。TO-92 封装稳压器的电流消耗太大,所以我选择了 TO-220。13.8V 电源的近 9 伏降意味着即使在 DDS 的适度电流消耗下,该稳压器也会变热,因此我添加了一个旋入式散热器并将过滤器盖隔开一个手指的宽度。在这种配置中,调节器永远不会太热而无法触摸。
在面包板阶段,我确实尝试从 LM2596 DC/DC 降压转换器模块获得 5V。微处理器可以容忍它,但它在 RF 输出上增加了一些噪声,由于我想在“实验室”容量中使用它,我希望信号尽可能干净。同样,我不喜欢在我的台式电源上运行整个电源,它由一个开关模式电源和一个 DC/DC 升压/降压转换器组成。也许我可以通过过滤来平滑这些来源,但使用线性稳压器似乎更可取。
在一篇关于修改 NorCal 49er 以用基于 AD9850 的 DDS 代替变容二极管调谐的文章中,注意到 AD9850 模块在 5V 电源下运行很热。在那篇文章中,在电源线上放置了几个二极管来降低电压。我没有发现 AD9850 模块过热,所以我直接从 5V 电源轨运行它。
为了调试,我将数字引脚 1 和 2 留空,因为它们用于串行 rx 和 tx。总的来说,我尽量减少引脚的使用,因为在我的脑海里,我在想这个核心设计可能会在其他项目中重新使用,而其他引脚是必要的。与此一致,我从 I2C 总线而不是串行驱动显示器,节省了一些引脚,但以另一种方式使项目复杂化(参见下面的显示)。
鉴于这种布局,微处理器只需要很少的支持组件,只需用于 I2C 总线上的 SDL 和 SCA 线以及微处理器 RESET 引脚的上拉电阻。按钮开关使用内部 MPU 上拉电阻,因此不需要外部电阻。对于旋转编码器和这些开关,所有的去抖动都是在软件中完成的,因此不需要电容器来平滑开关闭合。
由 13.8V 电源供电,可在我的工作台上使用。理想情况下,如果使用电池供电,则可以在较低电压下运行。使用 arduino 环境进行开发,但只保留生产所需的元素(即使在我的情况下生产是一次性的)。足够有用的输出功率,例如高达 7-9 dBm 左右。
该项目实际上是一组模块:电源、微处理器、微处理器的 I/O(LCD 面板、按钮、旋转编码器)、DDS 本身和小型射频放大器。我将描述每一个,然后详细介绍该软件。装箱前的 VFO 内脏。请注意,稳压器缺少散热器。项目的数字部分(微处理器、AD9850 板、LCD 显示器)需要 5V,RF 放大器需要标称 12V。我在工作台上有一个 13.8V 线性电源,我构建了几乎所有通过电源杆连接器插入的东西。
我在数字板上放了一个 5V 线性稳压器,虽然这不是获得 5V 的最性感方式,但输出很干净,并且在 RF 放大器附近没有发出嘎嘎作响的开关噪声。TO-92 封装稳压器的电流消耗太大,所以我选择了 TO-220。13.8V 电源的近 9 伏降意味着即使在 DDS 的适度电流消耗下,该稳压器也会变热,因此我添加了一个旋入式散热器并将过滤器盖隔开一个手指的宽度。在这种配置中,调节器永远不会太热而无法触摸。
在面包板阶段,我确实尝试从 LM2596 DC/DC 降压转换器模块获得 5V。微处理器可以容忍它,但它在 RF 输出上增加了一些噪声,由于我想在“实验室”容量中使用它,我希望信号尽可能干净。同样,我不喜欢在我的台式电源上运行整个电源,它由一个开关模式电源和一个 DC/DC 升压/降压转换器组成。也许我可以通过过滤来平滑这些来源,但使用线性稳压器似乎更可取。
在一篇关于修改 NorCal 49er 以用基于 AD9850 的 DDS 代替变容二极管调谐的文章中,注意到 AD9850 模块在 5V 电源下运行很热。在那篇文章中,在电源线上放置了几个二极管来降低电压。我没有发现 AD9850 模块过热,所以我直接从 5V 电源轨运行它。
微处理器
对于开发,我使用了一个值得信赖的旧 Arduino Duemilanove,带有 ATmega328 处理器。然而,当需要构建项目时,我使用了一个全新的 ATmega328,并通过插入到我的Antananarivoduino的 USBtiny 编程器传输了固件的最终版本。我这样做主要是为了避免在数字板上有一个外部微处理器时钟振荡器。默认情况下,ATmega328 使用 1 Mhz 内部时钟。在传输固件之前,我使用编程器设置了时钟分频器保险丝,这样处理器将使用 8 Mhz 内部时钟,这对于这个应用程序来说已经足够快了。
为了调试,我将数字引脚 1 和 2 留空,因为它们用于串行 rx 和 tx。总的来说,我尽量减少引脚的使用,因为在我的脑海里,我在想这个核心设计可能会在其他项目中重新使用,而其他引脚是必要的。与此一致,我从 I2C 总线而不是串行驱动显示器,节省了一些引脚,但以另一种方式使项目复杂化(参见下面的显示)。
鉴于这种布局,微处理器只需要很少的支持组件,只需用于 I2C 总线上的 SDL 和 SCA 线以及微处理器 RESET 引脚的上拉电阻。按钮开关使用内部 MPU 上拉电阻,因此不需要外部电阻。对于旋转编码器和这些开关,所有的去抖动都是在软件中完成的,因此不需要电容器来平滑开关闭合。atmega328 芯片的迹线和电线铅笔图以及与控件和 ad9850 模块的连接
微处理器和板外连接的接线。
显示液晶屏
在显示方面我不需要太多:主要是一种显示频率的方式。大多数项目使用 16×2 LCD 显示器,因为它便宜、易于连接,并且有空间显示频率和某种状态。这些项目中的大多数还使用 I2C 背包来驱动显示器,仅使用两条控制线。我认为未来的项目可能会涉及 I2C 总线上的其他项目(例如实时时钟和额外的内存),所以我选择了那个选项。
我有很多 16×2 显示器,但是当我搜查 I2C 背包的垃圾箱时,我空手而归。乐观地说,订购一个需要一个月的时间,所以我做了一个。大多数都是由端口扩展器构建的,无论是 MCP230* 系列还是 PCD8574。我手头有一个 MCP23008 管,所以我围绕那个芯片做了一个子板。