Forum: Mikrocontroller und Digitale Elektronik Einfluss von Kabeltyp, -Länge und Platinenkonfiguration auf Performance von RS485 Kommunikation


von Felix (Gast)



Lesenswert?

Hallo Zusammen,
Ich arbeite gerade an einem Projekt bei dem ein Raspberry Pi mit 
mehreren Arduinos via RS485 über eine Strecke von 15-20 Metern 
kommunizieren soll.
Ich bin dabei zunächst diesem Tutorial gefolgt, was super funktioniert 
hat: 
https://circuitdigest.com/microcontroller-projects/rs485-serial-communication-between-arduino-and-raspberry-pi
Das funktioniert selbst mit "normalen" paralleleln, nicht verdrillten 
Kabeln mit mehreren Verlängerungselementen dazwischen sozusagen als 
worst-case Verkabelung.
Nun zum eigentlichen Problem:
Ich habe das ganze um Montageaufwand und Platz zu sparen auf einer 
eigenen Platine wie eine Art Shield nachgebaut anhand dieses Schaltplans 
https://arduinoinfo.mywikis.net/wiki/RS485-Modules
Die Kommunikationskette sieht dann etwa so aus wie auf dem Foto.
Die nachgebaute Version funktioniert super bei kurzen Kabeln von 1-2m 
schwächelt aber bei meinem worst-case 20Meter Verlängerungs-Kette.
Da kamen mir mehrere Fragen auf:
1. Welchen Einfluss hat bei den Kabellängen der Kabeltyp? Braucht man 
bei 10-20 Metern vllt. doch schon twisted-pair Kabel oder sogar 
irgendeine Art von Schirmung? Hatte ich da beim ersten Versuch einfach 
Glück?
2. Ist diese Ketten-Topologie mit den ganzen JST Steckern eventuell 
schädlich für die Kommunikation? Ich würde da am Ende gerne 10-15 Slaves 
anschließen wenn möglich.
3. Auf der Platine sind noch ein paar Andere Komponenten verbaut 
(Spannungswandler mit Kondensatoren, 3 Transistoren für je eine Lampe 
und dazugehörige Widerstände etc.) Kann davon irgendetwas einen Einfluss 
haben?
4. Ist der Einbau auf der Platine selbst relevant? (Leiterbreite, 
Abstand o.Ä.)

Ich hoffe der ein oder andere mag vielleicht seine Erfahrungen teilen.
LG und danke im Voraus,
Felix

von Hmmm (Gast)


Lesenswert?

Welche Geschwindigkeit?
Sind Terminierung und Bias-Widerstände vorhanden?
Stimmt das Timing, damit sich nicht Busteilnehmer gegenseitig stören?

Beitrag #6877801 wurde vom Autor gelöscht.
von Abdul K. (ehydra) Benutzerseite


Lesenswert?

Also von Modul zu Modul gehen jeweils drei Adern?!

von Rudi S. (Gast)


Lesenswert?

Felix schrieb:
> Ich arbeite gerade an einem Projekt bei dem ein Raspberry Pi mit
> mehreren Arduinos via RS485 über eine Strecke von 15-20 Metern
> kommunizieren soll.

Kuck dir EIA-422 an. Da steht alles drin.

https://www.ti.com/lit/an/snla044b/snla044b.pdf
http://www.interfacebus.com/Design_Connector_RS422.html

von Felix (Gast)


Lesenswert?

Zu den Rückfragen:
Geschwindigkeit: 9600 baud (Kann ich noch reduzieren wenn nötig, sind 
nicht viele Daten)
Terminierung und Bias Widerstände sind vorhanden, identisch 
dimensioniert wie in meinem verlinkten Schema.
Von Modul zu Modul gehen 4 Adern: VCC,GND und die zwei Adern des 
Differenzsignals.
Die Links schau ich mir heute abend mal an, danke.

von Hmmm (Gast)


Lesenswert?

Felix schrieb:
> Geschwindigkeit: 9600

Völlig unkritisch, habe ich auch schon über mehrere 100m altes 
Telefonkabel gefahren.

Felix schrieb:
> Terminierung und Bias Widerstände sind vorhanden, identisch
> dimensioniert wie in meinem verlinkten Schema.

Die Bias-Widerstände darin sind mit 20k viel zu gross. Die bilden mit 
der Terminierung einen Spannungsteiler, für mindestens 0.2V Differenz 
bietet sich (bei Terminierung mit 120 Ohm) ein Wert von jeweils 680 Ohm 
an.

Natürlich nur 1x pro Bus, nicht für jeden Teilnehmer!

von Hmmm (Gast)


Lesenswert?

Hmmm schrieb:
> Natürlich nur 1x pro Bus, nicht für jeden Teilnehmer!

Noch ein Hinweis, falls Du das Verlinkte 1:1 nachgebaut hast: Terminiert 
wird auch nicht bei jedem Teilnehmer, sondern an den beiden Bus-Enden.

von Andreas S. (Firma: Schweigstill IT) (schweigstill) Benutzerseite


Lesenswert?

Hmmm schrieb:
> Die Bias-Widerstände darin sind mit 20k viel zu gross. Die bilden mit
> der Terminierung einen Spannungsteiler, für mindestens 0.2V Differenz
> bietet sich (bei Terminierung mit 120 Ohm) ein Wert von jeweils 680 Ohm
> an.

