Forum: Mikrocontroller und Digitale Elektronik LED Strip Matrix mit PWM


von Marcel H. (multiholle)


Lesenswert?

Ich möchte an meiner Wand ein Raster aus 32x16 Pixeln aufbauen. Jedes 
"Pixel" wird durch einen 12V LED-Strip dargestellt welcher durch Mosfets 
angesteuert wird. Das macht insgesamt 512 Ausgänge welche einzelnd über 
PWM dimmbar sein sollen.

Normalerweise kann man eine LED-Matrix multiplexen und den LED-Strom 
erhöhen. Bei dem LED-Strips kann ich den Strom aber nicht beeinflussen. 
Welche Möglichkeiten habe ich um die LED-Strip-Matrix mit möglichst 
wenig Aufwand anzusteuern?

: Bearbeitet durch User
von Stefan R. (1994rstefan)


Lesenswert?

Such mal nach WS2812b, das sind digital ansteuerbare LEDs. Du kannst 
dann jede LED einzeln ansteuern, ich denke dast ist eher das was du 
suchst.

von Marcel H. (multiholle)


Lesenswert?

Ich kenne adressierbare LED-Strips. Das ist aber nicht was ich suche. 
Jedes Pixel soll bei mir 20x20 cm werden und über 80 cm LED-Strip 
ausgeleuchtet werden.

von Frank (Gast)


Lesenswert?

Marcel H. schrieb:
> Ich kenne adressierbare LED-Strips. Das ist aber nicht was ich
> suche. Jedes Pixel soll bei mir 20x20 cm werden und über 80 cm LED-Strip
> ausgeleuchtet werden.

Und was spricht dagegen die 80cm mit adressierbaren Stripes zu machen? 
Du fragst ja "nach möglichst wenig Aufwand".
512 Ausgänge einzeln über PWM dummen ist das Gegenteil davon. Dafür 
brauchst du entweder ein FPGA mit möglichst vielen IOs + Treiber, oder 
ein Grab an LED Treiber Bausteinen die schon eine PWM mitbringen.

Für die adressierbaren Stripes brauchst du nur 1-2 Pins.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Marcel H. schrieb:
> Normalerweise kann man eine LED-Matrix multiplexen und den LED-Strom
> erhöhen. Bei dem LED-Strips kann ich den Strom aber nicht beeinflussen.

 Sagt wer ?
 Mal abgesehen davon, dass es mit WS2812B wirklich einfacher ist, hast
 du auch eine Matrix, nur das die Matrix aus 32*16*(60*0.8) = 24576 LEDs
 besteht (bei 60 LEDs/Meter).

 24576 LEDs * 0.02A = 491.52A
 Wie willst du das ohne multiplexen schaffen ?

 Selbst mit multiplexen hast du 24576 / 32 = 768 LEDs * 0.02A = 15.36A
 im ungünstigten Fall (volle Helligkeit).
 Bei RGB ist es * 3.
 Damit es nach etwas aussieht muss man mit mindestens 80-100Hz
 multiplexen, das ist 2560 bis 3200Hz PWM.
 Und natürlich sind es keine 512 Ausgange, sondern 32+16 = 48.
 Ansonsten wäre es ja auch kein multiplexen.

: Bearbeitet durch User
von Thomas E. (picalic)


Lesenswert?

Marc V. schrieb:
> 24576 LEDs * 0.02A = 491.52A
>  Wie willst du das ohne multiplexen schaffen ?
>
>  Selbst mit multiplexen hast du 24576 / 32 = 768 LEDs * 0.02A = 15.36A
>  im ungünstigten Fall (volle Helligkeit).

