Forum: Mikrocontroller und Digitale Elektronik POV Sphere mit WS2812 Stripe


von C0dR (Gast)


Lesenswert?

Hallo,

ich bin zur Zeit am bauen eines POV Globes und wollte hierzu einen 
Raspberry Pi nutzen sowie einen LED Streifen mit WS2812B LEDs.
Folgende Eckdaten zum Projekt:

LED-Streifen: 144 LEDs
Geplante Auflösung des Globes: 144x288 Pixel = 41472 Pixel gesamt
Geplante Wiederholfrequenz: 30 FPS

Nun habe ich das mal durchgerechnet (natürlich erst nach dem Bestellen 
des LED-Streifens...) und komme zu folgenden Timings:

1,25µs bei 800kbit/s
(50 + 144 * 3*8 * 1,25) µs = 4370 µs pro streifen/Zeile.
Jetzt habe ich natürlich nicht bedacht dass ich das ja noch mit der 
horizontalen Auflösung multiplizieren muss:
4370µs * 288 = 1,258s pro Frame.

Damit komme ich also niemals auf die 30 FPS (33,3 ms). Liege ich hier 
richtig und kann den LED-Streifen direkt wieder zurück schicken oder 
habe ich einen Denkfehler gemacht?

Was für einen Streifen würdet ihr mir denn empfehlen für so eine 
Anwendung bzw. gibt es überhaupt streifen mit der nötigen 
Geschwindigkeit? Schaff ich das überhaupt mit dem PWM/PCM Ausgang des PI 
oder muss ich auf etwas anderes gehen (SPI, Display Ausgang, USB?)

von Mick (Gast)


Lesenswert?

Habe deine Fragestellung nur kurz überflogen und die Berechnung nicht 
angeschaut. Eine Möglichkeit wäre, den Streifen zu teilen und dann vom 
Raspberry parallel anzusteuern.

von holger (Gast)


Lesenswert?

>Was für einen Streifen würdet ihr mir denn empfehlen für so eine
>Anwendung bzw. gibt es überhaupt streifen mit der nötigen
>Geschwindigkeit?

Einen Streifen mit APA102 (SPI).
Die PWM im WS2812 soll für POV auch nicht gut geeignet sein.
Zu langsam.

von C0dR (Gast)


Lesenswert?

holger schrieb:
>
> Einen Streifen mit APA102 (SPI).
> Die PWM im WS2812 soll für POV auch nicht gut geeignet sein.
> Zu langsam.

Ok, hab ich mir jetzt angeschaut. Allerdings müsste ich, um das ganze 
bei 30 FPS bei 288 Spalten zu betreiben, die LEDs mit ca. 30 Mhz 
ansteuern. Schaffen das die APA102 und auch der Raspberry?

von Reiner_Gast (Gast)


Lesenswert?

C0dR schrieb:
> holger schrieb:
>>
>> Einen Streifen mit APA102 (SPI).
>> Die PWM im WS2812 soll für POV auch nicht gut geeignet sein.
>> Zu langsam.
>
> Ok, hab ich mir jetzt angeschaut. Allerdings müsste ich, um das ganze
> bei 30 FPS bei 288 Spalten zu betreiben, die LEDs mit ca. 30 Mhz
> ansteuern. Schaffen das die APA102 und auch der Raspberry?

Ich plane auch gerade einen POV Globe zu bauen, allerdings mit einem 
STM32 uC und auch etwas kleiner (48 LEDs) wegen der Fliehkräfte ;-)

Bei einem Test mit einem STM32F102 liefen die APA102 LED's mit gut 18 
MHz SPI Takt. Über die Feiertage teste ich mal mit den 42MHz bei einem 
STM32F407 board.

Ich würde mir an deiner Stelle aber mehr Gedanken zu der Stromversorgung 
machen... Die muss sich ja auch mit 30Hz mitdrehen ;-)

Und bei 144 RGD LED's kannst du den max. Strombedarf mit gut 60mA pro 
WS2812 LED rechnen... Macht immerhin knapp 9A... Nicht schlecht ;-)

