亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

如何使用 DAC 和定制 PCB 生成高精度波形

在本文中,我们'将开发固件,作为高精度、高速信号生成的基础。

我最近设计了一个任意波形发生器 (AWG) PCB,该 PCB 围绕 C8051F360 微控制器和 ADI 公司的 TxDAC 构建。

这两个 IC 通过并行接口进行通信,该接口允许我通过寻求微控制器将数据传输到 DAC 的最大速率来生成更高频率的模拟信号。

在本文中,我不会特意解释硬件设计的各个方面,因为我已经在一系列准备性技术文章中广泛讨论了原理图和布局。其中三篇文章重点介绍原理图的特定部分(即微控制器、DAC 和 DAC 的输出电路),第四篇介绍布局。

目标

该项目的目标是创建固件框架,使我们能够方便地将数字数据从微控制器传输到 DAC,然后将该数据转换为模拟信号。该 AWG 板具有一些有趣功能的潜力,但最重要的一步是在 MCU 和 DAC 之间建立可靠、可扩展、高精度的接口。我们将通过生成斜坡波形和执行一些示波器分析来验证此接口。

要求

高精度计时

许多微控制器应用几乎不需要高精度计时。这就是为什么我们可以如此频繁地创建成功的设备,其中唯一的时钟源是 MCU 的低精度内部振荡器。但 AWG 不同。我们希望生成的信号尽可能与作为源材料的理想化数学波形一致,这意味着我们需要可预测的信号频率和一致的 DAC 采样率。

高效使用处理器

虽然这个特殊的 PCB 几乎完全用于生成波形,但我们需要确保这个固件加硬件框架可以很容易地合并到其他应用程序中。因此,我们希望我们的固件能够生成稳定、高精度的波形,但又不会使处理器完全无法用于其他任务。

最大速度

我们生活在一个高频世界中,如果该 AWG 最大频率为 1 kHz,则它几乎没有用处。平心而论,这是一个简单、低成本的设计,我们不能指望它能创建 915 MHz DQPSK 波形,为 ISM 频段传输做好准备。但是我们希望从该设备中获得尽可能多的带宽,当我们记住采样频率明显高于实际信号频率时,这更具挑战性。尽管有 Nyquist-Shannon 定理,但我希望每个周期至少有五个样本,而十个是我的偏好。因此,即使我们设法将采样率提高到 10 MHz,我们的波形也会在 1-2 MHz 范围内下降。

硬件设计已经反映了优化速度的重要性:我选择了一个以高达 100 MHz 的核心频率运行的微控制器,并且我实现了一个并行总线,以最大限度地减少将数据从 MCU 的存储器移动到 DAC 输入引脚所需的开销。

采样率

AWG 板具有高性能时钟源(MEMS 振荡器,整体频率稳定性为 ±50 ppm)。固件需要使用这个时基来创建一个稳定的时钟信号来驱动 DAC 的更新电路。当我想要高质量的定时信号时,我总是求助于硬件,在这种情况下,我使用可编程计数器阵列 (PCA) 从 10 MHz 外部振荡器生成 500 kHz 时钟。

我使用 Silicon Labs Config2 程序进行硬件配置,因为集成到 Simplicity Studio 的配置工具不支持 C8051F360。以下是 PCA 模块的一般配置:

PCA 已启用且时基为系统时钟。此时系统时钟频率与外部振荡器频率 (10 MHz) 相同,但稍后我们将使用微控制器的锁相环来获得更高的内核频率。 DAC的时钟信号由配置为“频率输出”模式的PCA模块0产生:

让我们来看看采样率时钟。我的泰克 MDO3104 示波器具有一些相当先进的测量功能,可帮助我们评估其质量。

示波器捕获底部显示的测量结果证实,频率完全符合预期 (500 kHz),我们也有完美的 50% 占空比;此外,“Min”和“Max”统计数据表明频率和占空比随时间稳定。

此测量功能的一个特别有用的补充是标准偏差(“Std Dev”)。标准偏差表示值倾向于偏离平均值的程度,在这种情况下,这是评估时钟信号频率和占空比缺陷的一种快速简便的方法。两个标准偏差都非常低:13.54 Hz 是标称频率的 0.0027%,而 2.117×10 –3 仅为典型占空比的 0.0042%。

我们可以通过查看其中一个时钟边沿的直方图来进一步分析。如果我们将示波器设置为在下降沿触发,然后在上升沿放大,上升沿的位置会根据信号的抖动而移动。然后我们可以添加一个水平波形直方图来跟踪这种抖动并揭示其分布。不过,在这种情况下,没什么可看的,因为抖动非常低。

外部中断

我们现在有一个控制 DAC 输出电路的方波;下一个任务是将 MCU 的数据更新与此方波同步。我们将通过将外部中断连接到输出时钟信号的 PCA 引脚来实现。 DAC 在 上升 上锁存输入数据 时钟的边缘,因此我们要更新下降上的数据信号 边缘。这种对边技术是确保在输入设备收到有效时钟边沿之前更新和稳定数字数据的基本方法。

因此,我启用了外部中断 0(表示为 /INT0),将其连接到时钟信号输出引脚(P0.7),并使其对下降沿敏感。

您可能习惯于使用外部中断来监视输入 信号,但在这种情况下,它可以同样有效地将固件事件与微控制器本身生成的信号同步。当您处理时间要求严格的任务时,这实际上是一个特别方便的策略,因为外部中断 0 是最高优先级的中断,并且因为它的中断挂起标志由硬件自动清除(这消除了需要的任何时间)使用固件声明清除标志)。

ISR

主要操作发生在 /INT0 中断服务程序中。下一个 DAC 数据字节从内存中检索(或直接由微控制器生成),然后驱动到 P2;我使用 #define 语句使“DAC_WORD”成为“P2”的替代:

SI_INTERRUPT(INT0_ISR, INT0_IRQn)
{
DAC_WORD–;
}

使 DAC 更新速率最大化的关键变量是执行 ISR 中的指令所需的时间量。 (在本例中,我们只有一条指令,但情况并非总是如此。)必须在 DAC 时钟的每个活动沿调用一次 ISR,并且我们不能在它执行完毕之前调用 ISR。因此,当我们尝试将带宽推到最大时,我们需要尽我们所能来最小化 ISR 的执行时间,然后我们将相应地设置我们的 DAC 时钟频率。

上面显示的单个语句 (DAC_WORD–) 创建了一个斜坡波形,因为 DAC 值线性减小到零,然后翻转到 255 并再次开始减小。这是 DAC 的输出:

您可能已经注意到,模拟斜坡部分增加 朝着最大电压,而 DAC 值减少 向零。这是因为 DAC 的输出放大器使用反相配置。

在完成之前,让我们看一下最后一次示波器捕获。

阅读更多信息......

如何使用 DAC 和定制 PCB 生成高精度波形


制造工艺

  1. Python 和 Raspberry Pi 温度传感器
  2. 如何检查和校准湿度传感器
  3. 如何使用 DAC 和定制 PCB 生成高精度波形
  4. 使用 Arduino 和智能手机的 DIY 电压表
  5. 使用 Arduino 和 RDA8057M 的 FM 收音机
  6. 仅使用 Arduino 的精确时钟
  7. 如何使用 Vixen Lights 和 Arduino 配置 NeoPixels
  8. 如何使用 Arduino 和 Processing IDE 制作指南针
  9. 如何选择PCB原型制造公司
  10. PCB 制造为何如此精密?
  11. 常见的PCB制造错误,以及如何解决它们
  12. 印刷电路板及其功能如何?