Hallo Mikrocontroller-Gemeinde! Ich bin neu hier und da mich die Suchfunktion trotz zahlreicher nützlicher Tipps nicht endgültig erleuchtet hat, begrüße ich euch mit einer Frage :-) Im Rahmen unseres Studiums absolvieren wir eine Projektarbeit. Es soll um C-Programmierung eines Arduinos gehen. Als zu steuerndes Objekt haben wir uns für einen LED-Cube mit 7x7x7 LEDs entschieden. Nun sind wir eher Programmierer, weniger Elektrotechniker, was uns vor ein paar Hürden stellt. Im Anhang seht ihr meinen bisherigen Entwurf des Schaltplans. Die LEDs werden in X-Richtung mit 49 Pins über Schieberegister (in Reihe) mit einem Plus-Signal und in Y-Richtung über 7 Pins mit der Erde verbunden. Die LEDs benötigen eine Spannung von 2,2 Volt und ziehen 20mA Strom. Einleitung zu meiner Frage: Das vorgesehene (weil so oft empfohlene) Schieberegister 74HC595 kann pro Pin 35mA Ausgangsstrom liefern, das würde für eine LED reichen. Allerdings hat es einen maximalen Versorgungsstrom von 70 mA, was bedeutet, man kann nicht alle acht(bei uns sieben) Ausgänge gleichzeitig auf HIGH setzen. Das wäre ein Strom von 140mA. Berücksichtigt man, dass die Schieberegister die 7 Ausgänge mit hoher Frequenz durchschalten, gilt die Faustregel: "Wenn die LED 20 mA Dauerstrom aushält, hält Sie für 1/7 der Zeit den 7-fachen Strom aus". Damit wären wir bei 140mA pro LED und 140mA*7=980mA pro Schieberegister. Frage: Kennt ihr ein Schieberegister, dass problemlos 1 Ampere Versorgungsstrom liefern kann und dabei noch die Eigenschaften des 74HC595 (seriell in, parallel out - am Liebsten wie gehabt mit Latch-, Clock- und Data-Pin) mitbringt? Zweite Frage: Empfehlt ihr, mit den Ausgängen des Schieberegisters lieber Transistoren für das Plus-Signal durchzuschalten? Sind 49 Transistoren unkomplizierter als acht Hochleistungs-Schieberegister? Vielen Dank für eure Hilfe! Viele Grüße Daniel
Hi Daniel, ich habe bei meinem 8x8x8 Cube 64 Kleinsignal-Mosfets hinter die Schieberegister gepackt. Das klappt eigentlich ganz gut, war nur viel Löterei. Und es gab viele Meinungen, dass man besser LED Treiber nutzen sollte. Ich weiß nicht, was du zum schalten der Ebenen nimmst, aber bei mir war das das größere Problem. Ich habe MOSFETs, die relativ lange zum schalten brauchen und daher die Frequenz etwas drücken. Wenn ihr aber nicht unbedingt einzelne LEDs dimmen wollt dürfte das nicht so schlimm sein. Grüße, Max
Ich würde an die Schieberegister einen ULN2803 oder ULN2003 hängen und die einzelnen LEDs nach Masse schalten. Um zwischen den einzelnen Ebenen umzuschalten würde ich einen P-Channel Mosfet an das Schieberegister hängen. Als P-FET würde ich z.B. den IRLML2244TR verwenden. Der Einsatz des UNLs spart eine Menge Lötarbeit. Wenn du bei jedem Schieberegister alle 8 Ausgänge und den ULN2803 verwendest, sparst du dir ein Schieberegister und einen ULN.
:
Bearbeitet durch User
Danke für die schnellen Antworten! Wenn ich also den Konsens richtig interpretiere, ist Version 2 mit Transistoren geschickter. Transistoren-Arrays sind eine coole Sache, das macht es einfach, die große Menge zu verarbeiten. Ein Verständnisproblem habe ich noch: Wieso greift ihr für die Ebenen-Schaltung auf Mosfets zurück und nehmt nicht einen 0815-Transistor, der hohe Ströme aushält? (etwa BD707 o.ä.)
Ich persönlich würde Mosfets bevorzugen. Wenn du highside Schalten willst brauchst du aber einen pnp-Transistor bzw. P-Channel Mosfet. Und das Schieberegister für die ebenen würde ich auch in Serie mit den anderen schalten. Wenn du das Schieberegister für die Mosfets an andere Pins hängst kannst du nicht das Hardware-SPI benutzen, du musst Soft-SPI machen und das ist langsamer und mit zusätzlicher Programmierarbeit verbunden. Und die Schieberegister würde ich so beschalten: http://www.mikrocontroller.net/articles/Porterweiterung_mit_SPI#Ausg.C3.A4nge Gesamt reichen 7 Schieberegister: 49LEDs + 7 Ebenen = 56 56/8=7 Du musst also gesamt 7 Byte pro Ebene hinausschieben also 49 Byte für das ganze Bild. Beim Hardware SPI-Modul geht das schnell, es ist falls du das benötigst auch eine hohe Bildrate möglich.
:
Bearbeitet durch User
Hallo nochmal, danke für die informativen Antworten! Eine kurze Frage noch: Bisher nahmen wir an, dass Serial-In/Parallel-Out nur ein Quasi-Paralleles-Ausgangssignal erzeugt; dass die Ausgänge (angenommen alle auf HIGH) in einer so hohen Frequenz durchgeschaltet werden, dass man es nicht merkt. Es ist zu einem Zeitpunkt t (t sehr klein) nur ein Ausgang auf HIGH. Wenn man aber Ebenen und LEDs an die gleiche Reihe Schieberegister hängt, wird diese Annahme nichtig. Es muss ja mindestens ein Plus und ein Minus (= 2 Ausgänge) gleichzeitig geschaltet sein, um einen Stromfluss in der LED zu provozieren. Ist demnach dieses "Parallel-Out" tatsächlich auch reales parallel?
Jede Zelle des Schieberegister besteht aus zwei D-FlipFlops eines ist Teil des Schieberegisters, das andere ist ein Ausgangslatch. es werden zuerst alle Bits in das Schieberegister geschoben. Sobald alle 56 Bits hineingeschoben wurden werden die Daten bei eine steigende Flanke an STCP (Pin 12) ins Ausgangslatch kopiert. Es ändern sich also alle Ausgänge gleichzeitig. Das STCP flankengesteuert ist darfts du es nicht einfach auf Masse legen. Zu sehen auf S.1, Fig.4 im Datenblatt des 74HC595 http://www.nxp.com/documents/data_sheet/74HC_HCT595.pdf
:
Bearbeitet durch User
Daniel B. schrieb: > Schieberegister 74HC595 kann pro Pin 35mA Ausgangsstrom liefern, das > würde für eine LED reichen. Wie kommst du auf das dünne Brett? Du hast Multiplexing noch überhaupt nicht verstanden. Wenn man eine LED nur 1/7 tel der Zeit einschaltet, muss in der kurzen Zeit der 7-fache Strom fliessen, also 140mA, damit die gleich hell wie mit 20mA Dauerstrom erscheint. Selbst wenn man den Maximalstrom vieler LED von 100mA einhält, ist das mehr als der HC595 liefern kann, und reicht eben nur für 70% Helligkeit. Und 100k Vorwiderstand für einen Transistor der 1A schalten soll, ist ja wohl auch abenteuerlich, der braucht eher 100mA als 40uA zum durchschalten. Also noch mal von vorn, mit TPIC6B595 oder CAT4016 und IRF7304.
Oder wie ich bereits erwähnt habe die UNL2803 für lowside und p-Fet wie z.B. IRLML2244TR als highside Schalter.
Oder du nimmst den STP08DP05 von STM (http://www.st.com/web/catalog/sense_power/FM142/CL1854/SC1573/PF161574), gibt's in der 8-Bit-Version, aber auch mit 16-Bit. Jeder Ausgang kann max. 100mA treiben, und du brauchst keinen Vorwiderstand, da dieser eine KSQ integriert hat. Könnte aber schön warm werden, wenn du da 1,6A durchfließen lässt.
Darf ich fragen wie weit du mit deinem Projekt jetzt bist?
Hallo M.H., Gerne! Die Ebenen an sich sind fertig, alle Kathoden sind miteinander verknüpft. Nun sind wir gerade dabei, die Ebenen übereinander zu legen und die 49 Anoden zu verbinden. Sehr fitzelig, aber der Würfel gewinnt Gestalt :) Bei der Schaltung bin ich gerade unsicher. Die meisten empfehlen (wie du) ein Transistorarray für die eine Seite (bei dir Minus, bei uns aber hardwarebedingt Plus) und ein paar Mosfets für die andere. Da nun das Shift Register tatsächlich gleichzeitig alle Eingänge high oder low schaltet, heißt das für mich, dass bei den LEDs in Reihe je nach Anwendung 1-7 Stück leuchten und ich eigentlich einen variablen Vorwiderstand bräuchte, je nach dem, wieviele zu einem Zeitpunkt im Einsatz sind. Auf Nachfrage im privaten Umfeld kamen Stichwörter wie LED-Treiber oder Konstantstromquelle, aber da bin ich als "Informatiker" schon wieder überfragt. Ich kann das googlen und ich kann das kaufen, aber was es tut und ob es gut für mich ist und in welcher Ausführung, verstehe ich nicht. Kannst du mir da vielleicht auf die Sprünge helfen? Meine Lösung wäre jetzt gewesen, das Shift Register für die Ebenen softwareseitig so zu programmieren, dass die Outputs nacheinander durchgeschaltet werden.
:
Bearbeitet durch User
> Da nun das Shift Register tatsächlich gleichzeitig alle Eingänge high > oder low schaltet, heißt das für mich, dass bei den LEDs in Reihe je > nach Anwendung 1-7 Stück leuchten und ich eigentlich einen variablen > Vorwiderstand bräuchte Du hast NICHTS über Multiplexmatrixansteuerung verstanden. > Kannst du mir da vielleicht auf die Sprünge helfen? Bau es richtig, die Widerstände kommen in die Spalten (die nur 100mA liefern müssen, bei denen man die LED einzelne ein- und ausschaltet) und die MOSFETs in die Zeilen (die 4.9A schalten können müssen). Und wenn ihr den ganzen Scheiss wieder umlöten müsst, dann ist das die gerechte Strafe für vollzugedröhnte Ignoranz.
"die Widerstände kommen in die Spalten " Die, von denen ihr 49 habt. "die MOSFETs in die Zeilen" Die, von denen ihr 7 habt.
Daniel B. schrieb: > Transistorarray für die eine Seite (bei dir Minus, bei uns aber > hardwarebedingt Plus) und ein paar Mosfets für die andere. Dann würde ich 7 N-Channel Mosfets für die Ebenen verwenden. Den ULN2803 kannst du nicht verwenden, da er nicht genug Storm schalten kann. Mit dem ULN2803/2003 kannst du aber nur lowside (Minus) Schalten. Dann bleiben zwei Möglichkeiten: 1. 49 P-Fets oder pnp Transistoren, was viel Lötarbeit bedeutet, mehr Platz auf der Platine brauch und vllt. komplizierter beim layouten ist. 2. Ein High Side Transistor Array wie z.B. denUDN2981 zu verwenden. Der hat aber ca. 1.6 Volt Spannungsabfall. Ein kleiner Tipp: Das mit der Ansteuerung hättest du dir überlegen sollen BEVOR du die LEDs zusammenlötest. Daniel B. schrieb: > heißt das für mich, dass bei den LEDs in Reihe je > nach Anwendung 1-7 Stück leuchten und ich eigentlich einen variablen > Vorwiderstand bräuchte, Das Stimmt nicht ganz. Jede Spalte hat einen eigenen Vorwiderstand (49). Beim Multiplexing ist aber immer nur eine Ebene aktiv. Die Ebenen werden hintereinander eingeschalten, und das geht so schnell, dass man es nicht sehen kann.
:
Bearbeitet durch User
@M.H. Am 21.11. hast du folgendes geschrieben: "Es ändern sich also alle Ausgänge gleichzeitig [am Schieberegister]." Jetzt schreibst du: "Beim Multiplexing ist aber immer nur eine Ebene aktiv. Die Ebenen werden hintereinander eingeschalten, und das geht so schnell, dass man es nicht sehen kann." Genau darauf bezog sich meine Frage. Wenn ich in das Schieberegister für die 7 N-Channel Mosfets (also Lowside) für die Spalten ein Byte wie dieses schiebe "11111111", sind dann alle Ebenen gleichzeitig an oder eben jeweils kurz nacheinander? @MaWin: Ich finde es toll, dass du dich beteiligst, aber ich frage hier nach, weil ich es lernen will und ein paar Knackpunkte habe. Kannst du bitte sachlich bleiben?
Daniel B. schrieb: > dieses schiebe "11111111", sind dann alle Ebenen gleichzeitig an oder > eben jeweils kurz nacheinander? Es sind alle an. Du musst aber mit deiner Software dafür sorgen, dass immer nur eine an ist. In slow motion sieht das dann so aus: http://youtu.be/I0sgqgUwIAQ?t=2m56s
:
Bearbeitet durch User
M. H. schrieb: > 2. Ein High Side Transistor Array wie z.B. denUDN2981 zu verwenden. Der > hat aber ca. 1.6 Volt Spannungsabfall. Der UDN2981 liefert laut Datenblatt maximal 500mA und 120mA pro Ausgang. Wir bräuchten aber im maximalen Fall 8*140mA = 1,12 A, wenn alle 8 LEDs mit Pulsstrom 140mA leuchten sollen. Kennst du ein Highside-Transistor-Array, dass die 1,12A schalten kann? Oder gibt es eine Übersicht?
Ich kenne kein passendes high side array... Dann bleibt dir nur noch übrig für jede LED einen eigenen p-Fet oder pnp zu verwenden. Schau dir man den IRLML6402TRPBF ab: IDS = -3.7A RDSON = 50mΩ @ UGS = -4.5V Kostet bei TME ab 50 Stück nur 5.7 cent/Stück. Also billiger und besser als mit den UDN2981. Das Layout müsste mit diesem FET machbar sein, wie aber vllt. ein wenig größer. Es wird einige Zeit dauern die 49 FETs zu verlöten. Darf ich frage wieso du dir das mit der Ansteuerung nicht fertig überleg hast bevor du die LEDs zusammenlötest? http://www.irf.com/product-info/datasheets/data/irlml6402pbf.pdf
Daniel B. schrieb: > Wir bräuchten aber im maximalen Fall 8*140mA = 1,12 A, wenn alle 8 LEDs > mit Pulsstrom 140mA leuchten sollen. sollen sie das denn? Bzw. Dürfen sie das denn? Schaum mal im Datenblatt nach welchen maximalen Strom die LEDs wie lange vertragen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.