Problem mit SPI > 12 MHz - Hilft Terminierung?

Moin,

habe gerade ein interessantes Problem: Ich habe hier ein paar hundert APA102s, welche ich via SPI ansteuere. Bis 12 MHz Clocktakt geht das sehr gut.

Alles, was schneller ist, führt zu Geflacker am Ende des Strips. Dieses Geflacker hat teilweise Ähnlichkeit mit anderen Stripinhalten.

Bei 24 MHz funktionieren nur die ersten paar Dutzend LEDs korrekt, zum Ende hin wird es immer chaotischer.

Habe ich hier ein Problem mit Signalreflexionen? Hilft da eine Terminierung?

Wie würdet ihr das Problem lösen?

Gruß,

Helmuth

TwinkleFOX mit 300 APA102 Lichtpunkten, SOFTWARE_SPI und SPI_HZ 96 funktioniert ohne erkennbare Probleme. Das Programm sieht gut aus, ist aber zum Testen eher ungeeignet.

Wenn Du mir ein Testprogramm, das nicht mehr als 4 A verbraucht, gibst, kann ich das gerne bei mir einspielen.

Wird der Takt parallel wie die Versorgungsspannung an alle IC angelegt oder von IC zu IC weitergereicht? Im ersteren Fall könnte Terminierung ein Thema sein, sonst eher nicht, da nur das letzte IC "in der Luft hängt".

Hier ein Lauflicht zum Testen, Stromverbrauch 20 mA:

#include "FastLED.h"

#define NUM_LEDS 300

CRGB leds[NUM_LEDS];

void setup() {
  FastLED.addLeds<APA102, 7, 14, BGR, DATA_RATE_MHZ(12)>(leds, NUM_LEDS);
}

void loop() {

  for (int i = 0; i < NUM_LEDS; i++) {
    leds[i] = 0xFF0000;
    FastLED.show();
    leds[i] = 0;
  }
}

Da sollte ein roter Punkt vom Anfang zum Ende laufen. Bis wieviel MHz läuft das bei Dir? (Bitte HW SPI Pins verwenden)

Das Signal wird nur an den ersten APA gegeben. Versorgungsspannung alle 144 Leds - da sehe ich bei einem einzigen Punkt kein Problem. Wie gesagt, bis 12 MHz funktioniert alles fein, wenn schneller, steigen die letzten Leds aus.

Gruß, H.

Helmuth:
Da sollte ein roter Punkt vom Anfang zum Ende laufen. Bis wieviel MHz läuft das bei Dir?

Bei DATA_RATE_MHZ(12) ist Schluß, bei 14 in den ersten 2/3 Geflimmer, also von ersten Lichtpunkt an, dann statisch leuchtende LEDs, die letzten sind aus.

So sieht es bei mir auch aus - mit dem Unterschied, dass der erste Bereich läuft und das Geflimmer nur zum Ende hin auftritt. Je höher die Geschwindigkeit, umso früher (näher am Anfang) beginnt das Geflacker.

Und was machen wir jetzt?

Gruß,

Helmuth

Helmuth:
Und was machen wir jetzt?

Für mich kann ich das beantworten: Chinesische Ente essen, Espresso trinken, nachdenken :slight_smile:

Haben die einzelnen APA's, oder zumindest Gruppen davon Pufferkondensatoren? Sonst könnte ich mir vorstellen, das die Betriebsspannung einbricht und damit Fehlinterpretationen auftreten. Das spricht auch für das Fehlerbild, das irgendwann nach hintenraus Geflacker auftritt. Kann man den Dingern nachträglich noch 100nF KerKos p. Stück und dann nochmal in Zehner- oder Zwanzigerabständen einen Elko spendieren? 1000µ 6,3V sind ja recht klein. Oder mehrfach einspeisen. Denn auch wenn nur eine LED leuchtet, aber beim Schalten ziehen alle IC's auf einmal für ein paar ns durchaus bis zu 100 mA p. IC!!!

