Forum: Mikrocontroller und Digitale Elektronik SPI Parallelterminierung


von Kai F. (kai-) Benutzerseite


Lesenswert?

Hallo,
Ich habe mir den Artikel zum Wellenwiderstand jetzt schon mehrmals 
durchgelesen und komme trotzdem nicht zu einer befriedigenden Lösung.
Ich habe hier insgesamt 25 Meter leuchtende Platinen vor mir (LED 
Treiber ist der TLC5922), die über SPI daisy-chained angesteuert werden 
sollen. Da es wohl unmöglich ist alle 25 Meter mit einem SPI Signal zu 
versorgen, wollte ich alle paar Meter einen neuen neuen AVR einsetzen. 
Ich habe insgesamt 5 Datenleitungen (SIN, SCLK, CS, BLANK, MODE) die ich 
wohl alle terminieren muss. Da alle 50cm das Signal aufgegriffen wird, 
kommt entweder eine Parallel oder eine AC Terminierung in Frage.
Mein großes Problem ist, dass ich zwar ein Signal ganz gut parallel 
terminiert bekomme, ein zweites aber nicht mehr so einfach funktioniert, 
da sie sich dann gegenseitig beeinflussen.
Testweise habe ich hier 6 Meter liegen, die ich unter bestimmten 
Umständen auch alle zum Leuchten bewegen kann, allerdings sehen die 
Signale alles andere als schön aus. Als zusätzliches Problem sehe ich, 
dass mein Multimeter ca 15 Ohm für eine Datenleitung anzeigt, was bei 
einem Terminierungswiderstand von 170 Ohm einen hübschen Spannungsteiler 
ergibt.
Meine Frage wäre wie ich die Datenleitungen am geschicktesten 
terminiere, wäre es vielleicht sinnvoll die SCLK Leitung anders 
(parallel?) zu terminieren als CS, BLANK und MODE (AC Terminierung?), da 
letztere nur sehr selten ihr Potential wechseln?

Vielen Dank im Vorraus

Kai

von Falk B. (falk)


Lesenswert?

@  Kai Franke (kai-) Benutzerseite

>Ich habe mir den Artikel zum Wellenwiderstand jetzt schon mehrmals
>durchgelesen und komme trotzdem nicht zu einer befriedigenden Lösung.

Hmmm.

>Ich habe hier insgesamt 25 Meter leuchtende Platinen vor mir (LED

WOW! Wenn die Platinen leuchten, dann muss da ja EINIGES an Strom drüber 
gehen. ;-) SCNR

>Treiber ist der TLC5922), die über SPI daisy-chained angesteuert werden
>sollen. Da es wohl unmöglich ist alle 25 Meter mit einem SPI Signal zu
>versorgen, wollte ich alle paar Meter einen neuen neuen AVR einsetzen.

Wozu? Ein einfaches Logikgatter kann genauso als einfacher Repeater 
arbeiten.

>Ich habe insgesamt 5 Datenleitungen (SIN, SCLK, CS, BLANK, MODE) die ich
>wohl alle terminieren muss. Da alle 50cm das Signal aufgegriffen wird,

Nöö. Blank und Mode sind vollkommen unkritisch, SIN und CS eigentlich 
auch. Bleibt einzig und allein SCK.

>kommt entweder eine Parallel oder eine AC Terminierung in Frage.
>Mein großes Problem ist, dass ich zwar ein Signal ganz gut parallel
>terminiert bekomme, ein zweites aber nicht mehr so einfach funktioniert,
<da sie sich dann gegenseitig beeinflussen.

???

>Testweise habe ich hier 6 Meter liegen, die ich unter bestimmten
>Umständen auch alle zum Leuchten bewegen kann, allerdings sehen die
>Signale alles andere als schön aus. Als zusätzliches Problem sehe ich,
>dass mein Multimeter ca 15 Ohm für eine Datenleitung anzeigt, was bei
>einem Terminierungswiderstand von 170 Ohm einen hübschen Spannungsteiler
>ergibt.

Und? d.h. deine Spannung an Ende des Kabels ist um 15/(15+170)= 8,1% 
kleiner. So what.

>Meine Frage wäre wie ich die Datenleitungen am geschicktesten
>terminiere, wäre es vielleicht sinnvoll die SCLK Leitung anders
>(parallel?) zu terminieren als CS, BLANK und MODE (AC Terminierung?), da
>letztere nur sehr selten ihr Potential wechseln?

Parallelterminierung ist sehr stromhungrig bei 3,3V CMOS. Keine gute 
Idee. Bestenfalls Thevenin-Terminierung, das ist es einigermassen 
erträglich. Vorsicht, dann wird ein Kondensator für die 
Versorgungsspannung nahe der Terminierung benötigt (fehlt im Artikel).

