Erhalten einer großen Anzahl (~ 100) digitaler Ausgangssignale von Arduino

Ich möchte mit einem Arduino etwa 100 unabhängige LEDs steuern können. Das Problem ist, dass der 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 hoch ist die Stromaufnahme pro LED?
Bildwiederholfrequenz von etwa 1 Sekunde. Denken Sie an etwa 8 mA pro LED. Würde über einen externen Adapter mit Strom versorgt - nicht über den Arduino
Es gibt viele Demultiplexlösungen. Aber bedenken Sie die Komplexität Ihrer Aufgabe; Wird der Algorithmus, den Sie zum Generieren der Daten benötigen, in die Einschränkungen der MCU des Arduino passen? Einige Aufgaben passen, andere nicht oder nur über das Erstellen von Designs, die sehr zufriedenstellend zu erstellen sein können, aber die Codewartung schwierig machen können.

Antworten (1)

Zunächst einmal kann ein Arduino nicht direkt 100 LEDs 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 benutzerdefiniertes Arduino Shield mit eigener Stromquelle und Regelung könnte jedoch die Rechnung erfüllen.

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


  • TLC5940 Konstantstrom-LED-Treiber in kaskadierter Konfiguration:

Der TLC5940 treibt 16 LEDs pro IC an, gesteuert durch einen seriellen Eingang über eine leichte Variante einer SPI-Schnittstelle. Bis zu 40 TLC5940-Geräte können kaskadiert werden, aber 7 davon reichen aus, um die fraglichen 100 LEDs anzusteuern.

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

Vorgeschlagene Taktraten zum Senden vom Arduino und entsprechende Aktualisierungsrate:

  • 1 MHz GSClk mit Code in diesem Thread .
  • 330 KHz SCLK (serielle Datenuhr)
  • Dabei beträgt die LED-Datenaktualisierungsrate 244 Hz

Dies basiert auf den Formeln aus dem Datenblatt:

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

Der TLC5940 ist eine Konstantstromsenke , sodass die Anoden der LEDs an eine Spannung gebunden sind, die ein paar Volt höher ist als die LED-Vf oder etwa 7 Volt, je nachdem, welcher Wert niedriger ist, unabhängig von den Stromanschlüssen des Arduino. Diese Spannungsquelle muss in der Lage sein, 100 * zu liefern (unabhängig davon, mit welchem ​​​​Strom Sie die LEDs betreiben), kann aber eine ungeregelte Quelle sein.

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

Der TLC5940 selbst verbraucht während des Datenschreibens bis zu Icc = 60 mA pro Gerät, sodass die Stromversorgung von 7 von ihnen über den Arduino nicht funktioniert. Es muss eine unabhängige geregelte Vcc von 3,3 bis 5 Volt bereitgestellt werden, idealerweise der gleiche Wert wie die Vcc des verwendeten Arduino, und die Erdungsspuren müssen natürlich wieder mit dem Boden des Arduino verbunden werden. Der Betrieb der TLC-Teile mit einer anderen Spannung als der Arduino würde eine Pegelwandlung des seriellen Signals erforderlich machen und daher am besten vermieden werden.

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, sodass sie für bis zu 64 LEDs pro IC verwendet werden können. Zwei davon können kaskadiert werden, um die erforderlichen 100 LEDs anzusteuern. Seite 13 des Datenblatts zeigt eine Kaskadenkonfiguration.

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

Die MAX7219/7221 sind Multiplex-LED-Treiber, daher ist die maximale Helligkeit der LEDs geringer als bei einem statischen LED-Treiber wie im vorherigen Abschnitt.

Hier ist eine nützliche LED-Matrix- Bibliothek 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 daher für bis zu 40/64 LEDs pro IC verwendet werden. Zwei / drei davon können an einen Arduino-SPI-Bus angeschlossen werden, um die 100 erforderlichen LEDs anzusteuern.

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

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


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

Dies sind alles Ansätze, die mit unterschiedlichem Grad an Einfachheit und Erfolg verwendet wurden. Sie sind komplexere Implementierungen als die drei oben genannten Ansätze und werden daher nicht weiter detailliert. Eine Suche im Internet würde bei Bedarf nützliche Anleitungen für diese Ansätze liefern.

Ein Hauptproblem bei solchen Designs 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önliche Erfahrung mit diesen letzten Optionen und kann daher nicht viel helfen.


Fußnote: Nachdem ich auf diese Frage geantwortet hatte, fand ich eine ältere Frage , die Antworten enthält, in denen mehrere der Ansätze in meinem letzten Abschnitt detailliert beschrieben und diskutiert werden. Dieser Thread ist eine interessante "weiterführende Lektüre als Hausaufgabe".


Günstige Schieberegister wie 74HC595 ?
Wie bietet der Max5951 auch eine "individuelle LED-Steuerung" - er scheint nur eine 7-Segment-Steuerung zu haben (8 Pins für 8 Ziffern), nein?
Ja, die auch. Benötigen Sie viele Widerstände zum Schutz der LEDs, und dann ist die Verkabelung im Vergleich zu den speziell angefertigten ICs komplex.
@ThomasE Nein: "Der MAX6950 treibt bis zu fünf 7-Segment-Ziffern oder 40 diskrete LEDs. Der MAX6951 treibt 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.
Dann wäre es also eine gruppierte Steuerung der 8 LEDs, oder? Ich frage, weil ich davon ausgegangen bin und diesen Chip weitergegeben habe, als ich ihm früher begegnet bin
Aha - Charlieplexing. Macht nichts!
@ThomasE Nein, jede einzelne LED kann vom MAX6950/6951 angesteuert werden - das ist ohnehin Voraussetzung für Charlieplexing. Tatsächlich können diese ICs keine mehrstelligen Anzeigen steuern (obwohl das Datenblatt eine Problemumgehung vorschlägt), da sie für das Charlieplex-Scannen einen individuellen Zugriff auf jede LED benötigen.
Notiert. Umfassende Antwort oben, übrigens.
Der TLC5940 ist übertrieben, wenn Sie die LED-Helligkeit nicht ändern müssen, er ist etwas teuer. Wenn Sie jedoch 12-Bit-PWM wünschen, ist dies sehr schön, es gibt Varianten-ICs für bis zu 48 LEDs.
@starblue Overkill v / s einfache DIY-Implementierung : Wäre der TLC5940 (3,78 USD in Einzelmengen bei DigiKey) für eine einmalige oder Hobbyanstrengung aufgrund der Arduino-Bibliotheken und der aktiven Unterstützung innerhalb der Arduino-Community nicht die einfachste Lösung? Es sei denn, es gibt andere ebenso gut unterstützte Teile, wie Sie darauf hingewiesen haben, die die Arduino-Foren lieben.
Ich hatte kürzlich großen Erfolg mit 16 LEDs mit zwei 595-Schieberegistern.