Haben die einzelnen APA's, oder zumindest Gruppen davon Pufferkondensatoren? Sonst könnte ich mir vorstellen, das die Betriebsspannung einbricht und damit Fehlinterpretationen auftreten. Das spricht auch für das Fehlerbild, das irgendwann nach hintenraus Geflacker auftritt.

Die Betriebsspannung zwischen den Einspeispunkten ist nirgends kleiner, als 4,8 V. Das Labonetzteil liefert 60 A (und hat fette Elkos drin) und ich benutze davon maximal 2 A.

Ich speise wie gesagt an mehreren Punkten ein, auch direkt am Ende.

Mit <= 12MHz funktioniert alles bestens, auch bei mehr Strombedarf. Die Betriebsspannung sieht auf dem Oszi sauber aus, auch entlang des Strips sind keine Zacken (Einbrüche) erkennbar.

Die APAs haben keine Kondensatoren.

Jede Elektronik ist durch eine maximale Geschwindigkeit begrenzt, hast Du ein Datenblatt von den verwendeten ICs?

Kein aussagekräftiges. Und widersprüchliche. In manchen steht max. 12 MHz, in anderen bis 24.

Fakt ist, dass diese APAs, die ich momentan hier habe, bei 24 MHz noch funktionieren - aber eben nur die ersten ca. 30. Ich hatte auch schon welche, die bei 24 MHz überhaupt nicht mehr reagiert haben - damit hatte ich meinen Frieden.

Aber wenn es schon geht - warum dann nur am Anfang des Strips?

Die ganze Geschichte mit Wellenwiderstand und Reflexionen kann ich mir vorstellen, wenn ich zwischen µC und Leds ein zu langes Kabel hätte.

Aber warum tritt das Problem mitten im Strip auf, wo ein neu generiertes Signal anliegt mit einer Leitungslänge von max. 3 mm zur Quelle?

Ich würde das gern verstehen.

Gruß,

Helmuth

Also ich finde da nur:

Send data at speeds of 800Kbps or 1200Kbps

Und das sind gerade mal garantierte 1,2MHz

Und wenn schon ein Oszi da ist, dann schau dir doch auch die Signale mal an, nicht nur die Versorgung.

Mangels Material, kann ich das nicht tun.
Aber bei vergleichbaren Konstruktionen hatte ich schon mal das Problem, dass die Signale auf dem Chip unterschiedliche Laufzeiten hatten.

Und in der Menge summiert sich das auf.
Irgendwann läuft dann der Bezug zwischen Clock und Data aus dem Ruder.

Die 800 bis 1200 beziehen sich soweit bekannt nur auf die PWM selber, nicht aber auf den Dateneingang.

Habe mal das Ende vom Strip gemessen. Data ist sehr stark rundgeschliffen, Clock schwingt stark+hochfrequent, wenn high.

Im FastLED Forum wurde darauf hingewiesen, dass nur Data refreshed wird und Clock durchgeschleift ist.

Das macht mir das Verhalten verständlicher. Werde morgen mal mit "source termination" experimentieren.

Danke und Gruß,

Helmuth

Dann vielleicht jeden Meter(oder so) die Daten auffrischen, z.B. mit einem nicht invertierendem Schmitttrigger

Nachtrag: Paul Stoffregen hat das mal getestet und empfiehlt, einen geigneten Buffer/Level Shifter zu verwenden.

I recently tested several different chips. The SN74AHCT1G08 (and similar) work the best.

Da laufen 144 Leds mit 24 MHz sauber, bei ca. 180 - 190 Leds ist aber auch Schluss. Spätestens da müssen die Daten wohl aufgefrischt werden.

Er will einen Adapter (ähnlich dem Octoboard) verkaufen, wo diese Chips drauf sind. Hier das erste Video davon.

Für die Signalauffrischung gab es auch schon eine gute Idee - eine 2 lagige kleine Platine, wo man das Ende vom Strip unten und den Anfang vom nächten oben drauflöten kann, um den engen Led Abstand konstant zu halten. Da man ohnehin gelegentlich Betriebsspannung einspeisen muss, kann man das gleich kombinieren.

Grüße,

Helmuth