电子发烧友App

硬声App

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

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

3天内不再提示
电子发烧友网>电子资料下载>电子资料>STEM项目之构建基于继电器的二进制计数器

STEM项目之构建基于继电器的二进制计数器

2022-10-18 | zip | 0.17 MB | 次下载 | 免费

资料介绍

描述

这是一个疯狂的项目,但有趣且具有教育意义。也许这是一个很好的 STEM 项目。继电器又大又吵。构建一个基于继电器的二进制计数器是一种有趣的方式来向孩子(也许还有一些成年人)展示数字电子设备的工作原理

语境

为什么我们对触发器或二进制计数器感兴趣?这些是数字电子产品的基本组成部分。每个微处理器微控制器都由寄存器组成,其中存储数字并进行数学处理。触发器是寄存器中的基本元素——它存储 1 位,我们的二进制计数器基本上是一个计算机寄存器。在操作我们的计数器时,我们每次计数都会增加存储在该寄存器中的值。

在微处理器中,触发器由微型晶体管制成,但它们的作用与我们的继电器触发器相同。一个典型的微处理器有几十个寄存器和几千个触发器。该项目可能会为最基本的数字电子操作提供一些见解。

对我来说,这个项目是怀旧的,因为我在 1960 年第一次用继电器构建了一个二进制计数器,当时微控制器或个人计算机甚至还没有出现!我是一名 16 岁的高中生。我最初的项目是一个 10 级计数器,由某人给我的 20 个剩余继电器制成。这对其他孩子来说很有趣,因为它在运行时发出了可怕的球拍。最后我把它捐给了我的高中物理课。

这个项目也有历史成分。计算机从来都不是用继电器制造的——它们太慢了。最大时钟频率约为 20 Hz。但是当我用继电器构建我的第一个二进制计数器时,计算机触发器仍然是由两个真空管制成的!除了速度慢之外,继电器触发器看起来还不错!

我们将在 2021 年将项目与我在 1960 年所做的相提并论,使用 Arduino 控制我们的计数器并显示计数,但想法仍然相同 - 使用两个 DPDT(双刀双掷)继电器构建一个触发器,然后使用我们的五个继电器触发器构建一个二进制计数器。

继电器触发器

那么从哪里开始。首先,让我们看看我们如何用继电器构建触发器。最简单的方法是设置/复位触发器或数字锁存器。

latch_s3kD4KJfLH.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

简单的触发器锁存器

在上图中,继电器 B 开启,A 关闭。机械闭合继电器 A 和 B 关闭,锁存 A 闭合,机械闭合 B 和 A 关闭,锁存 B 打开。

但是我们的二进制计数器需要一些更复杂的东西。我们需要一个拨动触发器。切换触发器具有单个输入。给它一个脉冲,它就会锁存。再给它一个脉冲,它就会解锁。它基本上除以二。

toggle2_jLrkjv1iwk.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

每个输入脉冲导致输出改变

正如我们已经说过的,继电器中的触发器比锁存器复杂一点。它需要两个 DPDT 继电器,接线如下图所示。

toggle_W0OnUhIMMo.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

但它是如何工作的?通过稍微不同的方式绘制它更容易看出它是如何工作的。

how_it_works_02BjhIe3vY.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

上图显示了首次上电时如何配置继电器。两个继电器都不打开。按下按钮,一条路径闭合,为继电器 B 通电。为继电器 B 通电使我们的两个继电器线圈串联,但我们的按钮也在继电器线圈 A 周围分流(或短路)电流,所以现在,继电器 B 开启并且继电器 A 关闭。但是释放我们的按钮会移除 A 周围的分流器,两个继电器现在都打开了。但是请注意,我们的按钮的情况现在颠倒了。再次推动它分流并打开继电器 B,断开两个继电器线圈之间的连接。现在释放我们的按钮会移除线圈 A 的电源,现在两个继电器都关闭,这是我们开始的情况。

因此,按下并释放按钮以锁定两个继电器。再次按下并释放,两个继电器都会解锁。我们的拨动触发器除以二。这正是我们构建二进制计数器所需要的。

12_volt_relay_VBebRctW4N.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

12伏继电器

以上是我们使用的 12 伏继电器。我选择这个继电器是因为它是一个相对便宜的剩余继电器——亚马逊 2.40 美元,eBay 1.50 美元,如果你可以等一个月从中国买到的话。

在我们的触发器配置中连接其中两个继电器如下所示:

relay_wiring_9GHebEBFol.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

