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の実挙動の理解には良い記事です。
- https://cpldcpu.wordpress.com/2014/01/14/light_ws2812-library-v2-0-part-i-understanding-the-ws2812/
- https://cpldcpu.wordpress.com/2014/01/19/light_ws2812-library-v2-0/
- https://cpldcpu.wordpress.com/2014/02/18/new-member-of-the-ws2812-family/
クロックの早い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駆動パルス電圧問題
ただ、新しいLEDだと3.3Vでの直接駆動でも動くらしい。 詳しい実状は、WS2812b Data-line 3.3v or 5v??を読んでもはっきりしていない。
一度、「実際のRGB LED デバイスの駆動パルス電圧の許容範囲はどのくらいなのか?」は、手持ちの古いWS2812Bや、キーボード用に入手するSK6812のSMDデバイスで実験で確認しておきたい。さらに、電源ノイズの影響を押さえるパスコンの効果や、LEDの明るさも実際に確認したい。
この駆動パルス電圧問題の回避策は以下が考えられる。
- 正攻法:レベルシフト回路追加(1MOSFET+2R) – HOW TO LEVEL SHIFT 1-WIRE SYSTEMS
- 簡便法:1段目LEDにダイオード追加 – CHEATING AT 5V WS2812 CONTROL TO USE 3.3V DATA
Previous Post | Top | Next Post |