Multiplexing einer 8x8-Matrix - Warum Transistoren?

Ich versuche zu verstehen, wie man eine 8x8-Matrix (oder eine große Anzahl von LEDs) richtig multiplext http://arduino.cc/en/Tutorial/RowColumnScanning

Ich bin jedoch etwas verwirrt, da ich andere wie diese gefunden habe: http://garagelab.com/profiles/blogs/arduino-scrolling-text-marquee-to-give-a-happy-christmas

Dieser besagt, dass Transistoren für die Stromumschaltung verwendet werden sollen, aber der erste Link verwendet nicht einmal Widerstände (was ich verdächtig finde), geschweige denn Transistoren.

Ich verstehe nicht wirklich, warum die Transistoren benötigt werden, kann jemand erklären, warum?

Gedanken?

Antworten (3)

Die Transistoren werden benötigt, wenn der zum Ansteuern der LEDs erforderliche Strom höher ist, als der Mikrocontroller verarbeiten kann. Dies bedeutet entweder eine einzelne Pin-Nennleistung oder die maximale Nennleistung für alle Pins zusammen (wird im Datenblatt angegeben).

Die meisten typischen 5-mm- und 3-mm-LEDs haben einen maximalen Nennstrom von etwa 20 mA und können direkt von einem Mikrocontroller-Pin angesteuert werden (10 mA ist für die meisten Anwendungen ausreichend).
Wenn Ihr Mikrocontroller jedoch den maximalen Nennstrom von 200 mA beträgt und Sie 20 LEDs mit 15 mA ansteuern möchten , obwohl die einzelnen Pins den Strom liefern können, sind Sie für die maximale Stromstärke außerhalb der Spezifikation.

Die LEDs sollten immer eine strombegrenzende Komponente (z. B. Widerstand) haben, wenn sie von einer Spannungsquelle angesteuert werden, also vermuten Sie zu Recht die erste Verbindung. Es scheint, dass es sich einfach darauf verlässt, dass der Stiftantrieb nicht hoch genug ist, um das Mikro oder die LED zu beschädigen, was definitiv keine gute Idee ist.

Hier sind die absoluten Höchstwerte für den ATmega328 . Beachten Sie, dass es eine Nennstromstärke pro Pin und auch eine maximale Gesamt-Vcc-Stromstärke gibt:

Maximale Spezifikationen

Siehe auch Anmerkungen 3 und 4 auf S. 314:

Anmerkungen

Außerdem können Sie Hochleistungs-LEDs mit Nennströmen von > 500 mA erhalten, sodass in diesem Fall offensichtlich ein Transistor die einzige Option ist.

Ich verwende eine von diesen: adafruit.com/datasheets/BL-M07C881.PDF Die Sorte UltraBright Red. Es scheint, dass der maximale Strom pro LED 30 mA beträgt. Es scheint jedoch, dass es ohne die Transistoren keinen Weg gibt, da Sie jeweils eine Spalte ansteuern, also wären es 8 x 30 mA. Aber offensichtlich tun es die Leute. Ich habe eine Uhr mit einer 8x8-Matrix, die keine Transistoren verwendet, also ist es möglich ... Verstehe ich die aktuellen Berechnungen falsch?
Nein, Sie können den Chip über die empfohlenen Spezifikationen hinaus betreiben, es ist nur so, dass Atmel nicht garantiert, was passiert, wenn Sie dies tun. Wenn es nur leicht darüber liegt und Ihre Bedingungen (z. B. Umgebungstemperatur usw.) den Chip wahrscheinlich nicht belasten, werden Sie wahrscheinlich damit durchkommen. Es ist jedoch nicht der Weg, ein professionelles Produkt zu entwerfen, arbeiten Sie immer innerhalb der empfohlenen Spezifikationen.
Denken Sie auch daran, dass Sie bei einer Matrix nicht alle LEDs gleichzeitig eingeschaltet haben müssen, wenn Sie mit zB 100 Hz scannen, damit der Strom innerhalb der Spezifikationen gehalten werden kann. Wenn beispielsweise jede LED in Ihrer Uhr 10 mA verbraucht, beträgt die maximal mögliche durchschnittliche Stromaufnahme 80 mA, wenn jeweils eine Spalte gescannt wird.
Ok, aber würde das nicht bedeuten, dass die Stromaufnahme an dem Pin, der diese Spalte steuert, 80 mA betragen würde, was> 40 mA ist? Und wäre dies nicht der Fall, unabhängig davon, ob der Steuerstift die Stromquelle oder -senke ist?
Ja, tut mir leid, Sie müssten den Scan mehr aufteilen, wenn die Spalten auch von Pins angesteuert werden (ich dachte aus irgendeinem Grund an Transistoren in jeder Spalte). Wenn sowohl Spalten als auch Zeilen von den Pins angesteuert werden, dann maximal 4 LEDs pro Spalte können jederzeit beleuchtet werden. Idealerweise würden Sie nur 2 beleuchten, da die 40mA die absolute Höchstleistung ist, was nicht empfohlen wird.
Okay, macht Sinn. Jetzt frage ich mich nur, wie jemand diese Dinge jemals direkt von den I / O-Pins antreibt: P
Sie scannen schnell eine oder zwei LEDs gleichzeitig (wenn die Scangeschwindigkeit hoch genug ist, sieht das Auge alle LEDs auf einmal eingeschaltet - siehe POV), oder diagonal, oder ignorieren die Spezifikationen und hoffen auf das Beste ;-) Grundsätzlich aber, es sei denn, Sie verwenden eine kleine Matrix, die bei sehr niedrigen Strömen ansteuert, verwenden Sie dann Transistoren - für die minimalen zusätzlichen Kosten und den minimalen Aufwand haben Sie eine weitaus größere Antriebskapazität und müssen sich weniger Sorgen machen (z. B. können Sie alle LEDs auf einmal aufleuchten) Für das Display, auf das Sie verlinken, würde ich definitiv Transistoren (plus Strombegrenzungswiderstände) verwenden.
Im Tutorial arduino.cc/en/Tutorial/RowColumnScanning habe ich das Gefühl, wenn wir die Zeile LOW (Anode) und alle Spalten HIGH (Kathode) setzen, lassen wir die Zeilen-LEDs mit umgekehrter Polarität. Wird es die LEDs beschädigen?
Umgekehrte Polarität ist in Ordnung, solange sie den Datenblattwert nicht überschreitet. Überprüfen Sie dies, und solange Sie sich sicher darin befinden, ist alles in Ordnung.

Das ist eigentlich falsch, Transistoren werden als Schalter verwendet. Auf diese Weise können Sie die Kathodenstifte mit einem positiven Signal von einem Arduino so schalten, dass jede LED in der Matrix einzeln gesteuert werden kann, was die Möglichkeit des Multiplexens ermöglicht. Einfach.

Sie sollten diesen Beitrag lesen http://www.theengineeringprojects.com/2015/12/scrolling-text-led-matrix-8x8-using-arduino-proteus-isis.html .... Sie haben im Detail gezeigt, wie man eine Schnittstelle herstellt Arduino mit 8x8 LED-Matrix. Sie haben dazu MAX7219 verwendet. Dort ist auch der Code zusammen mit der Proteus-Simulation angegeben.