Guten Abend,
ich möchte zwei Mikrocontroller miteinander kommunizieren lassen.
Keiner der beiden ist ein wirklicher "Master". Rund 150 Meter liegen
zwischen beiden Teilnehmern, trotzdem kommt Funk nicht in Frage.
Ich dachte mir, ich mache das ganze mit Uart (RS-422) über Ethernetkabel
(differenzielles Signal und natürlich noch Optokoppler dazu).
Leider habe ich keine Ahnung von Bussystemen. Kann mir jemand ein paar
Tipps geben? Wird das überhaupt so funktionieren?
Beste Grüße.
@ thiim (Gast)
>ich möchte zwei Mikrocontroller miteinander kommunizieren lassen.
Wenn es nur 2 sind, ist das kein wirklicher Bus.
>Ich dachte mir, ich mache das ganze mit Uart (RS-422) über Ethernetkabel>(differenzielles Signal und natürlich noch Optokoppler dazu).
Kann man machen.
>Leider habe ich keine Ahnung von Bussystemen. Kann mir jemand ein paar>Tipps geben? Wird das überhaupt so funktionieren?
Sicher. Nimm einfach den UART.
Welche Baudrate soll es mal werden?
Generell würde ich eine symmetrische Verbindung machen. Das kann im
einfachsten Fall eine 2-adrige Leitung sein, also wie RS-485. Dieser
Verbindungstyp ist störunempfindlich weil Telefonleitungen, die ja
durchaus mehrere Kilometer lang sind, genau so aufgebaut sind, ebenso
der CAN-Bus. Dabei kommt es am Ende der Leitung nur auf den
Spannungsunterschied zwischen den Leitungen an ob das High oder Low ist.
Und eine entsprechende galv. Trennung kricht man damit auch hin, wenn
man die den überhaupt braucht. Generell kann man RS-485 je nach Speed
diverse Kilometer lang auslegen.
Schau dir die Treiber von TI wie SN65HVD23D (25MBit@160m) &
SN65HVD24D(3MBit @500mm) an. Ich wuerd RS422 mit 2 Aderpaaren RS422
implementieren und mir die Umschalterei des RS485 sparen. Einfach je an
das UART und gut ist.
> Welche Baudrate soll es mal werden?
Darüber habe ich mir noch wenig Gedanken gemacht, aber wirklich viele
Daten werden es nicht sein, die ich versenden muss.
> also wie RS-485.
Das dachte ich mir auch. Rs422 ist ja, so wie ich es verstanden habe,
lediglich eine Erweiterung der RS485. Im letzteren liegt Rx und Tx auf
dem selben verdrillten Aderpaar, bei RS422 sind es 4 Leitungen statt 2.
Ich schwanke gerade zwischen folgenden ICs:
SN65HVD24D
ADM2582E
Wobei ich sogar eher zum ADM2582E/ADM2587E tendiere. Dort ist ja in der
Tat alles drinn was ich möchte. Ich müsste es nur noch an den UART
packen.
Warum wird im Datenblatt eigentlich von RS485 geredet, obwohl Rx und Tx
vorhanden?
Beste Grüße.
Wenn die Contorller CAN haben, denke auch den CAN Bus. Da brauchts Du
nicht auf Arbitrierung zu achten und hast zumindestens einige
Sicherungschichten...
thiim schrieb:> Wobei ich sogar eher zum ADM2582E/ADM2587E tendiere. ....> Warum wird im Datenblatt eigentlich von RS485 geredet, obwohl Rx und Tx> vorhanden?
In der Zusammenfassung bzw. im Datenbladl steht auch RS-422.
Features and Benefits
- Isolated RS-485/RS-422 transceiver, configurable as half or full
duplex
....
Applications
- Isolated RS-485/RS-422 interfaces
....
Uwe B. schrieb:> Wenn die Contorller CAN haben, denke auch den CAN Bus. Da brauchts Du> nicht auf Arbitrierung zu achten und hast zumindestens einige> Sicherungschichten...
Hm, bin zwar CAN-Fan, aber hier bringt keine Vorteile. Hauptvorteil
Multimaster entfällt (nur 2 Teilnehmer), Bandbreite ist deutlich
geringer als bei RS422 (schlapper rezessiver Pegel, ack-timing,
overhead, halb-duplex)
> .. Bandbreite (von CAN) ist deutlich geringer als bei RS422 ..
Man muss auch RS422 nicht mit der maximalen Geschwindigkeit laufen
lassen.
Man sollte RS422 auch nicht mit CAN vergleichen. CAN ist schon ein
Protokol, das hat einiges vorgegeben, das man mag oder nicht. Waehrend
RS422 nur eine physikalische Spezifikation ist, ohn ein Bit zu
definieren.
Schlusssendlich bestimmen das Medium und die Treiber die maximal
moegliche Bit Rate.
Oh D. schrieb:>> .. Bandbreite (von CAN) ist deutlich geringer als bei RS422 ..>> Man muss auch RS422 nicht mit der maximalen Geschwindigkeit laufen> lassen.
Aber man kann :-)
> Man sollte RS422 auch nicht mit CAN vergleichen. CAN ist schon ein> Protokol, das hat einiges vorgegeben, das man mag oder nicht. Waehrend> RS422 nur eine physikalische Spezifikation ist, ohn ein Bit zu> definieren.> Schlusssendlich bestimmen das Medium und die Treiber die maximal> moegliche Bit Rate.
Beim CAN eben nicht, das Ack muss in den dafür vorgesehenen Zeitschlitz
passen und da fängt es an spannend zu werden bei längerer Leitung.
Stärkere Treiber helfen nicht gegen Signallaufzeiten. 5ns/m machen bei
100m eben schon 500ns -> 1MBit geht bei CAN und 100m eben nicht. Bei
RS485/422 spielt das keine Rolle, deshalb deutlich höhere mögliche
Datenraten und Entfernungen.
Klar nimmt einem der CAN-Controller Arbeit ab bei der Sicherung der
Übertragung. Aber das ist mit CRC auch leicht möglich, es reicht ja i.a.
zu erkennen, dass irgendwas beschädigt wurde. Daten neu anfordern,
fertig.
Der Hauptvorteil ist und bleibt die einfache Vernetzbarkeit, und genau
das wird hier überhaupt nicht benötigt.
Danke für eure Hilfe!
> Es gingen auch RS232-Treiber/Empfänger mit Abschlußwiderständen an den> RX-Eingängen. Galvanische Trennung mit Optokopplern schadet nie.
Bislang sieht es so aus als würde ich den ADM2582E nehmen.
Da keiner der beiden Teilnehmer wirklich der "Master" ist, bin ich am
überlegen wie ich die Busbelegung realisiere. Wie mache ich die
Arbitrierung?
thiim schrieb:> Darüber habe ich mir noch wenig Gedanken gemacht, aber wirklich viele> Daten werden es nicht sein, die ich versenden muss.
Die Menge der Daten sagt nichts über die erforderliche Datenrate aus ;)
OK, wenn dir 9600 oder 19200 Baud zum Beispiel reichen dann würde ich an
deiner Stelle ernsthaft über eine läppische UART-Verbindung nachdenken.
Klar, RS485/422 sind "stabiler" aber UART ist auch sehr "stabil" und
wenn es nicht sehr schnell sein muss kommt man damit auch sehr weit,
deine 200m schafft man locker problemlos damit.
thiim schrieb:> Wie mache ich die> Arbitrierung?
Unter TCP/IP wird da wohl nichts gehen :-(
M. K. schrieb:> Klar, RS485/422 sind "stabiler" aber UART ist auch sehr "stabil"
Und nachts ist es kälter als draußen :-(
Hat der Regen die Rüben aufgeweicht?
thiim schrieb:> Ich dachte mir, ich mache das ganze mit Uart (RS-422) über Ethernetkabel> (differenzielles Signal und natürlich noch Optokoppler dazu).
Wenn Du die beiden 120 Ohm-Abschlusswiderstände nicht vergisst, dann
hast Du mit dieser Konfiguration selbst bei 250 kBaud noch reichlich
Reserve.
> Unter TCP/IP wird da wohl nichts gehen :-(
Naja, von den 8 Leitungen sind bislang nur 4 belegt (A und B, X und Y).
Andererseits ist UART vollduplexfähig (hat ja ein eigenes Sende- und
Empfangsbuffer), wodurch ich eine Arbitrierung bei zwei Teilnehmern auch
gar nicht brauche, richtig?
Ich dachte kurzzeitig an ein data ready / data accepted Signal, aber das
würde auch einen weiteren ADM2582E erfordern.
Prinzipiell wäre auch meine erste Wahl in so einem Fall RS485 (RS422
wenn keiner Master spielen kann/will).
thiim schrieb:> Bislang sieht es so aus als würde ich den ADM2582E nehmen.
Ist aber wahrscheinlich nicht die beste Wahl für dein Anliegen, weil
viel zu schnell. Slew rate limited Typen wie MAX3082 oder MAX3072 sind
da besser. Aber wenn du wirklich die galvanisch Trennung brauchst, dann
nimm lieber den ADM2587E vom selben Datenblatt. Grund, die schnellen
Flanken sind es die die Reflexionen verursachen. Und da du ja keine
Hochgeschwindigkeitsübertragung brauchst....
Selbst schon getestet mit ca. 250m Stern/Stich/Stich auf Stich/... also
wilde durcheinander Topologie, 112k/250kBaud und nicht mal verdrillten
Kabeln mit MAX3082/72. Das Ganze noch dazu ohne Abschlusswiderstände (2x
1/256 in den MAX) und trotzdem ziemlich saubere Signale. Wenn bei dir
beide gleichzeitig senden, dann sind verdrillte Leitungen natürlich zu
bevorzugen. LAN, CAT5 Kabel ist perfekt dafür, und billig.
Argv, schweres Thema.
> Grund, die schnellen Flanken sind es die die Reflexionen verursachen.
Ja, daran habe ich tatsächlich nicht gedacht.
Von der MAX308x Reihe kommt zwar der MAX3089 in Frage, aber mit dem
ADM2587E bekomme ich alles sauber galvanisch getrennt (zudem habe ich
nur 3.3V auf dem Board).
Nehme ich dem Kabel eigentlich ein Aderpaar für V_isoout / V_isoin und
GND_2? Lege ich diese also auch mit auf die Leitung? (neben A/B, X/Y)?