Ich baue gerade eine (räumlich) etwas grössere LED Installation basierend auf dem ATMega328, 4 Boards mit je 3 TLC5940NT und insgesamt 50 RGB Leds auf. Ein einzelnes TLC Board mit 3x TLC5940 steuert jeweils 15 RGB Leds an. Bedingt durch den Aufbau haben die TLC Boards einen recht grossen Abstand von 110 cm zueinander, d.h. ich habe insgesamt 380 cm Kabellänge vom Arduino zum letzten Board (3x110cm+50 cm). Da ich mir keine wirklichen Gedanken über den SPI Bus und die Länge gemacht habe, bekomme ich nun die Rechnung in Form von deutlichem Ringing im Signal. Angehängt sind zwei Beispiele der GSCLK mit 4 MHz, einmal vom Arduino zum Ende eines 20 cm Flachbandkabels , einmal mit 110 cm. Bei der Suche im Forum habe ich einen hilfreichen Beitrag unter Beitrag "SPI Reichweite" gefunden. D.h. ich würde als nächstes hinter dem ATMega Ausgängen Widerstände für die Impedanzanpassung einbauen (und den Wert empirisch über ein Poti und Scope rausfinden). Frage, die Werte für den RC Snubber sind mir nicht klar, wie kann man die ermitteln? Zweite Frage, habe ich mit der Buslänge überhaupt eine Chance, das passiv in den Griff zu bekommen? Oder alternativ Leitungstreiber bei jedem Board verwenden? (74...?) Für Falk: [X] Ja, ich bin mir mittlerweile darüber bewusst, das SPI nicht für solche Kabellängen gedacht ist :)
So, mit 72 Ohm bekomme ich schon 160 cm hin (TLC Board mit 3 TLC5940) nach 110 cm, dann noch ein 60 cm FB). Der RC Snubber mit 480 Ohm und 0,1uF auf Masse legt mir allerdings das Signal auf Null, den habe ich, bis ich die Berechnung herausgefunden habe, erstmal rausgenommen. Die Peaks vom Ringing sind weg, allerdings nähert sich das 4 Mhz GSCLK Rechteck jetzt einem Sinus, lässt sich das vermeiden?
>Die Peaks vom Ringing sind weg, allerdings nähert sich das 4 Mhz GSCLK >Rechteck jetzt einem Sinus, lässt sich das vermeiden? Geh von 4MHz auf 100kHz runter.
Müsste ich mal ausprobieren, ich befürchte daß ich dann die Datenrate für die Updates der 150 Leds nicht mehr hinbekomme.
>Müsste ich mal ausprobieren, ich befürchte daß ich dann die Datenrate >für die Updates der 150 Leds nicht mehr hinbekomme. Dann mach doch das Kabel kürzer. Oder überdenke dein Konzept. Das SPI für lange Leitungen nicht taugt hast du ja schon erkannt.
Flachbandkabel ist irgendwie nicht so richtig geeigenet. Probier doch mal Antennenkabel o.ä. mit richtiger Anpassung.
@ Marcus Overhagen (marcus6100) >Flachbandkabel ist irgendwie nicht so richtig geeigenet. Falsch, das geht wunderbar bis mehrere Meter. Man muss "nur" wissen was man tut. > Probier doch mal Antennenkabel o.ä. mit richtiger Anpassung. Klar, am besten noch RG213!!!
Hallo A. L. eine Serienterminierung am Sender geht nur wenn du genau einen Empfänger am Leitungsende hast. Ansonsten ergeben sich bei den Empfängern die in Kabelmitte angeordnet sind leider unschöne Treppenspannungen die normalerweise genau an der Schaltschwelle liegen. -> Du brauchst dann mindestens Schmitt Trigger-Eingänge für die Empfänger in der Mitte. Ich würde wie folgt vorgehen. Keine Serienterminierung am Sender. RC-Terminierung (Snubber) am Leitungsende. Dimensionierung wie folgt: R ca 10-20% oberhalb vom Wellenwiderstand der Leitung. Ziel ist eine Steile Flanke zu erhalten. Es ergeben sich geringe Überschwinger die halt unterhalb der Schwellspannungen der Eingangsschutzdioden liegen müssen. also R rund 120-150 Ohm je nach Wellenwiderstand des Flachbandkabels (Ich gehe davon aus daß Signal-und Masseleitung auf benachbarten Leitungen im Flachbandkabel geführt sind ansonsten wird es nichts mit dem Wellenwiderstand). R*C = ca 2*Leitungslaufzeit. bei 3,3m schätze ich mal so 16,5ns als einfache Leitungslaufzeit. also C mit ca 33ns/150 Ohm = ca 220pF 100nF sind bei weitem zu viel und bügelt das Signal unnötig weg.
mal ne andere Frage: hängen die TLCs ohne Buffer an der Leitung oder gibt es Schmitt-Trigger-Buffer bei den Empfängern. (Große Kapazitive Lasten am Kabel stören die Übertragung ebenfalls).
Anja, danke für Deine ausführliche Antwort zum RC Snubber. Ich hab das Posting leider erst jetzt gelesen, und vorher die uC Platine schon mit Serienterminierung ausgestattet, das probiere ich jetzt erstmal aus und schau mir das mit dem Scope an. RC Snubber kommt als nächstes dran. Die TLCs haben keinen Buffer, die Eingänge hängen direkt über das FB (momentan über Serienterminierung) am AVR uC. Als nächstes lese ich mir Falks Links zum Wellenwiderstand durch, spannend. Danke nochmal an alle, dank der Inputs komme ich sehr gut voran :)
p.s. Holger, Kabel kürzen wird ein Problem, siehe Anhang, 4 Meter x 2 Meter sind Vorgabe :)
Hallo A. L. habe das ganze mal mit LT-Spice (näherungsweise) simuliert. Beim Arduino gehe ich mal davon aus daß es ein Mega328 ist und du Ihn mit 3,3V betreibst (siehe Dein Oszibild). Laut Datenblatt ergibt sich dann ein "Treiberinnenwiderstand" von ca 30 Ohm. Die 3 Empfänger/Leiterplatte habe ich (mit Verdrahtung) als 15pF angenommen. (sitzen sicher nicht alle direkt am Stecker). Die Flachbandleitung habe ich mit 120 Ohm und Verkürzungsfaktor 0.7 angenommen. Das Ergebnis ist in tline_15p.PNG. In Treibernähe werden im ersten Schritt nur im Mittel 2,3V (/3V) erreicht. (mit Über- und Unterschwingern bis 2V herunter). Ursache ist der hohe Treiberinnenwiderstand des ATMEGA im Verhältnis zum Wellenwiderstand. (Die Empfängerkapazitäten drücken den effektiven Wellenwiderstand. ) Die TLCs brauchen zum sicheren schalten 20 bzw. 80% der Versorgung. Dies wird eigentlich nur am Leitungsende erreicht. Bei Verwendung eines Empfänger-Buffers mit 3pF direkt am Stecker (tline_3p.PNG) ergibt sich ein etwas besseres Bild. Wenn der Buffer dann noch Schaltschwellen von 30 bzw. 70% der Versorgung hat, könnte es gerade so funktionieren. Alternativen wären: a) Verwendung eines niederohmigeren Treibers am Arduino-Board. b) Aufsplitten der Leitungen in Leitungsstücke die jeweils eigene Treiber haben (also Signalauffrischung auf den TLC-Boards). In diesem Fall könnte man mit einfacher Serienterminierung arbeiten.
noch eine Alternative c) mittels RC-Tiefpaß am Sender die Flankensteilheit auf mehr als 40ns vergrößern. (Eventuell geht auch die Verwendung eines CD4050 Treibers). Allerdings sollte dann am Empfänger auf jeden Fall ein Schmitt Trigger sitzen. Die Datenleitung muß bei 4MHz = 125ns Setup-Time natürlich über dieselbe Zeit verzögert werden.
@ Anja (Gast) >c) mittels RC-Tiefpaß am Sender die Flankensteilheit auf mehr als 40ns >vergrößern. Würde ich lassen. Wenn man sich an die grundlegenden Hinweise im Artikel Wellenwiderstand hält, kriegt man das auch so hin. >Die Datenleitung muß bei 4MHz = 125ns Setup-Time natürlich über dieselbe >Zeit verzögert werden. Spätestens hier beginnt der Baselmurks. MFG Falk
Hallo Falk, >Würde ich lassen. Wenn man sich an die grundlegenden Hinweise im Artikel >Wellenwiderstand hält, kriegt man das auch so hin. Dort wird immer nur der "Spezialfall" Leitungsende behandelt, nicht aber eine Multi-Drop-Leitung. Mit dem vorhandenen "Treiber" (ATMega328) kriegt man eine Multi-Drop-Leitung eben nicht "so einfach hin".
Ich würde mal - probeweise - den Leitungsabschluss komplett weglassen und stattdessen Schottky-Klemmdioden gegen VCC und GND testen.
Gibt leider für die Treibernahen Empfänger keinen Vorteil ....
Anja, vielen Dank für die Simulation mit Spice. Den Spannungsabfall konnte ich gestern an der Installation mit zwei TLC Boards bestätigen. Ich tendiere zu Deinem Vorschlag b), SOUT wird eh von jedem der TLC5940 neu generiert, dann muss ich nur SCLK, GSCLK, XLAT und BLANK mit einem Treiber pro TLC Board Ausgang versehen. D.h. alle 120 cm gibt es eine Signalauffrischung mit Serienterminierung. Frage, was nimmt man da als Treiber? Eine schnelle Suche in der 74er Familie zeigt mir den SN74HCT244 (Octal Buffer and Line Driver), ist das der richtige Ansatz? Danke, Adrian
>Frage, was nimmt man da als Treiber? Eine schnelle Suche in der 74er >Familie zeigt mir den SN74HCT244 (Octal Buffer and Line Driver), ist das >der richtige Ansatz? Ja, ist als Treiber bei Serienterminierung verwendbar. Als Empfänger würde ich den allerdings wegen der unsymmetrischen Empfangs-Pegel nicht verwenden. (dann lieber einen 74HC244 statt einem HCT). Die Treibereigenschaften findest Du z.B. hier: Ein Bustreiber 74HC240 (gilt auch für den HC244) hat etwa 22 Ohm Treiberinnenwiderstand. Siehe Diagramm Seite 19. http://focus.ti.com/lit/an/sdya010/sdya010.pdf
Danke, guter Hinweis, bis zum Eingangspegel hatte ich das Datenblatt nicht gelesen. Ich hab hier auch noch ein paar SN74LV125A, die ich noch nicht verbaut habe, laut Datenblatt sehen die aber recht universell aus (und schön schnell). Melde mich nach den ersten Tests.
Kleiner Update, ich hab letzte Woche zwei TLC Boards mit je einem 74HC244 (Anja, danke für den Hinweis mit dem HC statt HCT) als Eingangsstufe versehen, das Signal sah aber noch nicht so optimal aus. Die Spitzen sind dank Serienterminierung raus, aber das Rechteck ist noch recht weichgekocht. Der Durchlauf war allerdings nicht ganz fair, da ich noch das verlegte FB ohne zusätzliche Masse zwischen jedem Signalleiter verwende, und auf eine Ausgangsstufe verzichtet habe. Auf die Empfehlung eines Freundes hab ich dann als Versuch neue Eingangsstufen mit dem 74LS541 (Schmitt Trigger) aufgebaut, damit schaut das Signal sehr brauchbar aus, dafür bekomme ich die Peaks jetzt nicht mehr mit der Serienterminierung weg. Ich schaue mir die Impedanz und Terminierung noch mal in Ruhe an und berichte nach dem nächsten Durchlauf.
Hallo, wäre interessiert was letztendlich geholfen hat. Habe einen sehr ähnlichen Aufbau - und wohl das gleiche Problem: Arduino -> Board mit 3x TLC5940 -> 60cm Kabel -> 3x TLC -> 60cm Kabel ... Ein Board läuft prächtig ( http://robelix.com/blinken/ ) Bei 2 Boards - einzelne Pixelfehler, ab dem Dritten kommt wenig bis gar nichts mehr an.
Hallo Roland, aus dem Gedächtnis, der letzte Stand sieht so aus [3xTLC5940]->FB Kabel mit Masse auf jeder zweiten Leitung -> [74HC541][3xTLC59409]... Dazu habe ich vor dem 74HC541 Octal Buffer/Schmitt Trigger Eingang eine Terminierung mit Kondensator->Widerstand von Masse an der jeweiligen Signalleitung (Daten/Clock), Werte muss ich mal nachsehen. Damit läuft es wie gewünscht. Viel Erfolg, Adrian
Hallo, die Dimensionierung ist Abhängig vom verwendeten Kabel (Wellenwiderstand) und von der Leitungslänge. Siehe auch meine Antwort vom 23.01.2010 12:27 Gruß Anja
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.