跳转至

数码管和 LED 灯珠驱动芯片介绍

作者:江访 | 最后修改:2026-07-06

面向读者:有基本编程基础(没基础也可以问 AI),但不了解 LED 显示驱动芯片的开发者 目标:读完本文,你能回答以下问题——

  • LED 显示芯片是干什么的?
  • 市面上有哪些厂商?哪些类型?
  • 我们在做的 7 个型号是什么?有什么不同?
  • 如何根据产品需求来选择?
  • 芯片内部怎么工作的?软件怎么驱动它?硬件怎么接?

第一章:LED 驱动芯片是什么?

1.1 一个生活中的例子

你看到一块电子时钟,上面跳动着白色的数字"14:56"。 这个数字是由 7 段数码管 显示的——每一段是一个 LED(发光二极管),拼成"8"的形状。 问题是:主控的 GPIO 引脚有限,不可能每个 LED 都直接连一个引脚。 LED 显示驱动芯片 就是来干这个的——用最少的引脚,控制最多的 LED。

打个比方:

  • 主控是老板,只下指令(通过 2~3 根信号线)
  • 驱动芯片是工头,收到指令后去控制几十个 LED 的亮灭
  • LED 是工人,干活发光

1.2 它解决什么问题

**问题**
**驱动芯片的方案**
GPIO 引脚不够用
2~3 根通信线控制几十个 LED
LED 电流太大
芯片内置恒流驱动,不烧 主控
多个 LED 同时亮
芯片自带扫描刷新
按键检测
部分芯片集成按键扫描

1.3 两种主要的芯片类型

类型一:数码管驱动芯片

驱动 8 段数码管,主要显示数字和简单字符。

例子 1:TM1637(最多支持:8 段 ×6 位 + 16(8x2bit)按键)

例子 2:TM1640(最多支持:8 段 ×16 位)

类型二:RGB 灯珠驱动芯片

驱动 RGB 全彩 LED 灯带,灯带中包含很多个灯珠,每一个灯珠可以被单独控制颜色。

例子 1:WS2812(单线控制灯带)

例子 2:WS2801(双线控制灯带)


第二章:市场上的厂商和产品类型

2.1 LED 驱动芯片有哪些厂商?

大陆厂商

**厂商**
**主要做什么**
**和我们规划的关系**
天微电子(Titan Micro)
数码管驱动 + LED 显示屏驱动 + LCD 驱动
✅ 规划中(TM1637/40/50/38/TM1829)
华彩微/华彩威(World-Semi)
单线 RGB LED 驱动(WS2812 发明者)
✅ 规划中(WS2801、WS2812)
富满微(Fuman)
LED 显示驱动 + 电源管理芯片,和天微有部分重叠产品
❌ 暂不涉及
**明微电子**
LED 显示屏驱动 + 智能景观灯驱动,偏大屏
❌ 暂不涉及

台湾厂商

**厂商**
**主要做什么**
**和我们规划的关系**
聚积科技(Macroblock)
LED 大屏恒流驱动芯片,Mini LED 背光
❌ 暂不涉及,偏大屏和舞台屏
点晶科技(Sitronix)
LCD 驱动 + LED 驱动,ST16xx 系列和 TM16xx 类似
❌ 暂不涉及

国外厂商

**厂商**
**主要做什么**
**和我们规划的关系**
**TI(德州仪器)**
TLC59xx 等 SPI 控制 LED 驱动,通用型但价格高
❌ 暂不涉及
**Maxim(美信)**
汽车/高端工业 LED 驱动
❌ 暂不涉及
**NXP**
I²C 控制的 PCA9685 LED 驱动器
❌ 暂不涉及

2.2 以天微和华彩为例介绍

天微电子(Titan Micro)

官网http://www.titanmec.com

国内 LED 驱动芯片老牌厂商,芯片覆盖非常广,产品分为四大类:

**产品线**
**说明**
**代表型号**
**数码管驱动**
驱动段式/点阵式 LED 显示,多用于家电、仪表
**TM1637、TM1640、TM1650、TM1638、**TM1620…
**LED 显示屏驱动**
驱动户外/室内 LED 大屏(行扫描+列驱动)
TM5020、TM74HC595
**LCD 显示驱动**
驱动液晶段码屏
TM1621、TM1721
**RGB 灯珠驱动**
驱动灯带、护栏管、点光源
TM1804、TM1912、TM1824、TM512 系列

我们目前做的 4 个型号(TM1637、TM1640、TM1650、TM1638)都属于第一类——LED 面板显示驱动

华彩微 / 华彩威(World-Semi)

官网http://world-semi.com

全球最知名的单线 RGB LED 驱动芯片厂商,WS2812 的发明者。产品线:

**产品线**
**说明**
**代表型号**
**数字 LED 系列**
灯珠和驱动芯片合封,单线控制
**WS2812、**WS2813、WS2815、WS2816
**灯饰 芯片 系列**
单独的驱动芯片,外接 LED
**WS2801、**WS2811、WS2814
**新品系列**
特殊功能
WS1138、WS1238

我们目前做的 3 个型号(WS2801、WS2812、TM1829)都属于装饰驱动类,其中 WS2801 和 WS2812 是华彩微的,TM1829 是天微的(在官网没找到相关资料,如果没有资料后续改成TM1824)。


2.3 芯片类型详解

类型一:数码管驱动芯片

我们规划内的芯片(带 ✅ 标记):TM1637、TM1640、TM1650、TM1638 不在规划内的芯片:天微还有大量其他型号,下面举例时一并列出,方便你以后选型参考。

