LED-Matrix

Aus der Mikrocontroller.net Artikelsammlung, mit Beiträgen verschiedener Autoren (siehe Versionsgeschichte)
Wechseln zu: Navigation, Suche

In einer LED-Matrix sind jeweils die Kathoden und Anoden der LEDs in Zeilen bzw. Spalten verbunden. Der Vorteil besteht darin, dass weniger Kontakte nach außen geführt und angesteuert werden müssen, ebenso sinkt der Verdrahtungsaufwand im Modul bzw. auf der Platine. Die Ansteuerung erfolgt dabei im sogenannten Multiplexbetrieb. Prinzipiell kann man sowohl die Zeilen als auch die Spalten multiplexen. Die nachfolgende Beschreibung bezieht sich auf das Multiplexen von Spalten.

Eine 5×7 LED-Matrix

Multiplexbetrieb

Der Trick bei einer LED-Matrix besteht darin, dass jeweils immer nur eine Spalte wirklich leuchtet. Die anderen sind jeweils ausgeschaltet. Wird nun in schneller Folge jede Spalte einmal angeschaltet, so entsteht aufgrund der Trägheit des menschlichen Auges ein scheinbar vollständiges Bild, bei dem alle angesteuerten LEDs gleichzeitig leuchten. Wird dieser Zyklus schnell genug durchlaufen, ist das Bild bei ruhigem Auge weitgehend flimmerfrei, was ab ca. 100Hz erreicht wird. In Ausnahmefällen kann jedoch eine stark bewegte LED-Matrix auch bei höheren Multiplexfrequenzen als 100Hz noch flimmernd erscheinen, z. B. LED-Bremsleuchten, LED-Anzeigen an Zügen oder Strassenbahnen.

Aufgrund der im Mittel geringeren Leuchtdauer der aktiven LEDs ist eine gezielte Stromüberhöhung der LEDs möglich und auch zur Sichtbarmachung auch nötig, um eine ausreichende Helligkeit zu erzielen. Damit sind dem Prinzip jedoch Grenzen hinsichtlich der maximalen Helligkeit und auch Matrixgröße gesetzt. Weiter ist zu berücksichtigen, daß die Lebensdauer von LEDs sinken kann, wenn sie pulsartig mit hohem Strom angesteuerter werden.

Der Ablauf der Steuerung ist recht einfach:

  1. alle Spalten ausschalten, Muster für Spalte C1 an Zeilen R1..R7 anlegen, Spalte C1 einschalten
  2. Spaltenmultiplexzeit warten
  3. alle Spalten ausschalten, Muster für Spalte C2 an Zeilen R1..R7 anlegen, Spalte C2 einschalten
  4. Spaltenmultiplexzeit warten
  5. alle Spalten ausschalten, Muster für Spalte C3 an Zeilen R1..R7 anlegen, Spalte C3 einschalten
  6. Spaltenmultiplexzeit warten
  7. alle Spalten ausschalten, Muster für Spalte C4 an Zeilen R1..R7 anlegen, Spalte C4 einschalten
  8. Spaltenmultiplexzeit warten
  9. alle Spalten ausschalten, Muster für Spalte C5 an Zeilen R1..R7 anlegen, Spalte C5 einschalten
  10. Spaltenmultiplexzeit warten
  11. Zyklus beginnt bei 1.

Praktisch wird man dazu einen Timer per Interrupt verwenden, keine Warteschleifen.

Multiplexzeitdiagramm

LEDs IOs Vorwider-
stände
16 8 4
64 16 8
1024 64 32

Durch Einsatz der Multiplexverfahrens können mit relativ wenigen Ansteuerbauteilen (IO-Pins, Transistoren, Stromquellen) sehr viele LEDs gesteuert werden. Während bei direkter Ansteuerung für jede LED ein IO-Pin sowie eine Stromquelle bzw. Vorwiderstand benötig würde, ist in einer zweidimensionalen LED-Matrix der Aufwand für die Bauteile deutlich geringer:

Anzahl der Bauteile = Anzahl der LEDs pro Reihe + Anzahl der LEDs pro Spalte

