mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI mit RS485-Übertragung: Problem mit zu langen Propagation-Delays


Autor: noips (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo an alle,

könnt ihr mir bitte ein paar Tipps geben. Auf einem SPI-Bus sollen die 
Signale wegen längeren Entfernungen physikalisch mit RS485-Technik 
übertragen werden. Übertragungsrate größer 2 Mbit/s erforderlich. Die 
Busteilnehmer werden mit 3.3V Supply betrieben, deswegen auch die 
Treiber bzw. Receiver mit diesem Pegel nötig.

Nun die Treiber und Receiver haben Propagation-Delays bis zu 100ns 
(angehängtes Datenblatt). So entsteht in dem CLK-Signal auf dem Weg vom 
Master zu einem der Slaves eine Verzögerung gleich dem zweifachen 
Propag. Delay ( Quelle > Treiber > Receiver > Senke) und dann noch im 
SOMI-Signal das gleiche. Bei einer Rate von 2 MBit/s ist der Abstand von 
der steigender Flanke des Clocks bis zur fallenden 250ns. Bevor die 
steigende Flanke über Treiber und Receiver zum Slave gelangt und er die 
Daten (ebenfalls über Treiber / Receiver) zum Master reicht, will der 
Master an der fallenden Flanke schon lesen. Lässt sich dieses Problem 
irgendwie lösen, ohne die Datenrate zu reduzieren?

Besten Dank für jeden Hinweis!!!

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie man es eigentlich machen müsste: Takt vom Master zum Slave 
übertragen, dort umdrehen und wieder zurück übertragen. Dann passen Takt 
und Daten immer zusammen. Dumm daran ist, dass die üblichen SPI-Module 
das nicht hergeben. Wenn man allerdings im Master den Tx-Teil vom SPI 
per Software implementiert und das eigene Hardware-SPI nur als Slave für 
Rx verwendet, dann geht das. Oder mit zwei Hardware-SPIs, einer pro 
Richtung.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Andererseits muss man ja auch nicht unbedingt die langsamsten 
Transceiver verwenden, die man finden kann. SN65HVD10: 8,5ns.

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tut mir leid, das ging mir viel zu schnell! Mit Umdrehen meinst du, dass 
der Slave zum Master wird und der Master zum Slave?

Und diesen Abschnitt verstehe ich leider gar nicht. :-|

>Wenn man allerdings im Master den Tx-Teil vom SPI
>per Software implementiert und das eigene Hardware-SPI nur als Slave für
>Rx verwendet, dann geht das. Oder mit zwei Hardware-SPIs, einer pro
>Richtung.

Könntest Du vielleicht etwas ausführlicher erläutern?

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Master"                                         Slave
MOSI1+SCK1 => RS485-Tx => Leitung => RS485-Rx => MOSI+SCK
MISO2+SCK2 <= RS485-Rx <= Leitung <= RS485-Tx <= MISO+SCK

Also: SCK vom Master zum selektierten Slave schicken und dort auf einer 
zweiten Leitung wieder zurück zum Master schicken. Die Hin-Leitung 
taktet den Sender des Masters, die Rück-Leitung den Empfänger.

Wenn man auf Master-Seite zwei SPI-Module zur Verfügung hat, dann nimmt 
man das eine davon (MISO1/SCK1) als Master konfiguriert zum Senden, das 
andere (MISO2/SCK2) als Slave konfiguriert zum Empfangen.

Hat man nur eines, nimmt man zum Senden Software-SPI.

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, jetzt kapiert :-)  Vielen Dank!!!! Interessante Lösung!!


Noch was:
Man muss praktisch ja nur den Zeitpunkt, an dem der Master die Daten 
liest etwas verzögern. Lässt es sich nicht mit den Einstellungen 
Clock-Polarity und Clock-Phase machen?

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen!

Ich wollte den Thread wieder nach oben befördern, vielleicht hat der 
eine oder andere noch eine Idee! Danke!!!!!!

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Lässt es sich nicht mit den Einstellungen
> Clock-Polarity und Clock-Phase machen?
Damit änderst du auch den Sender.

