Forum: Mikrocontroller und Digitale Elektronik Problem mit Leitungslänge SPI


von Marcel W. (Gast)


Lesenswert?

Hallo Leute,

ich habe 8 Sensoren die über einen LevelShifter an einen µC 
angeschlossen werden. Die Ansteuerung erfolgt mittels SPI. Die Länge zu 
jedem Sensor beträgt jeweils ca. 2m. Als Kabel verwende ich geschirmte 
Patch Kabel, bei dem jeweils eine "Datenleitung" mit einer Masseleitung 
verdrillt ist.
Die Verlegung der Kabel erfoilgt sozusagen in einem Sternmuster, dass 
heißt alle 8 Leitungen starten am µC.

Leider bekomme ich keine stabile Übertragung zu Stande. Wie müsste 
hierbei eine anscheinend nötige Terminnierung aussehen? Oder gibt es 
noch andere Möglichkeiten?

Viele Grüße

Marcel

von Bernhard M. (bernhard84)


Lesenswert?

Mit welchem Takt betreibst du dein SPI?
Wenn deine Probleme mit niedrigerem Takt nicht verschwinden, hast du 
noch ein anderes Problem.

Bernhard

von Marcel W. (Gast)


Lesenswert?

Naja, eig. mit 500kHz. Jedoch sollte theoretisch der Takt egal sein, 
oder? Eigentlich ist doch nur die Flankensteilheit das wichtigste.
Zum Testen hatte ich jedoch den Takt schon auf 50kHz gesenkt, es gab 
jedoch keine Verbesserungen!

Viele Grüße

von HildeK (Gast)


Lesenswert?

Bernhard Mayer schrieb:
> Mit welchem Takt betreibst du dein SPI?
> Wenn deine Probleme mit niedrigerem Takt nicht verschwinden, hast du
> noch ein anderes Problem.

Das ist keine Frage der Frequenz, sondern der Flankensteilheit. Eine 
geringere Frequenz wird da kaum was ändern.

@Marcel W. (Gast)
Die Taktleitung darf auf jeden Fall nicht ohne weitere Maßnahmen als 
Stern geführt werden.
Am Besten ist es, einen Taktverteiler z.B. über einen 74XX244 zu machen 
und quellseitig Serienterminierung vorzusehen, also jede von einem 
eigenen Treiber zu versorgen.

von Marcel W. (Gast)


Lesenswert?

Ich bekomme aber schon bei einem angeschlossenem Sensor keine 
vernünftige Übertragung hin.

von Marcel W. (Gast)


Lesenswert?

Zur Info: mit einer Leitungslänge von 20 cm und einem Sensor 
funktioniert die Übertragung tadellos. Daran liegt es also nicht.

von oszi40 (Gast)


Lesenswert?

Nur so ein paar Ideen:
-zu hochohmig
-Masseproblem
-Terminierung fehlt

von Marcel W. (Gast)


Lesenswert?

Hmm, also ich habe Testweise am Sender jeweils 100 Ohm in Reihe 
geschaltet. Die Signale sehen etwas besser aus, aber immernoch nicht 
ausreichend gut.

von TrippleX (Gast)


Lesenswert?

Ich glaube besser wäre es einen Buffer für jedes SCK Signal zu nehmen.
Notfalls für die SDO/SDI Leitungen auch.
Sowas wie der SN74LVC1G125, insgesamt bräuchtest du dann aber noch
8 weitere Leitungen um den SPI Bus für jeden Sensor einzeln zu 
aktivieren.
Vielleicht gibt es ja auch SPI Switches/Hubs.
SPI und I²C sind eigentlich nicht für solche Sachen gedacht.


Du bekommst wahrscheinlich keine vernüftige Übertragung hin da die
komplette Kabelkapazität deine Signale unterschiedliche Laufzeiten 
haben.
Es reicht ja schon wenn zum SCK Signal die SDI/SDO Leitung zeitlich 
gesehen ein wenig zueinander verschoben sind.

