如何扩展 Arduino PWM 输出 – TLC5940 教程
在本 Arduino 教程中,我们将学习如何使用 Arduino 板使用 TLC5940 PWM 驱动程序。 TLC5940 是一款 16 通道 LED 驱动器,可提供 PWM 输出,非常适合扩展 Arduino PWM 功能。不仅是 LED,通过这个 IC,我们还可以使用 PWM 信号来控制舵机、直流电机和其他电子元件。
菊花链是一项很棒的功能,这意味着我们可以将多个 TLC5970 IC 串联在一起。有了这个,我们可以将 Arduino 的 PWM 功能扩展到超过 16 个输出,例如 32、48 或 64 个 PWM 输出,并且仍然使用 Arduino 板用于控制一个 TLC5940 IC 的相同 4 个引脚。
您可以从以下任何网站获取本教程的组件:
为了控制 TLC5940,我们需要占用 Arduino 板的 4 个引脚。由于我们将使用 Alex Leone 制作的 TLC5940 Arduino 库,我们需要根据他的库配置或使用以下电路原理图将 IC 连接到 Arduino:
上面的电路原理图是使用外部电源为 LED 供电,但如果消耗的电流总量不超过 Arduino 的限制(绝对最大额定值,直流电流 VCC),也可以仅使用 Arduino VCC 本身连接和 GND 引脚 – 200 mA)。
我们还需要注意,TLC5940 是一个恒流吸收器,因此电流流向输出引脚。这意味着在连接 LED 时,我们需要将负极引线(Cathode)连接到 IC 的输出引脚,将正极引线(Anode)连接到 5V VCC。
我们还需要 2 个用于去耦的电容器和一个用于控制流过输出的电流量的电阻器。电阻值取决于我们要控制的组件,可以使用 TLC5940 数据表中的下图进行选择。
所以根据图表,为了控制需要 20mA 电流的 LED,我们需要一个 2K 的电阻。
下载并安装 Alex Leone 制作的 TLC5940 Arduino 库后,我们可以使用他的“BasicUse”演示示例来了解如何控制 IC 的输出。
这是我为本教程编写的一个简单代码,用于使用该库控制 16 个 LED。阅读代码中的注释,了解函数的工作原理。
为了串联多个这些 IC,我们可以使用与上图相同的电路原理图。唯一的区别是第一个 IC 的 SOUT(信号输出 - 引脚 17)需要连接到第二个 IC 的 SIN(信号输入 - 引脚 26),依此类推。
至于编程部分,我们需要做一些修改。在 TLC5940 库文件夹中,我们需要修改 tlc_config.h 文件并将变量 NUM_TLCS 的值更改为串联连接的 TLC5940 IC 的数量,在我们的例子中该值为 2。完成此操作后,现在我们可以轻松解决所有问题从 0 到 31 的 LED,并使用与前面描述的相同的编程方法。
例如,在以下链接中,您可以查看我的 DIY LED Heart Photo Frame – Arduino 项目,我使用 2 个 TLC5940 IC 来控制 32 个 LED。基本功能
– 0 mA 至 120 mA (VCC> 3.6V)
– 0 mA 至 60 mA (VCC <3.6V)
Arduino 和 TLC5940 接线
源代码
/*
* Arduino and TLC5940 Tutorial - Simple Example
* by Dejan Nedelkovski, www.HowToMechatronics.com
*/
#include "Tlc5940.h"
void setup() {
Tlc.init(0); // Initiates the TLC5940 and set all channels off
}
void loop() {
Tlc.set(0,4095); //(Output Pin from 0 to 15,PWM Value from 0 to 4095)
// Note: The previous function doesn't activates the output right away. The output will be activated when the Tlc.update() function will be executed!
Tlc.update(); // Activates the previously set outputs
delay(1000);
// 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.
for (int i = 0; i < 16; i++) {
Tlc.set(i, 4095);
}
Tlc.update();
delay(1000);
//The Tlc.clear() function clears all the outputs, or sets the PWM value of all outputs to 0
Tlc.clear();
Tlc.update();
delay(1000);
// This for loop will active all 16 LEDs one by one
for (int i = 0; i < 16; i++) {
Tlc.set(i, 4095);
Tlc.update();
delay(200);
Tlc.clear();
Tlc.update();
delay(200);
}
}
Code language: Arduino (arduino)控制多于一个 TLC5940
制造工艺