Ich komme da gedanklich nicht ganz mit - durch Multiplexen wird doch der 
zu schaltende Strom nicht kleiner, sondern sogar größer, oder?
Davon abgesehen kann man den Strom durch die LEDs auch nicht beliebig 
erhöhen, d.h. 1/x Duty = x-facher Strom in der Einschaltphase mag für 
darauf ausgelegte, spezielle Anzeige-LEDs gehen, die üblichen RGB-LEDs 
vertragen aber in der Regel keine Ströme in der Größenordnung des 
mehrfachen Dauerstroms.
Den Ansatz einer großen Multiplex-Matrix halte ich bei diesem Projekt 
für falsch. An WS2812 o.ä. hatte ich Anfangs auch gedacht, aber auch 
diesen Ansatz halte ich hier für nicht sehr glücklich: die Effiziens der 
LEDs ist zu gering und der Strom für diese Anzahl von LEDs zu hoch, um 
das sinnvoll umzusetzen.

Ich würde jedem dieser Pixel einen eigenen Microcontroller spendieren, 
der nur dieses einzelne Pixel bedient. Über eine serielle Schnittstelle 
nach dem Muster der addressierbaren LED-Streifen könnte man die Daten 
von Pixel zu Pixel weiterreichen. Um den Strom etwas im Zaum zu halten 
sollte man über eine Erhöhung der Betriebsspannung (z.B.48V) nachdenken, 
d.h. Serienschaltung der LEDs. Das geht natürlich nicht mit Abschnitten 
von normalen RGB-Streifen, bei der Stückzahl lohnt sich aber bestimmt 
schon die Herstellung einer Pixel-Platine, die dann als Kachel an die 
Wand geschraubt werden kann...

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Thomas E. schrieb:
> Ich komme da gedanklich nicht ganz mit - durch Multiplexen wird doch der
> zu schaltende Strom nicht kleiner, sondern sogar größer, oder?

 Da komme ich aber nicht mit...
 Mit multiplexen schaltest du doch 32 oder 16 LEDs auf einmal.
 Ohne multiplexen schaltest du auf einmal 32*16 = 512 LEDs. Ob das nun
 einzelne LEDs sind oder Stripes a 48 LEDs ist in diesem Zusammenhang
 uninteressant.

Thomas E. schrieb:
> Davon abgesehen kann man den Strom durch die LEDs auch nicht beliebig
> erhöhen, d.h. 1/x Duty = x-facher Strom in der Einschaltphase mag für
> darauf ausgelegte, spezielle Anzeige-LEDs gehen, die üblichen RGB-LEDs
> vertragen aber in der Regel keine Ströme in der Größenordnung des
> mehrfachen Dauerstroms.

 Ich dachte, du willst Stripes benutzen ?
 Den Strom durch die Stripes kannst du nicht erhöhen, es sei denn, du
 spielst mit der Spannung rum (was man nicht tun sollte).
 Jede RGB-Led zieht dauernd etwa 18-20mA pro Farbe, festgelegt durch
 die eingebauten Widerstände - da gibt es keine Einschaltphase.
 Dimmen tut man da NICHT mit Strom, sondern mit PWM.
 Dass die LEDs dadurch schwächer leuchten, ist klar.
 Das Beste, was du damit kriegen kannst ist 1/16 Duty, ob das 1/16
 der Helligkeit entspricht, bleibt festzustellen.

 Wenn das nicht OK ist, musst du über die benötigten 1500A nachdenken.
 32*16*48*RGB = 73728 LEDs
 73728 LEDs*0.02A = 1474.56A Max.

 Bei etwa 20-25A pro Netzteil sind es nur 60 Netzteile - kein Problem.

von Thomas E. (picalic)


Lesenswert?

Marc V. schrieb:
> Ich dachte, du willst Stripes benutzen ?

Ich sowieso nicht - Marcel ist der mit der geplanten Pixelwand.

Marc V. schrieb:
> 32*16*48*RGB = 73728 LEDs

