电子发烧友App

硬声App

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

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

3天内不再提示
电子发烧友网>电子资料下载>电子资料>由Arduino Mega供电的8x8x8LED立方体

由Arduino Mega供电的8x8x8LED立方体

2022-12-13 | zip | 0.37 MB | 次下载 | 免费

资料介绍

描述

这是一系列项目中的第三个也是最后一个项目,旨在了解我们仅使用 Arduino Mega 可以创建多少 LED 立方体技术,即仅使用 Mega 本身而不需要充满移位寄存器和 LED 驱动器的 PC 板可以完成什么。为什么我要避免使用移位寄存器?因为它们对手线来说绝对是可怕的。(我试过了。)如果你想使用它们,你真的需要设计和制造一块 PC 板。

 

我们通常会通过将 64 个阳极放到主板上来构建一个 8x8x8 的立方体,它们将由一堆移位寄存器配置。然后我们将激活立方体中的八个层之一,并打开该层中相应的 LED 大约 1 毫秒。然后我们将重新加载我们的移位寄存器并激活下一层,等等。所以要以正常方式做一个 8x8x8 立方体,阳极的最小数字引脚要求是 64 个,阴极/层驱动器需要另外 8 个。那是 72 个数字引脚,如果不采取一些技巧,Mega 是不可能的。

我使用 Mega 的所有三个立方体项目都是在没有移位寄存器的情况下完成的。我们严格依赖 Mega 上可用的大量引脚。这个 8x8x8 的技巧是用一对平行但极性相反的 LED 构建我们的立方体的有点异想天开的方法。在一个方向上施加电压时,两个 LED 中的一个正向偏置并点亮。在另一个方向施加电压时,另一个 LED 正向偏置并点亮。我们的刷新程序轮流点亮一个,然后另一个。如果它们都被编程,它发生得足够快,我们可以同时看到它们。

poYBAGOX0JaAHFJHAACWh5GZhPA603.jpg
这个概念
 

使用这种方法,我们只需将 32 列 LED 连接到主板,因此无需任何移位寄存器即可直接从 Mega 数字引脚控制和为 8x8x8 立方体供电

我们一次只点亮一层,即便如此,该层中也只有一半的 LED。但是同时打开 32 个 LED,我们需要一个晶体管来处理电流因此,当我们想要点亮其阴极向下连接到主板的 LED 时,我们需要 8 个 PNP 晶体管来将我们的层拉高。当我们想要点亮阳极连接到主板的 LED 时,我们还需要 8 个 NPN 晶体管来将层拉低。如上所示,我最初的概念实际上会使用 16 个晶体管。但它也需要上拉和下拉电阻器和基极限流电阻器,所以我选择使用内置所有这些的八进制 NPN IC 和一个八进制 PNP 高端驱动器,同样所有电阻都已内置。我还决定,为了避免时间问题并避免需要逆变器只需从 Mega 上的单独数字引脚驱动两个八进制驱动器。它将总数字引脚数增加到 48 个,但使主板上的组件数保持在非常低的水平。(2个DIP IC和32个电阻)

我们可能同时打开 32 个 LED。为了将电流保持在 Mega 的最大电流限制以下,我们通过 220 ohm 电阻将返回电路运行到电路板,这将 LED 电流限制为 6 max x 32 = 192 ma.,略低于 Mega 的最大 200 ma。(如果您想知道,LED 的正向压降约为 3 伏,而我们的驱动晶体管的正向压降为 0.7 伏,因此从我们的 5 伏电源,我们得到 1.3 伏/220 欧姆 = 6 毫安/LED。)

