WS2812Bをマイクロコントローラーに接続する別の方法

画像



今日非常に人気のあるのは、WS2812B LEDラインをさまざまなマイクロコントローラーに接続することのトピックと、プログラミングのトピックです。



プロトコルについては詳しく説明しません。 ビット0および1のコーディングは、異なる持続時間のパルスによって実行されると言うだけで十分です。 これらのパルスの出力は、MCUをプログラミングするときの頭痛の種です(この記事の目的はプロセスの詳細を正確に示すことなので、Arduinoの既製ライブラリの使用は考慮していません)。



マイクロコントローラの選択は、2つの理由でTI Stellaris LM4F120に落ちました。





ARMマイクロコントローラでWS2812Bプロトコルを使用してデータ出力を整理するためのさまざまなオプションがあります。



どちらの場合も、ダイレクトメモリアクセスが使用され、プロセッサの負荷が軽減されます。 同時に、両方のソリューションの欠点は、バッファー用のRAMが過剰に消費されることです。



私はSPI DMAを使用することにしましたが、各ビットをいくつかに「膨らませる」必要はありませんでした。 SPIを介してデータを「現状のまま」出力する機能に興味がありました。 つまり 800 kHzでLEDごとに24ビット。 これを行うには、小さなコンバーターSPI-> WS2812Bを作成する必要がありました。 すべてを直接接続できる場合、「庭を囲う」ことは不要に思えるかもしれません。 しかし、プロトコルコンバーターに加えて、SDメモリーカードスロット、および12V-> 5V / 5Aパルスコンバーターもあるボードを作成する必要がありました(144個のLEDのラインは非常に貪欲で、さらに長さと断面に制限を課しています)それを供給するワイヤ)。 また、3.3Vの論理レベルを5Vに変換する問題も解決されました。



回路図を持ち込みます(2つの74HCTケースのみが使用されます)。



画像



抵抗R1とR2の値は近似値であり、オシロスコープを使用して経験的に選択されます(マイクロコントローラーからテストシーケンスを出力し、オシロスコープで期間を測定し、必要に応じて値を調整する必要があります)。 74HCT132と74HCT74が在庫になかったため、実際のスキームは少し異なりますが、74HC74、74HCT14、74HCT00があり、3つのケースがありました。



回路は、144個のLEDのラインと、回路の出力と1メートル程度のLEDの入力との間のワイヤの長さのフィールドでテストされました。 障害や干渉は観察されませんでした。



ところで、ワイヤーについて。 上で述べたように、WS2812BのLEDラインは最大ターンオン時に適切な電流を消費します。 したがって、電力線の電圧降下が重要ではないように、十分な電力線の断面を選択する必要があります。 断面が1mm 2の 3線式電源線(通常、220V用)を取りました。 そのような断面でさえ、1Mの長さのワイヤには不十分でした。 同時に点灯するすべてのLEDの50%の電力で、電圧は4ボルトに「低下」しました。 忘れてはならないもう1つの現象は、電源電圧が低下しても、データラインが0Vと5Vのレベルのままになることです。 したがって、最初のLEDの電源供給に関して、レベルはGNDを下回り、VCCを上回り、入力レッグが損傷するリスクがあります。 したがって、ショットキーダイオードをグランドに追加し、最初のLEDのデータ入力の直前に電源を入れます。



次の記事では、私が手に入れたデバイスの種類を説明します。



All Articles