在下面的照片中,您可以看到两个继电器是如何连接起来以产生上述配置的。红线是+24伏。黑色是地面。黄色和绿色线是我们的输入。我们需要 24 伏电压,因为有时我们的继电器线圈是串联的,它们需要闭合。这不适用于我们在 12 伏下运行的 12 伏继电器。(我尝试了 15 伏,但也没有用。)

img_2367_9y5LTOp6ls.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

现在让我们看看我们的触发器在起作用。

在上面的视频中,我们使用 Arduino Uno 和继电器模块作为触发器的输入。多亏了我们继电器内置的 LED,您实际上可以看到触发器在锁定和解除锁定时经历了我们上面描述的四个步骤。

Arduino 还没有做太多,老实说,这个项目并没有真正关注 Arduino。但是稍后,当我们建立计数器时,我们将使用它来以十进制显示计数器的输出。

关于电源的说明:我们的继电器线圈在 12 伏电压下正确供电时会消耗 75 毫安或 0.9 瓦。当以 24 伏供电时,它们消耗两倍的电流并耗散 3.6 瓦。它们像那样工作得很好,但随着时间的推移会变热并消耗大量的能量。我建议像这样使用它们进行几分钟的简短演示,而不是连续使用。

二进制计数器

所以现在我们可以再把四个继电器触发器放在一起,构建一组触发器作为计数器,每个阶段的输出成为下一个阶段的输入。下面是我们连接在一起的人字拖组。第一阶段目前在右边,但是当我们翻转它时,我们的计数器将从左到右移动。所有接线均使用 22 号裸镀锡铜线完成。

img_2369_yDslmO5J5w.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

所以现在让我们将我们的触发器库连接到 Arduino 和我们的继电器模块。它们一起形成了一个 6 级计数器,继电器模块作为第一级,我们的触发器作为下一个 5。我们的计数器可以在重新开始之前从 0 计数到 63。

但是有问题!我们从 0 到 63 的漂亮计数器显示在哪里?它确实存在,但不是我们想要的形式。继电器模块上的红色 LED 和继电器触发器上下方的绿灯实际上显示了我们正在寻找的计数器,但它是反转的,这意味着打开的 LED 为 0,关闭的 LED 为 1。下方的绿灯告诉我们下继电器打开。我们的计数被反转的原因是因为我们计数器的第一个输入脉冲打开了我们计数器中所有较低的继电器——它们都打开了;下方的绿灯全部亮起;那时我们的计数器为 0!

早在 1960 年,我最初的基于继电器的二进制计数器就没有这个问题。我实际上使用了带有额外极点或开关的 3PDT 继电器来显示结果。由于那时我们没有 LED,我实际上使用连接到第三极开关的小霓虹灯来显示计数。

显示我们的二进制计数

我们只需要双极继电器来构建我们的触发器,但是两个继电器上的所有极都在使用中。所以要显示我们的计数器的输出,我们需要从正确的信号环顾四周。正如我们已经说过的,下继电器的状态是一个良好的信号,但它是反相的。因此,为了正确显示计数器的输出,我们需要构建一个带有一些逆变器的小板。要反转信号并驱动 LED,我们需要一个晶体管和两个电阻器

inverter_5RmO75FbsI.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

以上是我们需要在计数器的每个阶段反转下继电器的状态并显示计数的内容。另一个好处是我们的 LED 实际上提供了一个数字输出,我们可以将其发送回 Arduino 以十进制显示我们的计数器的输出。LED 在关闭时处于 0.7 v. 或 LOW(晶体管的基极-发射极结的正向压降),在其开启时处于大约 3.2 v. 或 HIGH(我们使用蓝色 LED 的高正向压降)。更多关于在一分钟内将我们的计数发送到 Arduino 的信息

img_2382_VLNWK2SOB7.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

所以上面我们有一块板子,上面有 6 个逆变器和蓝色 LED。需要注意的一点是第一级(最左边)的基极电阻是 15K 欧姆而不是 100K。那是因为它的 5 伏信号直接来自 Arduino,与其他来自 12/24 v 继电器高端的信号不同。

下面,我们将它付诸实践。在这段视频中,我将电路板旋转了 180 度,所以现在我们的二进制计数器从右到左读取(右侧的最低有效位),与我们通常显示数字的方式相同。

上面是使用我们的逆变器和蓝色 LED 来显示我们的二进制计数的计数器的视频。我们在这里以 250 毫秒计算。每个计数,所以我们从 0 计数到 63 并每 15 秒重新开始。

将输出转换回十进制