Zunächst mal hat er nur von 80 cm LED-Stripes pro Pixel geschrieben, 
ohne Angaben, wieviel LEDs pro Meter da drauf sind. Nicht unüblich sind 
da Streifen, die alle 10cm geteilt werden können und dementsprechend (da 
immer 3 LEDs in Serie sind) 3 LEDs pro 10 cm, also 24 LEDs pro Pixel.
Das sind dann "nur" 12288 LEDs, mit 20mA pro 3 LEDs (Serienschaltung an 
12V!), also insgesamt "nur noch" ca. 82 A pro Farbe.
Ich kann mir aber kaum vorstellen, daß er seine Wand tatsächlich mit 3kW 
LED-Beleuchtung betreiben will (als Solarium würde es trotzdem nicht 
taugen), aber evtl. wird er durchaus einzelne Pixel mal mit voller 
Helligkeit steuern wollen - das verbietet schonmal eine 
Multiplex-Matrix. Es bleibt im Grunde nur eine Einzelsteuerung der Pixel 
um auch mal 100% Einschaltdauer zu ermöglichen.

Ein 8-beiniger Mikrocontroller mit drei kleinen (SOT-23) Mosfets wäre 
dann die ganze Steuerhardware, die pro Pixel notwendig wäre. Kosten 
dafür: unter 2 Euro pro Pixel. Als Schnittstelle würde ich UART 
vorschlagen: Eingang (Rx) zum Steuer-Controller bzw. zum verherigen 
Pixel, Ausgang (Tx) zum nächsten Pixel.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Thomas E. schrieb:
> Das sind dann "nur" 12288 LEDs, mit 20mA pro 3 LEDs (Serienschaltung an
> 12V!), also insgesamt "nur noch" ca. 82 A pro Farbe.
 Ja stimmt, hab's vergessen.

 Trotzdem, 82A*RGB*12V = fast 3KW.
 Und wenn seine "Pixel" 20x20cm sind:
 20cm * 32 = 640cm.
 20cm * 16 = 320cm.
 Das muss aber eine ziemlich grosse Wand sein.

Thomas E. schrieb:
> Ein 8-beiniger Mikrocontroller mit drei kleinen (SOT-23) Mosfets wäre
> dann die ganze Steuerhardware, die pro Pixel notwendig wäre. Kosten
> dafür: unter 2 Euro pro Pixel.
 Plus 512 * Platinen, Verdrahtung, löten, programmieren ?

> Als Schnittstelle würde ich UART
> vorschlagen: Eingang (Rx) zum Steuer-Controller bzw. zum verherigen
> Pixel, Ausgang (Tx) zum nächsten Pixel.
 So einfach wird das wohl nicht gehen, alleine wegen der damit
 verbundenen Verzögerung und Bearbeitungszeit.
 Bei 250Kb braucht man 40us pro Byte, also 120us pro RGB.
 120us * 512 = 61440us = 61.44ms von Anfang bis Ende.
 Und das ohne jegliche Bearbeitungszeit.
 PWM kann werkeln ohne den uc zu beanspruchen, aber die neuen
 Werte müssen auch mal reingeschrieben werden, die empfangenen Bytes
 müssen gezählt werden damit der uc weiss, welche RGB-Werte übernommen
 werden und welche weitergereicht werden sollen usw.
 DMX könnte vielleicht funktionieren (mit 2-4 Universen gleichzeitig -
 je nach verwendetenem uc) aber das ist alles soo knapp...

von Ralf D. (doeblitz)


Lesenswert?

Marcel H. schrieb:
[...]
> Normalerweise kann man eine LED-Matrix multiplexen und den LED-Strom
> erhöhen. Bei dem LED-Strips kann ich den Strom aber nicht beeinflussen.
> Welche Möglichkeiten habe ich um die LED-Strip-Matrix mit möglichst
> wenig Aufwand anzusteuern?

Wenn du es programmiermäßig einfach haben willst, dann solltest du dir 
mal den PCS9685 ansehen, das ist ein 16 Kanal PWM-Controller, der über 
I2C angesteuert wird. Die I2C-Adresse läßt sich auf 6 bit einstellen, 
also maximal 64 Stück möglich, du benötigst für diene Strips nur 32 - 
paßt also auch. Einfach die Ausgänge auf MOSFETs geben und fertig 
(Module mit dem Controller gibt es ab ca. 5 Euro bei Ebay).

