Forum: Mikrocontroller und Digitale Elektronik RS485 und Multiplexer - Platine noch zu retten?


von murphy (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen :)


----------------------------------------------
Zum Kontext:

Ich habe ein System aufgebaut mit einem Raspberry Pi (Master) und 
mehreren Arduino ProMinis 5V (Slaves), die an unterschiedlichen Orten 
unterschiedliches tun und miteinander reden.
Für die Kommunikation habe ich mich für RS485 + Modbus entschieden mit 
den vermutlich günstigsten Transceivern-Modulen (MAX485), die es so gibt 
(s. Anhang). Am Raspberry hängt ein USB-Transceiver.
Das funktioniert auch alles soweit (und ich merke an dieser Stelle an, 
dass ich sowohl das Modbus-Protokoll als auch RS485 noch nicht 
vollständig durchdrungen habe und ich mich noch zu den Anfängern zähle 
was Elektrotechnik anbelangt). Die Baudrate beträgt 19200 und die 
Auslastung ist sehr sehr gering.

Das System ist in letzter Zeit gewachsen, und es ließ sich nicht 
wirklich vermeiden das RS485-Netzwerk auf eine Sterntopologie 
auszubauen. Daher war der Plan, immer nur einen EINZELNEN RS485-Zweig 
auf den Raspberry durchzuschalten. Also die zugehörige Schaltung 
geplant, gemerkt dass Lochraster diesmal ein wenig umständlich wird und 
daher das Projekt direkt mit meinem ersten selbsterstellten 
Leiterplatten-Design mit KiCAD kombiniert (s. Anhang).

----------------------------------------------
Problemstellung:

Bei der Schaltung sollte mithilfe des Dual-Channel Multiplexers CD4052B 
jeweils die A- und B-Leitung auf den USB-Transceiver durchgeschaltet 
werden. [Nebenfunktion war das Abschalten der 5V-VCC_Leitung, die im 
gleichen Kabel geführt wird. Das ist für Slaves gedacht, die nur selten 
angesprochen werden und dann nur kurz zum Daten übermitteln hochgefahren 
werden.]
Leider lag mein Verständnis eines Multiplexers wohl ein gutes Stück 
daneben. Ich dachte nicht, dass R_on im Bereich von 100 Ohm liegt (bzw. 
dass R_on den Widerstand zwischen Ein- und Ausgang bezeichnet).
Kurz gesagt: mit dem MUX dazwischen funktioniert die Kommunikation nicht 
mehr.
Die Freude über die erste professionellere Platine ist erstmal dahin...


----------------------------------------------
Fragestellungen:

A) Kann mir jemand erklären oder Referenzen geben, warum der Widerstand 
eines Mux so "hoch" ist. Ich dachte, dass da ein paar FETs 
durchgeschalten werden und hatte ein paar Ohm im Sinn.

B) Kann mir jemand erklären, warum das mit dem hohen seriellen 
Widerstand in den differentiellen Leitungspaaren nun nicht mehr 
funktioniert. (100 Ohm entsprächen bei meinem Kabel so um die 330m. 
AWG26 CCA Koaxialkabel)

C) Gibt es Multiplexer (oder Bauteile die dasselbe tun) mit deutlich 
geringeren Widerständen?

D) Ist die Platine noch zu retten? Ich bräuchte in dem Fall ja ein 
baugleiches Bauteil (SOP-16), das meine Anforderungen erfüllt.
Ein anderer Ansatz ist soweit ich das erkannt habe, TTL-Pegel 
durchzuschicken. Dabei würde dann wohl RX/TX statt A/B durchgeschalten 
werden. Folglich würde man für jeden Zweig noch einen weiteren 
Transceiver benötigen?! Dann müsste ich auf den USB-Transceiver wohl 
verzichten und direkt auf die GPIO-Pins gehen incl. Pegelwandler, da die 
RS485-Module und die verwendeten ProMinis die 5V brauchen?!


----------------------------------------------
Verwandte Topics, aus denen ich nicht umfassend schlau wurde:

Beitrag "RS485-Multiplexer"


----------------------------------------------
Sorry für den langen Text & vielen Dank für eure Hilfe!

von Pepe T. (pepe_t)


Lesenswert?

Für was brauchts denn den multiplexer?
RS485 einfach alle zusammenhängen, dafür sind die gebaut.

von Max M. (Gast)


Lesenswert?

murphy schrieb:
> A) Kann mir jemand erklären oder Referenzen geben, warum der Widerstand
> eines Mux so "hoch" ist.

125Ohm nach DB.
Warum ist 'Eigenschaften raten und mit Wunschvorstellungen annehmen' 
hier eigentlich so populär?
Man sollte ein DB schon lesen und verstehen bevor man sowas einsetzt.

murphy schrieb:
> B) Kann mir jemand erklären, warum das mit dem hohen seriellen
> Widerstand in den differentiellen Leitungspaaren nun nicht mehr
> funktioniert.

