Github:https://github.com/Emy-Lxo/TLC5925_Code.git
引言
TLC5925 是德州仪器(TI)推出的一款 16 通道恒流 LED 驱动器,广泛应用于 LED 显示屏、指示灯阵列、广告牌等场景。它通过串行接口接收数据,配合锁存器和输出使能控制,可以稳定驱动多路 LED。本文将从芯片特性、引脚功能、工作原理出发,给出可直接运行的驱动代码,并附上常见问题排查建议。
2. TLC5925 芯片概述
TLC5925 是一款 16 通道、恒流输出的 LED 驱动器,输出电流可通过外部电阻精确设定。它采用移位寄存器结构,支持级联扩展,适合驱动大量 LED 的场景。
2.1 主要特性
- 16 路恒流输出:每路输出电流由外部电阻 REXT 决定,范围通常为 5mA 到 120mA。
- 串行数据输入:支持 SPI 或 GPIO 模拟时序,数据位宽 16 位。
- 输出锁存:通过 LATCH 引脚将移位寄存器中的数据锁存到输出端。
- 输出使能控制:OE 引脚低电平有效,可整体控制 LED 亮灭,支持 PWM 调光。
- 级联扩展:多个芯片可通过 SDO 串联,驱动更多 LED。
2.2 引脚功能
| 引脚 | 名称 | 功能说明 |
|---|---|---|
| 1-16 | OUT0-OUT15 | 恒流输出通道,连接 LED 阴极 |
| 17 | GND | 接地 |
| 18 | SDO | 串行数据输出,用于级联下一级芯片 |
| 19 | SDI | 串行数据输入 |
| 20 | CLK | 移位时钟,上升沿采样数据 |
| 21 | LATCH | 锁存信号,上升沿将数据锁存到输出 |
| 22 | OE | 输出使能,低电平有效 |
| 23 | REXT | 外接电阻,设定输出电流 |
| 24 | VDD | 电源正极 |
3. 工作原理
TLC5925 内部是一个 16 位移位寄存器。数据在 CLK 上升沿从 SDI 逐位移入,当 16 位数据全部移入后,给 LATCH 一个上升沿,数据被锁存到输出寄存器,从而控制 OUT0-OUT15 的导通状态。OE 引脚可以整体控制输出,实现 PWM 调光。
级联时,前一级的 SDO 连接到后一级的 SDI,数据依次移入,锁存时所有芯片同时更新输出。
4. 驱动代码实现
下面是官方手册的通信协议图:
下面以 STM32 平台为例,使用 GPIO 模拟时序驱动 TLC5925。代码结构清晰,方便移植到其他 MCU。
/**@NOTE 发送字节函数,两字节 *@RETURN 无 */ void TLC5925_Us(void) { TLC5925_Send(0x4F66); } void TLC5925_Init(void) { LE_LOW; OE_HIGH; SDI_LOW; CLK_LOW; } void TLC5925_Send(uint16_t u16_data) { int8_t i; for (i = 15; i >= 0; i--) { if (u16_data & (1 << i)) { SDI_HIGH; Delay; } else { SDI_LOW; Delay; } CLK_HIGH; Delay CLK_LOW; Delay; } LE_HIGH; Delay; LE_LOW; Delay; OE_LOW; Delay; }4.1 驱动宏定义
#define CLK_PIN GPIO_PIN_3 #define SDI_PIN GPIO_PIN_4 #define LE_PIN GPIO_PIN_5 #define OE_PIN GPIO_PIN_6 #define CLK_HIGH HAL_GPIO_WritePin(GPIOA, CLK_PIN, GPIO_PIN_SET); #define CLK_LOW HAL_GPIO_WritePin(GPIOA, CLK_PIN, GPIO_PIN_RESET); #define SDI_HIGH HAL_GPIO_WritePin(GPIOA, SDI_PIN, GPIO_PIN_SET); #define SDI_LOW HAL_GPIO_WritePin(GPIOA, SDI_PIN, GPIO_PIN_RESET); #define LE_HIGH HAL_GPIO_WritePin(GPIOA, LE_PIN, GPIO_PIN_SET); #define LE_LOW HAL_GPIO_WritePin(GPIOA, LE_PIN, GPIO_PIN_RESET); #define OE_HIGH HAL_GPIO_WritePin(GPIOA, OE_PIN, GPIO_PIN_SET); #define OE_LOW HAL_GPIO_WritePin(GPIOA, OE_PIN, GPIO_PIN_RESET); #define Delay HAL_Delay(1);4.2 使用示例
int main(void) { while (1) { TLC5925_Init(); TLC5925_Us(); } }这是串口发送0X4F66(3和4集合的十六进制)的现象。
8. 总结
TLC5925 是一款简单易用的 16 通道恒流 LED 驱动器,通过 GPIO 模拟时序即可完成驱动。本文提供的代码可直接在 STM32 平台上运行,并支持级联扩展。实际项目中,注意电流设定、时序要求和电源去耦,即可稳定驱动 LED 阵列。