Siehe auch: Multiplexverfahren auf Wikipedia


Ansteuerung

Der verringerte Aufwand an Bauteilen kommt jedoch nicht ohne Nachteile. Da jede Spalte in einer Matrix mit N Spalten immer nur für 1/N der Zeit für einen vollen Bildaufbau aktiv ist, muss in dieser Zeit die gleiche Lichtmenge (=Energie) abgegeben werden, damit die genauso hell erscheint, wie wenn sie konstant mit Strom versorgt wird. Dazu muss der N-fache Strom fliessen. Demensprechend müssen die Vorwiderstände bzw. Stromquellen dimensioniert sein. Doch das führt zu zwei Problemen.

  1. Der Pulsstrom durch eine LED kann nicht beliebig gesteigert werden. Genaue Angaben dazu gibt es im Datenblatt. Als grobe Abschätzung kann man sagen, dass die meisten LEDs bis etwa 1:10 gemuxt werden können, darüberhinaus werden die Pulsströme zu hoch (20mA Betriebsstrom => 200 mA Pulsstrom!). Die Steuerung von mehr als 10 Spalten ist dann zwangsweise mit einer Helligkeitsreduktion verbunden, hilft aber, große Matrizen quadratischer zu machen.

  2. Die hohen Pulsströme verkraften die LEDs wirklich nur ganz kurz, sie brauchen die Ausschaltzeit um wieder abzukühlen! D.H. Die Ansteuerung des Multiplex darf NIE stehen bleiben, sonst brennen die LEDs durch! Für die Testphase der Matrix sowie Softwareentwicklung sollte man deshalb die Ströme stark verringern, die LEDs sind dann zwar wesenlich dunkler, überleben aber einen Softwareabsturz der Steuerung. Wenn am Ende alles getestet ist und man sich sicher ist daß die Steuerung funktioniert, kann man den Strom der Matrix wieder auf das volle Niveau erhöhen. Um ganz sicher zu gehen kann man einen Watchdog mit minimaler Laufzeit oder ein Monoflop verwenden, um im Fehlerfall die Stromversorgung bzw. Ansteuerung der LEDs abzuschalten.

Um die Helligkeit der LEDs im Multiplexbetrieb voll zu nutzen muss meistens ein höherer Strom geschaltet werden, als Mikrocontroller es können. Eine LED muss aufgrund ihrer Kennlinie an einer Stromquelle betrieben werden. Im einfachsten Fall ist das ein in Reihe geschalteter Widerstand an einer Spannungsquelle. Ob man die Zeilen oder Spalten einer Matrix multiplext ist im Prinzip egal, aber manchmal ist es schlicht logisch sinnvoller. So ist z.B. bei einer LED-Laufschrift mit 8 Zeilen und 40 Spalten es sinnvoll, die Zeilen mit 1:8 zu multiplexen und nicht die Spalten mit 1:40! Generell kann man das in einer Schaltung so erkennen. Die gemultiplexte Dimension hat vor den Leistungsschaltern keine Vorwiderstände bzw. Konstantstromquellen sondern geht direkt an die LEDs.

Direktbetrieb

In einigen Projekten im Internet sieht man LED-Matritzen, die direkt per Mikrocontroller angesteuert werden, ohne Transistoren zwischenzuschalten. Das geht praktisch nur mit Low-Current-LEDs, da reguläre LEDs aufgrund des geringen Stroms sonst zu dunkel wären.

Transistoren

Das ist der Normalfall. Man kann diskrete Transistoren (z. B. BC846, BC337) benutzen.

Eine praktische Umsetzung kann man hier sehen. Q1-Q8 arbeiten als Emitterfolger (Kollektorschaltung), darum gibt es hier auch keine Basiswiderstände. Q9-Q13 arbeiten ganz einfach in Emitterschaltung. Dadurch braucht man nur NPN Transistoren, die Schaltung ist dadurch auch relativ schnell. Einziger Nachteil ist ein um ca. 0,5 V höherer Spannungsverlust an Q1-Q8 im Vergleich zu PNP-Transistoren in Emitterschaltung. Das spielt hier aber keine große Rolle, weil bei den roten LEDs mit 2,2V Uf noch ausreichend Spannung für den Vorwiderstand bleibt. Werden z.B. blaue LEDS mit bis zu 4V Uf eingesetzt, dann verbleibt für den Widerstand zuwenig Spannung. Dadurch ändert sich schon bei kleinsten Versorgungsspannungsschwankungen der Strom recht stark.