von Falk B. (falk)


Lesenswert?

@C0dR (Gast)

>Raspberry Pi nutzen sowie einen LED Streifen mit WS2812B LEDs.

Schlechte Idee. DIe WS2812 sind eher langsam, die Himbeere nur mit 
Krampf schnell über SPI nutzbar.

>LED-Streifen: 144 LEDs
>Geplante Auflösung des Globes: 144x288 Pixel = 41472 Pixel gesamt
>Geplante Wiederholfrequenz: 30 FPS

Das sind satte 1800 U/min.

>1,25µs bei 800kbit/s
>(50 + 144 * 3*8 * 1,25) µs = 4370 µs pro streifen/Zeile.

Ja.

>Jetzt habe ich natürlich nicht bedacht dass ich das ja noch mit der
>horizontalen Auflösung multiplizieren muss:
>4370µs * 288 = 1,258s pro Frame.

Sieht so aus ;-)

>Damit komme ich also niemals auf die 30 FPS (33,3 ms). Liege ich hier
>richtig und kann den LED-Streifen direkt wieder zurück schicken

Ja.

> oder habe ich einen Denkfehler gemacht?

Nein.

>oder muss ich auf etwas anderes gehen (SPI, Display Ausgang, USB?)

SPI ist das Mittel der Wahl.

von Falk B. (falk)


Lesenswert?

@ Reiner_Gast (Gast)

>Ich würde mir an deiner Stelle aber mehr Gedanken zu der Stromversorgung
>machen... Die muss sich ja auch mit 30Hz mitdrehen ;-)

Schleifkontakte wurden vor über 100 Jahren erfunden und können viele 
Ampere übertragen.

von Reiner_Gast (Gast)


Lesenswert?

Falk B. schrieb:
>
> Schleifkontakte wurden vor über 100 Jahren erfunden und können viele
> Ampere übertragen.

Ja, damit wollte ich das auch versuchen. Hatte erst daran gedacht, das 
ganze per Induktion zu Übertragen. Aber da bin ich mir nicht sicher, ob 
das reicht.

von Falk B. (falk)


Lesenswert?

@ Reiner_Gast (Gast)

>Ja, damit wollte ich das auch versuchen. Hatte erst daran gedacht, das
>ganze per Induktion zu Übertragen. Aber da bin ich mir nicht sicher, ob
>das reicht.

Es reicht, wenn gleich 9A schon arg viel sind. Siehe

Royer Converter.

von C0dR (Gast)


Lesenswert?

Falk B. schrieb:
> @ Reiner_Gast (Gast)
>
>>Ich würde mir an deiner Stelle aber mehr Gedanken zu der Stromversorgung
>>machen... Die muss sich ja auch mit 30Hz mitdrehen ;-)
>
> Schleifkontakte wurden vor über 100 Jahren erfunden und können viele
> Ampere übertragen.

Falk B. schrieb:
> @ Reiner_Gast (Gast)
>
>>Ja, damit wollte ich das auch versuchen. Hatte erst daran gedacht, das
>>ganze per Induktion zu Übertragen. Aber da bin ich mir nicht sicher, ob
>>das reicht.
>
> Es reicht, wenn gleich 9A schon arg viel sind. Siehe
>
> Royer Converter.


Ich wollte es erstmal mit einem Kugellager als "Schleifkontakt" 
versuchen. Wenn das nicht hinhaut sieht der Royer Converter echt sehr 
interessant aus.
Vielen Dank für die ganzen Infos und Tipps hier!

@Reiner_Gast: Mich würden deine Ergebnisse mit dem STM32F407 
interessieren, das könnte eventuell mein Ausweichplan sein falls ich aus 
dem Raspberry Pi nicht schnell genug die SPI Signale bekomme :)

von Reiner_Gast (Gast)


Lesenswert?

Falk B. schrieb:
> @ Reiner_Gast (Gast)
>
>>Ja, damit wollte ich das auch versuchen. Hatte erst daran gedacht, das
>>ganze per Induktion zu Übertragen. Aber da bin ich mir nicht sicher, ob
>>das reicht.
>
> Es reicht, wenn gleich 9A schon arg viel sind. Siehe
>
> Royer Converter.

