Hallo,
ich bin zur Zeit am bauen eines POV Globes und wollte hierzu einen
Raspberry Pi nutzen sowie einen LED Streifen mit WS2812BLEDs.
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?)
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.
>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.
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?
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
WS2812LED rechnen... Macht immerhin knapp 9A... Nicht schlecht ;-)
@C0dR (Gast)
>Raspberry Pi nutzen sowie einen LED Streifen mit WS2812BLEDs.
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.
@ 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:>> 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.
@ 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.
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 :)
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...
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.
@ 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 ;-)
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 ;-)
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?
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...
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.
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 ;-)
...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.
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.
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
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.)
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
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.
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
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?
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.
> 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...
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...
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
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.