首先,在我们继续之前,让我们添加一个计数器。我偶尔会看到我的柜台跳过一个节拍。这似乎是第一个未能锁定的触发器。考虑原因,我得出结论,继电器模块触点可能会弹跳。所有机械开关在接触时都会有一点反弹,从而增加了数字“噪音”。所以这可能是原因。我在继电器模块的输出端直接添加了一个 0.01 mfd 电容器以抑制任何噪声。当它完全解决问题时,我感到很惊喜!

img_2385_y0Iu00UJ9s.jpg?auto=compress%2Cformat&w=740&h=555&fit=max

所以现在,让我们比我在 1960 年能做的更进一步。让我们使用 Arduino 读取我们的二进制计数器并将结果显示为十进制数。当然,我们可以先将发送到计数器的脉冲相加并得到正确的数字,但读取二进制计数器并将输入转换回十进制数字会更有趣。

我们将 LED 的阳极连接到 Arduino 的引脚 5-10,我们将其置于数字读取模式。(引脚 5 指向最不重要的 LED,10 指向最重要的 LED,等等。)为了将二进制数据收集到单个数字中,我们读取每个引脚并将其内容左移其重要性,将所有六个加起来,然后我们将我们的数字存储在一个整数变量中(仍然是二进制)。(有关详细信息,请参阅软件。)

现在剩下的就是显示它。为此,我使用 ss_oled 库的 1 英寸 OLED 显示器。显示器在引脚 A4 和 A5 处使用 i2c 接口。我不会在这里详细介绍如何使用显示,但我在这里所做的与库中的示例基本相似 - 没什么复杂的。

关于软件的一个注意事项是,我们必须在增加计数后等待几毫秒,然后才能从显示器读取它。那是因为继电器打开和关闭需要时间,并且更改需要额外的时间才能沿着我们的触发器链传播。我实际上正在等待整整 50 毫秒。在阅读柜台之前!顺便说一句 - 触发器链的传播延迟是限制真实计算机速度的主要问题之一。微控制器设计人员通过各种技巧来避免它并最大限度地提高现代处理器的时钟频率!

但是您可能想知道如果我们不担心显示和传播延迟,我们可以使计数器运行多快。这是答案。

它仍然没有那么快 - 数到 64 大约需要 4 秒。大约是 16 Hz。在某些时候,向计数器发送脉冲的速度有多快并不重要。继电器只能如此快速地打开和关闭,所以在某些时候,它们开始忽略额外的脉冲!为了让显示器正常工作(同样是因为触发器链的传播延迟),我们需要一个较慢的速度,大约是我们最大速度的 1/2。

软件

您在带有 OLED 显示屏的视频(从这里开始的第二个)中看到的是本教程提供的 Arduino 草图。当前设置为每秒 4 次计数,但您可以在开头使用 #define 语句加快或减慢速度。它可用于本教程中显示的项目的所有不同阶段。此草图中使用的 ss_oled 库可以直接从 Manage Library 工具下载。应该已经安装了 stdlib.h 库。

最后的想法

这就是我们的项目!也许是一次很好的学习经历。也许让我们对今天我们都认为理所当然的数字硬件中发生的一切有了更多的了解和欣赏。正如我一开始所说,对于一群年轻的数字电子爱好者来说,也许是一个很好的 STEM 项目!

我在 1960 年的原始项目在某些方面比这个项目更容易。我想我使用的是 24 伏交流继电器——我不记得处理过直流电源。我认为一个 24 伏变压器为整个设备供电,这意味着它可以关闭两个串联的 24 伏继电器,所以我不必像这次那样以推荐电压的两倍来操作我的继电器。我的继电器上有一组额外的触点。不需要额外的电路来显示计数器的状态——一个霓虹灯和电阻器就可以了,直接从交流线路供电。当然,我没有 Arduino 或类似的东西将我的二进制数转换回十进制数。

在我们当前版本的计数器中,我们使用 Arduino 为我们的计数器生成输入脉冲。您可能想知道这在 1960 年是如何实现的。还有另一个继电器电路,我们不会在这里介绍,但它是一种使用几个继电器以及一个电位计和电容器创建多谐振荡器电路的方法 -比较简单的电路。它为我原来的计数器提供了一系列可调速率的脉冲。

您可能还想知道基于继电器的触发器的想法最初来自哪里。我在某个地方找到了它,但就像我们所有人都大到可以记住互联网之前的生活一样,我很难记住我们在没有互联网的情况下是如何相处的!我不知道我是如何或在哪里找到它的!

下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费