Danke für den Link, das schaue ich mir mal an.

Bei den von mir geplanten 48 RGB LED's sinds zum Glück "nur" gut 3A...

von Reiner_Gast (Gast)


Lesenswert?

C0dR schrieb:
> @Reiner_Gast: Mich würden deine Ergebnisse mit dem STM32F407
> interessieren, das könnte eventuell mein Ausweichplan sein falls ich aus
> dem Raspberry Pi nicht schnell genug die SPI Signale bekomme :)

Ich schau mal, ob die APA102 die 42 MHz schaffen und werde dann 
berichten...

Beim PI hätte ich jetzt bedenken, ob der das richtige Timing schafft für 
die einzelnen Segmente. Wenn du bei den 288 Pixeln Breite bleibst, dann 
wären das 30x288 = 8640 Datenaktualisierungen pro Sekunde, die möglichst 
genau erfolgen müssen damit das Bild ruhig bleibt.

von Falk B. (falk)


Lesenswert?

@ Reiner_Gast (Gast)

>Beim PI hätte ich jetzt bedenken, ob der das richtige Timing schafft für
>die einzelnen Segmente. Wenn du bei den 288 Pixeln Breite bleibst, dann
>wären das 30x288 = 8640 Datenaktualisierungen pro Sekunde, die möglichst
>genau erfolgen müssen damit das Bild ruhig bleibt.

Und das bitte auch phasensynchron. Wenn gleich die Himbeere rein von der 
Hardware genug pOwer dafür hat, glaube ich nicht, daß man mit den 
üblichen Mitteln und dem darauf laufenden Linux das hinbekommt. Dazu 
müßte man das Ding pur ohne Linx porgrammieren oder wenigstens einen 
echt guten Low Lever Treiber schreiben. Beides ist ziemlich 
anspruchsvoll.

Ein AVR oder einer der aktuellen 32 Bitter OHNE Linux und ähnliches ist 
das DEUTLICH einfacher handhabbar. Braucht man wiklich 42 MHz, um die 
LEds schnell genug zu laden? Kann man einfach ausrechnen.

f_SPI = f_fps  N_columns  N_LED * Bit_per_led

macht bei 30 fps, 288 Spalten, 144x3 LEDs (RGB) * 8 Bit/LED = 29,9 MHz.

Uuups ;-)

von Reiner_Gast (Gast)


Lesenswert?

Falk B. schrieb:
> Ein AVR oder einer der aktuellen 32 Bitter OHNE Linux und ähnliches ist
> das DEUTLICH einfacher handhabbar. Braucht man wiklich 42 MHz, um die
> LEds schnell genug zu laden? Kann man einfach ausrechnen.
>
> f_SPI = f_fps  N_columns  N_LED * Bit_per_led
>
> macht bei 30 fps, 288 Spalten, 144x3 LEDs (RGB) * 8 Bit/LED = 29,9 MHz.
>
> Uuups ;-)

Naja... eigentlich kommst es noch schlimmer...

1.) Die APA102 brauchen 32 Bits pro RGB LED (die ersten 8 Bits sind für 
die allgemeine Strombegrenzung für die 3 LEDs gedacht)

2.) Es wird ein Startframe (32x 0-bit) und ein Endframe (32x 1-Bit) 
benötigt. Macht demnach rechnerisch 146 LEDs

Somit Gibt das ganze dann 30 x 288 x 146 x 32 = 40,4 MHz

Doppel-Upps ;-)

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Reiner_Gast schrieb:
> Ich plane auch gerade einen POV Globe zu bauen,
> allerdings mit einem STM32 uC

Ein STM32 mit 8-Bit parallel über DMA hat vergleichbar wenig 
RAM-Overhead im "Grafikspeicher" und holt so ziemlich alles raus, was an 
Taktrate mit APA102 bzw. WS2812 möglich ist.