刷新需要 16 个步骤 - 8 层用于阴极连接到主板的 8 层,8 层用于阳极连接到主板的位置。我们为这些步骤中的每一步打开 LED 500 微秒,因此我们的刷新周期大约需要 8 毫秒,加上加载数据的一点时间 - 为这 16 个步骤中的每一步配置 32 个引脚。但是,我们使用的是超高效的数据加载,首先是因为我们使用的是直接端口访问而不是 digitalWrite,而且因为我们已经设置了内存阵列和端口分配的组合,因此我们只需简单地完成这 16 个传输中的每一个将内存中的四个字节直接存储到数字输出端口中。事实证明,这种方法非常有效,以至于我无法测量它所花费的时间。所以我们的刷新只需要一点点多于 8 毫秒。我们将刷新率设置为 80 Hz,因此每 12 次刷新一次。5 毫秒。这意味着我们的 Mega 将 2/3 的时间用于刷新立方体,而将 1/3 的时间用于运行主循环。

关于我们的层驱动器和刷新例程需要注意的另一件事是,我们的高端驱动器和低端驱动器的输出都直接连接到层并相互连接。我们需要确保它们永远不会同时打开,因为这基本上会使我们的 Mega 的 5 伏电源短路。因此,刷新例程不仅不会同时打开它们,还会在层之间增加 3 微秒的“稳定时间”,以确保我们不会在立方体中出现任何不需要的瞬态电流。

所以上面我们已经描述了这个概念。它在现实中是如何工作的?好吧,我构建了立方体,它按描述工作。我认为构造实际上比传统的 8x8x8 立方体要容易一些。(尽管 512 个 LED 的引线成型和焊接从来都不是一件容易的事。)

在此过程中,我学到了一些东西。如果您决定构建这个立方体,您可能会考虑做一些与我不同的事情。这个立方体中的 LED 相距 0.6 英寸。这个 0.6 英寸的间距是我用于所有三个立方体的。我对这两个 5x5x5 立方体都非常满意,但发现完全看透这个 8x8x8 有点困难。您可能会考虑使用 3 毫米 LED 而不是我使用的 5 毫米 LED。或者使用带有 2 英寸引线的 5mm LED 并将间距增加到 0.8 英寸甚至 1 英寸。您可能还想修改我将 LED 焊接在一起的方式,这样您就不必直接焊接到 LED 封装的底部。我发现几个被热损坏的 LED 必须更换。最后,在施工期间测试一切。确保在最终构建立方体之前找到并更换任何有缺陷的 LED。那是因为在这个设计中坏的 LED 不仅仅是一个坏的 LED。事实证明,应该通过该 LED 的电流通过反向偏置对的迷宫找到了替代路径。打开的 LED 被一堆“半开”的 LED 取代,这些 LED 本来应该是关闭的。当所有 LED 都正常工作时,它工作得很好,但即使是一个有缺陷的 LED 也会让人知道它的存在。

 

建造

我通过构建 8 个垂直面板每个 8x8 LED 来构建这个立方体。要构建面板,第一步是引导形成并组装 32 对相对的 LED。

poYBAGOX0LmAaKCCAAYUoy0nS0w685.jpg
一对引线成型。阳极是直接伸出底部的那个
 

 

poYBAGOX0M-ANL8KAAgkCIH0SII252.jpg
这就是它们焊接在一起的方式。
 

阳极(最长的引线)是竖直向上的。另一个 LED 的阴极(较短的引线)焊接到垂直阳极上。然后将第一个 LED 的阴极焊接到第二个 LED 的阳极。通过在一块正好相距 0.6 英寸的木头上钻 2 个孔,可以方便地构建这些对。这些孔需要非常贴合地安装 LED,以便它们保持在原位。

当你有 32 对时,你就可以构建一个面板了。该过程从 8 对构建四个垂直列开始。

poYBAGOX0WeACK1FABFIoMQiZGc325.jpg
立柱的建造
 

我使用 BlueTack 将 LED 固定到位,直到可以焊接为止。我首先在 BlueTack 中每 0.6 英寸制作一次清晰的材料。这不是一个完美的过程 - 完成一列后,您需要清理它,这意味着使其尽可能垂直对齐,并确保从侧面出来的所有引线都旋转对齐;此外,引线是水平的,相距 0.6 英寸。