MFG
Falk

von Kai F. (kai-) Benutzerseite


Angehängte Dateien:

Lesenswert?

>> WOW! Wenn die Platinen leuchten, dann muss da ja EINIGES an Strom drüber
>> gehen.

Genau hier sehe ich ein weiteres Problem. Dadurch, dass so viel Strom 
drüber fließt hebt sich die Masse an, was besonders bei den letzten 
Leisten deutlich wird. Ich habe die Leiterbahnen zwar so breit wie nur 
möglich layoutet, allerdings ist der Spannungsabfall nach 5 Meter 
deutlich über einem Volt.
Ich denke einfach mal, dass recht viele Sachen zusammen kommen wieso es 
nicht wirklich sauber funktioniert.
Ob man CS terminieren muss weiß ich nicht genau, ich habe mal eine 
Messung angehängt, schön sieht er nicht aus.
SIN sehe ich auch als unkritisch, da dieses Signal jede 50cm neu erzeugt 
wird.
Ich werde mich im Laufe der Woche mal mit jemanden mit Oszi 
zusammensetzen und verschiedene Terminierungen ausprobieren, die 
Thevenin hatte ich noch nicht versucht.

Der Grund mehrere AVRs einzusetzen kam daher, dass die Übertragung 
momentan (6 Meter) schon recht lange dauert, bei 25 Metern wird mir der 
AVR dann wohl in die Knie gehen, ich werde aber mal schauen wo ich den 
Code noch optimieren kann, dass ich vielleicht auch mit einem AVR und 
Bus Treibern auskomme

von Benedikt K. (benedikt)


Lesenswert?

Wenn die Spannungsversorgung auch über die langen Kabel läuft, dann 
würde ich eine höhere Spannung verwenden (z.B. 24V) und auf jeder 
Platine mittels Stepdown auf die 5V runterwandeln. Damit sollte der 
Strom weitaus erträglicher sein.

von Falk B. (falk)


Lesenswert?

@ Kai Franke (kai-) Benutzerseite

>Genau hier sehe ich ein weiteres Problem. Dadurch, dass so viel Strom
>drüber fließt hebt sich die Masse an, was besonders bei den letzten
>Leisten deutlich wird. Ich habe die Leiterbahnen zwar so breit wie nur
>möglich layoutet, allerdings ist der Spannungsabfall nach 5 Meter
>deutlich über einem Volt.

Herr Ohm kann das ausrechnen.

>Ich denke einfach mal, dass recht viele Sachen zusammen kommen wieso es
>nicht wirklich sauber funktioniert.

Jo.

>Ob man CS terminieren muss weiß ich nicht genau, ich habe mal eine
>Messung angehängt, schön sieht er nicht aus.

Naja, ist halt ein fetter Überschwinger, der aber nach ~ 400ns wieder 
abgeklungen ist.

>Der Grund mehrere AVRs einzusetzen kam daher, dass die Übertragung
>momentan (6 Meter) schon recht lange dauert, bei 25 Metern wird mir der
>AVR dann wohl in die Knie gehen, ich werde aber mal schauen wo ich den

???
Rechung?

MFG
Falk

von Kai F. (kai-) Benutzerseite


Lesenswert?

ich habe zwei verschiedene Versorgungsspannungen:
5V für die TLCs und 12V für 3 in Reihe geschaltete RGBs
Da die TLCs nicht so viel Strom ziehen, fällt die 5V Spannung auch nicht 
so stark ab, die 12V dürfen bis unter 10V abfallen.
Es ist klar, dass diese Spannung ca alle 5 Meter neu eingespeist werden 
muss.

>Rechung?

Rechnung gibt es nicht, es handelt sich hier um die subjektive 
Wahrnehmung beim Farbwechsel Modus. Das Programm durchläuft das 
Farbspektrum indem es immer eine Farbe ein stückchen heller oder dunkler 
macht. Natürlich könnte man hier auch 2er oder 3er Sprünge einbauen oder 
das ganze etwas logarithmisch ansteuern, das kommt aber erst wenn die 
Hardware läuft :)

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

>ich habe zwei verschiedene Versorgungsspannungen:
>5V für die TLCs und 12V für 3 in Reihe geschaltete RGBs
>Da die TLCs nicht so viel Strom ziehen, fällt die 5V Spannung auch nicht
>so stark ab, die 12V dürfen bis unter 10V abfallen.
>Es ist klar, dass diese Spannung ca alle 5 Meter neu eingespeist werden
>muss.

