WS2812 单线串行 LED:用脉冲宽度当 0 和 1
更新时间:2026-09-12。本文是「集成电路大类 · 芯片设计」**入门层(beginner)**数字逻辑基础第八十一篇。PWM用占空比调平均电压,WS2812 把「用脉宽携带信息」做到极致——一根没有时钟的线,靠高电平长短区分 0/1。理解它,就理解了一大类「单线自定时」串行协议的硬件生成方法。
本文要回答的问题
- 只有一根数据线、没有时钟,接收端怎么分辨 0 和 1?
- 24bit 数据帧为什么是 GRB 顺序?级联时每颗灯怎么「截胡」再转发?
- 50µs 的复位码起什么作用?为什么灯是整帧后一起变色?
- 为什么普通 GPIO 翻转容易抖?SPI/DMA 拼位是什么取巧办法?
- 带很多灯时电流、供电和亮度要注意什么?
一、位编码:宽度即比特
WS2812 每个 bit 固定周期约 1.25µs,靠高电平持续时间区分:
- 0 码:高约 0.4µs + 低约 0.85µs;
- 1 码:高约 0.8µs + 低约 0.45µs;
- 复位/锁存码:总线拉低 >50µs,表示一帧结束,所有灯把收到的数据同时输出到 LED。
bit0: ┌─0.4us─┐________0.85us________
bit1: ┌────0.8us────┐____0.45us____
reset: └______________________ >50us ______________________因为没有独立时钟,接收端用自己的内部延时来「量」高电平宽度,所以波形必须在数据手册窗口内(各档通常 ±150ns 余量)。发送过程中若被中断打断几百 ns,某位宽度超窗,整串颜色就错乱——这是软件点灯最常见的坑。
二、帧格式与级联:每颗灯截走前 24bit
每颗灯收 24bit = G7..G0、R7..R0、B7..B0(注意顺序是 GRB、MSB 先发)。数据线经第一颗进、再从其 DOUT 出给第二颗,手拉手级联:每颗灯在上电后把最先收到的 24bit存进自己的显示锁存,之后收到的位通过整形/延时后从 DOUT 转发,于是发 N×24bit 就能点亮 N 颗灯,第 1 个 24bit 对应物理上最近的灯。
三、怎么生成精确波形:关中断、SPI 拼位、DMA
难点是在整帧(可能上千 bit、若干毫秒)期间维持约 ±150ns 的脉冲精度,常见三种硬件做法:
- 定时器/位带翻转(最直接):用高分辨率定时器按 0.4/0.8/1.25µs 边沿产生中断翻转 GPIO,发送期间关中断或用最高优先级——成本低但占满 CPU;
- SPI 的 MOSI 拼位(最取巧):把 SPI 跑到约 6MHz(位周期≈167ns),用 3 位拼一个 WS 位:发
100得到约 0.33µs 高(≈0 码)、发110得到约 0.67µs 高(≈1 码),靠硬件移位寄存器自动出波形,CPU 只需组字节; - PWM/定时器 + DMA(最省 CPU):用定时器比较/PWM 加 DMA 从内存缓冲连续喂边沿数据,CPU 组好整帧后几乎零干预,可跑任意长度灯带。
无论哪种,发送字节内容都按 GRB、MSB 先,逐颗灯 24bit 顺序写入缓冲,最后强制 >50µs 低电平。
四、供电、亮度与工程坑
- 电流:每颗全白满亮约 50~60mA,100 颗就是 5~6A,远超一根细线/一个 3.3V 脚。要按亮度(代码里把每通道值降额)控制总电流、灯带分段注入 5V 电源、沿线加电容;数据是 5V 电平,3.3V 主控常需电平转换;
- 压降导致尾部偏色:长线末端电压下跌使尾灯变暗/变色,需多点供电;
- 调试:用逻辑分析仪/输入捕获量每位高电平宽度是否落在数据手册窗口,复位低电平是否真的 >50µs;
- 变体(SK6812 等)时序窗口更宽、支持更高速,波形生成原理相同。
与现有篇目的衔接
总结
一句话总结:WS2812 是把驱动 IC 和 RGB 灯珠封在一起的可级联智能 LED,只用一根没有时钟的数据线,靠约 1.25µs 周期内的高电平脉宽区分 0(约 0.4µs 高)和 1(约 0.8µs 高),每颗灯取走数据流中最先到达的 24bit(顺序是 GRB、MSB 先发)作为自己的颜色、再把后续位整形转发给下一颗,发完全部 N×24bit 后把总线拉低超过 50µs 作为复位锁存码,所有灯才同时刷新;因为接收端用内部延时丈量脉宽,发送期间任何超过约 150ns 的抖动(尤其中断)都会使整串错乱,所以工程上要么用高分辨率定时器并在发送时屏蔽中断,要么取巧用约 6MHz 的 SPI 发送 100/110 这样的 3 位模式拼出 0/1 码、或用 PWM/定时器加 DMA 连续喂边沿以几乎不占 CPU;硬件上还要注意每颗满亮约 60mA、长灯带需分段 5V 供电加电容并对每通道亮度降额以防线压降导致尾部偏色,3.3V 主控通常要做电平转换,调试时用逻辑分析仪按数据手册的脉宽窗口和 50µs 复位条件核对波形。