ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

TLC5925 驱动代码:16 通道恒流 LED 驱动器详解与实战

TLC5925 驱动代码:16 通道恒流 LED 驱动器详解与实战

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-16OUT0-OUT15恒流输出通道,连接 LED 阴极
17GND接地
18SDO串行数据输出,用于级联下一级芯片
19SDI串行数据输入
20CLK移位时钟,上升沿采样数据
21LATCH锁存信号,上升沿将数据锁存到输出
22OE输出使能,低电平有效
23REXT外接电阻,设定输出电流
24VDD电源正极

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 阵列。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进