工作原理:

LED 数码管内部有很多个 LED 小段拼成一个"8"字,每一段(segment)是一个 LED。多个数字排列在一起,每个数字就是一个"位"(digit)。

驱动芯片通过段(SEG)位(GRID/COM) 两根总线来寻址:

  • 段(SEG):控制每一段亮灭(a~g + dp 小数点)
  • 位(GRID):选择哪一位数字亮(第 1 位、第 2 位…)
段 a    ───
     ┌──┐
 段 f│  │段 b   ← f段亮=a段亮=… 拼成"8"
     ├──┤
 段 e│  │段 c
     └──┘
     段 d    ●  dp(小数点)

关键参数:段数 × 位数 例如 8×6 表示可控制 8 段 × 6 位 = 共 48 个 LED。

常见型号对号入座("带按键"一列打 ✅ 的意思是:按键直接接到驱动芯片上,芯片检测到后通过 1 根中断线告诉主控,不用占用主控多个 GPIO):

**段数×位数**
**驱动点数**
**通信线数**
**带按键(省主控GPIO)**
**典型封装**
**对应芯片**
8×4(4位)
32
2 线

SOP16/DIP16
TM1616(❌ 不在规划内)
8×4(4位)
32
2 线
✅ 支持最多 28 个按键(7×4 矩阵),只需主控 1 个中断脚
SOP16/DIP16
✅ TM1650(规划中)
7×4(4位)
28
2 线
✅ 支持 7 个按键
SOP16/DIP16
TM1651(❌ 不在规划内)
8×6(6位)
48
2 线
✅ 支持 16 个按键(8×2 矩阵)
SOP20/DIP20
✅ TM1637(规划中)
10×8(8位)
80
3 线
✅ 支持 24 个按键(8×3 矩阵)
SOP28
✅ TM1638(规划中)
8×8(8位)
64
3 线
✅ 支持 4 个按键
SOP24/QSOP24
TM1639(❌ 不在规划内)
7×10(10位)
70
3 线
✅ 支持 10 个按键
SOP28
TM1668(❌ 不在规划内)
8×16(16位)
128
2 线

SOP28/SSOP28
✅ TM1640(规划中)
16×8(8位+更多段)
128
3 线
✅ 支持 8 个按键
QFP44
TM1629(❌ 不在规划内)

选型规律一看就懂:

  • 数字越大(1637→1640→1650),功能越强,管脚越多,封装越大
  • 尾数带 0 的(1640)通常无按键,带 5/8 的(1650/1638)带按键
  • 需要更多位数:TM1638(8 位)> TM1637(4 位)
  • 需要更多段(显示复杂符号):TM1640(16 段)> TM1637(8 段)
  • 需要按键:TM1650(4 位 + 按键)或 TM1638(8 位 + 按键 +LED)

类型一(续):按键扫描(把按键接到驱动芯片上,省主控 GPIO)

有些驱动芯片(TM1650、TM1638)在管显示的本职工作之外,还额外集成了按键检测电路。

它的设计思路:

本来你想做带按键的产品,按键需要接到主控的 GPIO 上——接几个按键就要占几个引脚:

┌─────────┐
│  主控   │── GPIO ─────────────┼────── 按键 1
│         │                     ├────── 按键 2
│         │                     ├────── 按键 3
│         │                     ├────── 按键 4
└─────────┘                     └── ...

说明:
1. 按键直接挂载主控GPIO
2. 每增加1个按键就占用1路主控GPIO
3. 按键越多,消耗主控IO资源越多

集成按键扫描的芯片则把按键接到驱动芯片上:

┌─────────┐                      ┌────────────────────────┐
│  主控   │                      │      TM1638 驱动芯片    │
│         │── CLK ─────────────▶│                        │
│         │── DIO ───────────────┤ 内置8×3按键扫描矩阵     │
│         │── INT ───────────────┤ 最大支持 24 路按键      │
└─────────┘                      │                        │
                                 │  KEY1 ─────────────────┼── 按键 1
                                 │  KEY2 ─────────────────┼── 按键 2
                                 │  KEY3 ─────────────────┼── 按键 3
                                 │  ...                   ┼── ...
                                 └────────────────────────┘

说明:
1. 通信链路:主控与芯片仅需 CLK / DIO / INT 三根连线
2. 按键资源:24个按键全部外接至TM1638,节省主控IO口

这样一来:

  • 主控只需要 2~3 根通信线接驱动芯片,外加 1 个中断引脚
  • 按键全部接在驱动芯片上,不管 4 个还是 8 个,主控那边无需增加任何引脚
  • 主控不用轮询按键状态,芯片检测到按键按下会自动通过中断通知

中断来了以后,怎么区分是哪个按键按下,以及是按下还是弹起?

当芯片检测到按键事件时,会拉低 INT 引脚通知主控。主控收到中断后,通过 CLK+DIO(或 CLK+DIO+STB)通信总线发送"读取按键寄存器"指令,芯片会返回一个代表按键状态的数值:

  • 对于 TM1650:返回的数值中每一位对应一个按键,通过读回的数据位可以知道哪个按键被按下,以及是按下(1)还是弹起(0)
  • 对于 TM1638:芯片内部有按键寄存器组,主控 通过读命令一次性获取所有按键状态,然后按矩阵位置解析出具体是哪个按键。TM1638 可以检测到 8×3 共 24 个按键的状态,并且能区分按下和弹起

简单来说:INT 管脚负责"有人按了"的通知,通信总线负责"谁按了、什么状态"的查询

