🚨

RP2040でNeoPixel RGB LEDを光らせる

2022/09/11に公開1

本来3.3V駆動のRP2040と、5.0V駆動のNeoPixelいわゆるRGB LEDは、Pro Microのようにそのまま繋いではいけません。とはいえ広く流通しているNeoPixel互換のRGB LEDはどうやら許容度が高く、3.3Vで駆動してもなんだかんだで動いてしまうため、この問題とその対策法を把握している人は少なそうでした。この記事ではその問題と対策法を紹介するものです。

以下に示す回路図は、(PGA2040を使ってはいますが)RP2040に5.0Vで駆動させたRGB LEDを正しく繋ぐ方法を示しています。回路図が読める方は以下の記事を読む必要はおそらくないでしょう。

PGA2040でNeoPixelを光らせた回路

問題点

NeoPixel互換のRGB LEDは5.0V駆動です。そのためデータシート上は3.3Vという電圧を入力するべきではない≒入力しても動作が保証されないことが示されています。以下はWS2812C-2020というRGB LEDのデータシートからの抜粋です。

これによると電源(VDD)の下限は3.7Vであり、3.3Vは不適格であることが示されています。またLEDの色を決定するための論理データの下限は VDD - 0.3V = 3.4V となり、こちらも3.3Vでは不適格であることがわかります。

私が試した範囲では、WS2812C-2020は電源もデータも3.3Vで光ってしまいました。しかしこれは規格外の利用であるため、どのような不具合が発生してもいたしかたのない状態です。それこそ「鼻から悪魔が飛び出しても仕様に反しない」ということになります。しかし実際に起こりうる問題点としては、点灯しない、暗くなる、指定した色とは異なる色で発光するなどが考えられるでしょう。

これは自作キーボードでの利用実績が多いSK6812MINI-Eでも同様です。以下の表はSK6812MINI-Eのデータシートですが、電源の制約は上記WS2812C-2020と同じのため、3.3Vでの駆動は規格外の利用になります。

まとめるとNeoPixelを3.3Vで動かすことの問題点は以下の通りです。

  • 電源電圧が足りていない
  • データ電圧も足りていない

結果としてNeoPixel RGB LEDが正しく動くことを一切保証できないというわけです。

対策方法

以下の回路は、3.3V駆動のRP2040と5.0V駆動のNeoPixel RGB LEDを電圧の違いを考慮して正しく接続したものです。またキーとなる部分を強調してあります。以下では1つ1つそれを説明していきます。

PGA2040でNeoPixelを光らせた回路

  1. USBの電源(VBUS)は5.0Vであると仮定できる

    USBの電源電圧は多少誤差はあるものの、おおよそ5.0Vであると仮定できます。

  2. VBUSをヒューズとショットキーバリアダイオードに通しVCCとする

    電流が大きくなりすぎた際に、安全に電源を遮断するためにヒューズを用います。大量のRGB LEDを接続すると、USBの仕様上限である500mA以上の電流を消費してしまう場合があります。そのようなケースでも安全に止められるように意図しています。

    ショットキーバリアダイオードは逆流を防ぐために念のため用います。またショットキーバリアダイオードは順方向の電圧降下が低いため、出力であるVCCの電圧はほぼ下がらないと考えて差し支えありません。よってVCCをここでは4.8Vになると仮定します。

  3. VCCをレギュレーターに通し3.3Vを得る

    回路図上はPGA2040を通して、それに実装されたレギュレーターを利用し、3.3Vの電源電圧3V3を得ています。しかし別個に3.3V出力のレギュレーター(例:MIC5219-3.3YM5等)を使うのでも良いです。

  4. RP2040から得た3.3VなLEDの制御データを、MOSFETを使ってVCCと同じ電圧に変換する

    MOSFET、ここではBSS138を用いて、3.3V駆動のLED制御用のデータ(LED_D_3V3)をVCCと同じ電圧(LED_D_5V)に変換します。いわゆるレベルシフト回路と言うやつです。回路図中では3V3を左側(ソースとゲート)、VCCを右側(ドレイン)に接続しています。

    なおBSS138を使った回路はこちらの変換モジュールも参考にしてください。

  5. 4で得た変換したデータをNeoPixel LEDに繋ぐ

    2で得たVCCと、4で得たVCCレベルのデータLED_D_5Vを、NeoPixel RGB LEDに投入します。VCCは4.8V駆動、LED_D_5もおおよそ4.8V駆動になっているため、データシートに示された制約を満たせるというわけです。

まとめ

3.3V駆動のRP2040を、5.0V駆動のNeoPixel RGB LEDに接続する際は、レギュレーターやMOSFETを用いて、データシートに示された範囲内の電圧で利用しましょう。

なお例として使用した回路図は、こちらの自作キーボードYUIOP60Piのもので、実際正しくに光ることを確認しています。

https://twitter.com/kaoriya/status/1563884096543080449

Discussion

en129en129

Absolute Maximum RatingsのLogical Input Voltageについては壊れない入力電圧範囲を示しているもので、下限が-0.3V、上限がVDD+0.7Vです。
入力信号のレベルについてはElectrical CharacteristicsのHigh Voltage Input(VIH)とLow Voltage Input(VIL)に記載があり、Hレベルと認識される下限が2.7V、Lレベルと認識される上限が0.7Vです。
そのためWS2812C-2020において電源に5Vを使っていても3.3V系マイコンの出力信号を正しく認識されます。レベル変換がなくても点灯します。
WS2812Bの古いバージョンはVIHが0.7VVDD、VILが0.3VDDだったためレベル変換が必要でした。