點控像素燈

在過去的五年中,不同種類的LED燈及相關技術不斷面世。過往,如果你想使用LED,你可以拿一些單獨的燈及以微處理器去驅動它。這讓你可驅動一條長長的全彩像素燈及應用顏色動態。對於裝飾照明及燈帶照明等應用十分適合。可是,你在任何時間只能控制燈帶的一部分分段。

假設你想創作一個方格陣排列的像素燈及分別控制當中的每一個像素燈,這時你便需要用到點控像素燈了。

The APA102 / SK9822  Addressable Pixel

這些小設備會有不同的種類、大小、外觀、驅動機制、顏色設定等,但它們都有著某些相似的特性:

  • 每一個像素燈內部都由三個超光LED燈組成,分別是紅、綠、藍三色。也有紅綠藍白四色的,我們會於後面的內容中討論。
  • 每一個像素燈都有內建的微型IC (積體電路),以單獨控制裡面每顆燈如可啓動。
  • 它們都可串聯成長而覆雜的像素點系統。
  • 最重要的是它們都可個別控制。

現在你便擁有一條長的像素燈帶,但你可以以很高的頻率續一控制它們如何發光。它們通常是放置在半彈性、不同設置及闊度的銅線導帶上。 它們也可以不同大小的印刷電路板方格,及任何你能想像到的形式和設置在市面上購買到。當然單一的點控像素燈也可以購買的!
一些WS2812像素燈的相片,12mm毫米闊每米144燈的燈帶。 

不同種類的像素燈

這個類別的點控像素燈,由一系列不同的技術組成。它們各有差異,而使用的條件亦有不同,以下是一些參考因素:

  • 控制點控像素燈內單一紅綠藍LED燈的頻率及物理控制方法
  • 控制設備與像素燈積體電路溝通所用的傳輸通訊協定
  • 重覆性水平
  • 單一燈珠的顏色及亮度的控制水平

簡而言之,我會選擇描述兩款最常用的點控像素燈款式。而這個手冊中只會用到當中其中一種。

四針點控像素燈

Neopixel / WS2812 / SK6812

這三個型號都是使用同一種技術。像素燈都擁有四針。

  • 地線 - 連接電源供應電路中的接地總線
  • 數據輸入 - 連接你的控制設備或前一個像素燈數據輸出
  • 數據輸出 - 連接下一個像素燈的數據輸入
  • +5V - 連接電源供應電路中+5V總線

這些像素使用的傳輸協定是基於PWM (脈衝寬度調變)去與其他燈溝通的。

你的控制設備會以一個預定義的速度(大約 800Khz的頻率, 但不同的型號會有些少不同的頻率)發送序列訊號。 序列訊號是一個排列有序的位元組列表,每一個代表著每顆像素燈內紅綠藍像素燈珠的亮度值。位元組被發送的排列,控制你計劃亮起的像素燈。例如,你有三個串聯的像素燈,如果要順序紅、綠、藍這樣亮起,所以像素燈1是紅色,像素燈2是綠色,像素燈3是藍色。你所發送的資料塊應該如下:

[255 0 0] [0 255 0] [0 0 255]

這款像素燈是相對便宜及容易購買的點控像素燈。它們最大的傳輸頻率會到800Khz,但在大型裝置使用時,就會變成一個限制的因素。特別是在你的控制設備需要傳輸資料到一個非常長的串聯像素燈時。

解決方法是分拆你的裝置成幾組并聯的輸出電路。例如:如果你有一個方格陣列由100顆像素燈寬及100顆像素燈高所串聯組成,這會造成所有像素的更新及重刷頻率變低。如果你有驅動器可以驅動10組屏聯輸出,你就可以把你的裝置分成一個模組,從而令影格比率提升。 

這個系列中可用的像素燈系列:

可購買的款式系列是根據燈珠密度、燈帶寬度及防水程度而分類的。以下是一些不防水的常用密度系列產品。

六針 (SPI 驅動) 點控像素燈

Dotstar / APA102 / SK9822 

這些都是高精度像素燈,你可對他們的顆粒顏度及亮度進行設置。

以上三款型號使用的像素燈都是一樣的,但只是由不同的公司製造/註冊商標。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毫米) 的像素燈。

相關文章