Ein Schieberegister ist im Prinzip ein Seriell-Parallel-Wandler. Das hat mit Multiplexbetrieb eigentlich nichts direkt zu tun, es ist vielmehr eine Erweiterung der IO-Pins (siehe auch Porterweiterung mit SPI und AVR-Tutorial: Schieberegister). Wird ein Schieberegister nur zur Spaltenansteuerung verwendet, ergibt sich der angenehme Sonderfall, dass:

  • Nur zum Weiterschalten der Spalte genau ein Schiebetakt erforderlich ist
    • spart (etwas) Prozessorzeit
  • die Daten- und Taktleitung für das Schieberegister für zwei weitere Matrix-Spalten zur Verfügung steht
    • spart E/A-Anschlüsse am Mikrocontroller
    • man kommt so einfach auf Spaltenzahl 10 (maximale Lichtausbeute der meisten LEDs) oder 18 (für RGB durch 3 teilbare Spaltenzahl)
    • beim Umschaltvorgang per Zeilentreiber dunkeltasten sollte man ja sowieso
  • ein einfaches Schieberegister ohne Ausgangslatch, etwa 74HC164, verwendet werden kann
    • spart (etwas) Geld und Platz

Eine weitere Schaltung mit Schieberegistern ist im "Retro-Spiel zum Selberbauen" Ping-Pong von Burkhard Kainka verwendet worden. Hier werden die 10 Zeilen mit Atmega8-Portpins über 100 Ω Widerstände [1] gegen 12 Schieberegister-Spalten zweier 4094D CMOS-ICs geschaltet, um eine Matrix aus 120 roten SMD-LEDs zu steuern.

Multiplexansteuerung mit Schieberegistern und Transistoren

Berechnung

Will man nun seine Schaltung optimal betreiben, muss man ausrechnen wieviel Strom geschaltet werden muss. Wie oben bereits beschrieben, teilt sich der gemultiplexte Strom im Verhältnis 1:N auf die LEDs auf, in diesem Beispiel hier 1:5. Der Treiber für die Zeilen muss diesen im Extremfall kontinuierlich an jedem Ausgang zur Verfügung stellen, wenn nämlich alle LEDs der Matrix aktiv sind. Der Treiber für die Spalten ist pro Kanal nur 1:N der Multiplexzeit aktiv, muss aber währenddessen den gesamten Nennstrom der Matrix schalten können! Das sind schnell mal ein paar Ampere, wie die nachfolgenden Beispiele zeigen!

Gegeben:

  • [math]\displaystyle{ I_{Nenn} }[/math]: Nennstrom der LEDs: 4mA
  • [math]\displaystyle{ U_{F} }[/math]: Flußspannung der LEDs: 2,2V
  • [math]\displaystyle{ N }[/math]: Multiplexverhältnis (Spalten): 1:5
  • [math]\displaystyle{ S }[/math]: Zeilen in der Matrix: 8
  • [math]\displaystyle{ U_{Sat} }[/math]: Sättigungsspannung des Low Side Transistors, hier Q9-Q13 mit ca. 0,7V
  • [math]\displaystyle{ U_{BE} }[/math]: Basis-Emitter-Spannung des High Side Transistors, hier Q1-Q8 ca. 0,7V

Gesucht:

  • [math]\displaystyle{ I_{Zeil} }[/math]: Dauerstrom der Zeilentreiber = Pulsstrom der LEDs
  • [math]\displaystyle{ I_{Spl} }[/math]: Pulsstrom der Spaltentreiber
  • [math]\displaystyle{ R_V }[/math]: Vorwiderstand für LED-Zeilen
  • [math]\displaystyle{ P_V }[/math]: Verlustleistung der Vorwiderstände

