Forum: Analoge Elektronik und Schaltungstechnik Schieberegister bei einem 7x7x7 LED-Cube


von Daniel B. (cologne_muc)


Angehängte Dateien:

Lesenswert?

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

von Cubus (Gast)


Lesenswert?

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

von Max H. (hartl192)


Lesenswert?

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
von Daniel B. (cologne_muc)


Lesenswert?

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.ä.)

von Max H. (hartl192)


Lesenswert?

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
von Daniel B. (cologne_muc)


Lesenswert?

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?

von Max H. (hartl192)


Lesenswert?

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
von MaWin (Gast)


Lesenswert?

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.

von Max H. (hartl192)


Lesenswert?

Oder wie ich bereits erwähnt habe die UNL2803 für lowside und p-Fet wie 
z.B. IRLML2244TR als highside Schalter.

von dommy (Gast)


Lesenswert?

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.

von Max H. (hartl192)


Lesenswert?

Darf ich fragen wie weit du mit deinem Projekt jetzt bist?

von Daniel B. (cologne_muc)


Lesenswert?

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
von MaWin (Gast)


Lesenswert?

> 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.

von MaWin (Gast)


Lesenswert?

"die Widerstände kommen in die Spalten "

Die, von denen ihr 49 habt.

"die MOSFETs in die Zeilen"

Die, von denen ihr 7 habt.

von Max H. (hartl192)


Lesenswert?

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
von Daniel B. (cologne_muc)


Lesenswert?

@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?

von Max H. (hartl192)


Lesenswert?

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
von Daniel B. (cologne_muc)


Lesenswert?

Danke! Das hat gefehlt.

von Daniel B. (cologne_muc)


Lesenswert?

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?

von Manuel T. (Gast)


Lesenswert?

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

von Peter II (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.