点控像素灯
在过去的五年中,不同种类的LED灯及相关技术不断面世。过往,如果你想使用LED,你可以拿一些单独的灯及以微处理器去驱动它。这让你可驱动一条长长的全彩像素灯及应用颜色动态。对於装饰照明及灯带照明等应用十分适合。可是,你在任何时间只能控制灯带的一部分分段。
假设你想创作一个方格阵排列的像素灯及分别控制当中的每一个像素灯,这时你便需要用到点控像素灯了。
The APA102 / SK9822 Addressable Pixel
这些小设备会有不同的种类丶大小丶外观丶驱动机制丶颜色设定等,但它们都有着某些相似的特性:
- 每一个像素灯内部都由三个超光LED灯组成,分别是红丶绿丶蓝三色。也有红绿蓝白四色的,我们会於後面的内容中讨论。
- 每一个像素灯都有内建的微型IC (积体电路),以单独控制里面每颗灯如可啓动。
- 它们都可串联成长而覆杂的像素点系统。
- 最重要的是它们都可个别控制。
现在你便拥有一条长的像素灯带,但你可以以很高的频率续一控制它们如何发光。它们通常是放置在半弹性丶不同设置及阔度的铜线导带上。 它们也可以不同大小的印刷电路板方格,及任何你能想像到的形式和设置在市面上购买到。当然单一的点控像素灯也可以购买的!
一些WS2812像素灯的相片,12mm毫米阔每米144灯的灯带。
不同种类的像素灯
这个类别的点控像素灯,由一系列不同的技术组成。它们各有差异,而使用的条件亦有不同,以下是一些参考因素:
- 控制点控像素灯内单一红绿蓝LED灯的频率及物理控制方法
- 控制设备与像素灯积体电路沟通所用的传输通讯协定
- 重覆性水平
- 单一灯珠的颜色及亮度的控制水平
简而言之,我会选择描述两款最常用的点控像素灯款式。而这个手册中只会用到当中其中一种。
四针点控像素灯
这三个型号都是使用同一种技术。像素灯都拥有四针。
- 地线 - 连接电源供应电路中的接地总线
- 数据输入 - 连接你的控制设备或前一个像素灯数据输出
- 数据输出 - 连接下一个像素灯的数据输入
- +5V - 连接电源供应电路中的+5V总线
这些像素使用的传输协定是基於PWM (脉冲宽度调变)去与其他灯沟通的。
你的控制设备会以一个预定义的速度(大约 800Khz的频率, 但不同的型号会有些少不同的频率)发送序列讯号。 序列讯号是一个排列有序的位元组列表,每一个代表着每颗像素灯内红绿蓝像素灯珠的亮度值。位元组被发送的排列,控制你计划亮起的像素灯。例如,你有三个串联的像素灯,如果要顺序红丶绿丶蓝这样亮起,所以像素灯1是红色,像素灯2是绿色,像素灯3是蓝色。你所发送的资料块应该如下:
[255 0 0] [0 255 0] [0 0 255]
这款像素灯是相对便宜及容易购买的点控像素灯。它们最大的传输频率会到800Khz,但在大型装置使用时,就会变成一个限制的因素。特别是在你的控制设备需要传输资料到一个非常长的串联像素灯时。
解决方法是分拆你的装置成几组并联的输出电路。例如:如果你有一个方格阵列由100颗像素灯宽及100颗像素灯高所串联组成,这会造成所有像素的更新及重刷频率变低。如果你有驱动器可以驱动10组屏联输出,你就可以把你的装置分成一个模组,从而令影格比率提升。
这个系列中可用的像素灯系列:
可购买的款式系列是根据灯珠密度丶灯带宽度及防水程度而分类的。以下是一些不防水的常用密度系列产品。
- 30 Pixels Per meter
- 60 Pixels Per Meter
- 74 Pixels Per Meter
- 96 Pixels Per Meter
- 144 Pixels Per Meter
六针 (SPI 驱动) 点控像素灯
这些都是高精度像素灯,你可对他们的颗粒颜度及亮度进行设置。
以上三款型号使用的像素灯都是一样的,但只是由不同的公司制造/注册商标。APA102 是当中的始组。Adafruit 以名字"Dotstar" 注册商标,去代指上面所述类型的灯,而SK9822则是由另一家公司自行制作的最新型号。
我比较喜欢它们,因为它们有较优越的表演。这些像素灯会有六针,标签如下:
- 地线 - 连接电源供应电路中的接地总线
- 时钟输入 - 序列时钟讯号输入
- 资料输入 - 序列资料讯号输入
- 时钟输出 - 序列时钟输出 反转
- 资料输出 - 序列资料讯号输出
- +5V - 连接电源供应电路中的+5V总线
驱动这些像素需要一个序列沟通协议,它能简单地在大部分的编程语言中使用及执行。当然,亦有大量可供此用途使用的自制驱动,我将会於及後探讨。要和这些像素灯沟通涉及创建位元组字串,如下:
Start Frame | Pix 1 GB Frame | Pix 1 Blue | Pix 1 Green | Pix 1 Red | ... | NEXT 4 bytes PIXEL DATA | ... | END Frame |
- 起始格 (32 位元): 这个格子告诉像素灯资料正在输入中。它会被预设成32 x 0's
- 像素灯1 总亮度影格 (8 位元): 这个格子容许你以win32 16进制控制这颗灯的总亮度。223是亮度的最低值及255是亮度的最高值。
- 像素灯1 蓝色 (8 位元): 一个由0至255的值控制像素灯的蓝色水平
- 像素灯1 绿色 (8 位元): 一个由0至255的值控制像素灯的绿色水平
- 像素灯1 红色 (8 位元): 一个由0至255的值控制像素灯的红色水平
- 终结格 (32 位元): 这个格是32 x 1s,会被发送去告诉所有的像素灯需要使用收到的资料! 这个组块会在所有点控像素灯被发送资料後才最後发送。
这些像素灯能用於大型装置使用,因为它们使用很高的频率驱动。你可以以最高30Mhz(30Mbit)的频率发送资料至SK9822的像素点。
可是,真实的情况下,这个频率一般会较慢,因为它是基於一系列技术条件可才能达到。你需要确保你有平均的电力分配到你所有的像素丶适当接地及杂讯干扰排除丶合适的电力缓冲等⋯⋯这里有不同灯珠密度的连接。这跟Neopixel的灯珠密度基本上一样:
至於整个手册,为简便起见,我们都会使用SK9822像素灯。它能於我们所描述的案例中正常运作。而我们会专门使用SK9822 5050 (5x5毫米) 的像素灯。