Soll das Bild on the fly berechnet werden? Oder soll ein Film von einer 
SD-Karte abgespielt werden?

Eventuell wäre ein RasPi Zero vielleicht im Vorteil.
Kann der RasPi 8-Bit parallel über DMA?
Und muss man dazu eigene Linux-Treiber programmieren?

Der µC/RasPi soll doch im drehbaren Teil sein und darf weder groß noch 
schwer sein, oder?

: Bearbeitet durch User
von Reiner_Gast (Gast)


Lesenswert?

Torsten C. schrieb:
> Soll das Bild on the fly berechnet werden? Oder soll ein Film von einer
> SD-Karte abgespielt werden?

Bei meinem Vorhaben geht's um statische Darstellung bzw. on the fly...

Wie das bei dem Vorhaben von C0dR ausschaut, kann ich nicht sagen.

> Eventuell wäre ein RasPi Zero vielleicht im Vorteil.
> Kann der RasPi 8-Bit parallel über DMA?

Glaube ich nicht.
Was sollten denn 8-Bit parallel bei einem einzelnen Streifen bringen?

> Der µC/RasPi soll doch im drehbaren Teil sein und darf weder groß noch
> schwer sein, oder?

Da sich hier Fliehkräfte entwickeln die ausgewuchtet werden müssen, ist 
klein und leicht vorteilhaft...

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Reiner_Gast schrieb:
> Was sollten denn 8-Bit parallel bei einem einzelnen Streifen bringen?
Die Daisy Chain an sieben Stellen unterbrechen und dann an acht Stellen 
einspeisen, damit man auf eine höhere Drehzahl kommt und das Bild nicht 
flackert.

: Bearbeitet durch User
von Reiner_Gast (Gast)


Lesenswert?

Torsten C. schrieb:
> Reiner_Gast schrieb:
>> Was sollten denn 8-Bit parallel bei einem einzelnen Streifen bringen?
> Die Daisy Chain an sieben Stellen unterbrechen und dann an acht Stellen
> einspeisen, damit man auf eine höhere Drehzahl kommt und das Bild nicht
> flackert.

Ist aber nur was für gute Augen und ruhige Finger... bei den Stripes mit 
144 LED/m sind das bei 5 mm LED Außenmaß nur gut 2 mm Abstand bis zum 
nächsten LED-Gehäuse ;-)

von Markus M. (adrock)


Lesenswert?

...die PWM der WS2812B arbeitet nur mit um die 400Hz wimre. Diese 
scheiden also definitiv aus, sonst hättest Du bei 30fps komische Muster 
alleine schon durch die PWM.

Die APA102 verwenden wohl ZWEI PWM Frequenzen: Eine niedrige für die 
"globale" Helligkeit pro LED (582 Hz) und eine hohe für die RGB-Werte 
(19.2KHz), siehe auch hier:

https://cpldcpu.wordpress.com/2014/08/27/apa102/

Ob sie für Dein Vorhaben geeignet sind hängt also auch davon ab, ob die 
582Hz PWM zu einem konstanten "ein" wird wenn man auf max. Helligkeit 
geht. Andernfalls hättest Du dann ebenfalls mit Artefakten zu rechnen.

von Falk B. (falk)


Lesenswert?

Naja, das Vorhaben ist in Summe mehr als ambitioniert. Bei 30 fps und 
288 Spalten macht das 8640 Hz Spaltenfrequenz. Man müßte also eine PWM 
mit 8,6 kHz laufen lassen und das synchron zur Drehung. Machbar, aber 
anspruchsvoll. Die guten, alten TLC5940 & Co lassen sich mit bis zu 30 
MHz takten, dort hat man eine Chance. Trotzdem würde ich empfehlen, das 
Alles erst mal ne Nummer kleiner zu bauen, vielleicht mit 1/4 der LEDs.

von Reiner_Gast (Gast)


Lesenswert?

