Eine huschende Husch-Husch

 

     LEDs an Mikrocontrollern

Wie man LEDs an Mikrocontroller anschließt

Eine LED schließt man an eine positive Gleichspannung an, dann die LED, dann ein Widerstand zur Begrenzung des Stroms, dann ein Schalter, z.B. in Form eines bipolaren npn-Transistors, zuletzt gegen Masse, also die Null-Volt Leitung der Betriebsspannung.

Die LED muß richtigherum gepolt sein. Falsch herum bleibt sie dunkel, es geht aber auch nichts kaputt. Widerstand und LED darf man von der Reihenfolge her auch austauschen, also den Widerstand an die Betriebsspannung, die LED am Transistor.

Für den Transistor nimmt man einen beliebigen npn-Transistor, z.B. BC547C mit einem Basisvorwiderstand von 1..10kOhm.

Zur Berechnung des Vorwiderstands gibt es massenhaft LED-Rechner im Web. Aber es geht auch ohne Rechner einfach:
  R = (Ubetrieb - Uled) / 20 mA
mit:
  20 mA = Strom, den die meisten LEDs brauchen (1)
  Ubetrieb = Betriebsspannung, oft 5 oder 12 Volt
  Uled = Flußspannung der LED, hängt von der Farbe ab:

Beispielrechnung für eine rote LED an 5 Volt: (5V-1.5V)/0.02A = 175 Ohm
Praktisch sieht man einer LED nicht an, wenn sie etwas weniger Strom erhält, d.h., man wählt den Widerstand einfach ein bisschen größer. 220 Ohm ist ein Standardwert, der bei 5 Volt für rot, gelb und grün geht; 330 Ohm geht auch immer noch.

FarbeFlußspannungWiderstand bei 5 Volt
rote LED1.5V220..330 Ohm
gelbe LED2.2V220..330 Ohm
grüne LED2.2V220..330 Ohm
blaue LED4.5V (2)33 Ohm
weiße LED3.3 - 4.5V (2)100..33 Ohm

Mit dem berechneten Widerstand kann man eine LED nun an der geplanten Betriebsspannung direkt anschließen, und sie wird leuchten. Das kann man ohne Mikrocontroller testen, und auch mit dem Widerstand die Helligkeit evtl. noch ein bisschen variieren. Den Widerstand nicht kleiner machen, als berechnet, nur größer ist erlaubt!

Mit dem Transistor sollte jeder Mikrocontroller in der Lage sein die LED so anzusteuern. Wenn der Mikrocontroller genug Strom liefern kann geht as aber auch ohne Transistor: man kann eine LED vom Mikrocontroller gegen Masse schalten lassen (oben im Bild), oder gegen Plus (unten). Die erste Methode ist ein bisschen verquer, weil man die LED EINschaltet, wenn man eine log. 0 ausgibt, und mit einer log. 1 AUSschaltet.

Diese verquere Methode ergibt heute eigentlich nur noch Sinn, wenn der Mikrocontroller es von der Strombelastbarkeit der Ausgänge nur so kann. Meine bevorzugten Mikrocontroller von Atmel aus den Reihen AtTiny, AtMega, AtXMega können beide Varianten problemlos, sprich, 20mA für eine LED schaffen die in beiden gezeigten Varianten. (3)

Das ist doch alles falsch?!?

Ja und nein. Hier paar Richtigstellungen bzw. Verfeinerungen.

(1) Betriebsstrom 20mA gilt für praktisch alle Anzeige-LEDs. Es gibt auch Leuchtmittel, die deutlich mehr Strom brauchen, sogenannte Stromspar-LEDs wollen nur 2 mA, und es gibt noch viele weitere Ausnahmen. Genaueres erfährt man vom Datenblatt der LED: dort nach dem Betriebsstrom suchen, der dort gerne Gruppenstrom genannt wird. Oft einfacher: im Datenblatt eine Angabe mit der Einheit mA suchen! Allerdings sind die 20mA so verbreitet, dass ich bei LEDs aus der Bastelkiste kein Datenblatt mehr heraussuche.

(2) blaue und weiße LEDs weichen gerne von den genannten Flussspannungen ab, selten auch mal die anderen Farben. Auch hier gilt: Datenblatt lesen! Alternativ: LED mit 220 Ohm Vorwiderstand an ein Labornetzteil anschließen, Spannung langsam von der minimalen Ausgangsspannug hochdrehen bis 20 mA fließen. Nun kann man die Flußspannung über der LED mit einem Multimeter messen.

(3) Ob der Mikrocontroller den Strom liefern kann, kann auch hier nur ein Blick in das Datenblatt, diesmal das des Controllers, beantworten. Oft steht die Strombelastbarkeit gleich vorne unter "Features". Alternativ muss man meist Kurven heraussuchen, z.B. "IO-Pin-Sink-Current" und dann den passenden Kurvenpunkt heraussuchen. Wenn kein Punkt für 20mA in der Kurve vorkommt bedeutet das meist, dass der Controller überlastet wäre.

Mehrere LEDs an einen Mikrocontrollerausgang anschließen

