Arduinoから多数(〜100)のデジタル出力信号を取得する


19

Arduinoを使用して約100個の独立したLEDを制御できるようにしたいと思います。問題は、Arduinoにはこのために設定できるピンがほとんどないことです。この問題を解決する方法は何でしょうか?Arduinoからのより複雑な信号を分離してLEDを制御できるチップはありますか?それとも別の解決策がありますか?


リフレッシュレートの要件は何ですか?LEDごとにどれだけの電流が流れますか?
vicatcu

約1秒のリフレッシュレート。LEDあたり約8maを考えます。Arduinoではなく、外部アダプターで駆動します
Alexis K

多くの逆多重化ソリューションがあります。ただし、タスクの複雑さを考慮してください。データを生成するために必要なアルゴリズムは、Arduinoのmcuの制約内に収まりますか?一部のタスクは、作成するのに非常に満足できるが、コードのメンテナンスが困難になる可能性のあるデザインの作成を介して適合しないか、または適合しないのみです。
クリスストラットン

回答:


22

まず、Arduinoは100個のLEDを直接駆動できません。デバイスがソースまたはシンクする必要のある合計電流が、マイクロコントローラーとArduinoボード上の電圧レギュレータの両方をはるかに超えるためです。ただし、独自の電源と規制を備えたカスタムArduino シールドは、法案に適合する可能性があります。

いくつかの簡単なアプローチがありますが、最も単純なアプローチを以下に詳しく説明します。


  • カスケード構成のTLC5940定電流LEDドライバー:

TLC5940は、ICごとに16個のLEDを駆動し、SPIインターフェースのわずかなバリエーションを介したシリアル入力によって制御されます。最大40台のTLC5940デバイスをカスケード接続できますが、問題の100個のLEDを駆動するには7台で十分です。

少なくともいくつかありArduinoのライブラリ(12 TLC5940のために。

Arduinoから送信する推奨クロックレート、および対応するリフレッシュレート:

  • このスレッドのコードを使用した1 MHz GSClk 。
  • 330 KHz SCLK(シリアルデータクロック)
  • これにより、LEDデータリフレッシュレート244 Hz

これは、データシートの式に基づいています。

f(GSCLK)= 4096 * f(更新)
f(SCLK)= 193 * f(更新)* n
ここで、
f(GSCLK):GSCLKに必要な最小周波数
f(SCLK):SCLKおよびSINに必要な最小周波数
f( update):カスケードシステム全体の更新率
n:TLC5940デバイスのカスケード数

TLC5940は定電流シンクであるため、LEDのアノードは、LED Vfより数ボルト高い電圧、または約7ボルトのいずれか低い方の電圧に接続され、Arduinoの電源ピンから独立して電力が供給されます。この電圧源は、100 *(LEDを実行する電流)を供給できる必要がありますが、調整されていない電源でもかまいません。

LEDカソードは、それぞれのTLC5940 ICのドライブラインに接続されます。

TLC5940自体は、データ書き込み中にデバイスごとに最大Icc = 60 mAを消費するため、Arduinoからそれらの7つに電力を供給しても動作しません。もちろん、使用されているArduinoのVcc、およびグラウンドトレースは、Arduinoのグラウンドに接続する必要があります。TLCパーツをArduinoとは異なる電圧で動作させると、シリアル信号のレベル変換が必要になるため、回避するのが最善です。

カスケード接続されたTLC5940 ICでArduinoを使用する方法を示すYouTubeビデオがいくつかあります


これらのICは7セグメントの数値LEDディスプレイを駆動するように設計されていますが、個別のLED制御を提供するため、ICごとに最大64個のLEDに使用できます。そのうちの2つをカスケード接続して、必要な100個のLEDを駆動できます。データシートの13ページにカスケード構成が示されています。

この設計では、LEDはそれぞれ1つのカソードライン(共通カソード)を共有する最大8つのLEDのグループとして電気的に接続する必要があります。

MAX7219 / 7221は多重化LEDドライバであるため、LEDの最大輝度は前のセクションのような静的LEDドライバよりも低くなります。

以下は、MAX7219を使用した有用なLEDマトリックスライブラリとガイドです。

いくつかの関連するYouTubeの動画(12)関心のものであってもよいです。


繰り返しますが、これらのICは7セグメントの数値LEDディスプレイを駆動するように設計されており、個別のLED制御を提供するため、ICごとに最大40/64個のLEDに使用できます。それらの2/3をArduino SPIバスに接続して、必要な100個のLEDを駆動できます。

デザインノートは前のセクションと同じままです。また、個々のLEDの最大輝度は、MAX7219のストレートマルチプレックス設計の場合よりも低くなります。

興味深いかもしれないいくつかのYouTubeビデオがあります。


  • 個別のコンポーネント設計、シフトレジスタ、IOエクスパンダー、個々のコントローラーを備えた切断可能なLEDストリップなど

これらはすべて、さまざまなレベルの単純さと成功で使用されてきたアプローチです。これらは上記の3つのアプローチよりも複雑な実装であるため、これ以上詳しく説明しません。Webを検索すると、必要に応じてこれらのアプローチの有用なガイドが得られます。

このような設計で重要な点は、すべてのLEDまたはLEDストリングに電流制御抵抗器が必要なことです。通常、LED駆動用に特別に設計されたデバイスはこれを必要としません。

私はこの最後の一連のオプションに個人的な経験がないので、あまり助けにはなりません。


脚注:この質問に答えた後、古い質問を見つけました。これには、私の最後のセクションでいくつかのアプローチを詳しく説明し、議論した答えがあります。そのスレッドは、「宿題としてさらに読む」という興味深いものです。



1
74HC595のような安価なシフトレジスタ?
トーマスE

また、Max5951は「個別のLED制御」をどのように提供しますか。7セグメント制御(8桁で8ピン)のみを持っているようです。
トーマスE

うん、それらも。LEDを保護するために多くの抵抗器が必要であり、専用ICと比較して配線が複雑です。
アニンドゴーシュ

@ThomasEいいえ:「MAX6950は、最大5つの7セグメント桁または40個の個別LEDを駆動します。MAX6951は、最大8つの7セグメント桁または64個の個別LEDを駆動します。」私の回答のMAX7219セクションで説明されているように、8つのLEDのグループをそれぞれ1つのカソードラインに接続するだけです。
アニンドゴーシュ

2
@starblue Overkill対DIY実装の容易さ:ArduinoライブラリとArduinoコミュニティ内の積極的なサポートにより、一回限りまたは趣味の努力のために、TLC5940(DigiKeyでの単一数量で$ 3.78)は最も単純なソリューションではありませんか?あなたが指摘したような、同様に十分にサポートされている他の部分がない限り、Arduinoフォーラムは気に入っています。
アニンドゴーシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.