[光学原理与应用-974]:WS2812B 通信协议 RGB 灯条原理
WS2812B 是单总线串行智能 RGB LED,内置驱动 IC,每颗灯珠自带 R/G/B 三色,所有灯珠共用一根 DATA 信号线,电源独立;灯珠级联,前一颗的 DOUT 接下一颗 DIN,实现一串灯条可控。
WS2812B 灯条就是把大量 WS2812B 芯片 + LED 贴在 FPC 柔性电路板上,常见 5V 供电。
1、硬件引脚
表格
| 引脚 | 说明 |
|---|---|
| VDD | 电源+5V,严禁接 3.3V,亮度不足;电压压降大时需要中间补电 |
| GND | 地,必须和主控共地,通信失败头号原因 |
| DIN | 数据输入,接收MCU主控信号 |
| DOUT | 数据输出,级联,接到下一颗灯珠 DIN |
⚠️重要:
WS2812B 是5V 电平器件;3.3V 单片机(STM32、ESP32)输出电平不够,长距离容易乱码,建议串联 470Ω 电阻在 DIN 线上,电源端加 1000uF 电解电容防上电冲击。
2、通信协议(单线归零码,NRZ)
无时钟线,依靠高低电平时间区分 0 码、1 码,属于时序协议,不是 I2C/SPI。 每个 LED 占用24bit 数据:8bit R + 8bit G + 8bit B
注意:WS2812B 顺序是GRB,不是 RGB!很多人颜色错乱就是这个坑:
G(8bit), R(8bit), B(8bit)
位时序(典型)
表格
| 信号 | 高电平 T0H | 低电平 T0L | 含义 |
|---|---|---|---|
| Bit 0 | 0.35μs | 0.8μs | 发送 0 |
| Bit 1 | 0.7μs | 0.6μs | 发送 1 |
发送完一整串所有 LED 的 24bit 数据之后,发送RESET 复位信号:低电平≥50μs复位信号到来后,整串灯锁存刚刚收到的数据,刷新颜色;之后开始接收下一轮数据。
通信流程:主控 → DIN发送LED1(24bit) → LED2(24bit) → LED3(24bit)... → RESET低电平锁存显示芯片内部逻辑:收到 24bit,把剩余数据从 DOUT 转发给下一级,数据流水线向后传递。
第 N 颗灯,前面 N×24bit 数据全部要从它穿过。所以控制100 颗灯,主控必须输出
100*24 = 2400 bit。
3、WS2812B 灯条特点
- 供电 5V,每颗灯最大约 60mA;满亮度全白,一米 60 珠灯条总电流≈3.6A,功耗很大。
- 级联:DIN→DOUT 无限串,但信号会衰减,一般建议单段不超过 30‑50 颗,超过要分段驱动 + 补电。
- 压降问题:灯条越长,末端电压越低,后面灯珠偏暗、偏色。长灯条每隔 20‑30 颗,两端补 5V 电源,GND 连通。
- 速率:位周期约 1.25μs,刷新一帧 100 灯耗时≈3ms。
4、常见踩坑
- 颜色反:红绿颠倒→ 协议是 GRB,代码写成 RGB 顺序。
- 灯乱闪、杂色:主控与灯条没有共地;数据线无限流电阻;电源纹波大。
- 后面的灯不亮:DOUT 接反;电源压降过大。
- 3.3V 单片机直接驱动长灯条不稳定:最好加电平转换,短距离 470Ω 电阻可以凑合。
- RESET 时间不足:复位低电平太短,灯无法锁存颜色。
5、与普通模拟 RGB 灯条区别
表格
| 项目 | WS2812B 数字 RGB 灯条 | 普通模拟 RGB 灯条(共阳 / 共阴) |
|---|---|---|
| 控制线 | 1 根 DATA 信号线 | R/G/B 3 根 PWM 线 |
| 单点控制 | 每一颗灯可以独立不同颜色 | 整条灯条所有灯颜色必须完全一样,无法单点控色 |
| 芯片 | 每灯内置驱动 IC | 无芯片,外部 MOS 管驱动 |
| 协议 | WS2812B 单总线时序 | 普通 PWM,无协议 |
| 灯珠数量 | 可几十上百颗级联 | PWM 引脚数量限制灯条 |
| 供电 | 5V | 12V 居多 |
6、简单示例逻辑(伪代码)
plaintext
// 设置第0颗灯红色:GRB,G=0,R=255,B=0 led_data[0] = {0, 255, 0}; // G R B send_ws2812(led_data, led_count); //逐bit输出时序 send_reset(); //拉低>=50us锁存输出补充硬件小提示
- 数据线:DIN 串300‑470Ω 电阻,靠近灯条 DIN 端;
- 电源输入端并联1000μF 电解电容,吸收上电浪涌,防止烧毁灯珠;
- 禁止热插拔灯条,带电插拔极易烧 WS2812B。