125R + 125R = 250R im Multiplexer und 120R || 120R = 60R Busabschluss 
ist eben eine echt dumme Kombination für kräftige Pegel.

murphy schrieb:
> D) Ist die Platine noch zu retten?
Das ganze Multiplexe ist fürn A....
RS485 ist ein BUS. Da kannst Du min 64 Slaves anschliessen und mit 
komplexer Terminierung und oder niedrigen Datenraten kannst Du denn auch 
in wilder Stern, Baum, Bus, Spaghettiknäuel Verkabelung nutzen.
Also defective by design die PCB.
Brück den ganzen Kram raus und benutze den Bus auch als Bus ohne diesen 
Hickhack.

von murphy (Gast)


Lesenswert?

Da ich nicht sonderlich erfahren bin und eine Sterntopologie nicht 
empfohlen wird bei RS485 soweit ich das in Erinnerung habe.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

murphy schrieb:
> mit den vermutlich günstigsten Transceivern-Modulen (MAX485), die es so
> gibt (s. Anhang)
Die Dinger, die völlig ignorieren, dass zu den Datenleitungen auch der 
GND gehört...

von murphy (Gast)


Lesenswert?

Die erste Antwort bezieht sich auf Pepe Ts. Frage.

Lothar M. schrieb:
> Warum ist 'Eigenschaften raten und mit Wunschvorstellungen annehmen'
> hier eigentlich so populär?

Naja der Widerstand liegt doch in der Größenordnung und zudem hängt der 
soweit ich das sehe von der angelegten Spannung ab.

> Man sollte ein DB schon lesen und verstehen bevor man sowas einsetzt.
Das ist korrekt, aber manchmal erschlagen die einen auch und man hat 
falsche Vorstellungen im kopf.

> murphy schrieb:
>> B) Kann mir jemand erklären, warum das mit dem hohen seriellen
>> Widerstand in den differentiellen Leitungspaaren nun nicht mehr
>> funktioniert.
>
> 125R + 125R = 250R im Multiplexer und 120R || 120R = 60R Busabschluss
> ist eben eine echt dumme Kombination für kräftige Pegel.

Also zu viel Spannungsabfall. Dann wäre die Frage schon einmal geklärt.


> Das ganze Multiplexe ist fürn A....
> RS485 ist ein BUS. Da kannst Du min 64 Slaves anschliessen und mit
> komplexer Terminierung und oder niedrigen Datenraten kannst Du denn auch
> in wilder Stern, Baum, Bus, Spaghettiknäuel Verkabelung nutzen.
> Also defective by design die PCB.
> Brück den ganzen Kram raus und benutze den Bus auch als Bus ohne diesen
> Hickhack.

Hmm ok. Ich bin jedoch kein Profi bin aktuell froh, dass ich die 120 Ohm 
Terminierung korrekt eingesetzt habe.
Ein weiterer Vorteil, weshalb ich den "Zwang zum Stern" nicht so schlimm 
fand, war, dass ich damit eben gut die einzelnen Arduinos an einem 
Einzelbus ein und auschalten hätte können. Daher würde ich mich doch 
noch über die ein oder andere Anregung freuen, ob das System mit 
mehreren Bussen (es hängen ja teils auch 3 µC an einem Stang) wie es 
aktuell geplant war zu retten ist. Falls nicht werde ich deinen Tipp 
gerne umsetzten und alles auf einen einzelnen Bus legen.

von Stefan F. (Gast)


Lesenswert?

> Kann mir jemand erklären oder Referenzen geben,
> warum der Widerstand eines Mux so "hoch" ist.

Weil die Transistoren darin klein sind. Es gibt natürlich andere 
geeignete Chips.

Du kannst mehrere CD4052 übereinander löten, um den Innenwiderstand zu 
reduzieren.

von murphy (Gast)


Lesenswert?

Lothar M. schrieb:

> Die Dinger, die völlig ignorieren, dass zu den Datenleitungen auch der
> GND gehört...

Naja GND wird ja mitgeführt, da alle Teilnehmer über die Leitung mit 
Strom versorgt werden. Aber ja, das hat sich so ergeben mit den 
günstigen Modulen, da ich es erstmal testen wollte um mich mit der 
Thematik auseinanderzusetzen. Und da es funktionierte (ohne MUX) blieb 
es bei den Modulen.

von murphy (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
>> Kann mir jemand erklären oder Referenzen geben,
>> warum der Widerstand eines Mux so "hoch" ist.
>
> Weil die Transistoren darin klein sind. Es gibt natürlich andere
> geeignete Chips.
>
> Du kannst mehrere CD4052 übereinander löten, um den Innenwiderstand zu
> reduzieren.

Ah ok, gut zu wissen und ein interessanter Lösungsansatz. Ist zunächst 
mal notiert (ich habe die naive Hoffnung,dass noch eine weitere 
Lösungsmöglichkeit aus dem Forenhimmel fällt). Danke schon einmal.

Dann wären die Fragen A) und B) schon einmal geklärt.