省了多少引脚?

**方案**
**4 位数码管 + 4 个按键**
**8 位数码管 + 8 个按键**
不用按键芯片(直连主控)
4(显示2+按键4)= 6 个 GPIO
按键本身就要 8 个 GPIO
用 TM1650 / TM1638
2(通信)+ 1(中断)= 3 个 GPIO
3(通信)+ 1(中断)= 3 个 GPIO

结论:按键越多,省得越多。

类型二:RGB 灯珠驱动芯片

我们规划内的 芯片(带 ✅ 标记):WS2801、WS2812、TM1829 不在规划内的 芯片:天微和华彩微还各有一大堆兄弟型号

每个芯片内置 PWM 控制,可以独立控制连接的 RGB LED 各通道的亮度。

灯带与灯珠的关系: 一条灯带由多个灯珠串联而成,每个灯珠内部集成了驱动芯片(如 WS2812 为合封方案)或者外接一颗独立驱动芯片(如 WS2801)。主控 向灯带发送数据时,每个灯珠的驱动芯片会自动提取属于自己的那部分数据,然后把剩余数据转发给下一颗灯珠。这样,主控 就可以通过一根信号线依次设置每一个灯珠的颜色,实现流水灯、跑马灯等效果。

通过级联(Daisy Chain) 方式连接:第一个芯片的 DOUT 接到第二个的 DIN,以此类推。主控 只需要 1 根(单线协议,如 WS2812)或 2 根线(双线协议,如 WS2801)即可控制一整条灯带。

单线协议(WS2812 / TM1829): 只有 1 根 DATA 线,靠脉冲宽度区分 0 和 1

发送数据时,主控 在 DATA 线上依次发出每个灯珠的 24 位颜色数据:
                                          ┌───┐     ┌───┐     ┌───┐
              DATA ──────────────────────→│ ① │────→│ ② │────→│ ③ │
                                          └───┘     └───┘     └───┘
主控 发: [灯珠3数据][灯珠2数据][灯珠1数据]

第 1 颗芯片吃掉前 24 bit(灯珠1),剩余往后传
第 2 颗芯片吃掉接下来 24 bit(灯珠2),剩余往后传
第 3 颗芯片吃掉最后 24 bit(灯珠3)
  • 高低电平的持续时间来区分数据 0 和 1(T0H≈350ns,T1H≈700ns)
  • 每颗灯珠需要 24 位(RGB 各 8 位),数据从最后一颗往前发送
  • 芯片自动整形转发,级联级数不受信号衰减限制

双线协议(WS2801): CLK + DATA 两根线,兼容 SPI 时序

CLK ████  ████  ████  ████  ████  ████
主控 ──────────→│
           DATA ████████  ████  ████████  ████  │
                └────────────────────────────────┘
                                            ┌───┐     ┌───┐     ┌───┐
              CLK ─────────────────────────→│ ① │────→│ ② │────→│ ③ │
              DATA ────────────────────────→│   │────→│   │────→│   │
                                            └───┘     └───┘     └───┘
  • CLK 提供时钟节拍,DATA 在每个时钟上升沿发送 1 bit
  • 每颗灯珠需要 24 位数据(3 字节 R/G/B),按顺序发送
  • 时序宽松(最高 25MHz),纯 Lua 软件模拟即可
  • 所有芯片同时接收 CLK+DATA,各自提取属于自己的那 24 位

级联示意图(两种协议通用):

主控 ──DIN──→ [芯片1] ──DOUT──→ [芯片2] ──DOUT──→ [芯片3] …
             控制灯珠1        控制灯珠2         控制灯珠3

一颗灯珠坏了,整条灯带都不能用了吗? 上图是串联关系——数据是从第一颗依次传到最后一颗的。如果某一颗芯片内部的信号通路损坏(DOUT 无法转发数据),则它后面的所有灯珠都会失去信号,表现为"后面全灭"。 不过有两种情况不一样:

  • 灯珠的 RGB LED 灯坏、但驱动芯片的逻辑电路正常:数据仍能正常转发,只是那一颗不发光,后面的灯珠不受影响
  • 带"断点续传"功能的芯片(如 WS2813、WS2815):即使某一颗芯片损坏,数据也能自动绕过损坏的节点,后面的灯珠继续正常工作 普通型号(WS2812、TM1829、WS2801)不支持断点续传,但只要驱动芯片的逻辑电路完好(只是 RGB 部分损坏),数据仍能通过。

常见型号对号入座:

**通信方式**
**通道数**
**特色功能**
**典型封装**
**对应芯片**
2 线 SPI
3 路 RGB
支持恒流/恒压,25MHz 时钟
SOP14
✅ WS2801(规划中)
2 线 SPI
3 路 RGB
信号双线,天微版本
SOP8
TM1803、TM1804(❌ 不在规划内)
1 线 NRZ
3 路 RGB
灯珠驱动一体,默认 12mA
5050 灯珠
✅ WS2812(规划中)
1 线 NRZ
3 路 RGB
断点续传,坏一颗不影响后面的
5050 灯珠
WS2813(❌ 不在规划内)
1 线 NRZ
3 路 RGB
12V 供电,断点续传
5050 灯珠
WS2815(❌ 不在规划内)
1 线 NRZ
3 路 RGB
恒流驱动 + 错误检测
SOP8
✅ TM1829(规划中)
1 线 NRZ
3 路 RGB
低成本
SOP8/DIP8
TM1903(❌ 不在规划内)
1 线 NRZ
4 路 RGBW
带白光通道
SOP8
TM1824(❌ 不在规划内)
1 线 NRZ
12 路
单芯片带 12 颗 LED
SOP16
TM1912 / TM1812(❌ 不在规划内)
DMX512
3~4 路
差分并联,抗干扰强,专业舞台用
SOP16/SOP8
TM512 系列(❌ 不在规划内)