> wegen längeren Entfernungen
Wie lang?
1 Meter Kupferkabel bringt dir auch schon ca. 3ns Verzögerung...

>Nun die Treiber und Receiver haben Propagation-Delays bis zu 100ns
Nimm schnellere: LTC1686
Precision Propagation Delay Over Temperature:
Receiver/Driver 18.5ns ±3.5ns

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wie lang?
>1 Meter Kupferkabel bringt dir auch schon ca. 3ns Verzögerung...

Kann bis zu 10m lang werden.


>Nimm schnellere: LTC1686

Das ist natürlich auch möglich. Ich würde halt gern ICs benutzen, die 
z.B. nur 4 Transmitter bzw. 4 Receiver haben, weil man bei SPI auf der 
Slave-Seite 3 Receiver und nur einen Transmitter braucht und auf der 
Master-Seite umgekehrt 3 Transmitter und einen Receiver. Mit einem Quad 
Receiver bzw. Transmitter kann man das kompakter aufbauen. Und für 3.3V 
Supply habe ich nur Quads gefunden mit Delays von ca. 100ns. Alles mit 
Trancievern aufzubauen würde bedeuten, mehr Platz auf der Platine und 
viele unbenutzte Transmitter bzw. Receiver.

Mit schnellen Bausteinen kann man das Problem lösen. Aber wenn man damit 
rechnet, dass im System zukünftig die Anzahl der Slaves (und damit die 
Datenrate) und die Buslänge zunehmen, dann ist wohl sinnvoller, den 
Vorschlag von A.K. zu realisieren. Seht ihr das auch so??

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> dann ist wohl sinnvoller, den Vorschlag von A.K. zu realisieren.
Richtig.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
NB: 4fache schnelle RS422er gibt es durchaus. Beispielsweise TI 
AM26LV31E/32E. Aber gegen grosse Entfernung im Verhältnis zur Datenrate 
hilft das allein auch nicht.

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Hast du nach RS485 statt RS422 gesucht?

Hab eigentlich gezielt nach RS485 gesucht. Was ist eigentlich der 
Unterschied zwischen RS485 und RS 422? Wikipedia sagt, dass RS422 nicht 
so ohne weiteres im RS485-Netzwerken verwendbar ist.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der klassische Bild: RS422 implementiert eine full-duplex Punkt-to-Punkt 
Verbindung mit nicht abschaltbarem Transmitter, RS485 eine half oder 
full-duplex Busverbindung für >2 Teilnehmer mit abschaltbarem 
Transmitter.

In der Realität ist es etwas komplizierter, denn bereits der 
RS422-Klassiker AM26LS31 ist abschaltbar. Allerdings haben RS422 
Bausteine keine Überlastsicherung, weil Kollisionen anders als bei RS485 
nicht zum normalen Betrieb zählen.

Da es bei solchem SPI aber ebensowenig Kollisionen gibt, ist das auch 
mit abschaltbaren Bausteinen für RS422 realisierbar.

Autor: KelleRassel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RS422 ist durchaus busfaehig. Standardmaessig mit einem bestimmten 
Master, der immer auf Senden ist. Waehrend die Slaves nur senden wenn 
sie muessen.

Ich versteh das Gejammer ueber die Verzoegerung nicht. Die Verzoegerung 
des kabels faellt weg, da Daten und Clock verzoegert werden. Desgleichen 
die Verzoegerung von Treibern. Dann ist eigentlich nur die Skew zwischen 
Clock und Daten wichtig. Der Clock muss kommen wenn die Daten stabil 
sind. Dh wenn man Treiber hat, die die gewuenschte SPI frequenz bringen, 
ist man dabei.

Autor: KelleRassel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Als RS422 Teiber kann ich die ADM3491ARZ empfehlen. die machen 10MBit ab 
3.3V.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
KelleRassel schrieb:

