从Arduino获取大量(〜100)数字输出信号


19

我希望能够使用Arduino控制约100个独立的LED。问题在于Arduino没有足够的引脚可以为此配置。解决这个问题的方法是什么?是否有芯片可以对来自Arduino的更复杂的信号进行解复用,然后可以控制LED?还是有其他解决方案?


您的刷新率要求是什么?每个LED消耗多少电流?
vicatcu

刷新率约为1秒。每个LED大约8毫安。将由外部适配器供电-而非Arduino
Alexis K

有许多解复用解决方案。但是请考虑您的任务的复杂性;生成数据所需的算法是否适合Arduino的MCU的限制?有些任务可以,有些则不能,或者只能通过创建设计来满足,这些设计对于创建来说可能是相当令人满意的,但是可能会使代码维护变得困难。
克里斯·斯特拉顿

Answers:


22

首先,Arduino无法直接驱动100个LED,因为设备必须提供或吸收的总电流将远远超过微控制器和Arduino板上的稳压器。不过,具有自己的电源和调节功能的定制Arduino Shield可能很合适。

有几种简单的方法,最简单的方法如下:


  • TLC5940恒流LED驱动器,采用级联配置:

TLC5940每个IC可驱动16个LED,并通过SPI接口的微小变化通过串行输入进行控制。最多可以级联40个TLC5940器件,但是其中7个足以驱动问题中的100个LED。

有至少一对的Arduino的文库(12为TLC5940。

建议从Arduino发送的时钟速率以及相应的刷新速率:

  • 1 MHz GSClk在此线程中使用代码。
  • 330 KHz SCLK(串行数据时钟)
  • 因此,LED数据刷新率244 Hz

这基于数据表中的公式:

f(GSCLK)= 4096 * f(更新)
f(SCLK)= 193 * f(更新)* n
其中:
f(GSCLK):GSCLK所需的最小频率
f(SCLK):SCLK和SIN所需的最小频率
f(更新):整个级联系统的更新率
n:TLC5940设备的级联数量

TLC5940是一个恒定电流吸收器,因此LED的阳极将被连接到一个比LED Vf高几伏或大约7伏(以较低者为准)的电压,而与Arduino的电源引脚无关。该电压源必须能够提供100 *(无论以什么电流运行LED),但可以是不受调节的电源。

LED阴极进入各自的TLC5940 IC的驱动线。

TLC5940本身在数据写入期间每台设备最多消耗Icc = 60 mA,因此无法从Arduino给其中的7个供电,它需要提供一个独立的3.3至5伏稳压Vcc,理想情况下与该值相同。当然,使用的是Arduino的Vcc,地面走线需要连接回Arduino的地面。在与Arduino不同的电压下操作TLC部件将需要串行信号的电平转换,因此最好避免。

一些YouTube视频演示了如何将Arduino与级联的TLC5940 IC一起使用。


尽管这些IC是为驱动7段数字LED显示器而设计的,但它们提供了单独的LED控制,因此每个IC最多可用于64个LED。它们中的两个可以级联以驱动所需的100个LED。数据表的第13页显示了级联配置。

对于此设计,LED将必须作为多达8个LED的组进行电连接,每个LED共享一条阴极线(共阴极)。

MAX7219 / 7221是多路复用的LED驱动器,因此,如上一节所述,LED的最大亮度将低于静态LED驱动器。

这是一个有用的LED矩阵库,以及使用MAX7219的指南。

一些相关的YouTube视频(12)可能会感兴趣。


同样,这些IC是为驱动7段数字LED显示器而设计的,它们提供独立的LED控制,因此每个IC最多可用于40/64个LED。其中的两个/三个可以连接到Arduino SPI总线上,以驱动所需的100个LED。

设计说明与上一节相同。同样,单个LED的最大亮度将低于MAX7219的直接多重设计。

可能有一些YouTube视频很有趣。


  • 分立元件设计,移位寄存器,IO扩展器,带有独立控制器的可切割LED灯带,以及更多...

这些都是在不同程度的简单性和成功度下使用的方法。它们比上述3种方法更为复杂,因此不再赘述。如果需要,在网络上搜索将为这些方法提供有用的指南。

这种设计的一个主要刺激因素是在每个LED或LED串上都需要电流控制电阻。专为LED驱动设计的设备通常不需要此功能。

对于最后一组选项,我没有亲身经验,因此无济于事。


脚注:回答此问题后,我发现了一个较旧的问题,该问题的答案在我的上一节中详细讨论了几种方法。该线程使有趣的“作为家庭作业的进一步阅读”。



1
像74HC595这样便宜的移位寄存器?
Thomas E

另外,Max5951如何提供“单独的LED控制”-似乎只有7段控制(8引脚为8位数字),不是吗?
Thomas E

是的,那些。需要大量电阻器来保护LED,与专用IC相比,其布线复杂。
Anindo Ghosh

@ThomasE否:“ MAX6950最多可驱动5个7段数字或40个离散LED。MAX6951最多可驱动8个7段数字或64个离散LED。” 正如我的答案的MAX7219一节所述,只需将8个LED组连接到一条阴极线上。
Anindo Ghosh

2
@starblue Overkill v / s轻松实现DIY:由于一次性开发或业余爱好,由于Arduino库和Arduino社区内部的积极支持,TLC5940(在DigiKey的单价为3.78美元)是否仍不是最简单的解决方案?除非有您指出的其他同样受支持的部分,否则Arduino论坛会喜欢。
Anindo Ghosh
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.