von Marcel W. (Gast)


Lesenswert?

Hmm, ich habe hier im Forum von Leuten gelesen, die angeblich 40m 
hinbekommen haben. Wie haben die das dann gemacht?

von Marcel W. (Gast)


Lesenswert?

@ HildeK

einfach alle Eingänge des 74xx244 auf SCK und die Ausgänge dann einzeln 
an die einzelnen Sensoren?

Was bringt das ganze? Vermeidung von Reflektionen oder wie?

von Tropenhitze (Gast)


Lesenswert?

>Wie haben die das dann gemacht?

Im Zweifelsfall gelogen. Hast Du einen Oskar? Wie sehen die Signale aus? 
Hast Du die Taktflanken von pos. auf neg. oder umgekehrt eingestellt?

von Falk B. (falk)


Lesenswert?

Siehe Wellenwiderstand. 2m sind schonn sehr lang.

MFG
Falk

von oszi40 (Gast)


Lesenswert?

Es gab schon Fälle, wo 20cm Kabel abschneiden Wunder bewirkt hat....

von Marcel W. (Gast)


Lesenswert?

Ja, den Artikel hab ich schon gelesen. Wenn ich jedoch die Anstiegszeit 
meines Ausgangssgatters stark erhöhen könnte, müsste es doch besser 
klappen, oder?

von oszi40 (Gast)


Lesenswert?

Falls die 8 Sensoren an einer Maschine sind, wäre auch der Störnebel 
drumherum höchst interessant. Als erste Maßnahme würde ich alle 
überflüssigen Drähte definiert auf Masse legen. Jeder Draht ist eine 
Antenne.

Motoren könnten da z.B. einige Beeinflussungen bewirken.
Masseschleifen ??

von Marcel W. (Gast)


Lesenswert?

Nein, solche Störeinflüsse spielen momentan noch keine Rolle. Ich denke 
eher, dass mein LevelShifter ein problem sein könnte. Die maximale 
Anstiegszeit wird hierbei mit 10 ns angegeben.

von Olaf (Gast)


Lesenswert?

Ich wuerde symetrisch uebertragen. Nimm RS422/485 Wandler.
(ADM485 uPD963x usw) Gibt es auch bei Reichelt. :-)

Die sollten 500khz noch koennen. Andererseits koennen sie aber
auch nicht mehr viel mehr. Daher hast du alleine schon dadurch
mehr sicherheit. Dann wird dann symetrisch uebertragen und wenn
du jetzt noch richtig terminiert dann kann kaum noch was schiefgehen.

Olaf

von Gebhard R. (Firma: Raich Gerätebau & Entwicklung) (geb)


Lesenswert?

Hmm... ich hab eine quasi SPI Übertragung mit 80kHz auf 2m zu einem 
HC4094 Shift register. Da gibts keine Probleme. Extra Treiber hab ich 
auch nicht vorgesehen. Ist die Versorgung vom Sensor auch sauber? 
(Stützkondensator)
Da ich das schon über 10x reproduziert habe, denke ich dass es auch in 
deinem Fall gehen sollte.

Grüße Gebhard

von Falk B. (falk)


Lesenswert?

@  Gebhard Raich (geb)

>Hmm... ich hab eine quasi SPI Übertragung mit 80kHz auf 2m zu einem
>HC4094 Shift register. Da gibts keine Probleme.

Wirklich ein 74HC4094 oder ein echter HEF4094. Letzterer ist so 
schnarchlangsam, denn kann man auch per Relais takten ;-)

MFG
Falk

von Gebhard R. (Firma: Raich Gerätebau & Entwicklung) (geb)


Lesenswert?

Ist wirklich ein 74HC4094.

Grüße

von Marcel W. (Gast)


Lesenswert?

Guten Morgen,

