Erhalten einer großen Anzahl von (~ 100) digitalen Ausgangssignalen von Arduino


19

Ich möchte in der Lage sein, mit einem Arduino rund 100 unabhängige LEDs zu steuern. Das Problem ist, dass das Arduino nicht annähernd genug Pins hat, die dafür konfiguriert werden können. Was wäre ein Weg, um dieses Problem zu lösen? Gibt es einen Chip, der ein komplexeres Signal vom Arduino demuxen kann, das dann die LEDs steuern könnte? Oder gibt es eine andere Lösung?


Was sind Ihre Anforderungen an die Bildwiederholfrequenz? Wie viel Strom verbraucht eine LED?
Vicatcu

Bildwiederholfrequenz von ca. 1 Sekunde. Denken Sie an 8 mA pro LED. Würde von einem externen Adapter mit Strom versorgt werden - nicht vom Arduino
Alexis K

Es gibt viele Demultiplexing-Lösungen. Bedenken Sie jedoch die Komplexität Ihrer Aufgabe. Wird der Algorithmus, den Sie benötigen, um die Daten zu generieren, den Einschränkungen des Arduino-Mikrocontrollers entsprechen? Einige Aufgaben werden, andere werden nicht oder nur über das Erstellen von Designs ausgeführt, deren Erstellung durchaus zufriedenstellend sein kann, die Codewartung jedoch schwierig machen kann.
Chris Stratton

Antworten:


22

Zunächst einmal kann ein Arduino nicht 100 LEDs direkt ansteuern, da der kombinierte Strom, den das Gerät liefern oder senken muss, sowohl den Mikrocontroller als auch den Spannungsregler auf der Arduino-Platine bei weitem übersteigt. Ein kundenspezifischer Arduino Shield mit eigener Stromquelle und Regelung könnte jedoch genau das Richtige sein.

Es gibt mehrere einfache Ansätze, der einfachste Ansatz wird im Folgenden beschrieben:


  • Konstantstrom-LED-Treiber TLC5940 in kaskadierter Konfiguration:

Der TLC5940 steuert 16 LEDs pro IC an, die über einen seriellen Eingang über eine geringfügige Variante einer SPI-Schnittstelle gesteuert werden. Es können bis zu 40 TLC5940-Geräte hintereinander geschaltet werden, von denen jedoch 7 ausreichen, um die 100 in Frage kommenden LEDs anzusteuern.

Es gibt mindestens ein paar Arduino-Bibliotheken ( 1 , 2 ) für den TLC5940.

Empfohlene Taktraten, die vom Arduino gesendet werden sollen, und entsprechende Aktualisierungsrate:

  • 1 MHz GSClk mit Code in diesem Thread .
  • 330 KHz SCLK (serieller Datentakt)
  • Dadurch LED-Datenaktualisierungsrate 244 Hz

Dies basiert auf den Formeln aus dem Datenblatt:

f (GSCLK) = 4096 * f (Aktualisierung)
f (SCLK) = 193 * f (Aktualisierung) * n
wobei:
f (GSCLK): Mindestfrequenz für GSCLK erforderlich
f (SCLK): Mindestfrequenz für SCLK und SIN
f ( update): Aktualisierungsrate des gesamten kaskadierenden Systems
n: Anzahl der kaskadierten TLC5940-Geräte

Die TLC5940 ist eine Konstantstromenke , so dass die Anoden der LEDs auf eine Spannung ein paar Volt größer als die LED Vf oder etwa 7 Volt gebunden werden würden, sofern dieser Wert niedriger ist, unabhängig von dem Power - Pins des Arduino mit Strom versorgt. Diese Spannungsquelle muss in der Lage sein, 100 * zu liefern (unabhängig davon, mit welchem ​​Strom Sie die LEDs betreiben), kann jedoch eine ungeregelte Quelle sein.

Die LED-Kathoden gehen zu den Ansteuerleitungen der jeweiligen TLC5940-ICs.

Der TLC5940 selbst verbraucht während des Datenschreibens bis zu Icc = 60 mA pro Gerät, sodass das Versorgen von 7 von ihnen vom Arduino nicht funktioniert. Es ist daher erforderlich, dass eine unabhängige geregelte Vcc von 3,3 bis 5 Volt bereitgestellt wird, im Idealfall der gleiche Wert wie der Vcc des verwendeten Arduino und die Erdungsspuren müssen natürlich wieder mit der Erdung des Arduino verbunden werden. Das Betreiben der TLC-Teile mit einer anderen Spannung als das Arduino würde eine Pegelumwandlung des seriellen Signals erforderlich machen und daher am besten vermieden.

