通过环形振荡器、555 定时器和 Arduino 进行数字方波发生器设计

描述

  了解使用环形振荡器、基于 555 定时器的振荡器和 Arduino 生成的方波振荡器的数字方波发生器。

  之前,我们介绍了 设计方波振荡器即 运算放大器(运算放大器) 和基于晶体管的模拟实现 非稳态多谐振荡器。在本文中,我们将研究实现 方波

振荡器,同时讨论其优点和局限性。

  在深入研究之前,让我们注意,我们将分析三个示例:

  环形振荡器

  基于 555 定时器的振荡器

  用于产生方波振荡器的 Arduino

  使用环形振荡器的方波发生器

  环形振荡器具有相当简单的架构,它利用一串 逆 变 器 最终输出馈入第一个输入,形成一个环,如图1所示。

  振荡器

  图1. 通用环形振荡器架构

  不仅架构简单,而且该电路的操作也很简单。启动时,让我们假设 INV1 从逻辑 0 转到逻辑 1。随着该逆变器的输出开始上升,一旦INV的跳变点2

命中,该输出将开始减少到逻辑

0。这种连锁反应一直持续到最终逆变器INVN,然后该输出反馈到起点以维持反应。总体而言,该反应会产生恒定的振荡,并且假设所有逆变器具有相同的上升/下降时间,将产生方波输出。

  为了使电路按所述工作,环中的逆变器数量(在图1中用N表示)必须是奇数。这个要求是必要的,因为正如我们在图1中看到的,任何逆变器的输出,INVX,其中

X 是偶数,将具有补充 INV 输出的输出1.如果此值反馈给

INV1,不会有任何变化,因此也不会振荡。虽然在这个简单的例子中,我们只使用逆变器,但您可以使用任何 逻辑门

在整个电路中。但是,在这个环形示例中,必须有奇数个反相级才能振荡。

  现在,您可能会问的一个问题是:电路的哪些方面决定了工作频率?基本上,每个逆变器的固有延迟(td),阶段数 (N) 根据等式确定:

  f=12tdNf=12tdN

  由于 td 通常很小,并且希望最小化N,频率通常很高,大约为数百

MHz甚至GHz。对于低速应用或精确的频率控制,用户通常必须为每个逆变器的输出增加一个负载,最简单地通过 遥控电路,如图2所示。

  振荡器

  图2. 带RC负载的环形振荡器

  展望未来,假设所有逆变器都以 VDD2VDD2 跳闸,其中 VDD 是供应 电压,振荡频率变为:

  f=12(td+0.69RC)Nf=12(td+0.69RC)N

  接下来,假设 RC 》d,我们可以说振荡频率完全取决于RC时间常数和级数。

  至于优点,这种设计的简单性使其对高速振荡器设计具有吸引力;但是,对于较低的频率,很难控制这些频率。另一个缺点是,由于开关速率高,这种架构通常很耗电。

  使用 555 定时器作为方波发生器

  接下来,我们将讨论使用 555定时器。该通用IC用于:

  各种脉冲产生

  延迟

  定时

  振荡器应用

  几家公司创建的 555 计时器种类繁多,但我们将专注于 LM555 来自德州仪器。 数据表 第 7.4.2 节

说明了计时器的不稳定操作,正如我们从上一篇文章中知道的那样,这是我们感兴趣的。实现原理图如图3所示。

  振荡器

  图3. LM555 定时器设置,用于不稳定操作模式。图片由 德州仪器

  在这里, 电容器,C,由 电阻, R一个 和 RB.一旦它到达上跳变点(在计时器的情况下,V 的 2/3抄送),C 然后放电至 V 的 1/3抄送

通过 RB.此时,电容器再次开始充电,并且这种行为无限期地持续下去。由此,我们可以通过以下等式获得充电和放电时间以及振荡周期:

  trise=0.69(RA+RB)Ctrise=0.69(RA+RB)C

  tfall=0.69RBCtfall=0.69RBC

  T=trise+tfallT=trise+tfall

  f=1T=1.44(RA+2RB)Cf=1T=1.44(RA+2RB)C

  在这里,我们可以看到,我们不仅可以控制振荡频率,还可以控制 输出占空比。但是,这些不能短于 t秋天,这意味着占空比必须大于 50%,但如果 RB

》·一个。

  这种实现的优点是简单,需要最少的硬件,也是低速振荡器的稳定可靠的解决方案。至于限制,此设计不适用于需要小于50%的占空比或需要高速的情况。

  基于 Arduino 的方波发生器,使用 Arduino UNO R3

  最后,我们将讨论通过 Arduino 实现振荡器。对于我们的示例,我们将查看 Arduino UNO R3.该板的引脚排列如图4所示。

  振荡器

  图4. Arduino UNO R3 引脚排列。图片由 阿杜伊诺 [点击图片放大]

  对于我们的生成器,我们将使用 Arduino UNO 的数字 I/O

引脚,具体来说,D7。实现此解决方案不需要外部硬件,因为这都可以通过如下所示的Arduino程序定义:

整数频率 = 100; 以 Hz 为单位设置用户定义的频率值

int per_ms = 1e3*(1/频率);将一种状态(高或低)的时间设置为 T/2(以毫秒为单位)

int dutyCyc = 0.5;设置输出波形的占空比

void setup() {

引脚模式(7,输出);将 D7 设置为数字输出

}

振荡环

void loop() {

数字写入(7,高);将 D7 设置为逻辑 1

延迟(Cyc*per_ms);在逻辑 1 处保留 T/2

数字写入(7,低);将 D7 设置为逻辑 0

延迟((1-Cyc)*per_ms);在逻辑 0 处保留 T/2

}

在上面的代码片段中,我们声明了三个全局变量,允许用户设置频率和占空比。在本例中,我们可以创建一个占空比为 50% 的 100 Hz

输出,从而产生方波。从那里,我们可以使用“pinMode”功能在空隙设置块中初始化我们的数字输出引脚。接下来,我们可以进入一个连续循环,将D7设置为HIGH,并将输出保持在该值,时间等于占空比乘以周期。最后,我们可以将输出调至逻辑低电平,并在剩余的周期内将信号留在那里。因此,一旦Arduino打开,此循环将无限期地继续。

  如您所见,该软件实现允许高度灵活性,无需外部硬件。虽然这相当简单,但我们仅限于 Arduino

的带宽,除非我们在需要高速振荡器时使用外部振荡器来推动更高的频率。

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分