[math]\displaystyle{ I_{Zeil} = I_{Nenn} \cdot N = 4mA \cdot 5 = 20mA }[/math]

[math]\displaystyle{ I_{Spl} = I_{Nenn} \cdot N \cdot S = 4mA \cdot 5 \cdot 8 = 160mA }[/math]

[math]\displaystyle{ R_V = \frac{U}{I} = \frac{Vcc - U_{Sat} - U_{BE}-U_F}{I_{Nenn} \cdot N} }[/math]

[math]\displaystyle{ R_V=\frac{5V-0,7V-0,7V-2,2V}{4mA \cdot 5} \approx 68 \Omega }[/math]

[math]\displaystyle{ P_V=I_{Zeil}^2 \cdot R = 20mA^2 \cdot 68 \Omega = 27mW }[/math]


Treiber

Bei großen Anzeigen mit vielen LEDs werden die Pulsströme bisweilen schon recht hoch. Hier wird man dann mehr auf Treiber (z. B. ULN2803) zurück greifen. Vor allem die Schalter für die gemultiplexte Dimension, hier im Beispiel die Zeilen, müssen sehr große Ströme schalten.

Multiplexansteuerung mit integrierten Treibern

„Gemeinsame“ Katode oder Anode?

In einigen Fällen hat man die Wahl, ob man die Katoden oder die Anoden multiplext. In einem solchen Fall ist grundsätzlich die Seite zu multiplexen (= „Spalte“, die Seite ohne Widerstände), bei der der Bahnwiderstand der Schaltelemente (Mikrocontroller-Ausgänge, Transistoren oder MOSFETs) kleiner ist.

Benutzt man als Spalten- und Zeilentreiber bipolare Transistoren oder MOSFETs (NPN bzw. n-Kanal für die Katoden und PNP bzw. p-Kanal für die Anoden), so sollten „gemeinsame“ Katoden gewählt werden, da NPN-Transistoren bzw. n-Kanal-MOSFETs grundsätzlich, sogar als Pärchen, die kleineren Bahnwiderstände haben. Die größeren Bahnwiderstände der anderen Seite („Zeilen“) fallen dann nicht ins Gewicht, weil dort ohnehin Vorwiderstände erforderlich sind. In den drei nebenstehenden Schaltplänen ist es auch genau so gemacht.

Die Endlichkeit der Spalten-Bahnwiderstände führen zu Abhängigkeiten der Helligkeit einer LED zu den benachbarten LEDs, und dies ist selbstverständlich zu minimieren.

Berechnung

Gegeben:

  • [math]\displaystyle{ I_{Nenn} }[/math]: Nennstrom der LED-Stränge: 15mA
  • [math]\displaystyle{ U_{F} }[/math]: Flußspannung der LED-Stränge: 7V
  • [math]\displaystyle{ N }[/math]: Multiplexverhältnis (Zeilen): 1:4
  • [math]\displaystyle{ S }[/math]: Spalten in der Matrix 8
  • [math]\displaystyle{ U_{IC1} }[/math]: Sättigungsspannung des Low Side Switch, hier IC1 mit ca. 1V
  • [math]\displaystyle{ U_{IC2} }[/math]: Sättigungsspannung des High Side Switch, hier IC2 mit ca. 2V

Gesucht:

  • [math]\displaystyle{ I_{Spl} }[/math]: Dauerstrom der Spaltentreiber = Pulsstrom der LEDs
  • [math]\displaystyle{ I_{Zeil} }[/math]: Pulsstrom der Zeilentreiber
  • [math]\displaystyle{ R_V }[/math]: Vorwiderstand für LED-Spalten
  • [math]\displaystyle{ P_V }[/math]: Verlustleistung der Vorwiderstände

[math]\displaystyle{ I_{Spl} = I_{Nenn} \cdot N = 15mA \cdot 4 = 60mA }[/math]

[math]\displaystyle{ I_{Zeil} = I_{Nenn} \cdot N \cdot S = 15mA \cdot 4 \cdot 8 = 480mA }[/math]

[math]\displaystyle{ R_V = \frac{U}{I} = \frac{Vcc - U_{IC1} - U_{IC2}-U_F}{I_{Nenn} \cdot N} }[/math]

