幻彩灯带 WS2812 驱动

更新时间:2022-11-24 09:20:18下载pdf

幻彩灯带 WS2812 内部集成了驱动芯片和灯珠,可以很好实现 LED 灯珠的三原色显示。由于每一个 WS2812 内部的芯片和灯珠可以独立控制,因此可以开发者可以驱动 WS2812 实现幻彩灯带的每一个 LED 灯珠的不同颜色显示设计。使用涂鸦 Wi-Fi 芯片 SDK,您只需要利用自己的模组驱动SPI发送数据,给每一个 WS2812 发送不同的数据就可以使每一个WS2812灯珠显示不同的颜色亮度,这样就可以完成幻彩灯带的开发。

如果您需要根据本文对幻彩灯带进行开发,请自行在第三方渠道购买原材料 WS2812 灯带。

幻彩灯带应用场景

幻彩灯带比传统的灯带适用更多场景,效果更炫酷,有更好的市场前景。目前越来越多的用户使用幻彩灯带布置儿童床、摆件、门框,也有用户使用幻彩灯带装饰草坪、圣诞树等,幻彩灯带的开发对塑造品牌影响力有非常大的帮助。

WS2812 驱动原理

幻彩灯带上的每颗灯珠都是一个集成了控制电路与发光电路与一体的智能外控LED光源,每颗灯珠即为一个像素点。通过控制每颗像素点的颜色显示即可对该品类产品进行点控,营造出变化多端的氛围效果。

不同的品类产品选用不同的灯珠外形(如下所示,分别是灯串和灯带的灯珠外观),但内部控制芯片(WS2812)其实是一样的。

幻彩灯带 WS2812 驱动幻彩灯带 WS2812 驱动

WS2812 是三通道 LED 驱动控制专用电路,可以输出 RGB 数据实现 LED 灯的三原色显示。涂鸦的幻彩灯带通过使用 WSB2812 作为控制芯片,实现一个像素点的LED灯三原色输出。即通过 WSB2812 驱动控制幻彩灯带上一个像素点的颜色亮度。

灯珠内部控制 IC 接线引脚分别为 VDD(大部分12V)、GND、DI、DO。灯珠接线采用下图所示的级联形式。

幻彩灯带 WS2812 驱动

WS2812 控制芯片

WS2812 芯片采用单线归零码的通讯方式,芯片在上电复位以后,DIN端接收从控制器传输过来的数据。

  1. 首先送过来的 24 bit 数据被第一个芯片提取后,送到芯片内部的数据锁存器。
  2. 剩余的数据经过内部整形处理电路整形放大后,通过 DO 端口开始转发输入给下一个级联的芯片,每经过一个芯片的传输,信号减少 24 bit。

芯片采用自动整形转发技术,使得该芯片的级联个数不受信号传送的限制,仅仅受限信号传输速度要求。

  1. 芯片内部的数据锁存器根据接受到的 24 bit 数据,在 OUTR、OUTG、OUTB 控制端产生不同的占空比控制信号。

  2. 等待 DIN 端输入 RESET 信号时,所有的芯片同步将接收到的数据送到各个段,芯片将在该信号结束后重新接受的数据。

  3. 在接收开始的 24 bit 数据后,通过 DO 口转发数据口。

    芯片在没有接收到 RESET 码前,OUTR、OUTG、OUTB 管教原输出保持不变,当接受到 280 μs 以上的低电平 RESET 码后,芯片将刚刚接收到的 24 bit PWM 数据脉宽输出到 OUTR、OUTG、OUTB 引脚上。

数据传输方法

幻彩灯带 WS2812 驱动

其中 D1 位 MCU 端发送的数据,D2、D3、D4 为级联电路自动整形转发的数据。控制器可以连续发送 24 bit 的 RGB 控制信号,第一个灯珠截取前 24 bit 后,会显示在自己的 LED 上,并将其余的数据进行整形后发送给第二颗灯珠。第二颗灯珠会截取第二组 24 bit 数据进行显示,并继续进行转发剩下的,直到最后一组数据被显示为止。

芯片引脚

