风筝
发表于: 2018-11-22 23:27:30 | 显示全部楼层

在本篇文章中,我们将学习如何基于Arduino开发板使用PWM驱动器TLC5940。TLC5940是一款16通道LED驱动器,提供PWM输出,非常适合扩展Arduino开发板的PWM功能。这款IC不仅仅带有LED,我们还可以使用PWM信号控制伺服系统、直流电机和其他电子元件。

How-To-Extend-Arduino-PWM-Outpits-TLC5940-Tutorial.jpg


基本参数

●    VCC = 3V至5V

●    16个通道

●    12位(4096步)PWM控制

●    驱动能力
             - 0 mA至120 mA(VCC> 3.6V)
             - 0 mA至60 mA(VCC <3.6V)

●    串行数据接口

●    30 MHz数据传输速率

●    菊花链连接


菊花链是一个很棒的功能,这意味着我们可以将多个TLC5970串联在一起。有了这个,我们可以将Arduino的PWM功能扩展到16个以上的输出,例如32、48或64个PWM输出,并且仍然使用与Arduino开发板相同的4个引脚来控制一个TLC5940。


本篇文章所需的组件如下所示:

●    Arduino Nano开发板

●    超亮红色LED灯

●    TLED驱动器LC5940


Arduino与TLC5940的接线方式

为了控制TLC5940,我们需要占用Arduino开发板的4个引脚。由于我们将使用由Alex Leone制作的TLC5940 Arduino库,我们需要根据他的库配置或使用以下电路原理图将IC连接到Arduino:

Arduino-and-TLC5940-Wiring-Circuit-Schematics.png

上面的电路原理图使用外部电源为LED供电,但如果所需电流总量不超过Arduino的极限(VCC和GND引脚直流电流的绝对最大额定值 - 200 mA),它也可以使用直接连接到Arduino的VCC网络。


我们还需要注意的是,TLC5940是一个恒流源电流,因此电流流向输出引脚。这意味着当连接LED时,我们需要将负极引线(阴极)连接到IC的输出引脚,将正极引线(阳极)连接到5V VCC。


我们还需要2个用于去耦的电容和一个用于控制流过输出的电流量的电阻。电阻值取决于我们要控制的组件,可以使用TLC5940数据手册中的下图进行选择。

TLC5940-Resistor-Value-Diagram.png

因此,根据图表,为了控制需要20mA电流的LED,我们需要一个2K电阻。


源代码

下载并安装由Alex Leone制作的TLC5940 Arduino库后,我们可以使用他的“BasicUse”演示示例来了解如何控制IC的输出。


这是我为本教程制作的一个简单代码,用于使用此库控制16个LED。阅读代码中的注释,以了解函数的工作原理。

  1. /*
  2. * Arduino and TLC5940 Tutorial - Simple Example
  3. * by Dejan Nedelkovski, www.HowToMechatronics.com
  4. */
  5. #include "Tlc5940.h"
  6. void setup() {
  7.   Tlc.init(0); // Initiates the TLC5940 and set all channels off
  8. }

  9. void loop() {
  10.   Tlc.set(0,4095); //(Output Pin from 0 to 15,PWM Value from 0 to 4095)
  11.   // Note: The previous function doesn't activates the output right away. The output will be activated when the Tlc.update() function will be executed!
  12.   
  13.   Tlc.update(); // Activates the previously set outputs
  14.   delay(1000);
  15.   // For activating all 16 outputs at the same time we can use a for loop for setting all of them to be set to PWM value of 4095. Then  the Tlc.updata() function will active them all at the same time.
  16.   for (int i = 0; i < 16; i++) {
  17.     Tlc.set(i, 4095);
  18.   }
  19.   Tlc.update();
  20.   delay(1000);
  21.   //The Tlc.clear() function clears all the outputs, or sets the PWM value of all outputs to 0
  22.   Tlc.clear();
  23.   Tlc.update();
  24.   delay(1000);
  25.   // This for loop will active all 16 LEDs one by one
  26.   for (int i = 0; i < 16; i++) {
  27.     Tlc.set(i, 4095);
  28.     Tlc.update();
  29.     delay(200);
  30.     Tlc.clear();
  31.     Tlc.update();
  32.     delay(200);
  33.   }
  34. }
复制代码

控制多个TLC5940

为了连接这些IC中的多个IC,我们可以使用与上面所示相同的电路原理图。 唯一的区别是第一个IC的SOUT(信号输出 - 引脚17)需要连接到第二个IC的SIN(信号输入 - 引脚26),依此类推。

LED-Photo-Frame-Library-configuration.jpg


至于编程部分,我们需要做一些修改。 在TLC5940库文件夹中,我们需要修改tlc_config.h文件,并将变量NUM_TLCS的值更改为串联连接的TLC5940的数量,在本例中,该值为2。完成此操作后,现在我们可以轻松定位从0到31的所有LED,并使用与前述相同的编程方法。

跳转到指定楼层
回复

使用道具 举报

cyrs
发表于: 2019-5-14 13:07:22 | 显示全部楼层

Alex Leone制作的TLC5940 Arduino库连接失效
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 705 | 回复: 1492



手机版|

GMT+8, 2024-11-24 11:07 , Processed in 0.045575 second(s), 6 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表