[math]\displaystyle{ R_V=\frac{12V-1V-2V-7V}{15mA \cdot 4}=33 \Omega }[/math]

[math]\displaystyle{ P_V=I_{Spl}^2 \cdot R_V = 60mA^2 \cdot 33 \Omega = 119mW }[/math]

60mA kann IC2 dauerhaft auf jedem Kanal liefern, 500mA Pulsstrom sind für IC1 schon die absolute Grenze laut Datenblatt. Der Spannungsverlust [math]\displaystyle{ U_{IC1} }[/math] und [math]\displaystyle{ U_{IC2} }[/math] ist bei diesen relativ alten ICs recht hoch, mit modernen MOSFETs erreicht man hier deutlich kleinere Werte und damit auch kleinere Verlustleistungen bzw. höhere Ströme.


MOSFETs

Bei Strömen über 1A nimmt man heute meist MOSFETs.

Multiplexansteuerung mit MOSFETs

Berechnung

Die Berechnung erfolgt analog zum vorherigen Beispiel, nur mit dem Unterschied, daß die MOSFETs deutlich kleinere Spannungsabfälle zu verzeichnen haben. Damit die MOSFETs schnell schalten werden MOSFET-Treiber eingesetzt. Zur Not tun es aber auch Mikrocontroller-Ausgänge, die allerdings mit 5 V Speisespannung laufen sollten. Für die P-Kanal MOSFETs nutzt man hier im Beispiel einen echten MOSFET-Treiber, die N-Kanal MOSFETS kann man hier mit einem einfachen CMOS-Inverter ansteuern. Das geht bei kleinen Logic Level MOSFETs mit 1-2 nF Gatekapazität noch ausreichend schnell, bei größeren MOSFETs ist auch hier ein echter MOSFET-Treiber nötig. Der berühmt-berüchtigte Gatewiderstand {Serienwiderstand, typisch 22 Ω} kann hier entfallen, die Ausgänge einfacher CMOS-Inverter sind bereits hochohmig genug, um parasitäre Schwingungen zu dämpfen. Nimmt man für den Inverter einen HCT-Typ, so wirkt er gleichzeitig als Pegelwandler und die Matrix kann mit 3,3-V-Signalen angesteuert werden.

Gegeben:

  • [math]\displaystyle{ I_{Nenn} }[/math]: Nennstrom der LED-Stränge: 25 mA
  • [math]\displaystyle{ U_{F} }[/math]: Flußspannung der LED-Stränge: 9 V
  • [math]\displaystyle{ N }[/math]: Multiplexverhältnis (Zeilen): 1:8
  • [math]\displaystyle{ S }[/math]: Spalten in der Matrix: 8
  • [math]\displaystyle{ R_{DS-ON, high} }[/math]: Einschaltwiderstand der High Side MOSFETs : 0,25 Ω
  • [math]\displaystyle{ R_{DS-ON, low} }[/math]: Einschaltwiderstand der Low Side MOSFETs: 0,13 Ω

Gesucht:

  • [math]\displaystyle{ I_{Spl} }[/math]: Dauerstrom der Spaltentreiber = Pulsstrom der LEDs
  • [math]\displaystyle{ I_{Zeil} }[/math]: Pulsstrom der Zeilentreiber
  • [math]\displaystyle{ R_V }[/math]: Vorwiderstand für LED-Spalten
  • [math]\displaystyle{ P_V }[/math]: Verlustleistung der Vorwiderstände

[math]\displaystyle{ I_{Spl} = I_{Nenn} \cdot N = 25mA \cdot 8 = 200mA }[/math]

[math]\displaystyle{ I_{Zeil} = I_{Nenn} \cdot N \cdot S = 25mA \cdot 8 \cdot 8 = 1600mA }[/math]

[math]\displaystyle{ R_V = \frac{U}{I} = \frac{Vcc - I_{Spl} \cdot R_{DS-ON, high} - I_{Zeil} \cdot R_{DS-ON, low} -U_F}{I_{Spl}} }[/math]