Falk B. schrieb:
> Naja, das Vorhaben ist in Summe mehr als ambitioniert. Bei 30 fps
> und
> 288 Spalten macht das 8640 Hz Spaltenfrequenz. Man müßte also eine PWM
> mit 8,6 kHz laufen lassen und das synchron zur Drehung. Machbar, aber
> anspruchsvoll. Die guten, alten TLC5940 & Co lassen sich mit bis zu 30
> MHz takten, dort hat man eine Chance. Trotzdem würde ich empfehlen, das
> Alles erst mal ne Nummer kleiner zu bauen, vielleicht mit 1/4 der LEDs.

Wie gesagt... eben deswegen plane ich meines ja auch "nur" mit 48 LEDs 
und gut 120 Pixel Breite

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Und dann?
Nur 0x00 und 0xFF senden, damit es keine Interferenzmuster mit dem PWM 
gibt?

.oO( Welch ein Hinweis von adrock,
     da hätte ich auch schon mal dran denken können.)

von Andreas M. (andiator)


Lesenswert?

C0dR schrieb:
> Ich wollte es erstmal mit einem Kugellager als "Schleifkontakt"
> versuchen. Wenn das nicht hinhaut sieht der Royer Converter echt sehr
> interessant aus.
> Vielen Dank für die ganzen Infos und Tipps hier!

Die eignen sich leider nicht für sowas. Man hat keinen permanenten 
Kontakt, da doch etwas Luft inkl. Schmiere dazwischen.
Außerdem kann es bei größeren Strömen zu Funken kommen, die mit der Zeit 
den Kugellager beschädigen.
Obs für die ersten Tests reicht, kann ich aber nicht sagen :)

MfG,
Andreas

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Für Schleifer hatte ich mir mal Ersatzteil-Kohlebürsten für 
Modellbau-Motoren besorgt. Ich weiß nicht, wie lange eine Kupferschicht 
auf einem PCB hält. Vielleicht könnte man die Schleifringe gleich auf 
das Platinen-Layout ätzen.

Ich hatte damals Märklin-Ersatzteile genommen. Irre teuer.
Vielleicht gibt es bei HobbyKing oder so auch billigere.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Die eigentliche "Ausschüttung" der Pixeldaten würde ich per Arduino oder 
Teensy machen, da ist man "näher dran" an der Hardware. Empfang der 
Daten z.B. per WLAN (UDP), Stromversorgung über Schleifringe oder 
Kugellager.

Um die erforderliche Drehzahl zu reduzieren: mehrere Streifen, z.B. 4 
oder 6 von Pol zu Pol nehmen.

Um die zu transferierende Datenmenge zu reduzieren (allerdings dann 
nicht mit Arduino wegen zu wenig Speicher), einen internen Bildpuffer 
über mehrere Umdrehungen ausgeben ... reduziert zwar die Frame-Rate, 
macht das Bild aber flackerfrei(er).


Schleifring 230V 10A vom Chinamann für ca. 20,-

https://i.ebayimg.com/images/g/gqIAAOSw9GhYiYTb/s-l1600.jpg

: Bearbeitet durch User
von C0dR (Gast)


Lesenswert?

Torsten C. schrieb:
> Reiner_Gast schrieb:
>> Ich plane auch gerade einen POV Globe zu bauen,
>> allerdings mit einem STM32 uC
>
> Ein STM32 mit 8-Bit parallel über DMA hat vergleichbar wenig
> RAM-Overhead im "Grafikspeicher" und holt so ziemlich alles raus, was an
> Taktrate mit APA102 bzw. WS2812 möglich ist.
>
> Soll das Bild on the fly berechnet werden? Oder soll ein Film von einer
> SD-Karte abgespielt werden?
>
> Eventuell wäre ein RasPi Zero vielleicht im Vorteil.
> Kann der RasPi 8-Bit parallel über DMA?
> Und muss man dazu eigene Linux-Treiber programmieren?
>
> Der µC/RasPi soll doch im drehbaren Teil sein und darf weder groß noch
> schwer sein, oder?

