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!
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.
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...
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.
> 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.
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.
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.
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.
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.
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.
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.
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
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?!"
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?
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.
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.
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?"
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?
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
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?
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. ;)
(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. :)
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.
(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?
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.
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!
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.
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.
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.
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.
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.
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?
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
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.
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?
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.