Digital RGB LED (1)

Date: 2022/05/21 (initial publish), 2022/05/29 (last update)

Source: jp/note-00051.md

Previous Post Top Next Post

TOC

電子工作の基本の光り物の駆動が、単純なカラーLEDを直接電流駆動するタイプから、MCUが組み込まれてデジタルコントロールの調色機能付のDigital RGB LEDとかNEOPIXEL LED等と呼ばれるLEDをデジタル信号ドライブするように変わってきました。その状況を調べました。

よく使うDigital RGB LEDチップ

LED size VDD data rate signal wire
WS2812B 5mm x 5mm 5V 800 Kbps 1
WS2813 5mm x 5mm 5V 800 Kbps 2
WS2815B 5mm x 5mm 12V 800 Kbps 1
SK6812MINI-E 3.2mm x 2.8mm 5V 800 Kbps 1

すべて800 Kbps で、1.2 us毎に1ビットのクロックで、共通の制御信号でコントロールできます。

WS2812B と その改良型のWS2813の違いは、WS2812B vs WS2813 Addressable RGB LED Strips – How are they different? に詳しいです。

以下では、WS2812B と SK6812MINI-Eにフォーカスします。

Digital RGB LED駆動パルス生成ソフト

Digital RGB LED駆動パルス生成は、単純なMCUのループによるタイミング生成とDigital PIN のBit Bang操作という力技アプローチできます。クロックの遅いAVR系では、Adafruit NeoPixel Library (2.6K starts) がBit bangを使う代表例です。

この他以下の連載記事に基づく、メモリー負荷の小さいというlight_ws2812 (871 stars) も、どうもこのアプローチです。RGB LEDの実挙動の理解には良い記事です。

クロックの早いARM系でのよりエレガントなDigital RGB LED駆動パルス生成法は、SPIインターフェースを使いMISO出力を引き出し接続します。FastLED (5.3K stars) がこの代表例です。クロック信号は取り出さずに、SPIのデーター数ビットで1ビットとするので、信号線は1本です。 一見ARDUINO対応のようですが、SPI利用はAVR系では無理なようで、ソース中にあるAVRのSPIのコードはコメントによると動かないようで、AVRではBit Bangのコードが利用されるようです。ちょっとコード構造が複雑です。

このSPIアプローチは、DMAやbit banding組み合わせると更に最適化できます。 Improved STM32 WS2812B DMA library の記事にある、LowMEM ws2812b libraryシリーズ (77 stars) 等がどうもこれに当たります。

SPIインターフェースを使う際の詳細な実験情報がControlling WS2812(B) leds using STM32 HAL SPI にあります。

興味深いライブラリー間の優劣比較情報が、ESP32: FastLED vs. NeoPixelBus vs. NeoPixel Libraryにあります。

とりあえず、AVRではAdafruit、ARMではFastLEDにフォーカスします。

Digital RGB LED駆動パルス電圧問題

RGB LED (WS2812B)のドライブの電圧レベルは、本来5V CMOSロジック向け(Hi=3.5V, Lo=1.5V)なので、3.3VロジックでHigh条件側で確実にドライブするのは本来だと厳しい

ただ、新しいLEDだと3.3Vでの直接駆動でも動くらしい。 詳しい実状は、WS2812b Data-line 3.3v or 5v??を読んでもはっきりしていない。

一度、「実際のRGB LED デバイスの駆動パルス電圧の許容範囲はどのくらいなのか?」は、手持ちの古いWS2812Bや、キーボード用に入手するSK6812のSMDデバイスで実験で確認しておきたい。さらに、電源ノイズの影響を押さえるパスコンの効果や、LEDの明るさも実際に確認したい。

この駆動パルス電圧問題の回避策は以下が考えられる。

Previous Post Top Next Post