Ich habe mit einer 8x8-LED-Matrix experimentiert, die von einem Arduino Uno gesteuert wird. Wie ich für typisch halte, verwendet die Matrix für jede Zeile eine gemeinsame Anode und für jede Spalte eine gemeinsame Kathode.
Im Moment sind alle Matrix-Pins direkt mit den IO-Pins des Uno verbunden, und ich hatte keine Probleme, die LEDs einzeln zu beleuchten. Wenn Sie die gesamte Matrix auf diese Weise durchgehen, sind die Aktualisierungen jedoch etwas langsam, was bedeutet, dass die LEDs nicht so hell sind, wie ich es gerne hätte.
Soweit ich weiß, kann ich nicht sicher eine ganze Reihe auf einmal aufleuchten, da ein einzelner Pin auf dem Uno nicht in der Lage ist, genug Strom zu liefern, um 8 separate LEDs gleichzeitig anzusteuern (für die jeweils mindestens 10 mA erforderlich sind) hell genug sein).
Mir ist der Gedanke gekommen, dass das Gegenteil sicherer sein könnte. Wenn ich jeweils eine ganze Spalte aufleuchte, muss jeder Pin nur genug Strom für eine LED liefern, was kein Problem sein sollte. Es ist jedoch darauf angewiesen, dass ein Pin den Strom von allen 8 möglichen Strömen aufnimmt, was mindestens 80 mA entspricht.
Ist das möglich oder brate ich mein Brett an?
quelle
Antworten:
Ziemlich wahrscheinlich Ergebnis. Hier ist der Grund:
Der Arduino Uno verwendet den atMEGA328-Mikrocontroller, der eine absolute maximale Nennleistung von 40 mA als Quelle oder Senke pro GPIO aufweist. Außerdem ist der Gesamtstrom durch die Versorgungs- oder Erdungsschienen (dh die Summe aller Strom-OPs, bei denen die GPIO-Pins sinken oder quellen sollen) auf maximal
150 bis200 mA ausgelegt.Realistisch gesehen reichen die Stromdiagramme im atMEGA328-Datenblatt nicht einmal bis zu 40 mA, daher ist es am sichersten, den Strom auf insgesamt vielleicht 20 mA pro GPIO zu beschränken.
Mit anderen Worten, unabhängig davon, ob ein GPIO als Quelle oder Senke verwendet wird, bleiben die Grenzwerte ziemlich niedrig und sollten in der Praxis viel niedriger als die absoluten Maximalwerte gehalten werden. Sogar unter dem absoluten Maximum verringert das Betreiben eines Mikrocontrollers bei zu hohen Temperaturen seine Lebenserwartung.
Lösung :
Verwenden Sie entweder BJTs, MOSFETs oder einen Treiber-IC wie den ULN2003 , um den Strom tatsächlich durch die LEDs zu treiben.
quelle
Ich werde meine Antwort stehlen, als ich diese Frage beim letzten Versuch von arduino SE beantwortet habe.
Das ist ein bisschen komplex. Grundsätzlich gibt es eine Reihe von einschränkenden Faktoren:
Die E / A-Leitungen vom Mikrocontroller (dh die analogen und digitalen Pins) haben sowohl eine Gesamtstrombegrenzung (z. B. Gesamtstrombegrenzung) als auch eine Begrenzung pro Pin:
Aus dem ATmega328P Datenblatt .
Je nachdem, wie Sie die Arduino "Pins" definieren, ist dies jedoch nicht die gesamte Geschichte.
Der 5V-Pin des Arduino ist nicht über den Mikrocontroller angeschlossen . Als solches kann es wesentlich mehr Energie liefern. Wenn Sie Ihren Arduino über USB mit Strom versorgen, begrenzt die USB-Schnittstelle Ihren Gesamtstromverbrauch auf 500 mA. Dies wird mit den Geräten auf dem Arduino-Board geteilt, sodass die verfügbare Leistung etwas geringer ist.
Wenn Sie ein externes Netzteil verwenden, sind Sie über den Gehäusestromversorgungsstecker durch den lokalen 5-V-Regler begrenzt, der für maximal 1 Ampere ausgelegt ist . Dies ist jedoch auch thermisch begrenzt , was bedeutet, dass sich der Regler aufheizt, wenn Sie Strom ziehen. Wenn es überhitzt, wird es vorübergehend heruntergefahren.
Der geregelte 3,3-V-Ausgang kann maximal 150 mA liefern, was die Grenze des 3,3-V-Reglers darstellt.
In Summe
Hinweis: Dies gilt nicht für den Arduino Due und es gibt wahrscheinlich einige Unterschiede für den Arduino Mega. Es ist wahrscheinlich allgemein für jeden Arduino zutreffend, der auf dem ATmega328-Mikrocontroller basiert.
quelle