序号 符号 管脚名 功能描述
1 OUTR LED 驱动输出 RED(红)PWM 控制输出
2 OUTG LED 驱动输出 GREEN(绿)PWM 控制输出
3 OUTB LED 驱动输出 BLUE(蓝)PWM 控制输出
4 GND 接地 信号接地和电源接地
5 DO 数据输出 显示数据级联输出
6 DIN 数据输入 显示数据输入
7 NC 空管脚 悬空
8 VDD 逻辑电源 IC 供电

数据输出

T0H 0码, 高电平时间 220ns~380ns
T1H 1码, 高电平时间 580ns~1.6µs
T0L 0码, 低电平时间 580ns~1.6µs
T1L 1码, 低电平时间 220ns~420ns
RES 帧单位,低电平时间 280µs以上

WS2812的逻辑 10reset 码如下图所示:

幻彩灯带 WS2812 驱动

24 bit 数据结构如下所示:

R7 R6 R5 R4 R3 R2 R1 R0 G7 G6 G5 G4 G3 G2 G1 G0 B7 B6 B5 B4 B3 B2 B1 B0

数据发送的顺序是高位先发,并按照 RGB 的顺序发送。

WS2812通过输出 24 bit 可以控制幻彩灯带上一个像素点的颜色亮度,其中 R0-R7 bit 控制红光颜色输出,G0-G7bit 控制绿光颜色输出,B0-B7bit 控制绿光颜色输出。由于每颗灯珠需要存储 24 bit 的 RGB 色彩数据,当灯带较长,灯珠个数较多时,显存数据会占用大量的 RAM 空间。如下图所示:

幻彩灯带 WS2812 驱动

使用 SPI 驱动 WS2812

涂鸦使用 SPI 方案驱动 WS2812。WS2812 的控制电平要求精度在百 ns 级别。如果普通的 GPIO 引脚的翻转时间很大,则无法驱动 WS2812。WS2812 对时序要求很高,低速单片机难以满足该要求。

如果您将 SPI 的时钟调整为 8MHz,发送一字节是 1us,一个比特是 0.125us,则:

  • 给 WS2812 发送逻辑 0 即可以通过 SPI 总线发送 11000000b 来实现(0.25us高电平,0.75us低电平)
  • 给 WS2812 发送逻辑 1 即可以通过 SPI 总线发送 11111100b 来实现(0.75us高电平,0.25低电平)。

通过这种方式驱动的灯光稳定可靠。能够保证灯光不会出现闪烁或者某个灯珠颜色跳变的情况。

WS2812 需要输出 24 bit 才能控制一个幻彩灯带上的一个像素点,而 WS2812 上的 1bit 的值由 SPI 发送 8bit 才能确定是 1 还是 0,所以控制幻彩灯带上的一个像素点需要 SPI 发送 192 bit(即 24 * 8 = 192)。

如果您的幻彩灯带由三个像素点组成,那么需要 SPI 发送 192 * 3bit 可以控制幻彩灯带上的三个像素点的显示。这样您发送三次不同的 24 bit ,可以实现幻彩灯带上三个像素点的不同颜色显示。

  • 使用硬件 SPI 驱动 WS2812 的方式驱动的灯光稳定可靠,使用软件 SPI 驱动 WS2812 的方式驱动的灯光不稳定。
  • I/O 到控制线之间,使用外部一个 3.3V 转 5V 的电路,有助于数据传输的稳定,开发时发现部分模组在不加的情况下,会出现包括但不限于前几颗灯珠乱闪的情况。
  • 在经常热插拔的情况下,应在引脚端加入提供热插拔保护和阻抗匹配的电阻,否则热插拔时可能导致第一颗灯珠的损坏。

幻彩灯带功能

  • 基础功能包括:

    • 静态调色:根据面板调节整条灯带的颜色、亮度和饱和度。

    • 开关灯,定时/倒计时开关灯。

      该功能只要整体刷新显存数据,并且发送给幻彩灯带上的每一个灯珠的 24 bit 数据都一样,幻彩灯带的所有灯珠显示同一颜色亮度。

  • 高级功能包括:

    • 分段显示:所谓分段显示就是控制幻彩灯带上每一个灯珠显示不同的颜色亮度。

      实现该功能只需要给幻彩灯带上每一个灯珠发送不同的 24 bit 数据便可以驱动幻彩灯带上的LED灯珠显示不同的颜色亮度。