我希望能够使用Arduino控制约100个独立的LED。问题在于Arduino没有足够的引脚可以为此配置。解决这个问题的方法是什么?是否有芯片可以对来自Arduino的更复杂的信号进行解复用,然后可以控制LED?还是有其他解决方案?
我希望能够使用Arduino控制约100个独立的LED。问题在于Arduino没有足够的引脚可以为此配置。解决这个问题的方法是什么?是否有芯片可以对来自Arduino的更复杂的信号进行解复用,然后可以控制LED?还是有其他解决方案?
Answers:
首先,Arduino无法直接驱动100个LED,因为设备必须提供或吸收的总电流将远远超过微控制器和Arduino板上的稳压器。不过,具有自己的电源和调节功能的定制Arduino Shield可能很合适。
有几种简单的方法,最简单的方法如下:
TLC5940每个IC可驱动16个LED,并通过SPI接口的微小变化通过串行输入进行控制。最多可以级联40个TLC5940器件,但是其中7个足以驱动问题中的100个LED。
有至少一对的Arduino的文库(1,2)为TLC5940。
建议从Arduino发送的时钟速率以及相应的刷新速率:
这基于数据表中的公式:
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的指南。
同样,这些IC是为驱动7段数字LED显示器而设计的,它们提供独立的LED控制,因此每个IC最多可用于40/64个LED。其中的两个/三个可以连接到Arduino SPI总线上,以驱动所需的100个LED。
设计说明与上一节相同。同样,单个LED的最大亮度将低于MAX7219的直接多重设计。
可能有一些YouTube视频很有趣。
这些都是在不同程度的简单性和成功度下使用的方法。它们比上述3种方法更为复杂,因此不再赘述。如果需要,在网络上搜索将为这些方法提供有用的指南。
这种设计的一个主要刺激因素是在每个LED或LED串上都需要电流控制电阻。专为LED驱动设计的设备通常不需要此功能。
对于最后一组选项,我没有亲身经验,因此无济于事。
脚注:回答此问题后,我发现了一个较旧的问题,该问题的答案在我的上一节中详细讨论了几种方法。该线程使有趣的“作为家庭作业的进一步阅读”。