选型规律:

  • WS2801 = 双线,时序宽松,Lua 随便写,适合稳定控制
  • WS2812 = 单线,灯珠一体,最便宜最普及,但时序严格
  • TM1829 = 单线,带白光通道(RGBW),恒流驱动,但时序更严苛
  • WS2813/15 = 断点续传——灯带上一颗坏了不影响后面的继续跑
  • TM512 系列 = 专业舞台灯光的 DMX512 协议,差分信号几百米都没问题

2.4 怎么选择?(选型指南)

**你的需求**
**推荐型号**
**原因**
显示 6 位数字,简单时钟
TM1637
6 位数码管显示,兼顾 16 个按键输入,2 线通信
显示数字+按键输入(多达 28 个按键)
TM1650
自带按键扫描,省主控 GPIO,最多 28 个按键
需要 8 位数字+多个按键+LED 指示灯
TM1638
功能最全,10段×8位+24按键+8LED
控制大量 LED 做面板显示(最多 16 位)
TM1640
8段×16位=128个灯点
全彩 RGB 灯带,用 SPI 通信
WS2801
双线稳定,时序宽松
全彩 RGB 灯带,单线通信
WS2812
最常见,灯珠/驱动一体
大功率 RGBW 灯带,恒流驱动
TM1829
4通道恒流(含白光),18mA,6~24V
只需要几个灯简单流动
TM1637 / TM1640
成本最低

更多型号:可以查看显示外设资料整理


第三章:我们在开发的 7 个型号

3.1 总览一览表

序号 型号 厂商 功能 通信线 封装 资料
1 TM1637 天微 8 段×6 位数码管 + 16(8x2bit)按键 2 线 CLK+DIO SOP20/DIP20 下载
2 TM1640 天微 8段×16位 位数码管 2 线 CLK+DIN SOP28/SSOP28 下载
3 TM1650 天微 8段×4 位/7 段×4 位 位数码管 + 28(7x4bit)按键 2 线 CLK+DIO SOP16/DIP16 下载
4 TM1638 天微 10段×8 位数码管 + 24(8×3bit) 按键 3 线 CLK+DIO+STB SOP28 下载
5 WS2801 华彩微 级联 RGB LED(SPI 型) 2 线 CLK+DATA SOP14 下载
6 WS2812 华彩微 级联 RGB LED(单线型) 1 线 DATA 5050 灯珠封装 下载
7 TM1829 天微 级联 RGB(W) LED(单线型) 1 线 DATA SOP8 暂无

3.2 TM1637 — 8 段 ×6 位数码管 + 16(8x2bit)按键

长什么样? SOP20(贴片)或 DIP20(直插)封装,20 个引脚。

能干什么? 驱动 8 段 ×6 位数码管 + 16(8x2bit)按键,8 级亮度可调。可显示数字 0~9、少量字母(A、b、C、d、E、F 等)、小数点。自带增强型抗干扰按键识别电路。

典型应用场景:

  • 电子时钟、计时器
  • 温度显示(数字温度计)
  • 电压/电流表头
  • 小家电面板显示

核心电气参数:

  • 工作电压:5V(4.5V~5.5V)
  • 段驱动电流:30mA(典型,最大 50mA)
  • 位驱动电流:120~140mA(典型,最大 200mA)
  • 通信时钟:最高 500kHz
  • 内置 RC 振荡频率:450kHz
  • 工作温度:-40℃~+85℃

芯片引脚: SEG1~SEG8(段输出)、GRID1~GRID6(位输出)、CLK(时钟)、DIO(数据)


3.3 TM1640 — 8 段 ×16 位 位数码管

长什么样? SOP28 或 SSOP28 封装,28 个引脚。

能干什么? 8 段 × 16 位 = 可以独立控制 128 个 LED。8 级亮度可调。相比 TM1637,TM1640 更擅长驱动多个数码管位(最多 16 位),适合大量数字或灯点的场合。这是 TM1637 的"老大哥"——支持更多的 LED。

典型应用场景:

  • 16 个独立 LED 指示灯面板
  • 8 位 ×8 段点阵显示(显示更多复杂信息)
  • 家电功能状态面板(洗衣机、空调)

核心电气参数:

  • 工作电压:5V(3.0V~5.5V)
  • SEG 段拉电流:55~70mA(典型)
  • GRID 位灌电流:140mA(典型,最大 200mA)
  • 通信时钟:最高 1MHz
  • 内置 RC 振荡:450kHz
  • 工作温度:-40℃~+85℃

和 TM1637 的区别:

  • TM1637:8 段 ×6 位 = 最多 48 个 LED
  • TM1640:8 段 × 16 位 = 最多 128 个 LED,能力更强

3.4 TM1650 — 8 段 ×4 位/7 段 ×4 位 位数码管 + 28(7x4bit)按键

能让你少占几个 GPIO? 如果不带按键的芯片(比如 TM1637),你要做 4 个按键就得额外占 4 个 GPIO。TM1650 把按键接在它自己身上,只需 1 个中断脚通知主控,省 3 个 GPIO。

长什么样? SOP16 或 DIP16 封装,16 个引脚,比 TM1637 小。还有 TSSOP16 和 QFN16 等更小的封装选项。