[math]\displaystyle{ R_V=\frac{12V - 0,2A \cdot 0,25 \Omega - 1,6A \cdot 0,13 \Omega -9V}{0,2A} \approx 13 \Omega }[/math]

[math]\displaystyle{ P_V=I_{Spl}^2 \cdot R_V = 200mA^2 \cdot 13 \Omega = 520mW }[/math]

In diesem Beispiel wird der gesparte Spannungsabfall über den MOSFETs genutzt, um LEDs mit höherer Flußspannung in Reihe schalten, womit der Wirkungsgrad ansteigt. Liegt die LED-Betriebsspannung über 15V braucht man einen sogenannten High Side Driver, weil dann die Gates der P-Kanal MOSFETs nicht mehr direkt angesteuert werden können. Ein einfaches Beispiel findet man hier.

Dimmen

Multiplexen kann auch mit PWM kombiniert werden. Dabei ist die Multiplexzeit einer Spalte gleich der PWM-Periodendauer. Allerdings kann hier der Rechenaufwand für die CPU schon recht hoch werden, da die meisten Mikrocontroller nicht so viele PWM-Kanäle in Hardware zur Verfügung stellen und die PWM in Software nachgebildet werden muss (Soft-PWM).

Falls die Multiplexzeit klein genug gewählt wird, kann man in Grenzen auch per gezieltem Ein- und Abschalten in Grenzen eine Dimmfunktion erreichen. Um hier allerdings noch flimmerfreie Ergebnisse zu erzielen, sollte die Multiplexfrequenz mit den geplanten Dimmstufen multipliziert werden (bspw. 16 Dimmstufen bei 100 Hz Multiplexfrequenz = 1600 Hz angepasste Multiplexfrequenz), was die Rechenzeit wiederum schnell in die Höhe treiben kann. Dimmen selbst erreicht man dann mit entsprechend angepassten Schaltzeiten (bspw. 25% Helligkeit = 4x LED an, 12x LED aus bei insgesamt 16 Dimmstufen, dann von vorne).

In Anbetracht ausgeklügelter Soft-PWM-Algorithmen spielt dieser zweite Lösungsansatz nur eine untergeordnete Rolle, etwa:

  • um Code zu sparen
  • um Gate-Umladevorgänge bei geringen Helligkeiten zu minimieren

Spezielle ICs

Neben den typischen Treiberbausteinen für möglichst hohe Ströme, die weiter unten aufgeführt sind, gibt es auch noch integrierte Lösungen für das direkte Betreiben einer LED-Matrix an der SPI oder I2C-Schnittstelle. Beispiele sind hier MAXIM 7219 und 7221 oder AS1100-08/15-18 für 8x8 LED-Matrizen oder 8x8-Segmentanzeigen. Zwischen beiden Modi wird per Software gewechselt. Die ICs bieten einige Vorteile, wie automatische Dimmung und großzügiges Freischaufeln von CPU-Kapazität auf dem Mikrocontroller. Außerdem können die ICs dank SPI kaskadiert werden wie normale Schieberegister und somit eine nahezu unbegrenzte Zahl an LEDs ansteuern. Allerdings ist der Strom für die integrierten Stromsenken auf etwa 50 mA begrenzt, was bei einigen Displays zu wenig sein kann. Hier muss man wieder Vor- und Nachteile abwägen. Weitere ICs bei Maxim umfassen Standardfälle wie 5x7 Matrizen oder 7-, 10-, 14-Segment LED-Anzeigen mit 4 bis 16 Stellen. Diese ICs gibt es dann allerdings leider nicht bei den Standardversandhändlern.

