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!!
Dazu guckt man sich das Datenblatt der RS485-Transceiver an. Dort sollte es eine Angabe zu maximalen Geschwindigkeit finden.
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.
1 | TTL->RS422 RS422->TTL |
2 | __________________________ |
3 | SCLK > __________________________ > |
4 | |
5 | SPI __________________________ AD-Wandler |
6 | MOSI > __________________________ > |
7 | |
8 | __________________________ |
9 | MISO < __________________________ < |
10 | |
11 | __________________________ |
12 | CS > __________________________ > |
@ 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
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?
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
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.
@ 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?
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
1 | Compatible With ANSI Standard TIA/EAI-485-A |
EDIT: Ich hatte "nur" behauptet, es gäbe solche Transmitter, nicht, dass der Standard das hergibt ;-)
@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?
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
Can-Bus wäre die beste Lösung... Funktioniert in jedem Auto.
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!!!!
Denke auch an das Kabel ! 6 oder gar 8 Leiter (abgeschirmt) fuer einen Sensor ? - ? - ! Hmrm
> 6 oder gar 8 Leiter (abgeschirmt) fuer einen Sensor ? - ? - !
Die sind billig und überall zu haben: CAT5 Kabel
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.
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 ?
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").
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.
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.