能干什么? 4 位数码管显示(可选 8 段 ×4 位 或 7 段 ×4 位 两种模式)+ 支持最多 28 个按键。按键通过 KP 中断引脚通知 主控,主控 读取按键编号就知道是哪个键。8 级亮度可调。支持 3V~5.5V 宽电压。

典型应用场景:

  • 带按键的温控器(显示温度 + 调温度)
  • 烤箱/微波炉控制面板
  • 密码锁输入面板

核心电气参数:

  • 工作电压:5V(3.0V~5.5V)
  • 段输出电流:最大 30mA
  • 位输出电流:最大 150mA
  • 推荐通信速率:100kHz 以下
  • 工作温度:-40℃~+85℃

和 TM1637 的区别:

  • TM1637 只管显示,想做按键还得另加芯片或占用主控 GPIO
  • TM1650 自带按键扫描,按键接在 1650 上,不占主控引脚

3.5 TM1638 — 10 段 ×8 位数码管 + 24(8×3bit) 按键

能让你少占几个 GPIO? 如果不带按键的芯片,你要做 8 个按键 + 8 个指示灯 + 8 位数码管,总共需要 8(按键)+8(LED)+2(显示通信用)= 18 个 GPIO。TM1638 一个芯片全包了,通信只占 3 个 GPIO + 1 个中断脚,帮你省下 14 个 GPIO。

长什么样? SOP28 封装,28 个引脚。

能干什么?

这是天微数码管驱动芯片中功能最丰富的一个:

  • 8 位数码管显示(10 段 ×8 位,比普通 8 段多两个段,可以显示更多特殊符号)
  • 8 颗独立 LED 控制
  • 24 个按键检测(8×3 矩阵,支持组合键)
  • 8 级亮度调节
  • 内置 LED 反偏漏电优化——解决了 LED 微弱暗亮的问题

典型应用场景:

  • 工业控制面板(显示参数 + 按键 + 状态灯)
  • 多功能仪表
  • 嵌入式系统的调试面板

核心电气参数:

  • 工作电压:5V(3V~6V,比 TM1637 范围更宽)
  • SEG 段拉电流:25~30mA(典型,最大 40~50mA)
  • GRID 位灌电流:140mA(典型)
  • 通信时钟:最高 1MHz
  • 内置 RC 振荡:500kHz
  • 工作温度:-40℃~+85℃

核心优势:一个芯片搞定显示 + 按键 + 指示灯,省 PCB 面积省成本。


3.6 WS2801 — 双线 RGB LED 驱动

长什么样? SOP14 封装,14 个引脚。

能干什么? 控制单颗或级联的 RGB LED,每颗 24 位色(R/G/B 各 8 位 0~255)。通信使用 SPI 风格的双线(CLK+DATA),时序宽松,纯 Lua 软件模拟完全可行。

典型应用场景:

  • LED 装饰灯带(室内氛围灯)
  • 舞台灯光效果
  • 全彩指示灯
  • LCD 电视背光控制

特点:

  • 双线通信,时序比 WS2812 宽松,软件好实现
  • 最高 25MHz 时钟频率
  • 支持恒流和恒压两种驱动模式
  • 通道恒流:5~30mA(恒流模式),最高可达 200mA
  • 工作电压:5V(3.3V~5.5V)
  • 级联时信号再生,不会衰减

3.7 WS2812 — 单线 RGB LED(灯珠一体)

长什么样? 5050 封装(5mm × 5mm),灯珠和驱动芯片合封在一起,看起来就是一颗普通的 RGB LED,实际上里面住着驱动芯片。也有 3535、2020、2427 等更小的尺寸。

能干什么? 单线控制一整条灯带,每一颗灯珠可以独立设置颜色(R/G/B 各 0~255)。

典型应用场景:

  • 智能灯带(客厅氛围灯、圣诞装饰)
  • 电脑/键盘 RGB 光效
  • 广告发光字
  • 像素屏、透明屏

特点:

  • 1 根信号线就能控制无数个灯珠(级联即可)
  • 芯片内置稳压,24V 以下只需串电阻,不需要额外稳压管
  • 信号整形功能:级联远了也不会失真
  • 数据速率:800Kbps
  • 扫描频率:2KHz(刷新率高,拍视频不闪烁)
  • RESET 时间:>280μs(不容易误复位,便宜 主控 也能用)
  • 工作电压:5V(3.3V~5.5V)
  • 市面上最常见、最便宜的 RGB LED

特别注意:

  • 时序非常严格(T0H(350ns,T1H)700ns)
  • 纯 Lua GPIO 翻转仅适用高频 主控(≥480MHz)

3.8 TM1829 — 单线 RGB(W) 恒流 LED 驱动

长什么样? SOP8 封装,8 个引脚,非常小巧。

能干什么? 单线级联控制 4 通道(R/G/B/W,含白光)LED,每通道 18mA 恒流输出,256 级灰度可调。VDD 内置 5V 稳压管,外部串电阻后支持 6V~24V 宽电压供电。OUT 端口耐压高达 32V。数据传输速率 800KHz。

典型应用场景:

  • 需要白光混色的场景(RGBW 四通道灯带)
  • 户外高亮度装饰灯(护栏管、点光源)
  • 6~24V 宽电压供电的产品