So ziemlich alle RS485-Leitungstreiber der letzten 20 Jahre haben 
entsprechend angepasste Schwellwerte, so dass bei nicht allzu stark 
gestörter Umgebung die Fail-Safe-Schaltung eigentlich nicht mehr 
erforderlich ist. Sofern der TE wirklich einen Original MAX485 einsetzt, 
trifft das auch hier zu.

> Natürlich nur 1x pro Bus, nicht für jeden Teilnehmer!

Ansonsten soll die Fail-Safe-Schaltung ja nicht nur im Normalbetrieb 
funktionieren, sondern auch bei unterbrochenem Bus ordentliche 
Ruhesignalpegel liefern. Daher finde ich es sogar besser, wenn jeder 
Teilnehmer hochohmige Fail-Safe-Widerstände besitzt.

Wenn die Widerstände zu gering sind, besteht die Gefahr, dass ein 
ausgeschalteter Busteilnehmer, der folglich auch keine 
Fail-Safe-Versorgung bereitstellt, den Bus belastet.

von Hmmm (Gast)


Lesenswert?

Andreas S. schrieb:
> So ziemlich alle RS485-Leitungstreiber der letzten 20 Jahre haben
> entsprechend angepasste Schwellwerte, so dass bei nicht allzu stark
> gestörter Umgebung die Fail-Safe-Schaltung eigentlich nicht mehr
> erforderlich ist. Sofern der TE wirklich einen Original MAX485 einsetzt,
> trifft das auch hier zu.

Im MAX485-Datenblatt ist zwar von einem Fail-safe-Feature die Rede ("if 
the input is open circuit"), als Threshold Voltage wird aber weiterhin 
-0.2V - 0.2V angegeben, so dass ich dafür nicht meine Hand ins Feuer 
legen würde.

Erst bei der MAX3080-Serie kann man wirklich von fail-safe sprechen:

> The  MAX3080  family  guarantees a  logic-high  receiver output when the
> receiver inputs are shorted or open, or when  they  are  connected  to  a
> terminated  transmission line with all drivers disabled. This is done by
> setting the receiver threshold  between  -50mV  and  -200mV.

Aber da der TO hier von einer 20 Meter langen "Kommunikationskette" 
spricht, sehe ich das Problem eher bei den Terminatoren. Vermutlich 
diverse Busteilnehmer hintereinander, jeder davon mit 
120-Ohm-Terminierung.

Oder eben die üblichen Firmwareprobleme bei der TX/RX-Umschaltung.

von Falk B. (falk)


Lesenswert?

Felix schrieb:

> Ich habe das ganze um Montageaufwand und Platz zu sparen auf einer
> eigenen Platine wie eine Art Shield nachgebaut anhand dieses Schaltplans
> https://arduinoinfo.mywikis.net/wiki/RS485-Modules

WTF! Gibt es in Makerstan auch gescheite Schaltpläne und nicht nur die 
Verdrahtung per Fritzing?

> Die Kommunikationskette sieht dann etwa so aus wie auf dem Foto.

Foto? Meinst du deine leicht krakelige Skizze?

> Die nachgebaute Version funktioniert super bei kurzen Kabeln von 1-2m
> schwächelt aber bei meinem worst-case 20Meter Verlängerungs-Kette.

Dann ist was faul.

> 1. Welchen Einfluss hat bei den Kabellängen der Kabeltyp? Braucht man
> bei 10-20 Metern vllt. doch schon twisted-pair Kabel

Nicht zwingend, vor allem nicht bei niedrigen Baudraten.

>oder sogar
> irgendeine Art von Schirmung?

Nein.

>Hatte ich da beim ersten Versuch einfach
> Glück?

Kann sein.

> 2. Ist diese Ketten-Topologie mit den ganzen JST Steckern eventuell
> schädlich für die Kommunikation?

Nein.

> Ich würde da am Ende gerne 10-15 Slaves
> anschließen wenn möglich.

Sollte relativ einfach gehen.

> 3. Auf der Platine sind noch ein paar Andere Komponenten verbaut
> (Spannungswandler mit Kondensatoren, 3 Transistoren für je eine Lampe
> und dazugehörige Widerstände etc.) Kann davon irgendetwas einen Einfluss
> haben?

Eigentlich nicht.

> 4. Ist der Einbau auf der Platine selbst relevant? (Leiterbreite,
> Abstand o.Ä.)

Man kann schon diverse Dinge vermurksen, idiotensicher ist es nicht.

> Ich hoffe der ein oder andere mag vielleicht seine Erfahrungen teilen.

Dann teile du erstmal einen gescheiten Schaltplan und Bilder von deinem 
Aufbau.

von Falk B. (falk)


Lesenswert?

Felix schrieb:
> Zu den Rückfragen:
> Geschwindigkeit: 9600 baud (Kann ich noch reduzieren wenn nötig, sind
> nicht viele Daten)

Total harmlos.

> Terminierung und Bias Widerstände sind vorhanden, identisch
> dimensioniert wie in meinem verlinkten Schema.

Wo denn?

> Von Modul zu Modul gehen 4 Adern: VCC,GND und die zwei Adern des
> Differenzsignals.

Schon mal gut.

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
Noch kein Account? Hier anmelden.