von Marcel H. (multiholle)


Lesenswert?

Ich habe mir schon gedacht, dass es sich hierbei um ein größeres Thema 
handelt, welches sich nicht so leicht lösen lässt. Ich glaube die 
Variante mit den adressierbaren LED-Strips ist wirklich die sinnvollste 
Variante für mich. Alles andere wird wahrscheinlich in sehr viel Arbeit 
ausarten.

Ich denke auch, dass ich die 80cm Striplänge pro Pixel reduzieren muss. 
Das ganze soll unsere eine Wohnzimmerwand komplett ausfüllen (ca. 5x3m). 
Zum einen soll es als Beleuchtung dienen, zum anderen möchte ich dort 
einfache Spiele (Snake, Pong) darstellen. Für die Beleuchtung benötige 
ich natürlich keine 3kW. Zum Spielen sollen einzelne Pixel aber 
möglichst hell leuchten.

von Thomas E. (picalic)


Lesenswert?

Marc V. schrieb:
> So einfach wird das wohl nicht gehen, alleine wegen der damit
>  verbundenen Verzögerung und Bearbeitungszeit.

Welche Bearbeitungszeit? Wenn man das Prinzip WS2812 übernimmt, behält 
der Controller die ersten 3 Bytes für sich (wie lange er dann intern 
damit 'rumrechnet, ist Nebensache). Die anderen Bytes müssen bloss 
weitergereicht werden - wenn man dafür mal grosszügig mit 3 
Mikrosekunden rechnet, ist das immer noch nicht dramatisch.

Marc V. schrieb:
> Bei 250Kb braucht man 40us pro Byte, also 120us pro RGB.

Den UART mit 1MBit pro Sekunde laufen zu lassen, ist auch keine Hexerei 
- bei den kurzen Verbindungen zwischen den Pixels geht das sicher 
problemlos.
Außerdem muss der Controller nicht auf alle drei RGB-Bytes warten, bevor 
er das erste Byte 'rausschickt. Ich würde also (ungünstig) mit 15 
Mikrosekunden Delay rechnen, macht nicht mal 8 ms für die ganze Kette!

Marc V. schrieb:
> Plus 512 * Platinen, Verdrahtung, löten, programmieren ?

Verdrahten und löten muss man sowieso. Zugegeben, 20x20 cm Platinen in 
der Stückzahl werden selbst beim Chinamann ins Geld gehen. Alternativ 
könnte man die Hardware ja auch auf winzige Platinchen setzen, die man 
direkt an die Anschlusspads der Stripes lötet.

: Bearbeitet durch User
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Thomas E. schrieb:
> Den UART mit 1MBit pro Sekunde laufen zu lassen, ist auch keine Hexerei
> - bei den kurzen Verbindungen zwischen den Pixels geht das sicher
> problemlos.
> Außerdem muss der Controller nicht auf alle drei RGB-Bytes warten, bevor
> er das erste Byte 'rausschickt. Ich würde also (ungünstig) mit 15
> Mikrosekunden Delay rechnen, macht nicht mal 8 ms für die ganze Kette!

 Ja, mit 1Mb sieht es natürlich besser aus, nur muss man trotzdem die
 benötigte Zeit zum senden dazurechnen.
 512*30us = 15.36ms bei 1Mb plus 8ms 'Delay'.
 24ms Verzögerung insgesamt zwischen RGB_0 und RGB_511.
 Ergibt 42Hz Max.

von Thomas E. (picalic)


Lesenswert?

Das stimmt natürlich - die eigentliche Übertragungszeit der Daten selbst 
ist nicht ganz unwichtig (ich war durch "61.44ms von Anfang bis Ende" 
eher auf den Zeitversatz erste->letzte LED fixiert...) ;)
Also, für Tetris reicht die Frame-Rate auf jeden Fall...

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.