核心特性:

  • 4 通道恒流驱动,通道间电流误差仅 ±3%
  • 内置 5V 稳压管,外围器件少(DIN 需串 1KΩ 电阻)
  • 信号整形转发:级联不会失真衰减
  • 上电默认全灭(不会上电闪烁)
  • 数据速率:800KHz
  • OUT PWM 输出频率:1KHz
  • 工作温度:-40℃~+85℃

与 WS2812 的区别:

**对比项**
**WS2812**
**TM1829**
通道数
RGB 3 通道
RGBW 4 通道(多一个白光)
驱动方式
恒压
恒流 18mA(亮度更均匀)
供电电压
3.3V~5.5V
6V~24V(VDD 内置 5V 稳压管)
端口耐压

**OUT 耐压 32V**
灰度级别
256 级
256 级
封装
灯珠一体(5050)
独立 SOP8

第四章:技术原理 — 硬件如何设计

4.1 硬件连接图

数码管类(TM1637 / TM1650 / TM1640 / TM1638)

  ┌──────────────┐                    ┌──────────────────┐
  │    主控      │                    │    驱动芯片       │
  │  (AirXXX)    │                    │(TM1637/40/50/38) │
  │              │                    │                  │
  │ GPIO_X ──────┼────────────────────┼──→ CLK           │
  │              │                    │                  │
  │ GPIO_Y ←─────┼────────────────────┼──→ DIO/DIN       │
  │              │                    │                  │
  │ GPIO_Z ──────┼────────────────────┼──→ STB(仅TM1638) │
  │              │                    │                  │
  │ GPIO_W ←─────┼────────────────────┼── INT(仅1650/38) │
  └──────────────┘                    │                  │
                                      │ SEG1~SEGx ───────┼──→ 数码管段
                                      │ GRID1~GRIDx ─────┼──→ 数码管位
                                      └──────────────────┘

引脚交互功能说明:

引脚
方向
功能说明
**CLK(时钟)**
主控→芯片
主控 控制时钟线高低电平变化,芯片在时钟边沿读取/写入数据
**DIO/DIN(数据)**
主控↔芯片
主控 发送指令和数据给芯片,或从芯片读取按键状态
**STB(选通)**
主控→芯片
仅 TM1638 使用。STB 拉低表示一帧数据传输开始,拉高表示结束
**INT(中断)**
芯片→主控
仅 TM1650/1638 按键模式使用。芯片检测到按键按下或弹起时拉低此引脚通知 主控

电路注意事项:

  • CLK 和 DIO 建议接 4.7kΩ ~ 10kΩ 上拉电阻到 VCC
  • VCC 通常 3.3V 或 5V(以规格书为准)
  • 数码管如果是共阴,对应芯片的共阴版本(注意区分 TM1640 共阳/共阴)

RGB 灯带类(WS2801 / WS2812 / TM1829)

WS2801 双线灯带:

主控 GPIO_CLK ───→ 灯带 CLK 输入
主控 GPIO_DATA ──→ 灯带 DATA 输入
5V/12V 电源 ────→ 灯带 VCC
GND 共地 ───────→ 灯带 GND

WS2812 单线灯带:

主控 GPIO_DATA ──→ 灯带 DIN
5V 电源灯 ────────→ 带 VCC
GND 共地  ────────→ 灯带 GND

关键要点:

  • 主控 和灯带必须共地(GND 相连)
  • WS2812 的时序很快,主控 到灯带的连线尽量短(<10cm)。如果很长,需要加 300~500Ω 串联电阻
  • 灯带较长时每隔一定距离需要重新供电(电压降问题)

4.2 基本电路参数

**芯片**
**VCC**
**上拉电阻**
**输出驱动电流**
**其他关键参数**

5V(4.5V~5.5V)
4.7kΩ~10kΩ
SEG 段灌电流 30mA(典型,最大50mA);GRID 位拉电流 120~140mA(典型,最大200mA)
共阳驱动,450kHz RC 振荡,最大时钟 500kHz,-40~85℃
TM1640
5V(3.0V~5.5V)
4.7kΩ~10kΩ
SEG 段拉电流 55~70mA(典型,最大65~80mA);GRID 位灌电流 140mA(典型,最大200mA)
450kHz RC 振荡,最大时钟 1MHz,-40~85℃
TM1650
5V(3V~5.5V)
4.7kΩ~10kΩ
段输出电流 30mA(最大);位输出电流 150mA(最大)
两种显示模式,内置时钟,推荐通信速率 100kHz 以下
TM1638
5V(3V~6V)
4.7kΩ~10kΩ
SEG 段拉电流 25~30mA典型,最大40~50mA);GRID 位灌电流 140mA(典型)
500kHz RC 振荡,最大时钟 1MHz,-40~85℃,带 LED 反偏漏电优化
WS2801
5V(3.3V~5.5V)

通道恒流 5~30mA(恒流模式)/ 0~50mA(恒压模式),最大 200mA
最大时钟 25MHz,支持级联信号再生,-40~125℃
WS2812
5V(3.3V~5.5V)

通道恒流 12mA~16mA
灯珠一体封装(5050),数据速率 800Kbps,RESET>280μs,扫描频率 2KHz
TM1824
5V(4.5V~6.5V,VDD内置5V稳压管)
无(DIN需串1KΩ)
18mA/通道,恒流,通道误差±3%,芯片间±5%
OUT 耐压 32V,数据速率 800KHz,OUT PWM 1KHz,-40~85℃

第五章:通信时序 — "主控 和芯片之间怎么聊天"

5.1 先弄懂"时序"是什么

想象两个人打手电筒通信:

  • 约定好的闪烁节奏 = 时序
  • 闪一下 = 发送 1 位数据(bit)
  • 不同长度的闪烁 = 代表"0"还是"1"