Also mein Plan war, dass die einzelnen Frames von einer PC Software 
(Selbstgeschrieben) aus einem Video vorbereitet werden und die fertigen 
Pixeldaten über LAN an den Raspberry übertragen werden, dieser buffert 
sich dieses und zeigt es dann auf dem Globe an. 40 Mhz ist deutlich mehr 
als ich gedacht hab, eventuell sollte ich wirklich 2 Streifen nehmen und 
die FPS halbieren.
Bisher hab ich auf dem PI einen Realtime Kernel drauf, laut Datenblatt 
kann dieser SPI bis 125 Mhz. Ich hatte gehofft damit bekomme ich das 
hin. Würde denn der STM32 hier mehr Sinn machen?

von Rolf M. (rmagnus)


Lesenswert?

C0dR schrieb:
> Bisher hab ich auf dem PI einen Realtime Kernel drauf, laut Datenblatt
> kann dieser SPI bis 125 Mhz.

Es geht ja nicht nur um die reine Transferrate. Du musst auch das Timing 
präzise hinbekommen.

von Reiner_Gast (Gast)


Lesenswert?

> C0dR schrieb:
>> @Reiner_Gast: Mich würden deine Ergebnisse mit dem STM32F407
>> interessieren, das könnte eventuell mein Ausweichplan sein falls ich aus
>> dem Raspberry Pi nicht schnell genug die SPI Signale bekomme :)
>
> Ich schau mal, ob die APA102 die 42 MHz schaffen und werde dann
> berichten...
>

@C0dR:

Kurzes Update hierzu...
mit 22,4MHz SPI Takt erfolgt die APA102 Ausgabe noch fehlerfrei...
ab 24MHz SPI Takt fangen die Fehler an...

von C0dR (Gast)


Lesenswert?

Reiner_Gast schrieb:
>> C0dR schrieb:
>>> @Reiner_Gast: Mich würden deine Ergebnisse mit dem STM32F407
>>> interessieren, das könnte eventuell mein Ausweichplan sein falls ich aus
>>> dem Raspberry Pi nicht schnell genug die SPI Signale bekomme :)
>>
>> Ich schau mal, ob die APA102 die 42 MHz schaffen und werde dann
>> berichten...
>>
>
> @C0dR:
>
> Kurzes Update hierzu...
> mit 22,4MHz SPI Takt erfolgt die APA102 Ausgabe noch fehlerfrei...
> ab 24MHz SPI Takt fangen die Fehler an...

Ach mist, das ist echt schade...heißt ich muss dann wohl auf halbe 
Umdrehungszahl/Framerate gehen und zwei Streifen nutzen...

von Josef T. (t_joe)


Lesenswert?

Hatte auch mal überlegt, dass ich mir einen solchen Globe baue, fand 
aber leider nie die Zeit dafür!
Aber hier ein Gedanke, den ich damals hatte. Wenn du mit den FPS etwas 
runter gehst und dafür aber 2 LED Streifen gegenüberliegend machst (der 
eine Zeigt Spalte 1,3,5,..usw an und der andere Spalte 2,4,6,..usw) dann 
könnte man etwas Rechenleistung einsparren ohne gravierenden 
Qualitätsverlust des Bildes! Es kam aber nie soweit, dass ich das mal 
ausprobieren konnte, also auch keine Garantie darauf, dass es wirklich 
so ist!

Gruß
Josef

von C0dR (Gast)


Lesenswert?

Josef T. schrieb:
> Hatte auch mal überlegt, dass ich mir einen solchen Globe baue,
> fand
> aber leider nie die Zeit dafür!
> Aber hier ein Gedanke, den ich damals hatte. Wenn du mit den FPS etwas
> runter gehst und dafür aber 2 LED Streifen gegenüberliegend machst (der
> eine Zeigt Spalte 1,3,5,..usw an und der andere Spalte 2,4,6,..usw) dann
> könnte man etwas Rechenleistung einsparren ohne gravierenden
> Qualitätsverlust des Bildes! Es kam aber nie soweit, dass ich das mal
> ausprobieren konnte, also auch keine Garantie darauf, dass es wirklich
> so ist!
>
> Gruß
> Josef

Ja das ist dass was ich meinte mit halber Framerate und zwei streifen.

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.