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
Mit welchem Takt betreibst du dein SPI? Wenn deine Probleme mit niedrigerem Takt nicht verschwinden, hast du noch ein anderes Problem. Bernhard
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
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.
Ich bekomme aber schon bei einem angeschlossenem Sensor keine vernünftige Übertragung hin.
Zur Info: mit einer Leitungslänge von 20 cm und einem Sensor funktioniert die Übertragung tadellos. Daran liegt es also nicht.
Nur so ein paar Ideen: -zu hochohmig -Masseproblem -Terminierung fehlt
Hmm, also ich habe Testweise am Sender jeweils 100 Ohm in Reihe geschaltet. Die Signale sehen etwas besser aus, aber immernoch nicht ausreichend gut.
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.
Hmm, ich habe hier im Forum von Leuten gelesen, die angeblich 40m hinbekommen haben. Wie haben die das dann gemacht?
@ 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?
>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?
Es gab schon Fälle, wo 20cm Kabel abschneiden Wunder bewirkt hat....
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?
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 ??
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.
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
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
@ 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
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?
> Wie bekomme ich solche Anstiegszeiten hin?
Soll das ein Witz sein?
T=R*C
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.