Wenn jede LED einzeln ansteuerbar sein soll, dann muss man wie oben beschrieben arbeiten. Jedoch sollen beispielsweise an einem Modellauto die Blinker links vorne und links hinten sicherlich immer nur zusammen aufleuchten. Hier kann man einen der wertvollen Pins des Mikrocontroller sparen, indem man mehrere LEDs von einem Pin ansteuert.

Methode eins spart Strom: man schaltet mehrere LEDs hintereinander. Also LED, LED, ..., LED und ein Widerstand, geschaltet durch einen Transistor oder Mikrocontroller, wie oben beschrieben. Für die Rechnung addiert man die Flußspannungen der ganzen LEDs und rechnet ansonsten wie oben. Zwei rote LEDs an 5 Volt brauchen dann einen Widerstand von (5V - (1,5V + 1,5V)) / 0.02A = 100 Ohm.

Aber wenn die Summe der Flußspannungen über die Betriebsspannung hinausgeht, dann funktioniert das Verfahren nicht mehr, die LEDs bleiben dunkel. Einzelne blaue oder weiße LEDs können deshalb schone alleine an 3,3 Volt Controllern Probleme haben. Dagegen hilft, dass man den Bipolar-Transistor (siehe ganz oben) benutzt, der auch höhere Spannungen schalten kann, als der Mikrocontroller selbst. Liefert das Netzteil also z.B. 9 Volt, die irgendwo in der Schaltung auf 5 Volt für den Controller heruntergeregelt werden, dann kann man die LEDs direkt an die 9 Volt anschließen, und mit einem Transistor vom Controller her ansteuern. Damit kann man dann auch zwei blaue LEDs auf einmal ansteuern. (Gerechnet wird der LED-Vorwiderstand auch hier wie schon gezeigt.) Auf keinen Fall mehr Spannung vom Controller schalten lassen, als seine Betriebsspannung beträgt! Der Transistor ist Pflicht!

Methode zwei schaltet mehrere LED-Stränge parallel. Jeder Strang wird mit einem Widerstand auf 20mA eingestellt, wie immer. Jeder Strang darf dabei auch mehrere LEDs in Reihe nach der ersten Methode haben. Aber es entsteht ein neues Problem: die Ströme der Stränge addieren sich für den elektronischen Schalter. Controller sind mit 20mA schon sehr gefordert, bei zwei Strängen, somit 40mA wird's wahrscheinlich schon zu Eng. Mit Transistor geht da schon viel mehr, fünf parallele Stränge mit zusammen 100mA sollten kein Problem sein. Wenn noch mehr zusammenkommt empfehle ich ein Relais einzusetzen.

Bitte nicht auf die Idee kommen, mehrere LED-Stränge mit nur einem Widerstand zu betreiben. Kleine Unterschiede zwischen den LEDs in den verschiedenen Strängen führen im Allgemeinen dazu, dass ein Strang mehr Strom bekommt. Der Helligkeitsunterschied ist meist deutlich sichtbar.

Relais an einen Mikrocontroller anschließen

Wenn ich's schon erwähne: hier ist die Methode, wie man Relais per Mikrocontroller ansteuert. Nicht viel anders als eine LED. Relais brauchen typischerweise mehr Strom als ein Mikrocontroller liefern kann, weshalb der Transistor nur selten fehlen wird.

Die Betriebsspannung sollte zur Ansteuerspannung des Relais passen. Meist sind die Relais hier recht tolerant, d.h., ein 12 V-Relais schaltet meist auch schon bei 9 Volt. Mal wieder: Datenblatt lesen oder ausprobieren!

Die Diode antiparallel zur Relaisspule ist Pflicht. Sie schließt die Spannungsspitze kurz, die beim Abschalten des Ansteuerstroms entsteht, und die den Transistor früher oder später zerstören würde.

FETs als Schalter

FET? Ja, geht auch statt bipolar-Transistor. Kostet statt 4 Cent für den Transistor und 3 Cent für den Widerstand 50 Cent für den FET. Ist mir hier, also für LEDs und Relais zu teuer. Kommt nur sinnvoll vor, wenn man gerade einen FET übrig hat, oder wenn die Dinger mal billiger werden.

Übrigens schalte ich die Schutzdiode bei Relais auch hin, wenn ein FET als Schalter dient, auch wenn die weit verbreitete Meinung besteht, dass FETs eine Schutzdiode integriert haben, die das erledigt. Der Transistor bleibt durch diese integrierte Diode zwar heil, aber dann sucht sich die Spannungsspitze halt ein anderes Opfer. Vier Cent für die Diode investiere ich gerne zur Sicherheit.

Weitergehende Ansteuerungswünsche

Helligkeitssteuerung: siehe im Web unter PWM (Pulse Width Modulation, dt. Pulsdauermodulation, selten dann auch mal PDM abgekürzt).

Ansteuerung von vielen LEDs: siehe im Web unter Matrixansteuerung.

Vieleicht schreib' ich zu diesen Themen auch mal mehr. Bisher noch nicht.