Bauteil Beschreibung Bezugsquelle
ULN2803 8fach NPN-Transistorarray, 500mA Conrad
ULN2003 7fach NPN-Transistorarray, 500mA
UDN2981
(MIC2981)
8fach High Side Treiber, 500mA
TLC5921 16 Bit-Schieberegister plus Latch mit Konstantstromsenken,
max. 80mA pro Ausgang
TLC5922 16 Bit-Schieberegister plus Latch mit Konstantstromsenken,
max. 80mA pro Ausgang
Dimmung jedes einzelnen Kanals mit 7 Bit möglich,
pinkompatibel zum TLC5921
TLC5940 16 Bit-Schieberegister plus Latch mit Konstantstromsenken,
max. 120mA pro Ausgang
Dimmung jedes einzelnen Kanals mit 6 Bit plus 12 Bit PWM möglich,
kompatibel mit AS1112
mouser.com, hbe
CAT4016 16 Bit-Schieberegister/Latch mit Konstantstromsenken(max. 100mA), günstig Farnell
TPIC6B595 8-Bit Schieberegister + Leistungstreiber, 500mA Reichelt
IRF7304 2fach P-Kanal MOSFET, 3,5A, SO-8 Gehäuse
MAX7219 Seriell angesteuerter 8x8 Matrizentreiber, kompatibel mit AS110x
MAX7221 Seriell angesteuerter 8x8 Matrizentreiber, kompatibel mit AS110x
AS1100-08 Seriell angesteuerter 8x8 Matrizentreiber, kompatibel mit MAX72xx AS1106
AS1115/17 I²C angesteuerter 8x8 Matrizentreiber mit Diagnose & Tastenerkennung AS1115
AS1116/18 Seriell angesteuerter 8x8 Matrizentreiber mit Diagnose AS1116
AS1119 I²C angesteuerter 144LEDs Matrizentreiber mit Animationsspeicher, Diagnose und ChargePump AS1119
AS1130 I²C angesteuerter 132 LEDs Matrizentreiber mit Animationsspeicher, Scroll Funktion & Diagnose AS1130
AS1112 15V 16Kanal LED Treiber, max. 100mA pro Ausgang
Dimmung jedes einzelnen Kanals mit 6 Bit plus 12 Bit PWM möglich, Diagnosefunktion, kompatibel mit TLC594x
AS1112
AS1121 30V 16Kanal LED Treiber, max. 40mA pro Ausgang
Dimmung jedes einzelnen Kanals mit 6 Bit plus 12 Bit PWM möglich, Diagnosefunktion
AS1121
AS1123 5V 16Kanal LED Treiber, max. 40mA pro Ausgang
Low Power, Diagnosefunktion
AS1123
SCT2024 17V 16Kanal LED Konstantstrom Treiber, max. 45mA pro Ausgang
tme
Multiplexansteuerung mit Special-ICs

Berechnung

Der TLC5921 und seine zahlreichen Kollegen von Texas Instruments bieten eine komfortable Möglichkeit zur Ansteuerung von LED-Matrizen. Der TLC5921 besitzt 16 Ausgänge, welche als Konstantstromquelle arbeiten. Der Konstantstrom wird dabei über einen Widerstand eingestellt. Es entfallen somit die Vorwiderstände. Der Vorteil ist, dass Schwankungen der LED-Flußspannung oder Versorgungsspannung ausgeglichen werden, ohne dass die Helligkeit der LEDs sich dabei ändert. Außerdem erlauben die besseren Typen der Baureihe wie z.B. der TLC5922 eine Dimmung der einzelnen Kanäle. Doch Vorsicht! Die zulässige Verlustleistung des ICs ist groß, ca. 4W mit ausreichender Kühlung, aber nicht endlos. Denn die Restspannung aus Betriebsspannung minus LED-Flußspannung fällt über dem IC ab! Als Minimum gilt je nach Strom 0,5-1V, welches über dem TLC5921 abfallen muss, damit er korrekt arbeitet. Nach oben wird die Grenze durch die Verlustleistung und max. Spannung von 17V gesetzt. Weiterhin ist zu beachten, dass hier das Multiplexing der Zeilen und Spalten vertauscht wurde.

Gegeben

  • [math]\displaystyle{ I_{Nenn} }[/math]: Nennstrom der LED-Stränge: 10mA
  • [math]\displaystyle{ U_{F} }[/math]: Flußspannung der LED-Stränge: 9V
  • [math]\displaystyle{ N }[/math]: Multiplexverhältnis (Zeilen): 1:8
  • [math]\displaystyle{ S }[/math]: Spalten in der Matrix: 8
  • [math]\displaystyle{ R_{DS-ON, high} }[/math]: Einschaltwiderstand der High Side MOSFETs : [math]\displaystyle{ 0,25\Omega }[/math]