erstmal vielen Dank für eure Antworten. Ich bin immer noch der Meinung, 
dass die 10ns Anstiegszeit meines LevelShifters das Problem ist. Wenn 
ich nach dem Artikel über den Wellenwiderstand gehe, dann ist ja die 
Signallaufzeit ca. 10 ns. Laut Artikel muss die Anstiegszeit des 
Eingangssignal dann 6 mal so hoch sein, also 60ns. Wie bekomme ich 
solche Anstiegszeiten hin?

von bensch (Gast)


Lesenswert?

> Wie bekomme ich solche Anstiegszeiten hin?

Soll das ein Witz sein?

T=R*C

von HildeK (Gast)


Lesenswert?

Marcel W. schrieb:
> @ HildeK
>
> einfach alle Eingänge des 74xx244 auf SCK und die Ausgänge dann einzeln
> an die einzelnen Sensoren?
Ja.

> Was bringt das ganze? Vermeidung von Reflektionen oder wie?

Es wird immer Reflexionen geben, wenn die Leitung fehlabgeschlossen ist. 
Bei der Übertragung von digitalen CMOS-Signalen kann man meist nicht 
vorne und hinten anpassen. Die Frage ist, wie werden sie für die 
Anwendung nicht zum Problem.
Deshalb verwendet man die quellseitige Serienterminierung. Am 
Leitungsanfang wird praktisch durch einen Serienwiderstand (im Bereich 
von 25-40 Ohm, ergibt rund 50 Ohm zusammen mit dem Ausgangswiderstand 
der Quelle) an eine 50-Ohm-Leitung angepasst. Am Leitungsende, das 
praktisch bei einem CMOS-Eingang als hochohmig betrachtet werden kann, 
findet dann eine Totalreflexion statt. Das ist durchaus gewollt, denn so 
erhält man den nominalen CMOS-Pegel (bei einer Anpassung am Ende wäre es 
nur der halbe Pegel - zu wenig für CMOS).
Die reflektierte Welle oder Flanke läuft zurück und muss an der Quelle 
eine möglichst gute Anpassung vorfinden, damit sie nicht erneut 
reflektiert wird.
Das passiert genau dann, wenn du dort einen normal niederohmigen Ausgang 
hast. Das ist für einen Takt meist tödlich, denn nach der doppelten 
Leitungslaufzeit kommt erneut eine Flanke am Verbraucher an und triggert 
den meist nochmals.
Das ganze ist um so schlimmer, wenn man sternförmig fährt. Mit dem 
Serienwiderstand herrscht an der Quelle Anpassung und es wird nichts 
mehr erneut reflektiert. Ideal ist es, für jede Taktleitung einen 
eigenen Treiber zu verwenden, zur Not gehen auch zwei Leitungen an einem 
Ausgang. Aber nur, wenn auch zwei Serienwiderstände verwendet werden und 
der Treiber kräftig ist.

Wenn du das Z der Leitung nicht kennst, dann experimentiere mit 
verschiedenen Serien-Widerständen und messe am Ausgang. Wähle den 
Widerstand, der die sauberste Flanke liefert. Da der '244 relativ gut 
treibt, wird der eher bei 40 Ohm liegen (für den Fall, dass die Leitung 
50 Ohm hat).

Für die Datensignale gilt zwar das selbe, allerdings stört da ein 
Klingeln an den Flanken meist nicht, denn nur zum Zeitpunkt der 
Taktflanke muss das Datum stabil sein.

> Ja, den Artikel hab ich schon gelesen. Wenn ich jedoch die Anstiegszeit
> meines Ausgangssgatters stark erhöhen könnte, müsste es doch besser
> klappen, oder?

Ja, dann wird es besser. Aber beachte: die Logikfamilien haben eine 
Grenze für die Anstiegszeit, die nicht überschritten werden darf. Und um 
zu verlangsamen, darfst du nie auf Seiten der Quelle eine RC-Kombination 
unterbringen. Für die reflektierte Flanke ist das C ein Kurzschluss: 
also Totalreflexion und du hast das genaue Gegenteil von dem was du 
wolltest.

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.