对于我们的芯片,主控 就是打手电筒的人,芯片就是对面接收信号的人。它们之间约定好了一套暗号:

短亮一下 = 代表数字 0
长亮一下 = 代表数字 1

这个"多短算短、多长算长"的约定,就是时序。

下面我不用微秒纳秒给你讲,用"大概多快"来理解。


5.2 各芯片的通信速度一览

**芯片**
**实际频率**
**用人来比喻**
**传输快慢的影响**
TM1637
最高 500kHz
正常语速,一个字一个字说,很清晰
✅ 慢速=容易,GPIO 模拟随便跑
TM1640
最高 500kHz
同上(2 线协议)
✅ 同上
TM1650
最高 500kHz
同上(2 线协议)
✅ 同上
TM1638
最高 500kHz
同上,就是多了一根"准备线"(STB)
✅ 同上
**WS2801**
最高 25MHz
语速可以非常快,兼容标准 SPI
✅ 虽然频率高但用的是 SPI 标准,主控 硬件 SPI 轻松发
**WS2812**
**800kHz**
比前几个还慢一点,但它要求极其精准
⚠️ 不是快慢问题,是精度要求极高
**TM1829**
和 WS2812 属同类
单线 NRZ 协议,要求类似
⚠️ 暂无确切频率数据,但同样要求精准,建议走硬件

关键理解:

  • TM1637/40/50/38 和 WS2801:速度快慢无所谓,Lua 软件模拟随便写,都能跑
  • WS2801 虽然频率最高(25MHz),但它是标准 SPI 协议,主控 有硬件 SPI 外设来发,不靠软件
  • WS2812 和 TM1829:不是快慢问题,是精度问题——它们要求控制在几亿分之一秒的精度,Lua 软件很难做到不被中断打断,建议用硬件 SPI/PWM 或 C 组件

一个很容易误解的点:

WS2812 的 800kHz 还没有 TM1637 的 500kHz 快(慢了将近一半),但 WS2812 难搞的原因不是快,而是要求的精度高

  • TM1637:发一个数据位最慢可以拖到几微秒,快一点慢一点芯片都不在意
  • WS2812:一个数据位只有 1.25 微秒,而且"0"和"1"是靠拉高电平拉多长时间来区分的——差几纳秒(十亿分之几秒)就读错了

5.3 "严格型"芯片到底严格在哪(WS2812 为例)

如果你不需要了解这么深,直接记住一句话就够了: WS2812 和 TM1829 的时序太苛刻,纯靠 Lua 软件去精确控制很难,建议用硬件的 SPI 或 PWM 来帮忙发数据。 下面的内容给想了解细节的人看。

一根数据线要既传"0"又传"1",怎么区分?靠拉高电平的时间长短来区分:

发送"0":  高电平 _    低电平
            ████    ████████████
            ↑ 短 ↑   ↑ 长 ↑
            大约 0.3微秒  大约 0.8微秒

发送"1":  高电平 ______  低电平
            ████████    ████████
            ↑ 长 ↑      ↑ 短 ↑
            大约 0.7微秒  大约 0.6微秒

为什么难?

主控不是一直专心发数据,它还要做别的事——比如系统心跳、定时器、消息处理。这些会打断发送过程。

  • TM1637 那种慢速芯片:被打断没关系,停顿一下继续就行
  • WS2812:一旦开始发,就不能被打断,哪怕迟疑了 1 微秒(百万分之一秒),灯珠就识别错了,后面的所有灯珠都会乱

打个比方:

  • TM1637 :像你给同事写邮件,写一半去喝杯水回来继续写,没关系
  • WS2812 :像你点燃一串鞭炮的引线,中途不能停,停了就哑炮

5.4 每个芯片的"难度等级"

**芯片**
**难度**
**说明**
TM1637/40/50/38
⭐ 简单
随便写都能跑,Lua 模拟绰绰有余
WS2801
⭐ 简单
SPI 本身就是 主控 的标配,或者用 Lua 模拟也行
WS2812
⭐⭐⭐ 困难
Lua 控制很难做到不被打断地精确发送,推荐用 C 组件 ws2812.create()
TM1829
⭐⭐⭐⭐ 更困难
比 WS2812 还严格,建议 SPI 帮忙或 C 实现

总结:TM1637~WS2801 随便用 Lua 写,跑得稳稳的。WS2812 和 TM1829 咱们虽然在扩展库中也提供了 Lua 接口,但实际产品中建议用硬件方式(SPI/PWM/C 组件)实现


第六章:技术原理 — 软件如何工作

6.1 通信协议直观理解

2 线协议(TM1637/40/50):

就像两个人挥旗通信:

  • CLK(时钟线):喊节奏"1、2、3…"
  • DIO(数据线):根据节奏变换旗子方向(高/低电平)

主控 每拉一次 CLK,DIO 上就传 1 位(bit)数据。一个字节 = 8 个 CLK 脉冲。

CLK  ████      ████      ████      ████
        ↓发送       ↓发送       ↓发送       ↓发送
DIO  ████████  ████  ██████████  ████
        bit7      bit6      bit5 ... bit0

3 线协议(TM1638):

TM1638 多了一根 STB(选通)线:

  • STB 拉低 → 通知芯片"准备接收数据"
  • 然后 CLK+DIO 传数据
  • STB 拉高 → "数据传完了,执行"
STB  ████████████████
        ↓ 拉低开始         ↓ 拉高结束