Gesucht:

  • [math]\displaystyle{ I_{Spl} }[/math]: Dauerstrom der Spaltentreiber = Pulsstrom der LEDs
  • [math]\displaystyle{ I_{Zeil} }[/math]: Pulsstrom der Zeilentreiber
  • [math]\displaystyle{ P_V }[/math]: Verlustleistung des TLC5921

[math]\displaystyle{ I_{Spl} = I_{Nenn} \cdot N = 10mA \cdot 8 = 80mA }[/math]

[math]\displaystyle{ I_{Zeil} = I_{Nenn} \cdot N \cdot S = 10mA \cdot 8 \cdot 8 = 640mA }[/math]

[math]\displaystyle{ P_V=I_{Spl} \cdot S \cdot U_{Rest} = I_{Spl} \cdot S \cdot (Vcc - U_F - I_{Zeil} \cdot R_{DS-ON, high}) }[/math]

[math]\displaystyle{ P_V= 80mA \cdot 8 \cdot (12V - 9V - 640mA \cdot 0,25 \Omega) = 1{,}82W }[/math]

Charlieplexing

Charlieplexing mit 5 IOs

Der Name Charlieplexing geht auf Charlie Allen zurück, ein Mitarbeiter von Maxim Integrated. Mit diesem Verfahren kann man mit einer minimalen Anzahl von IOs viele LEDs ansteuern, wenn gleich das mit Einschränkungen verbunden ist. Das Grundprinzip ist wie folgt. Alle IOs sind sind gleichwertig, es gibt keine Spalten oder Zeilen. Die LEDs verbinden jeden IO mit jedem anderen IO, wobei jeweils 2 LEDs antiparallel geschaltet sind. Um unterschiedliche Segmenthelligkeiten zu vermeiden wird jeweils immer nur eine LED gleichzeitig angeschaltet, indem die zwei zugehörigen IOs auf LOW oder HIGH gesetzt werden und alle anderen auf Tristate bleiben. Durch die Auswahl der Polarität kann die jeweilige LED in der Antiparallelschaltung angesprochen werden. Sollen mehrere LEDs scheinbar gleichzeitig leuchten, muss man das ebenso wie mit der klassischen LED-Matrix durch ausreichend schnelles Multiplexing erreichen. Die Widerstände zwischen den Mikrocontroller-IOs und den LEDs dienen der Strombegrenzung.

Vorteile

  • Ansteuerung von n*(n-1) = n^2-n LEDs mit n IOs
  • Direkte Ansteuerung per Mikrocontroller-IOs spart Platz und Aufwand
  • Aufgrund der geringen Maximalströme der IOs ist die Ansteuerung fehlersicher, d.h. ein Ausfall der Multiplexansteuerung durch Softwarefehler oder Resets beschädigt die LEDs nicht

Nachteile

  • Bei großer Anzahl von LEDs können immer nur relativ wenige LEDs gleichzeitig leuchten, der Multiplexfaktor steigt sehr schnell, wodurch die Pulsströme zu hoch werden, sowohl für die LEDs und noch mehr für die IOs
  • Alternativ bedeuten viele, gleichzeitig leuchtende LEDs eine verringerte Gesamthelligkeit
  • Die direkte Ansteuerung per Mikrocontroller-IOs ist auf ultrahelle low current LEDs angewiesen
  • Strom- und ggf. Helligkeitsunterschiede bei Verwendung von LEDs mit stark unterschiedlicher Flußspannung

Durch Änderung der Anordnung der Widerstände kann man, bei ausreichend niederohmigem Controller-Ausgang (notfalls mit Emitterfolgern), mehrere LEDs echt gleichzeitig leuchten lassen. Eine solche Schaltung steht der erreichbaren Helligkeit einer konventionellen Multiplexanzeige nicht mehr nach und ist dabei nicht aufwändiger an Bauteilen, nur schwieriger beim Routen und in der Software.

Siehe auch

Weblinks