接下来,当您完成 4 列时,需要对它们进行测试。这是重要的一步。在这个阶段解决问题非常容易。如果您稍后在施工中发现问题,则修复变得越来越困难。

pYYBAGOX0aGAXDTkAAsqAr7PP8M605.jpg
测试列
 

我没有为测试做任何花哨的事情。背景中的 Uno 是 5 伏的电源,仅此而已。位于原型板上的 330 欧姆电阻器限制电流。我检查了每个 LED 以确保它亮起,首先用一个极性的电压来测试一半的 LED,然后用相反的极性来测试另一半 LED。如果一对中的两个 LED 都亮起,则其中一个是极性错误。如果两者都不亮,则可能有一个短路。

一旦我们有了 4 个好的柱子,就可以将它们焊接到一个面板中了。为此,我使用同一条 BlueTack 将两根柱子固定在一起,相距 0.6 英寸,将 8 根水平引线对齐并将它们焊接在一起。水平引线最初不会完全对齐。让一对夫妇排成一列并焊接它们,然后再排成两个并焊接它们,等等。最终你将把所有八个焊接在一起。确保面板是平的。确保它是方形的。确保它是直的。然后做同样的事情并添加另一列。当您以这种方式将 4 根柱子焊接在一起时,您就有了一个成品面板。

恭喜。现在再建七个!此时,您已准备好开始最终组装。我在主板上构建了我的立方体,但首先需要通过安装其他组件来准备主板。

pYYBAGOX0beAUWsBAAvaRETLV3I954.jpg
这显示了安装在板上的其他组件。
 

上面您可以看到主板上安装的两个 IC 驱动器和 32 个电阻器。电阻器安装在两个方向上相距 0.6 英寸。由于两个原因,在这张照片中看起来并不完全如此。首先,我让所有电阻器从它们各自的列返回到立方体的中心我这样做是为了防止 IC 附近的区域变得拥挤,但这可能没有必要。我先安装了 IC,事后看来,它们离立方体太近了。他们没有理由不能低一英寸。您可以清楚地看到,必须将一个电阻器安装在不合适的位置,因为它本来应该在 IC 的顶部。

pYYBAGOX0f6AF_70ABB6j9Jn-Pc467.jpg
安装元件后的电路板背面。
 

此图顶部的电阻器已焊接到位并经过修整,但尚未连接任何东西。两个IC显示在图片中间。高边驱动器在顶部,我用黑色记号笔将其标记为 A 表示阳极,将引脚 1 标记为 1。下面是低边 NPN 驱动器,标有 C 表示阴极。它的引脚 1 也标有 1。这两个 IC 以这种方式安装,以便它们的输出彼此面对。这是因为两者的输出都与层相关。我已经将它们彼此连接起来并稍微展开,以便从立方体返回的层可以下来并从另一侧连接到它们。连接采用镀锡铜线。

此时,我们已准备好将 50 根跳线连接到电路板的背面。有 32 个连接到电阻器,8 个连接到高侧驱动器的输入端,8 个连接到低侧驱动器的输入端,1 根地线和 1 根 +5 伏线连接到高侧的引脚 9驱动器,其源电压引脚。这些电线都是 30 厘米。长,并直接焊接到电路板背面的适当位置。另一端绕过电路板的一侧,并通过公跳线针连接到 Mega 上的针脚。此时您也可以使用某种形式的支架安装 Mega。实际上,我自己使用了几块小塑料方块和一点热胶来安装 Mega。

我们准备安装面板。安装面板包括将四根垂直柱引线推入电路板,平整层,然后将四根引线焊接到背面对应的电阻器上。