Unpraktikabel. Lieber eine höhere Spannung nehmen und diese pro Modul 
herunterschaltwandeln. Spart eine Menge Leitungsaufand und der Strom 
geht über der Strecke entsprechend zurück. Mit mehreren schon passend 
stabilisierten Spannungen geht man nicht über Leitungsmeter.

von Kai F. (kai-) Benutzerseite


Lesenswert?

Über die Versorgungsspannung hatte ich mir auch schon Gedanken gemacht, 
da ich aber sowohl die Kosten, als auch den Bestückungsaufwand in 
Grenzen halten wollte, habe ich mich gegen jegliche Spannungswandler 
entschieden.
Mehr als 12V sind auch nicht möglich, da sonst der erste Treiber, der 
noch die vollen 12V abbekommt zu heißt läuft.
Es geht in diesem Thema allerdings auch nicht um die Versorgsspannung 
der LEDs, ändern kann ich am Layout auch nichts mehr, da ich schon 100 
Platinen bestellt habe (cheaper by the dozen :P )
Idealerweise wollte ich an den Anfang einen Treiber setzen und am Ende 
eine passende Terminierung. Die Idee kam übrigens glaub ich von Falk, 
vielen Danke dafür nochmal :)
Die Frage ist eigentlich nur was ich alles terminieren muss und wie ich 
das am Geschicktesten mache.

von Falk B. (falk)


Lesenswert?

@ Kai Franke (kai-) Benutzerseite

>Mehr als 12V sind auch nicht möglich, da sonst der erste Treiber, der
>noch die vollen 12V abbekommt zu heißt läuft.

???
Du bruachst sinnvollerweise eine Schaltregler pro Board. Dann kann man 
super mit 24V und ggf. mehr arbeiten.

>Es geht in diesem Thema allerdings auch nicht um die Versorgsspannung
>der LEDs, ändern kann ich am Layout auch nichts mehr, da ich schon 100
>Platinen bestellt habe (cheaper by the dozen :P )

Wäre ja auch vollkommen sinnlos, mal vorher bissel zu rechnen un einen 
paar Prototypen zu bauen . . .

>Idealerweise wollte ich an den Anfang einen Treiber setzen und am Ende
>eine passende Terminierung. Die Idee kam übrigens glaub ich von Falk,
>vielen Danke dafür nochmal :)

Dein Treiber und die Terminierung hilft dir aber nciht gegen 
Masseverschiebung durch hohen Strom. Dort braucht man dann RS485 
Tranceiver, die können grosse Masseverchiebungen tolerieren.

>Die Frage ist eigentlich nur was ich alles terminieren muss und wie ich
>das am Geschicktesten mache.

SCK mit Thevenin, der Rest sollte egal sein.

MFG
Falk

von Kai F. (kai-) Benutzerseite


Lesenswert?

Hallo,
habe mich jetzt mit einem Mensch mit Oszi zusammengesetzt und wir haben 
das Problem weitgehend in den Griff bekommen :)
Die Thevenin Terminierung für die Clockleitung hat ganz gut 
funktioniert, ich habe 220 Ohm verwendet.
Es funktionierte zwar auch ohne, das Signal stieg aber kurzzeitig auf 
über 6,5V an.
Das wichtigste weshalb es am Ende überhaupt funktionierte war, dass wir 
die CS Leitung eine AC Terminierung verpasst haben (mit keiner anderen 
Terminierung klappte es)
Das Problem war sehr wahrscheinlich, dass das CS Signal durch den 
starken Überschwinger als weitere fallende Flanke erkannt wurde, dem 
wieder eine steigende folgte. Da dazwischen logischerweise keine Daten 
eingespeist wurden, blieb die Leiste dunkel.
Als Werte für die AC Terminierung habe ich 100 Ohm und 10nF verwendet, 
dadurch wurde die CS Leitung stark geglättet. Da CS aber sowieso nur 
sehr selten geschaltet wird war das Timing unproblematisch.

Der komplette SPI Bus ist jetzt 6 Meter lang, wird nur von einem ATmega8 
getrieben und funktioniert soweit ohne Probleme.
Damit das auch so bleibt werde ich wahrscheinlich alle 4 Meter einen 
Bustreiber einbauen, der alle Signale wieder auffrischt und sauber 
sendet.

So, das wars eigentlich, wollte hier nur noch aufklären wie es 
funktioniert, weil es nichts schlimmeres gibt als einen Thread zu lesen 
in dem die Lösung dann nicht mehr drin steht, vielleicht kann es ja 
jemand gebrauchen

Gruß
Kai

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.