www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Wie schnell ist eine Konvertierung von SPI nach RS485?


Autor: Witali (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachdem ich, als Berufsanfänger in der Elektronik-Entwicklung, gestern 
schon einiges zu SPI-Reichweitenerhöhung und RS485 gefragt habe, möchte 
ich noch etwas fragen. Leider kann ich als Anfänger jetzt nur fragen. In 
ein paar Jahren bin ich hoffentlich soweit, dass ich auch jemand 
antworten kann. Und jetzt zur Sache:

Es sollen von einer zantralen Steuerung (Board mit CPU) die Daten von 
mehreren Modulen (diverse Sensoren mit AD-Wandlern) ausgelesen werden. 
Die Module sollen über einen geeigneten Bus (Länge bis ca. 10 m) mit der 
Steuerung verbunden werden. Als Bus kommen in Frage SPI oder RS485.

SPI ist nicht für solche Buslängen gedacht. Von der Entfernung her ist 
RS485 besser. Nur besitzen die käuflichen ADC-Bausteine keine 
Schnittschtelle für RS485, sondern nur SPI (oder I2C, oder parallel). 
Bei der Wahl von SPI als Bus für das beschriebene System könnte man die 
ADC-Bausteine über Bustreiber direkt an den SPI-Bus hängen. Bei der Wahl 
von RS485 müsste man einen einfachen Controller mit UART und einen 
RS485-Baustein zwischen ADC und Bus schalten. Meine Frage ist nun, 
wieviel langsammer wird die Übertragung per RS485 gegenüber SPI dadurch, 
dass die gewandelten Werte zuerst über einen Controller aus einem ADC 
ausgelesen und dann auf RS485-Bus gelegt werden?

Wenn jemand Zeit und Lust hat, mir zu antworten, wäre sehr dankbar!!

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dazu guckt man sich das Datenblatt der RS485-Transceiver an. Dort sollte 
es eine Angabe zu maximalen Geschwindigkeit finden.

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

Bewertung
0 lesenswert
nicht lesenswert
RS485/422 ist ein Medium (Physik), SPI ist (hauptsächlich) ein 
Protokoll.
Du kannst z.B. ganz einfach SPI über RS422 fahren. Nimm einfach deine 
SPI-Signale und hänge RS422-Pegelwandler dahinter. Damit kommst du 
problemlos auf 30MHz Übertragungstakt.
         TTL->RS422                  RS422->TTL
             __________________________
     SCLK  > __________________________ >

SPI          __________________________     AD-Wandler
     MOSI  > __________________________ >

             __________________________
     MISO  < __________________________ < 

             __________________________
     CS    > __________________________ >

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Witali (Gast)

>RS485-Baustein zwischen ADC und Bus schalten. Meine Frage ist nun,
>wieviel langsammer wird die Übertragung per RS485 gegenüber SPI dadurch,
>dass die gewandelten Werte zuerst über einen Controller aus einem ADC
>ausgelesen und dann auf RS485-Bus gelegt werden?

Kann man so pauschal nicht sagen. RS485 kann man wenn es sein muss mit 
10 Mbit/s fahren, das ist dann schon flink. Aber SPI für weit verteilte 
Sensoren solltest du vergessen. Dafür ist das System schlicht unsinnig. 
SPI ist für ein par ICs auf einer Platine, genau wie I2C. Wenn man 
keinen neuen RS485 Bus erfinden will, nimmt man einfach CAN, da gibts 
alles fix und fertig.

MFG
Falk

Autor: Witali (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Besten Dank für Ihre schnellen Antworten!!!!!

@STK-Besitzer:
Ich habe nicht die RS485-Übertragungsgeschwindigkeit gemeint, sondern 
die Schnelligkeit der Konvertierung von SPI nach RS485 mit einem 
Controller.

@ Falk Brunner:
Ich habe in den verhangenen Tagen aus einigen Threads hier schon 
erfahren, dass SPI ursprünglich für platineninterne oder höchstens 
geräteinterne Kommunikation bestimmt ist. Aber aus einigen Beiträgen 
weiß ich, dass sich SPI mit einigen Tricks als so eine Art Feldbus 
verwenden lässt. Ein Forum-Teilnehmer hat sogar berichtet, er hat mit 40 
m Ethernet-Kabel und Terminierung ohne Bustreiber SPI-Daten bei 
125kBit/s übertragen. Mit Treibern sollte es bei 10 m Busslänge, 
geeigneten Kabeln und Terminierung wohl ohne bedeutende 
Datenrateneinbußen gehen. Lothar Miller (vorhergehender Beitrag) meint, 
dass mit RS422-Pegelwandern SPI-Datenraten mit 30MHz problemlos 
erreichbar sind.

@Lothar Miller:
30 MHz auch bei 10m Buslänge?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>30 MHz auch bei 10m Buslänge?

RS422 und RS485 sind mit einer max. Datenrate von 10Mbps spezifiziert.

> Wie schnell ist eine Konvertierung von SPI nach RS485?

Das hängt von deinem Protokoll ab. Im einfachsten Fall die Zeiten zu 
Empfangen und Senden eines Bytes + 1..2µs zum Übergeben des Bytes an die 
andere Schnittstelle.

MfG Spess

Autor: Bjojon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

wenn ich dich richtig verstanden habe arbeitest du in der 
Entwicklungsabt. einer Firma. Du solltest daher unbedingt nach einer 
professionellen / gebräuchlichen Lösung suchen und nicht nach 
Bastellösungen. Robustheit ist ein wichtiges Kriterium bei der 
professionellen Entwicklung. Kunden sind i.d.R. nicht erfreut wenn die 
Geräte ständig in Störung gehen - das kann richtig Ärger geben.

Gerade im industriellen Umfeld ist mit starken Störungen zu rechnen - 
hier würde ich eindeutig zu RS485 raten. Das schließt natürlich nicht 
aus - wie bereits von Lothar Miller geschrieben - SPI über RS485 Pegel 
zu machen.

Du solltest dich zuerst mal fragen wie schnell du es überhaupt brauchst, 
mußt du die Sensoren so schnell abfragen ?

Ist es das erste mal daß deine Firma so etwas macht oder gibt es schon 
ähnliche Lösungen - dann würde ich mich zumindest daran orientieren. 
Hilfreich ist es auf alle Fälle das Problem mal mit erfahrenen Kollegen 
zu diskutieren.

Autor: Witali (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Spess:
die Frage "30MHz auch bei 10m Buslänge?" war an Lothar Miller gestellt, 
sie bezieht sich auf SPI und nicht auf RS422 / RS485.

Unter Empfangen eines Bytes verstehst du die Zeit, die der Controller 
braucht zum Einlesen vom ADC über SPI, oder?

Wie lange dauert im kürzesten Fall das Senden eines Bytes über UART?

Wie Ermittelst du ungefähr die 1..2µs zum Übergeben an andere 
Schnittstelle?

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

Bewertung
0 lesenswert
nicht lesenswert
spess53 schrieb:
>>30 MHz auch bei 10m Buslänge?
> RS422 und RS485 sind mit einer max. Datenrate von 10Mbps spezifiziert.
SN65LBC179A = 30MBit/s
Laut Datenblatt
Compatible With ANSI Standard TIA/EAI-485-A

EDIT:
Ich hatte "nur" behauptet, es gäbe solche Transmitter, nicht, dass der 
Standard das hergibt ;-)

Autor: Witali (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Spess:

>RS422 und RS485 sind mit einer max. Datenrate von 10Mbps spezifiziert.

Übrigens was ich noch gerne fragen möchte: Ist mit diesen 
Datenratenangaben die Nutzdatenrate gemeint ( also ohne die Steuerbits, 
die wegen dem Protokoll nötig sind ) oder die Bitfrequenz auf der 
Leitung? Im Wikipedia Artikel zu CAN sind z.B. Angaben zu Datenrate mit 
1Mbit/s bei 40m Entfernung zu finden? Ist damit die Nutzdatenrate 
gemeint?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>die Frage "30MHz auch bei 10m Buslänge?" war an Lothar Miller gestellt,
>sie bezieht sich auf SPI und nicht auf RS422 / RS485.

Übliche RS422/485-Treiber sind aber für max. 10Mbps ausgelegt (manche 
auch für 20). Egal was du damit machst.

>Unter Empfangen eines Bytes verstehst du die Zeit, die der Controller
>braucht zum Einlesen vom ADC über SPI, oder?

Ja.

>Wie Ermittelst du ungefähr die 1..2µs zum Übergeben an andere
>Schnittstelle?

Das ist ein Schätzwert. Abhängig vom Controller, Taktfrequenz, 
Programmiersprache ...

MfG Spess

Autor: skorpionx (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Can-Bus wäre die beste Lösung...
Funktioniert in jedem Auto.

Autor: Witali (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Bjojon,

also da verstehe ich was nicht. Du sagst, man sollte professionelle 
Lösung suchen und empfiehlst daher RS485. Was wäre aus deiner Sicht eine 
Bastlerlösung?

Ich fragte mich, SPI-Bus mit Bustreibern oder RS485-Bus. Dabei sah ich 
es so, dass wenn ich SPI-Schnittstelle der Bausteine verwende, dann ist 
die Rede von SPI-Bus auch wenn ich RS485-Treiber zur Übertragung nehme. 
Und unter RS485-Bus habe ich verstanden, den UART des Controllers zu 
verwenden und über RS485-Treiber mit entsprechendem Protokoll auf zwei 
gemeinsamen Leitungen zum UART der Controllers in der Steuerung zu 
übertragen.

Und jetzt sagst du man kann SPI-Signale nehmen und mit RS485-Treibern 
übertragen und dann sprichst du von RS485-Bus. Ich komme durcheinander. 
Und was wäre denn dann eine Bastlerlösung? Etwa SPI-Signale über andere 
Treiber (nicht RS485) zu übertragen?

Wäre für eine Aufklärung sehr dankbar!!!!

Autor: guestgast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Denke auch an das Kabel !

6 oder gar 8 Leiter (abgeschirmt) fuer einen Sensor ? - ? - !

Hmrm

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

Bewertung
0 lesenswert
nicht lesenswert
> 6 oder gar 8 Leiter (abgeschirmt) fuer einen Sensor ? - ? - !
Die sind billig und überall zu haben: CAT5 Kabel

Autor: kurz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lieber Witali,

wenn Du bei allen angebotenen Varianten (ich will sie nicht bewerten, 
manche sind sehr sinnvoll, manche klingen nach "basteln"), wenn Du also 
nur Fragen hast und nicht selbst bewerten kannst was gut und richtig 
ist, dann mußt Du Dir Hilfe bei Kollegen holen. In der Firma gab es mit 
Sicherheit schon ähnliche Aufgabenstellungen und Lösungen.

Wenn Du aber keine Möglichkeit hast die obigen Lösungen zu bewerten und 
in den Rahmen Deiner Firma zu stellen, dann laß es einfach sein, dann 
bist Du nur ein Nachbaubastler ohne Peil.

Autor: Bjojon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo !

Mit RS485 o. RS422 ist (wie bereits weiter oben schon beschrieben) nur 
die Physikalische Schicht definiert - also vereinfacht das 5V 
Differenzsignal.

Welche Daten Du da wie überträgst ist damit nicht definiert. Das kann 
Asynchron Seriell sein (z.B. Modbus) oder Synchron Seriell (z.B. SPI). 
Letzteres wird oft bei Drehgebern mit digitaler Schnittstelle gemacht.

Lothar Miller hat das oben ja schon mal aufgezeigt.

Ein reiner 5V/0V Pegel ist meiner Erfahrung nach einfach zu 
störanfällig, das Differenzsignal ist da störfester. Du must bedenken, 
das bei SPI ein durch Störungen erzeugter Puls fälschlich als 
Clock-Signal interpretiert werden kann, was dann das ganze Timing 
durcheinander bringt - der Empfänger sieht ab dann nur noch Müll.

Ich würde vermutlich eine Asynchron Serielle Verbindung mit RS485 Pegel 
wählen und dazu ein Protokoll welches den sicheren Datenaustausch 
ermöglicht (irgendwas mit Quittierung und / oder Prüfsumme). Das hängt 
natürlich davon ab wie schnell du die Daten brauchst und ob es eine 
Rolle spielt wenn du mal keine bekommst.

Was du einsetzen kannst hängt auch damit zusammen wo du es einsetzen 
willst. Und vor allem: Was darf es KOSTEN ?

Autor: Bjojon (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag: Mit SPI ist das überlagerte Protokoll natürlich auch nicht 
definert.

Generell ist es immer sinnvoll sich an bestehende Lösungen zu 
orientieren und standardisierte Sache zu verwenden.

Das genannte Netzwerkkabel ist gut - Massenware, daher billig und leicht 
zu bekommen.

Ich weis, daß man sich gerade als Hobbybastler am Anfang schwer tut und 
gerne die tollsten Sachen einbauen würde, aber etwas professionell zu 
Entwickeln ist einfach was anderes. Ich kann auch nur wiederholen: setzt 
dich mal mit einem erfahreneren Kollegen zusammen (in diesem Sinne volle 
Zustimmung für "kurz").

Autor: Witali (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke an alle zusammen,

eure Tipps, Vorschläge und Diskussionen waren für mich sehr hilfreich. 
Jetzt habe ich mehr Wissen über die ganze Sache und weiß was alles zu 
berücksichtigen ist.

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.