CLK      ████  ████  ████
DIO      b7..b0 b7..b0 b7..b0

单线协议(WS2812 / TM1829):

只有 1 根 DATA 线!靠时间长短来区分 0 和 1:

  • 发 0:拉高 350ns,拉低 800ns
  • 发 1:拉高 700ns,拉低 600ns
DATA  ██    ██████    ██    ██████
       ↑0码   ↑1码     ↑0码    ↑1码

双线 SPI 协议(WS2801):

和 TM1637 类似,CLK+DATA 两根线,但兼容标准的 SPI 模式:

  • 时钟上升沿采样数据
  • 每颗灯珠需要 24 位(3 字节 R/G/B)

6.2 软件架构

每个扩展库的内部结构都类似:

┌─────────────────────────────────────────┐
│              上层应用代码                │
│  (main.lua: 显示时钟、温度、跑马灯)       │
├─────────────────────────────────────────┤
│              扩展库(纯 Lua)            │
│  extm1637.lua / exws2801.lua ...        │
│  ┌─────────────────────────────────┐    │
│  │  上层 API:init / show / clear   │    │
│  │  set_brightness / update ...    │    │
│  ├─────────────────────────────────┤    │
│  │  底层驱动:GPIO 位操作            │    │
│  │  gpio.setup / gpio.set /        │    │
│  │  gpio.get (读取按键)             │    │
│  └─────────────────────────────────┘    │
├─────────────────────────────────────────┤
│         LuatOS 内核 + GPIO 子系统        │
└─────────────────────────────────────────┘

数据的流转(以 TM1637 显示数字"5"为例):

应用:extm1637.display_number(5)
   ↓
扩展库:将数字 5 查段码表 → 0x6D
   ↓
扩展库:构造通信指令(写显示寄存器命令)
   ↓
扩展库:GPIO 模拟 2-wire 时序发送(CLK 脉冲 8 次,DIO 送出 0x6D)
   ↓
TM1637 芯片:收到指令 → 解码 → 驱动对应段的 LED 亮灭
   ↓
结果:数码管显示出"5"

6.3 段码表

对于数码管,需要一个"段码表"把数字 → 段码转换:

_-- 共阴极段码表(0~F)_local SEG_TABLE = {[0] = 0x3F,   _-- 0_[1] = 0x06,   _-- 1_[2] = 0x5B,   _-- 2_[3] = 0x4F,   _-- 3_[4] = 0x66,   _-- 4_[5] = 0x6D,   _-- 5_[6] = 0x7D,   _-- 6_[7] = 0x07,   _-- 7_[8] = 0x7F,   _-- 8_[9] = 0x6F,   _-- 9_[10] = 0x77,  _-- A_[11] = 0x7C,  _-- b_[12] = 0x39,  _-- C_[13] = 0x5E,  _-- d_[14] = 0x79,  _-- E_[15] = 0x71,  _-- F_}

6.4 RGB 的 24 位颜色

对于 WS2801/WS2812/TM1829,每个灯珠需要 24 位(或 32 位)数据:

WS2801/WS2812:不关心顺序,按 GRB 发送
  bit23~16    bit15~8     bit7~0
  [  Green  ]  [  Red   ] [  Blue  ]

TM1829 RGB:额外多 8 位白光通道
  bit31~24    bit23~16    bit15~8     bit7~0
  [  White  ]  [  Green ]  [  Red   ] [  Blue  ]

注意:WS2812 实际物理排列是 GRB(不是 RGB)——数据发送时先 G 再 R 再 B。但 API 接口设计为 set_pixel(index, r, g, b),由库内部做转换。


第七章:扩展库

7.1 TM1637(待更新)

7.2 TM1640(待更新)

7.3 TM1650(待更新)

7.4 TM1638(待更新)

7.5 WS2801(待更新)

7.6 WS2812(待更新)

7.7 TM1829(待更新)


第八章:常见问题

Q1:芯片不显示怎么办?

  • 检查 VCC 和 GND 供电是否正常
  • 检查 CLK 和 DIO 是否接反
  • 检查上拉电阻是否存在(CLK 和 DIO 都需要上拉)
  • 用示波器看 CLK 上有没有波形

Q2:数码管亮度不均匀

  • 不同位共用的限流电阻阻值是否一致
  • 建议使用芯片的亮度设置调节

Q3:WS2812 灯带颜色不对

  • 检查数据顺序(GRB 不是 RGB)
  • 确保 主控 和灯带共地
  • 降低数据速率试试

Q4:TM1650 按键无反应

  • 检查 KP 中断引脚是否接对
  • 确保初始化模式为 MODE_KEY_INPUT
  • 检查外部上拉是否有

Q5:多个芯片级联不工作

  • 检查 DOUT→DIN 的连接
  • 级联时最后一片的 DOUT 悬空
  • 长距离级联建议加信号整形(WS2812 内置了)

附录:资料索引

**芯片**
**数据手册**
**扩展库**
**文档位置**
TM1637
TM1637_V2.6.pdf
extm1637.lua
待更新
TM1640
TM1640_V1.9.pdf
extm1640.lua
待更新
TM1650
TM1650_V2.5.pdf
extm1650.lua
待更新
TM1638
TM1638_V2.2.pdf
extm1638.lua
待更新
WS2801
WS2801S_V2.0_CN.pdf
exws2801.lua
待更新
WS2812
WS2812B_V6.1_EN.pdf
exws2812.lua
待更新
TM1829
(待补充)
extm1829.lua
待更新

问一下 AI