von Pepe T. (pepe_t)


Lesenswert?

Stefan ⛄ F. schrieb:
> mehrere CD4052 übereinander löten

Und zur sicherheit parallel dazu ein relais laufenlassen :)

von Stefan F. (Gast)


Lesenswert?

murphy schrieb:
> interessanter Lösungsansatz.

Ich denke nicht, dass dadurch dein Problem gelöst wird.

Hast du alle Geräte (auch den PC) über GND miteinander verbunden?
Hast du alle langen Leitungen (>30cm) an beiden Enden mit 120Ω 
terminiert?

Hast du die Signale mal mit einem Oszilloskop gemessen? Wenn ja: zeigen! 
Wenn nicht: machen!

Wenn die Leitung zwischen deinem Multiplexer und dem USB Adapter kurz 
ist (<30cm) dann brauchst du sie nicht zu terminieren und dann ist der 
Innenwiderstand des Multiplexers egal.

von murphy (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:

> Hast du alle Geräte (auch den PC) über GND miteinander verbunden?
Ja.

> Hast du alle langen Leitungen (>30cm) an beiden Enden mit 120Ω
> terminiert?
Der USB-Transceiver ist terminiert und der letzte Busteilnehmer. 
Teilnehmer dazwischen sind kurz angebunden. Das gilt für alle 
Einzelbusse.

> Wenn die Leitung zwischen deinem Multiplexer und dem USB Adapter kurz
> ist (<30cm) dann brauchst du sie nicht zu terminieren und dann ist der
> Innenwiderstand des Multiplexers egal.
Die ist kurz.
Wann genau ist der Innenwiderstand egal? Ich komme mit diesem 
Gedankengang gerade nicht ganz mit.

von Stefan F. (Gast)


Lesenswert?

murphy schrieb:
> Der USB-Transceiver ist terminiert und der letzte Busteilnehmer.
> Teilnehmer dazwischen sind kurz angebunden. Das gilt für alle
> Einzelbusse.

Das ist mir zu unklar, zeichne es auf.

> Wann genau ist der Innenwiderstand egal?
1
                    _______
2
                   |       |
3
Gerät 1 ===========|       |
4
                   |       |
5
Gerät 2 ===========|       |
6
                   | MUX   |=====USB Adapter
7
Gerät 3 ===========|       |
8
                   |       |
9
Gerät 4 ===========|       |
10
                   |_______|

Links lange Leitungen mit Abschlusswiderständen an beiden Enden.
Rechts kurze Leitung ohne Abschlusswiderstände.

von Stefan F. (Gast)


Lesenswert?

Ach nee, das geht auch nicht. Damit würde nur die Kommunikation von 
links nach rechts besser aber nicht in die umgekehrte Richtung.

Dann wohl doch mehrere Multiplexer übereinander löten.

von murphy (Gast)


Angehängte Dateien:

Lesenswert?

Stefan ⛄ F. schrieb:
> murphy schrieb:
>> Der USB-Transceiver ist terminiert und der letzte Busteilnehmer.
>> Teilnehmer dazwischen sind kurz angebunden. Das gilt für alle
>> Einzelbusse.
>
> Das ist mir zu unklar, zeichne es auf.
Gerade dabei gewesen --> s. Bild
R = 120 Ohm

von Stefan F. (Gast)


Lesenswert?

murphy schrieb:
> Verschaltung.jpg

Ich glaube da bleibt dir keine andere Möglichkeit, als den Multiplexer 
zu verbessern.

von murphy (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Ach nee, das geht auch nicht. Damit würde nur die Kommunikation
> von
> links nach rechts besser aber nicht in die umgekehrte Richtung.
>
> Dann wohl doch mehrere Multiplexer übereinander löten.

Jetzt hab ich schon kurz gefeiert. :D

Oder doch dieser Ansatz?
"Ein anderer Ansatz ist soweit ich das erkannt habe, TTL-Pegel
durchzuschicken. Dabei würde dann wohl RX/TX statt A/B durchgeschalten
werden. Folglich würde man für jeden Zweig noch einen weiteren
Transceiver benötigen?! Dann müsste ich auf den USB-Transceiver wohl
verzichten und direkt auf die GPIO-Pins gehen incl. Pegelwandler, da die
RS485-Module und die verwendeten ProMinis die 5V brauchen?!"

von murphy (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> murphy schrieb:
>> Verschaltung.jpg
>
> Ich glaube da bleibt dir keine andere Möglichkeit, als den Multiplexer
> zu verbessern.

Gibt es denn keine Multiplexer mit größeren Transistoren und geringerem 
R_on.

Vielleicht mal noch ganz grundlegend. Was wäre denn ein besserer Ansatz 
gewesen drei RS485-Busse auf einen seriellen Eingang zu bringen ohne sie 
zu einem Bus zusammenzufassen? Den Mux mit einzelnen MOSFETs aufbauen?

von Stefan F. (Gast)


Lesenswert?

murphy schrieb:
> Oder doch dieser Ansatz? ...

Das wäre ja keine Lösung im Sinne deiner Anfrage. Du wolltest doch die 
Platine retten.

von murphy (Gast)


Angehängte Dateien:

Lesenswert?

Stefan ⛄ F. schrieb:
> murphy schrieb:
>> Oder doch dieser Ansatz? ...
>
> Das wäre ja keine Lösung im Sinne deiner Anfrage. Du wolltest doch die
> Platine retten.

Naja dann würde vor dem Mux jeder RS485-Bus bereits zu TTL-Pegeln 
gewandelt?! Und wenn ich das richtig verstanden habe sind die Eingänge 
der seriellen Schnittstelle hochohmig, sodass kaum Strom fließt und 
somit auch kaum Spannung über dem MUX abfällt. Richtig? Würde das 
funktionieren?

Eine Lösung von der bisherigen Schaltung würde ich präferieren. Aber am 
Ende ist eine Lösung eine Lösung.

von Stefan F. (Gast)


Lesenswert?

murphy schrieb:
> Richtig? Würde das funktionieren?

Ja, ich denke schon. Dein USB Adapter passt da aber nicht mehr rein.

von Peter D. (peda)


Lesenswert?

murphy schrieb:
> Ich dachte nicht, dass R_on im Bereich von 100 Ohm liegt

Weit weg.
Laut TI Datenblatt sind es beim CD4052 und 5V bis zu 1050 Ohm.

Erst der 74HC4052 von NXP hat bei 4,5V max 180 Ohm.

von murphy (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:

> Ja, ich denke schon. Dein USB Adapter passt da aber nicht mehr rein.
Ok.
Jup..

von murphy (Gast)


Lesenswert?

Auf jeden Fall schon einmal vielen Dank allen die bis hierhin 
geantwortet haben. Ich würde mich über weitere Infos und Ideen freuen.

Insbesondere fände ich es klasse, wenn mir hierauf noch jemand eine 
Antwort geben könnte und sein Wissen einbringt:
"Vielleicht mal noch ganz grundlegend. Was wäre denn ein besserer Ansatz
gewesen drei RS485-Busse auf einen seriellen Eingang zu bringen ohne sie
zu einem Bus zusammenzufassen? Den Mux mit einzelnen MOSFETs aufbauen?"

von murphy (Gast)


Lesenswert?

Lösungsstand bisher:
- Spagetti-Topologie und einfach mal ausprobieren
- R_on reduzieren durch parallel aufgelöteten MUX
- Wandlung zu TTL vor dem MUX

von murphy (Gast)


Lesenswert?

Peter D. schrieb:
> murphy schrieb:
>> Ich dachte nicht, dass R_on im Bereich von 100 Ohm liegt
>
> Weit weg.
> Laut TI Datenblatt sind es beim CD4052 und 5V bis zu 1050 Ohm.
>
> Erst der 74HC4052 von NXP hat bei 4,5V max 180 Ohm.

Oh Entschuldigung, dein Beitrag habe ich überlesen.

Ja, das geht jetzt definitiv auf meine Kappe. Ich habe mich da von den 
angegebenen Ron_typ = 125 Ohm blenden lassen und vergessen, dass ich den 
Durchlasswiderstand eigentlich (ist schon paar Wochen her) schon mal 
gemessen habe. Nochmal kurz angesteckt und durchgemessen. R_on sind bei 
mir 263 Ohm bei 3,3V des Raspberrys. Die 125 Ohm wären bei 15V gültig.

Der 74HC4052 ist dann doch deutlich besser.
Lohnt sich ein Versuch (da es ihn ja baugleich gibt) oder bin ich auch 
mit dem 74HC4052 noch auf dem falschen Dampfer?
Die Frage nach dem grundsätzlich sinnvolsten Vorgehen bei meiner 
Problemstellung ist aktuell (für mich) noch ungeklärt. Würde mich freuen 
wenn sich da noch ein Experte melden würde.

Frage am Rande: Wenn im Datenblatt des CD4052 der AUGUST 1998 als Datum 
angegeben ist, wird der Chip dann immer noch baugleich (bezogen auf die 
Eigenschaften) wie zu der damaligen Zeit gefertigt?

von Uwe B. (uwebre)


Lesenswert?

murphy schrieb:

> Ist die Platine noch zu retten?

Nein, die Idee mit dem Multipexer ist Unsinn.

Nimm für jeden Strang einen MAX3485, direkt am (seriellen-) Port des 
Raspi, die DE jeweils an einen Portpin. Wenn du die RO-Leitungen der 
MAXe veroderst kannst du sogar allen Clients gleichzeitig zuhören. 
(Allerdings dürfen die nicht gleichzeitig senden..)
So kannst du die einzelnen Stränge auch korrekt abschließen.

In der Praxis haben wir mal in einem größeren Vortragssaal mehrere 
Bedienpanele mit RS485 (9600Bd) - Sternverkabelung anschließen müssen. 
Funktioniert erstaunlicherweise problemlos.

Uwe

von (prx) A. K. (prx)


Lesenswert?

murphy schrieb:
> Das System ist in letzter Zeit gewachsen, und es ließ sich nicht
> wirklich vermeiden das RS485-Netzwerk auf eine Sterntopologie
> auszubauen.

Diesen Stern durch Hin- und Rückleitungen in einen einzigen logischen 
Strang umzubauen ist keine Option?

von murphy (Gast)


Lesenswert?

Uwe B. schrieb:
> Nein, die Idee mit dem Multipexer ist Unsinn.
>
> Nimm für jeden Strang einen MAX3485, direkt am (seriellen-) Port des
> Raspi, die DE jeweils an einen Portpin. Wenn du die RO-Leitungen der
> MAXe veroderst kannst du sogar allen Clients gleichzeitig zuhören.
> (Allerdings dürfen die nicht gleichzeitig senden..)
> So kannst du die einzelnen Stränge auch korrekt abschließen.
>
> In der Praxis haben wir mal in einem größeren Vortragssaal mehrere
> Bedienpanele mit RS485 (9600Bd) - Sternverkabelung anschließen müssen.
> Funktioniert erstaunlicherweise problemlos.
>
> Uwe

Ich sehe schon, ich hätte hier vor der Platinenerstellung mal nachfragen 
sollen. Das denke ich nachher mal. Danke!


Ich habe zudem, mit dem inzwischen besseren Blick auf die Sache, nochmal 
nach ICs geschaut und siehe da auch etwas möglicherweise passendes 
gefunden:

MAX4618: R_on um 10 Ohm, gleiches Package und Bauform wie der CD4052B, 
Vcc bis 6V erlaubt. Könnte das der Königsmacher für das spezifische und 
hausgemachte Problem sein?

[MAX4782: R_on um 1 Ohm, gleiches Package und Bauform wie der CD4052B, 
allerding Vcc-max = 4.6V, da sind meine 5V dann zu viel. Ich betreibe 
das Teil mit 5V und schalte mit 3,3V um.]

[MAX14778: scheint sogar genau für RS485/RS232 gemacht zu sein, 
scheinbar gibt es diese Anwendung also doch?! Jedoch ansonsten 
unpassend.]

Keine Sorge, ich höre bald auf zu nerven. ;)

von murphy (Gast)


Lesenswert?

(prx) A. K. schrieb:
> murphy schrieb:
>> Das System ist in letzter Zeit gewachsen, und es ließ sich nicht
>> wirklich vermeiden das RS485-Netzwerk auf eine Sterntopologie
>> auszubauen.
>
> Diesen Stern durch Hin- und Rückleitungen in einen einzigen logischen
> Strang umzubauen ist keine Option?

Doch notfalls schon. Ich habe es auf der Liste - allerdings bin ich 
aktuell noch ein wenig hartnäckig um für das angesprochene Problem eine 
Lösung zu finden (s. Beitrag eins drüber). Ich will ja auch etwas lernen 
dabei. :)

von (prx) A. K. (prx)


Lesenswert?

murphy schrieb:
> MAX4618: R_on um 10 Ohm, gleiches Package und Bauform wie der CD4052B,
> Vcc bis 6V erlaubt. Könnte das der Königsmacher für das spezifische und
> hausgemachte Problem sein?

Allerdings sind obige zu den 4052 kompatiblen Schalter nicht für längere 
Busse gebaut, bei denen schon mal Pegel ausserhalb von -0,3V..VCC+0,3V 
problemlos verdaut werden sollten. Weshalb das Datasheet Schutzdioden 
nahelegt. Kein Problem mit dem inkompatiblen MAX14778.

: Bearbeitet durch User
von murphy (Gast)


Lesenswert?

(prx) A. K. schrieb:
> murphy schrieb:
>> MAX4618: R_on um 10 Ohm, gleiches Package und Bauform wie der CD4052B,
>> Vcc bis 6V erlaubt. Könnte das der Königsmacher für das spezifische und
>> hausgemachte Problem sein?
>
> Allerdings sind obige zu den 4052 kompatiblen Schalter nicht für längere
> Busse gebaut, bei denen schon mal Pegel ausserhalb von -0,3V..VCC+0,3V
> problemlos verdaut werden sollten. Weshalb das Datasheet Schutzdioden
> nahelegt. Kein Problem mit dem inkompatiblen MAX14778.

Ok, darf ich fragen wie diese höheren/niedrigeren Spannungen 
typischerweise zustande kommen? (Bei mir liegt auf jeden Fall alles auf 
dem selben GND falls das damit etwas zu tun hat).
Soweit ich das Datenblatt verstehe, dienen die Dioden dem Fall, dass man 
etwas anschliest bevor man VCC und GND angeschlossen hat? Ist dies dann 
derselbe Effekt, da VCC undefiniert ist und somit jeder Pin schnell um 
0,3V höheres Potential aufweisen kann?

Ist dieser Effekt bei max. 50m Buslänge vernachlässigbar?

von Stefan F. (Gast)


Lesenswert?

murphy schrieb:
> Ok, darf ich fragen wie diese höheren/niedrigeren Spannungen
> typischerweise zustande kommen?

In jedem Haus und im E-Werk sind die Null-Leiter mit dem Erdleiter 
verbunden, und der Erdleiter ist in den Geräten oft mit GND verbunden. 
Da Strom durch den Null-Leiter fließt, fällt an ihm Spannung ab. 
Deswegen hat jedes Gebäude ein anderes GND Potential.

Wenn nun deine Steuerung im Bürogebäude steht und die Maschine im 
benachbarten Gebäude, hast du einen Versatz auf GND. Das können durchaus 
ein paar Volt sein.

Beispiel: Deine Steuerung sendet +3V und das Gerät am anderen Ende der 
Leitung hat einen GND Versatz von 3VAC. Dann addieren sich die beiden 
Spannungen zu einer pulsierenden Spannung zwischen -1,2V und +7,2V.

Auch innerhalb von Gebäuden ist der Effekt häufig vorhanden. Es fließt 
immer ein bisschen Strom durch den Erdleiter, alleine schon wegen der 
Entstörkondensatoren in Netzfiltern. Stromfluss bewirkt Spannungsabfall.

Dann gibt's da noch die Masseschleife. Stelle dir vor, dein PC ist 
geerdet und per USB mit einem ebenfalls geerdeten Drucker verbunden, der 
abseits deines Arbeitstisches steht. Dann bildet die GND Leitung des USB 
Kabels und die Erd-Leitung der 230V Versorgung einen Ring. Wenn 
innerhalb dieses Rings ein elektromagetisches Feld erzeugt wird (z.B. 
durch einen WLAN Router, oder einen Staubsauger-Motor) dann induziert 
dieses eine Wechselspannung in der Masseschleife. Auch dann hast du 
nicht mehr überall GND=GND.

GND Versatz und Masseschleifen stören das Signal. Bei einer einfachen 
digitalen Übertragen von Logik-Signalen (wie bei Drucker mit 
Parallel-Port) reichen schon 0,5V um die Kommunikation zu stören. Und 1V 
reichen, um normale CMOS Mikrochips zu zerstören.

Differentielle Übertragung mit einer hohen Toleranz für GND Versatz (wie 
bei RS485 und CAN) oder einer Potentialtrennung durch Übertrager (wie 
bei Ethernet und ISDN) lösen das Problem.

von Push (Gast)


Lesenswert?

Uwe B. schrieb:

> Nein, die Idee mit dem Multipexer ist Unsinn.
>
> Nimm für jeden Strang einen MAX3485, direkt am (seriellen-) Port des
> Raspi, die DE jeweils an einen Portpin. Wenn du die RO-Leitungen der
> MAXe veroderst kannst du sogar allen Clients gleichzeitig zuhören.
> (Allerdings dürfen die nicht gleichzeitig senden..)
> So kannst du die einzelnen Stränge auch korrekt abschließen.
>
> In der Praxis haben wir mal in einem größeren Vortragssaal mehrere
> Bedienpanele mit RS485 (9600Bd) - Sternverkabelung anschließen müssen.
> Funktioniert erstaunlicherweise problemlos.

@TO: Mach es so!

von Stefan F. (Gast)


Lesenswert?

murphy schrieb:
> Ist dieser Effekt bei max. 50m Buslänge vernachlässigbar?

Nein. Vernachlässigbar ist er nur bei Geräten, die direkt nebeneinander 
stehen und von einer gemeinsamen Steckdosenleiste versorgt werden.

von murphy (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> murphy schrieb:
>> Ok, darf ich fragen wie diese höheren/niedrigeren Spannungen
>> typischerweise zustande kommen?
>
> In jedem Haus ...

Vielen Dank für die anschauliche Erklärung.

Letzte Frage meinerseits:
Wenn an dem Bus tatsächlich NUR Arduinos angeschlossen sind, die alle 
über das Bus-Kabel mitversorgt werden und somit nirgendwo auf einem 
lokalen GND liegen, der ein anderes Potential haben könnte,
dann dürften doch auch keine Masseschleifen auftreten? Die 
angeschlossenen Arduinos hätten einen leicht angehobenen GND und ein 
abgesenktes VCC durch den seriellen Widerstand, ebenso der am Arduino 
verortete MAX485. Dann dürfte dieser Effekt theoretisch doch keine Rolle 
mehr spielen?

Dann könnten mir lediglich noch elektromagnetische Einkopplungen 
Probleme machen, wobei ich nicht abschätzen kann wie viel Spannung so 
etwas induzieren kann.

Wie gesagt letzte Frage, da ich vorraussichtlich die Verschaltung von 
Uwe B. - und von User Push nachdrücklich empfohlene - Schaltung 
verwenden werde.

von Icke ®. (49636b65)


Lesenswert?

murphy schrieb:
> (prx) A. K. schrieb:
>> murphy schrieb:
>>> Das System ist in letzter Zeit gewachsen, und es ließ sich nicht
>>> wirklich vermeiden das RS485-Netzwerk auf eine Sterntopologie
>>> auszubauen.
>>
>> Diesen Stern durch Hin- und Rückleitungen in einen einzigen logischen
>> Strang umzubauen ist keine Option?
>
> Doch notfalls schon. Ich habe es auf der Liste - allerdings bin ich
> aktuell noch ein wenig hartnäckig um für das angesprochene Problem eine
> Lösung zu finden (s. Beitrag eins drüber). Ich will ja auch etwas lernen
> dabei. :)

Gut, du wirst dabei lernen, daß die von A.K. genannte Lösung die beste 
ist. Warum kompliziert, wenn es auch einfach geht?
Bei der Multiplexerei vergißt du geflissentlich, daß die Leitungen der 
gerade nicht aktiven Busteilnehmer in der Luft hängen und keinen 
definierten Pegel haben. Dies kann (und wird) zu unbeabsichtigten 
Pegelwechseln führen, die der Slave als Signal mißversteht. Du müßtest 
also an jedem einzelnen Strang BIAS-Widerstände vorsehen, die für 
definierten Pegel sorgen.

von Stefan F. (Gast)


Lesenswert?

murphy schrieb:
> Wenn an dem Bus tatsächlich NUR Arduinos angeschlossen sind, die alle
> über das Bus-Kabel mitversorgt werden und somit nirgendwo auf einem
> lokalen GND liegen, der ein anderes Potential haben könnte,
> dann dürften doch auch keine Masseschleifen auftreten?

Schleifen hast du dann nicht, aber evtl. unterschiedlichen 
Spannungsabfall, wenn die Arduino unterschiedlich viel Strom aufnehmen 
oder die USB Kabel unterschiedlich gut leiten.

Wie gesagt sind RS485 Treiber dafür ausgelegt, einen gewisse 
Masse-Versatz zu tolerieren.

von Blechbieger (Gast)


Lesenswert?

Stefan ⛄ F. schrieb:
> Wie gesagt sind RS485 Treiber dafür ausgelegt, einen gewisse
> Masse-Versatz zu tolerieren.

Die meisten erlauben -7 bis +12V aber es gibt auch mehr.

Z.B.

https://www.renesas.com/eu/en/products/interface-connectivity/rs-485-rs-422-rs-232/rs-485rs-422/rs-485422-overvoltage-protection/isl32496e-60v-fault-protected-5v-rs-485rs-422-transceivers-25v-cmr-and-esd-protection

mit +/- 25V. Innerhalb eines Hauses sollte das aber nicht notwendig 
sein, eher im Freien und Leitungslängen > 1000 m.

von Stefan F. (Gast)


Lesenswert?

Blechbieger schrieb:
> Die meisten erlauben -7 bis +12V aber es gibt auch mehr.

Bei den 13V sind die 5V Signale schon einkalkuliert. Also maximal 7V DC 
GND Versatz, bzw. 5V AC.

Ich stimme zu, das reicht normalerweise innerhalb eines Gebäudes.

von murphy (Gast)


Angehängte Dateien:

Lesenswert?

Icke ®. schrieb:

> Gut, du wirst dabei lernen, daß die von A.K. genannte Lösung die beste
> ist. Warum kompliziert, wenn es auch einfach geht?

Warum kompliziert, wenn es auch einfach geht?
Das muss ich erst noch lernen. :D Aber es mir schon auch darum zu 
erfahren, WARUM meine angestrebte Idee keine gute war. #GenerationY

> Bei der Multiplexerei vergißt du geflissentlich, daß die Leitungen der
> gerade nicht aktiven Busteilnehmer in der Luft hängen und keinen
> definierten Pegel haben. Dies kann (und wird) zu unbeabsichtigten
> Pegelwechseln führen, die der Slave als Signal mißversteht. Du müßtest
> also an jedem einzelnen Strang BIAS-Widerstände vorsehen, die für
> definierten Pegel sorgen.

Ein Arduino bildet ja stets mit einem Transceiver eine Einheit. Und die 
Module haben soweit ich das erkennen kann diese BIAS-Widerstände (20k) 
bereits an Bord? (s. Anhang).
Sehe ich das richtig, oder meinst du damit etwas anderes?

von Klaus S. (kseege)


Lesenswert?

Ich denke, ein bißchen Grundlagenbetrachtung kann nicht schaden, der 
Artikel über RS485 scheint ja ein paar Lücken zu haben.

Auf elektrischen Leitungen gibt es Reflexionen am Ende der Leitung und 
wenn man binäre Daten überträgt wird es kritisch, wenn diese Reflexionen 
zurücklaufen und eine halbe Bitzelle ausmachen. Die Signallaufzeit ist 
etwa 5ns/m, bei insgesamt 50m Leitungslänge also ca.250ns. Bei Baudrate 
19200 ist die Bitzelle aber bei 50mikrosekunden, also einen Faktor 200 
entfernt vom gefährlichen Bereich. Da ist die Terminierung einfach nur 
nette Dekoration, sonst nix. Und auch die Busstruktur ist eher 
hinderlich, da sie die Leitungslänge in diesem Fall erhöht. Hat man 5 
Stränge a 10m in Sternkopplung, so ist die maximale Leitungslänge für 
die Laufzeitberechnung 20m. Dementsprechend kann man ohne Probleme bis 
100KBaud Bitrate drauf arbeiten, ohne  an Terminierung denken zu müssen.

Wichtig ist aber die Vorspannung der Datenleitungen für alle 
Baudraten, da bei falscher Ruhelage eventuell das erste Startbit nicht 
erkannt wird. Das kann man auf dem Modbus aber auch per Software 
überspielen (3,5 Bytes Dauer den Transmitter mit Ruhepegel aktivieren = 
Modbus Timeout).

Zur Ground-Problematik kann ich nur Lehrbücher nachplappern, da ich auch 
im Bastelbereich immer galvanisch trenne. (Kostet 10 Euro mehr und spart 
10 Tage Fehlersuche :-)

Just my 2 cents

von Icke ®. (49636b65)


Lesenswert?

murphy schrieb:
> Warum kompliziert, wenn es auch einfach geht?
> Das muss ich erst noch lernen. :D Aber es mir schon auch darum zu
> erfahren, WARUM meine angestrebte Idee keine gute war. #GenerationY

Also Lernen durch Schmerzen, OK. Natürlich kann und darf man alle Fehler 
selbst machen und danach den richtigen Weg einschlagen. Aber sinnvoll 
ist das nicht immer. Ich arbeite stets nach dem KISS-Prinzip und bin 
bisher immer gut damit gefahren. Nein, das hat nichts mit Knutschen zu 
tun. KISS bedeutet Keep It Simple and Stupid. Also von allen möglichen 
Lösungen jene wählen, die am einfachsten und am wenigsten fehleranfällig 
ist. An deinem Beispiel ist eine Drahtschleife eben sehr viel einfacher 
und sehr viel weniger fehleranfällig als eine aktive Schaltung. Über 
komplexere Lösungen würde ich nur nachdenken, wenn sie unvermeidbar 
sind, z.B. weil nicht genügend Leitungsadern vorhanden sind und 
Nachverkabelung nicht in Frage kommt.

> soweit ich das erkennen kann diese BIAS-Widerstände (20k)
> bereits an Bord?

In diesem Fall ja.

von McMix (Gast)


Lesenswert?

Jetzt mal ganz abgesehen von den RS485 Problemen.
Bist du sicher, dass der CD4052 richtig beschaltet ist?
Zum USB-Transceiver gehen die beiden Anschlüsse des 4052, die für die 
Kanal-Auswahl vorgesehen sind (A und B). Die durchgeschalteten RS485 
Signale gehen auf den Anschluss J2, der mit Channel bezeichnet und 
offensichtlich für die Kanalauswahl vorgesehen ist.
Meiner Meinung nach müsste der USB-Transceiver an J2 angeschlossen 
werden.
Oder interpretiere ich die Beschriftung falsch?

von murphy (Gast)


Angehängte Dateien:

Lesenswert?

McMix schrieb:
> Jetzt mal ganz abgesehen von den RS485 Problemen.
> Bist du sicher, dass der CD4052 richtig beschaltet ist?
> Zum USB-Transceiver gehen die beiden Anschlüsse des 4052, die für die
> Kanal-Auswahl vorgesehen sind (A und B). Die durchgeschalteten RS485
> Signale gehen auf den Anschluss J2, der mit Channel bezeichnet und
> offensichtlich für die Kanalauswahl vorgesehen ist.
> Meiner Meinung nach müsste der USB-Transceiver an J2 angeschlossen
> werden.
> Oder interpretiere ich die Beschriftung falsch?

Nein, da hast du recht, da habe ich die Beschriftung in der Skizze 
vertauscht (A/B-Verwechslungsgefahr). Entschuldigung für die Verwirrung. 
Die reale Beschaltung habe ich jedoch korrekt umgesetzt.

Die korrigierte Skizze hänge ich vollständigkeitshalber mal an.

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.