每个面板在安装后和安装下一个面板之前都需要进行测试。这样,如果有任何问题(冷焊点、死 LED 等),它可以在它卷到立方体中间之前修复。然而,在我们测试第一个面板之前,我们需要将层连接到电路板。这是通过将一根直的镀锡铜线连接到该层,然后降低到 8 个 IC 输出中的一个来实现的。并且不要忘记与 Mega 的接地和 +5 连接。+5 连接到高端驱动器的引脚 9。

poYBAGOX0gGAJ7hVAACThz3lvTI174.jpg
与主板的层连接
 

第 7 层(顶层)连接到低侧驱动器的引脚 18(第一通道)和高侧驱动器的引脚 11(第八通道)。第 0 层(最低层)到低侧驱动器的引脚 11 和高侧驱动器的引脚 18。

在这一点上,我们还需要将所有电线连接到 Mega。下表显示了 Mega 上的哪个引脚连接到每个电阻器。这些是红色和绿色的连接。与高端和低端驱动器的连接以蓝色显示。它们每个都直接从对应的输出连接到 IC。例如,输出到第 7 层的低端驱动器是 IC 上的引脚 18。引脚 18 的正对面是 IC 上的引脚 1,因此来自低端驱动器引脚 1 的导线连接到 Mega 上的引脚 9,如下图所示。

poYBAGOX0gWAEvBpAAFOlZPSc2E221.jpg
Mega 的引脚表,显示与主板的所有连接
 

至此,我们现在可以测试面板了。测试面板的程序包含在软件中。您需要在草图顶部告诉它您正在测试哪个面板。图片中正在测试的是面板 0。

 

一旦您测试了已安装的面板,您就可以安装下一个。您尚未安装将面板连接到每个附加层的水平导轨,因此您需要在您正在测试的面板和每层的面板 0 之间放置一个临时跳线。(我只使用了一根跳线并分别测试了每一层,将一根跳线从一层移到另一层。)

安装并测试所有面板后,您就可以连接各层了。这是通过在每一层的面板之间铺设一条直的镀锡铜线来实现的。

poYBAGOX0iiAV0jGAASNLD0c9AI213.jpg
在每一层上将面板连接在一起
 

从顶部开始连接层。并确保在连接顶层时测量 0.6 英寸的间距。一旦你连接了层,你的立方体就完成了,你应该可以运行主节目了。

软件

我们已经谈到了一些关于软件的内容。定时刷新中断程序是任何立方体软件的核心。我设计这个非常简单和高效。这需要使用两个不同的内存阵列来存储立方体中每个 LED 的状态。因此,一个存储阳极下降到板上的 LED 的状态,另一个存储阴极下降到主板的 LED 的状态。这两个数组通过它们在数组中的位置存储 x 和 z 值,并将 y 值存储为该位置的位。位设置为 1 表示 LED 开启,位设置为 0 表示 LED 关闭。同样,所有这些都非常有效,但是尝试弄清楚如何将立方体中的特定 LED 设置为打开或关闭可能会非常令人困惑。所以我们基本支持软件的另一个关键是 ledOn(x, y, z) 和一个 led0ff(x, y, z)。这些子程序完成了所有艰苦的工作,以确定需要更改这两个阵列中的哪个位以打开或关闭特定的 LED。

因此,通过打开或关闭任何特定 LED 的子程序,以及不断点亮和更新立方体以匹配我们阵列的内容的刷新程序,创建各种动画和特殊效果相当容易。我们的主要草图,称为展示,是为展示立方体的性能而创建的几分钟的动画。

在软件下还有另一个主题要讨论。节目中的大多数动画都是直接打开然后关闭 LED 的模式。有些人使用一点数学来控制这些模式。但在另一种类型的节目中有一些动画。这些基于称为精灵的对象类。sprite 类在多维数据集中定义了一个对象。sprite 中的对象可以移动、反弹、旋转等。它允许相当容易地创建一些动画,如果没有基于对象的代码将很难创建这些动画。


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

评论

查看更多

下载排行

本周

  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次下载  |  免费