arduino可以控制多少个单独的灯


19

我想使用常规的Arduino板来控制LED-我可以从板上单独控制的最多的灯是什么?

有没有关于如何连接它的教程?


3
您需要指定是要控制一个还是多个LED。另外,我将添加“避免串行控制和附加IC”。如果刷新率或硬件部分不受限制,答案往往是无限的。
ppvi 2010年

Answers:


26

我相信使用Charlie-plexing N线可以控制N *(N-1)个LED。维基百科上有一篇很好的文章。

我的一个朋友Jimmie P.Rodgers在Arduino Shield上安装了126个LED。他使用charlie-plexing来控制LED。有关其董事会的一些信息,请访问 -jimmieprodgers.com/2009/12/my-development-process/(archive.org副本)


在上一次波士顿Arduino用户组会议上,吉米·罗杰斯(Jimmie P. Rodgers)绘制了一个Charlie-plexing图,将其作为带有标记网络的矩阵。以这种方式绘制的示意图似乎在传达概念方面做得很好。我创建了一些类似的示意图-请参阅http://wiblocks.luciani.org/FAQ/faq-charlie-plex.html


今天学到了一些新东西;你有我的支持:-)
乔纳森

4
请记住,此方法一次只能打开N-1个LED。
AngryEE 2011年

2
jimmieprodgers.com此答案中的链接装有病毒。
Vivek Maharajh,2016年

1
@vivekmaharajh:我将链接替换为原始页面的archive.org副本的链接。
戴夫·特威德

13

您可以使用移位寄存器(http://en.wikipedia.org/wiki/Shift_register)从单个串行流中获取任意数量的并行输出。

您将需要考虑功率限制。我实际上从未亲自使用过Arduino,但我假设它与PIC一样具有电流限制。同样,移位寄存器本身也会有电流限制。如果遇到这种情况,您将需要使用MOSFET之类的东西来控制LED,而不必直接从微控制器获取很多功率。


7

任何给定的AVR微控制器引脚都可以提供高达40 mA的电流,并且芯片所提供或吸收的总电源(即在接地和Vcc引脚处)必须低于200 mA。

对于需要大量LED的情况,Charlieplexing是一个很好的解决方案,但是一次只能点亮一个LED 。标准的Arduino板(例如Duemilanove)提供17个“免费” I / O引脚,不计算TX,RX,复位或引脚13。因此,您可以连接17 * 16 = 272个LED。这可以很好地工作,特别是如果您保持一个LED点亮,或仅在几个LED之间快速扫描时。但是,如果您尝试使用某种模式照亮整个矩阵,则会发现每个矩阵都开启(略少于)时间的1/272,因此,如果您的驱动电流在任何给定时刻为30 mA,则每个LED平均电流约为0.1 mA,非常暗。

如果您不需要那么多的LED,而是需要更高的亮度,则传统的多路复用可能是更好的选择。在这种情况下,您可以将矩阵中的某些行用作行,将某些行用作列。如果使用10 mA LED电流,则可以定义一个4列13行的矩阵,其中一行中的所有4个LED一次可以打开,然后扫描各行。然后,每行在时间为10mA时接通时间的1/13,因此平均LED电流可以高达0.76 mA,但您只能得到4 * 13 = 104个LED。(每个LED绝对比字符复合照明更亮。)

最后一个示例中的限制是AVR上每个引脚40 mA,因为每行驱动引脚源4x10 = 40 mA。如果允许将外部晶体管(价格便宜且体积小)添加到行输出,则可以避免该特定限制并变亮。例如,您可以制作一个8x9阵列,具有8行9列,总共72个LED。通过晶体管选择同时打开8行之一。给定行中的所有9个LED一次最多可以打开,以20 mA驱动,因此180 mA来自晶体管,因此您处于AVR的电流限制之下。现在,每个LED的平均电流为20 mA / 8 = 2.5 mA,通常比较亮。


6

这里有一个非常不错的详细教程其中包含有关使用Arduino运行8x8x8 LED立方体的部分。(不要错过他们制作的YouTube电影)

在此处输入图片说明


看起来像是我在1979年左右在明尼阿波利斯的UFO展览上看到的东西,但我记得那是在4096个微型灯泡附近。还有其他人记得看到类似的东西吗?
超级猫

4

有很多使用SPI或I2C总线的I / O扩展器。使用单个MSSP模块,您可以控制几乎无限量的数字输出,例如LED。

有关以下部分,请参见Microchip数据手册或应用笔记:
SPI- MCP23S08
I2C- MCP23008


1

通过17个I / O引脚,17个NPN晶体管(发射极跟随器来提高电流),应该不会出现任何问题,以1/17占空比任意组合显示272个LED,平均电流或0.7mA(200mA / 272),受以下限制:该芯片一次可拉低200mA的能力。添加一个二极管以得到0.7伏的压降,这将允许再添加17个LED(将占空比降低至1/18),尽管亮度不会与其他LED完全匹配。


您能否在这里说明您建议的电路类型?发射极跟随器是BJT拓扑。
凯文·维米尔

@reemrevnivek:参见上面的编辑。我一直在精神上折腾一些变化,而他们却混在一起了。如果要增加晶体管来增强高端驱动器而不是低端驱动器,则它们必须是BJT晶体管。如果两者都使用晶体管,MOSFET可能更好。
supercat

0

温德尔·奥斯卡(Windell Oskay)提出了一个很好的论点,即104个LED最多而不增加晶体管,而汤姆·伊戈Tom Igoe )发布了由单个Arduino Mega直接控制的128个LED矩阵的照片-没有额外的晶体管(分立或集成)。

Tom Igoe是否通过短暂超过数据表中列出的“每个引脚的绝对最大电流”来“作弊”?


2
不,他通过使用arduino mega作弊。:)大型IO引脚比普通arduino多得多。
Christopher Biggs,

@unixbigot -悲伤,我希望看到涉及复位引脚为LED驱动,或二极管压降使用复用冷静的黑客..
凯文·维米尔

1
您的链接已死,您可能应该链接到Windell Oskay的答案。发布时似乎并不重要,但是随着更多答案的出现,您的发布与其他发布变得越来越遥远。
凯文·维米尔

@KevinVermeer:通过指向原始页面的archive.org副本来修复链接。
戴夫·特威德
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.