> RS422 ist durchaus busfaehig.

Aber 8pin Transceiver für RS422 sind es nicht, weil trivialerweise nicht 
abschaltbar.

Autor: Nico B. (prinzenrolle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
wir haben von Maxim Transceiver MAX3077E im Einsatz.
Gruß

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
KelleRassel schrieb:

> Ich versteh das Gejammer ueber die Verzoegerung nicht. Die Verzoegerung
> des kabels faellt weg, da Daten und Clock verzoegert werden.

Das bezog aich auf die klassische SPI-Variante ohne Rückführung des 
Takts. Dann spielt die Verzögerung durchaus eine bedeutende Rolle. Erst 
mit der von mir vorgeschlagenen Rückführung des Takts ist wie du richtig 
schreibst nur der Skew wichtig.

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke an alle!!!

Noch eine Unklarheit. Im Wikipedia-Artikel zu RS485 (Vergleich RS485 und 
RS422) steht:

   Bei EIA-422 Bauteilen, die doch über einen Driver-Enable verfügen,
   reicht die Treiberstärke nicht aus, um ein an beiden Enden 
terminiertes
   Netzwerk zu treiben.

Ihr sagt, für SPI, bei dem nie 2 Transmitter gleichzeitig aktiv sind 
reicht RS422 aus. Wie ist es mit der Treiberstärke und terminiertem 
Kabel aus eurer Sicht? Stimmt die Wikipedia-Behauptung nicht?

Autor: KelleRassel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielleicht mal ein Datenblatt eines solchen Treibers anschauen ...

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Interessante Frage. Wobei der 3,3V RS485-Treiber MAX307x allerdings bei
den Stromverlaufskurven weit schlechter abschneidet als der 5V
RS422-Treiber AM26LS31.

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab jetzt ein Datenblatt vom Quad RS422-Transmitter angeschaut (im 
Anhang). In der Tabelle DC Electr. Characteristics finde ich:

Diff. Driver Output  bei RL = 100 Ohm  min. 2V

Wenn ich das richtig verstehe heißt es, dass bei bei einem 
Lastwiderstand von 100 Ohm die Spannung zw. den differentiellen 
Ausgängen nicht unter 2V fällt.

Aber ein mit zwei 120 Ohm Widerständen abgeschlossener Bus ( die 
Receiver jettz mal außer Acht gelassen) ist ja schon effektiv mit 60 Ohm 
belastet. Ob mit 60 Ohm Last die diff. Ausgangsspannung noch über der 
nötigen Schwelle von +/- 0.2V liegt garantiert das Datenblatt nicht. 
Somit kann ich speziell diesem Datenblatt nicht entnehmen, ob diese 
Treiber busfähig sind, oder? Oder sehe ich das falsch?

Autor: noips (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sorry, Anhang vergessen!

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nominell ist das offenbar richtig, RS422 Bausteine sind mit 100 Ohm Last
angegeben, RS485 Bausteine mit 54 Ohm.

Aber schau mal beim MAX3030 auf Seite 4 links unten. Das langt auch bei 
54 Ohm noch locker. Nur ist das in dieser Kurve eben der typische Wert, 
nicht der vom Hersteller garantierte.

Heisst also: Formal korrekt ist es nur mit RS485 Treibern. Funktionieren 
wird es mit den MAX303x aber ziemlich sicher ebenfalls.

Autor: KelleRassel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wie ich das verstehe wird der RS422 nur auf einer Seite terminiert. 
Die Richtung zum Master wird beim Master terminiert, die Richtung vom 
Master auf der andern Seite.

Geht ja auch.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn nur ein Slave dranhängt, dann ist das Point-to-Point und passt 
RS422.

Aber wenn es mehrere Slaves am gleichen Bus gibt und folglich das SPI 
als Multidrop-Bus aufgebaut ist, dann haben MISO und der rücklaufende 
Takt Buscharakteristik und müssen an beiden Enden abgeschlossen werden.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.