Mehrere YouTube-Videos demonstrieren die Verwendung von Arduino mit kaskadierten TLC5940-ICs.


Obwohl diese ICs für die Ansteuerung von numerischen 7-Segment-LED-Anzeigen konzipiert wurden, bieten sie eine individuelle LED-Steuerung und können für bis zu 64 LEDs pro IC verwendet werden. Zwei davon können kaskadiert werden, um die 100 erforderlichen LEDs anzusteuern. Seite 13 des Datenblattes zeigt eine Kaskadenkonfiguration.

Die LEDs müssten für diesen Entwurf als Gruppen von bis zu 8 LEDs elektrisch verbunden werden, die sich jeweils eine Kathodenleitung (gemeinsame Kathode) teilen.

Beim MAX7219 / 7221 handelt es sich um Multiplex-LED-Treiber, daher ist die maximale Helligkeit der LEDs geringer als bei einem statischen LED-Treiber wie im vorherigen Abschnitt.

Hier finden Sie eine nützliche LED- Matrixbibliothek und Anleitung zur Verwendung des MAX7219.

Einige relevante YouTube-Videos ( 1 , 2 ) könnten von Interesse sein.


Auch diese ICs wurden für die Ansteuerung von numerischen 7-Segment-LED-Anzeigen entwickelt. Sie bieten eine individuelle LED-Steuerung und können somit für bis zu 40/64 LEDs pro IC verwendet werden. Zwei / drei von ihnen können an einen Arduino SPI-Bus angeschlossen werden, um die 100 erforderlichen LEDs anzusteuern.

Konstruktionshinweise bleiben die gleichen wie im vorherigen Abschnitt. Außerdem wäre die maximale Helligkeit der einzelnen LEDs geringer als beim geraden Multiplex-Design des MAX7219.

Es gibt einige YouTube-Videos , die von Interesse sein könnten.


  • Diskrete Komponentendesigns, Schieberegister, IO-Expander, schneidbare LED-Streifen mit einzelnen Controllern und vieles mehr ...

All dies sind Ansätze, die mit unterschiedlichem Maß an Einfachheit und Erfolg eingesetzt wurden. Sie sind komplexere Implementierungen als die drei oben genannten Ansätze und werden daher nicht weiter ausgeführt. Das Durchsuchen des Webs würde bei Bedarf nützliche Anleitungen für diese Ansätze liefern.

Ein wesentlicher Irritant bei solchen Konstruktionen ist die Notwendigkeit von Stromsteuerwiderständen an jeder LED oder LED-Kette. Geräte, die speziell für den LED-Betrieb entwickelt wurden, benötigen dies normalerweise nicht.

Ich habe keine persönlichen Erfahrungen mit diesem letzten Satz von Optionen, kann also nicht viel helfen.


Fußnote: Nachdem ich auf diese Frage geantwortet hatte, fand ich eine ältere Frage , die Antworten enthält, in denen einige der Ansätze in meinem letzten Abschnitt detailliert beschrieben und diskutiert werden. Dieser Thread macht interessant "weiterlesen als Hausaufgabe".



1
Preiswerte Schieberegister wie 74HC595?
Thomas E

Wie bietet der Max5951 auch eine "individuelle LED-Steuerung" - er scheint nur eine 7-Segment-Steuerung zu haben (8 Pins für 8 Ziffern), nicht wahr?
Thomas E

Jawohl, die auch. Benötigen Sie eine Menge Widerstände zum Schutz der LEDs, und dann die Verdrahtung komplexer als die speziell gebauten ICs.
Anindo Ghosh

@ThomasE Nein: "Der MAX6950 steuert bis zu fünf 7-Segment-Ziffern oder 40 diskrete LEDs. Der MAX6951 steuert bis zu acht 7-Segment-Ziffern oder 64 diskrete LEDs." Man schließt einfach Gruppen von jeweils 8 LEDs an eine Kathodenleitung an, wie im Abschnitt MAX7219 meiner Antwort beschrieben.
Anindo Ghosh

2
@starblue Overkill v / s einfache DIY-Implementierung : Wäre der TLC5940 (3,78 USD in Einzelmengen bei DigiKey) aufgrund der Arduino-Bibliotheken und der aktiven Unterstützung innerhalb der Arduino-Community für einmalige oder hobbybezogene Zwecke nicht die einfachste Lösung? Es sei denn, es gibt andere, ebenso gut unterstützte Teile, wie Sie es bereits betont haben, die die Arduino-Foren lieben.
Anindo Ghosh
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.