了解使用环形振荡器、基于 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
的带宽,除非我们在需要高速振荡器时使用外部振荡器来推动更高的频率。
-
振荡器
+关注
关注
28文章
3811浏览量
138859 -
发生器
+关注
关注
4文章
1362浏览量
61618 -
定时器
+关注
关注
23文章
3237浏览量
114435
发布评论请先 登录
相关推荐
评论