Forum: Mikrocontroller und Digitale Elektronik RS485 Mehrere Signalverstärker im Bus gegen Störungen


von FN (Gast)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

In einer DIY-Anwendung sollen ca. 10 Atmegas über eine serielle 
Verbindung via RS485 Daten zu einem RPi senden. Dafür ist auf den 
Atmega-Boards jeweils ein MAX485 vorgesehen. Das funktioniert auch alles 
soweit so gut.

ABER: Der Bus verläuft über die jeweiligen Boards. Die Verbindung 
dazwischen verläuft über (ungeschirmte) JST-XH Kabel. Und genau da liegt 
der Haken. Die Dinger bringen anscheinend so hohe Übergangswiderstände 
mit, dass ab einer bestimmten Anzahl Slaves am Bus die Verbindung nicht 
mehr funktioniert. Dabei scheint es hauptsächlich auf die Anzahl der 
insgesamt verwendeten Steckverbindungen anzukommen. Wenn ich noch 
mehrere Verlängerungsstücke (zusätzliche Stecker) hinzufüge, wird die 
Übertragung logischerweise noch schlimmer. Die Kabellänge zwischen den 
Steckern macht in meiner Anwendung (1-20m) keinen Unterschied. 
Terminierungswiderstände, Pullup, Pulldown der Signalleitungen sind 
bereits vorgesehen.

Die offensichtliche Lösung wäre natürlich für vernünftig geschirmte und 
verdrillte Kabel zu sorgen sowie für möglichst wenig Steckverbindungen. 
Das werde ich nun auch umsetzen.

Nun zur eigentlichen Frage:
Ich habe überlegt, ob man parallel zu der Minimierung der eigentlichen 
Störquellen auf den Slaves eine Art Signalverstärkung vorsehen könnte. 
Für die Kommunikation zwischen Arduino und RPi hab ich schonmal so Logic 
Converter gebaut (s. Bild). Könnte man etwas in der Art auch für das 
serielle Signal verwenden?
Sehr Ihr noch andere Möglichkeiten die Signalübertragung auf ähnliche 
Weise zu verbessern?

Vielen Dank im Voraus,
FN

von ziege (Gast)


Lesenswert?

FN schrieb:
> dass ab einer bestimmten Anzahl Slaves am Bus die Verbindung nicht mehr
> funktioniert.

Wie viele denn? RS485 verträgt nur eine bestimmte Anzahl an Transmittern 
am Bus, das Stichwort dazu: Unit Load. Mehr Info z.B. hier: 
https://www.ti.com/lit/pdf/slyt086

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


Lesenswert?

Wie viele Abschlusswiderstände mit welchen Werten befinden sich an 
welchen Stellen des Busses?

Wie viele Failsafe-Widerst#nde mit welchen Werten befinden sich an 
welchen Stellen des Busses?

Sind die GND-Potentiale aller Baugruppen miteinander verbunden?

Welche Baudrate wird verwendet?

Werden die Microcontroller bzw. deren UART-Takte mit dem internen 
RC-Oszillator oder einem externen Quarz bzw. Quarzoszillator versorgt.

Sind die Stromversorgungen, insbesondere auch die Leitungstreiber, mit 
geeigneten Abblockkondensatoren ausgestattet? Wo befinden sich die 
Kondensatoren.

JST XH ist übrigens ein Steckverbindertyp und keine Leitung.

von Wolfgang (Gast)


Lesenswert?

FN schrieb:
> Die Dinger bringen anscheinend so hohe Übergangswiderstände
> mit, dass ab einer bestimmten Anzahl Slaves am Bus die Verbindung nicht
> mehr funktioniert.

Was heißt "anscheinend"?
Wäre messen vielleicht eine Option?
Sind die XH-Stecker anständig gecrimpt?

von Alt G. (altgr)


Lesenswert?

Nach mehreren experimenten mit RS485 bin ich zum schluss gekommen dass 
RS485 nix taugt.

von Stefan F. (Gast)


Lesenswert?

Den RS485 Bus benutzt man immer mit Bustreibern wie den Max485 oder 
SN75ALS176. Diese brauchen keine weitere Verstärkung.

Dein "Logic Converter" ist nur für den I²C Bus gedacht, das ist eine 
ganz andere Welt als RS485.

> Dabei scheint es hauptsächlich auf die Anzahl der
> insgesamt verwendeten Steckverbindungen anzukommen. Wenn ich noch
> mehrere Verlängerungsstücke (zusätzliche Stecker) hinzufüge, wird die
> Übertragung logischerweise noch schlimmer.

Klingt für mich nach falscher/fehlender Terminierung des Busses oder 
völlig falschem Aufbau, z.B. Sternförmig verkabelt.

von Stefan F. (Gast)


Lesenswert?

Alt G. schrieb:
> Nach mehreren experimenten mit RS485 bin ich zum schluss gekommen dass
> RS485 nix taugt.

Ohne nachvollziehbarer Begründung ist diese Aussage genau so nutzlos wie 
wenn ich sage dass "Kamillentee nichts taugt".

von Alt G. (altgr)


Lesenswert?

Willst du das in 3 fachem durchschlag und parfumiert?

von Stefan F. (Gast)


Lesenswert?

Alt G. schrieb:
> Willst du das in 3 fachem durchschlag und parfumiert?

Eine sachliche Begründung würde ich bevorzugen.

von Ludger (Gast)


Lesenswert?

Hallo,

RS485 läuft perfekt, wenn man es richtig macht, über viele 100m.
Wird in der Industrie oft verwendet.

Ludger

von A. S. (Gast)


Lesenswert?

FN schrieb:
> . Die Dinger bringen anscheinend so hohe Übergangswiderstände mit, dass
> ab einer bestimmten Anzahl Slaves am Bus die Verbindung nicht mehr
> funktionier

Hast Du ein Oszi? Messen.

Sind vielleicht Abschlusswiderstände etc an jedem Board? Oder Cs etc.?

Schaltplan?

Terminiert?

Stern?

Widerstand in Reihe, wofür auch immer?


100 oder mehr Steckkontakte sind kein Problem

von Alt G. (altgr)


Lesenswert?

Ludger schrieb:
> RS485 läuft perfekt, wenn man es richtig macht,

Die cheapo hardware hat mühe mit der rx-tx umschaltung. Auch die 
usb-rs485 adapter oder bestimmte leistungsmessgeräte haben da mühe. Das 
ging bei mir in 4% der fälle schief. Mit 12 m kabel. Ja, auch mit 
endwiderständen.

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


Lesenswert?

Alt G. schrieb:
> Die cheapo hardware hat mühe mit der rx-tx umschaltung.

Das ist aber ein Problem der besagten "cheapo hardware", nicht des 
Busprotokolls ans sich. RS-485 funktioniert in der Tat nicht immer 
korrekt bei Pegelwandlern, deren Treiber nicht per DE-Leitung, sondern 
durch Erkennen von Aktivität auf der TxD-Leitung umgeschaltet werden, da 
das erste Bit dann ggf. etwas verunstaltet ist. Bei ordentlicher 
Auslegung der Schnittstelle, d.h. UART+Leitungstreiber, gibt es da aber 
keine Probleme.

von FN (Gast)


Lesenswert?

ziege schrieb:
> Wie viele denn?

Max. 10 aktuell.

Andreas S. schrieb:
> Wie viele Abschlusswiderstände mit welchen Werten befinden sich an
> welchen Stellen des Busses?

120R ganze vorne und ganz hinten im Bus wie im Datenblatt vom MAX485 
empfohlen.

Andreas S. schrieb:
> Wie viele Failsafe-Widerst#nde mit welchen Werten befinden sich an
> welchen Stellen des Busses?

Jeweils ein Pullup bzw Pulldown an den Leitungen direkt an der MainUnit 
(an einem Ende des Busses). Genauen Wert kann ich noch nachreichen.

>
> Sind die GND-Potentiale aller Baugruppen miteinander verbunden?
>

Ja

> Welche Baudrate wird verwendet?
>

9600. Reicht für mich völlig aus.

> Werden die Microcontroller bzw. deren UART-Takte mit dem internen
> RC-Oszillator oder einem externen Quarz bzw. Quarzoszillator versorgt.
>

Externer Quarz mit 16MHz, angelehnt an den Arduino Uno.

> Sind die Stromversorgungen, insbesondere auch die Leitungstreiber, mit
> geeigneten Abblockkondensatoren ausgestattet? Wo befinden sich die
> Kondensatoren.

Sind vorhanden, jeweils so dicht es geht an den jeweiligen Bauteilen. 
Dimensioniert anhang jeweiligem Datenblatt.

Wolfgang schrieb:
> Wäre messen vielleicht eine Option?
> Sind die XH-Stecker anständig gecrimpt?

Messen steht bei mir auch auf dem Programm, komme nur leider gerade 
nicht an ein Oszi ran. Die XH-Stecker hab ich fertig gekauft in der 
Hoffnung die sind besser gecrimpt als von mir von Hand.

A. S. schrieb:
> Stern?
>
> Widerstand in Reihe, wofür auch immer?

Nein, ist ne reine Linie.
Nein außer den Kabeln und Steckern keine weiteren Widerstände.

Wie gesagt, die typischen Anfängerfehler meine ich alle behoben zu 
haben. Meine Frage zielte ja darauf ab, ob es Möglichkeiten zum Filtern 
von Störungen oder zur Signalverstärkung gibt, falls sich die Qualität 
von Steckern und Kabeln nicht verbessern lässt.

von Alt G. (altgr)


Lesenswert?

Wie sieht die TX / RX ansteuerung aus?
Falls du nur RXD und TXD verwendest läuft das nicht zuverlässig.

Vieviel vorlauf lässt du der rx/tx umschaltung bevor gesendet wird?

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


Lesenswert?

FN schrieb:
> Für die Kommunikation zwischen Arduino und RPi hab ich schonmal so
> Logic Converter gebaut (s. Bild). Könnte man etwas in der Art auch für
> das serielle Signal verwenden?
Die kurze Version heißt "Nein".
Die ausführliche Begründung für dieses "Nein" verweist mehrmals auf das 
Wort "Impedanz" und "Terminierung". Sie hat viel mit den Grundlagen des 
RS485 zu tun und die müssen hier nicht zum x-ten Mal wiederholt werden.

> Die Dinger bringen anscheinend so hohe Übergangswiderstände mit, dass ab
> einer bestimmten Anzahl Slaves am Bus die Verbindung nicht mehr
> funktioniert.
Du bist auf einem Irrweg.
Mit einem Oszilloskop kann man übrigens direkt an den Treiber-IC-Pins 
messen und die Messungen mal mit dem Datenblatt dieser Treiber 
vergleichen. Wenn die Spezifikation der Bauteile eingehalten wird, dann 
läuft der Bus.

FN schrieb:
>> Sind die GND-Potentiale aller Baugruppen miteinander verbunden?
> Ja
Sind die Busleitungen verdrillt? Denn die Physik des RS485 basiert auf 
verdrillten Leitungen.

FN schrieb:
> Die XH-Stecker hab ich fertig gekauft in der
> Hoffnung die sind besser gecrimpt als von mir von Hand.
Dann liegt das Problem sicher woanders. Aber selbt eine Handcrimpung 
wirst du nur mutwillig so schlecht hinbekommen, dass die das Problem 
ist.

> Messen steht bei mir auch auf dem Programm,
> komme nur leider gerade nicht an ein Oszi ran.
Dann warten wir mal ab und bis dahin kannst du dich ja mal zum RS485 
aufschlauen.

: Bearbeitet durch Moderator
von Peter D. (peda)


Lesenswert?

FN schrieb:
> In einer DIY-Anwendung sollen ca. 10 Atmegas über eine serielle
> Verbindung via RS485 Daten zu einem RPi senden.

Wie hast Du abgesichert, daß immer nur ein Slave zur Zeit sendet?
Welche minimale Wartezeit hast Du zwischen den Richtungsumschaltungen?

von FN (Gast)


Lesenswert?

Noch eine Frage zu den Kabeln: Ich benutze 5-Polige Kabel mit den Adern 
12V+, GND, RS485-A, RS485-B und ein Digital IO, der nur im Setup des 
Programms überhaupt aktiv, ansonsten LOW ist.

Würde es überhaupt zur Verdrillung helfen, das ganze Kabel in sich zu 
verdrillen, oder funktioniert das nur paarweise?

Zur Erinnerung: Ich brauche ja nicht mehrere hundert Meter Reichweite. 
10-20m würden mir völlig reichen.

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


Lesenswert?

FN schrieb:
> Würde es überhaupt zur Verdrillung helfen, das ganze Kabel in sich zu
> verdrillen, oder funktioniert das nur paarweise?
Sinnvollerweise wäre paarig, denn sonst koppelt du ja jeden Dreck von 
der Versorgung möglichst innig auf die Datenleitungen.

Mein Vorschlag: probier einfach mal, nur die Datenleitungen ausgehend 
von der Kabelmitte zu verdrillen. Macht ja nichts aus, wenn die links 
der Mitte links herum verseilt sind und rechts der Mitte rechts herum. 
Verdrillt ist verdrillt.

> 10-20m würden mir völlig reichen
Nimm ein vernünftig geschirmtes und paarig verdrilltes Buskabel.
Du kannst den GND auf den Schirm legen, die 12V und das Digitalsignal 
auf ein Adernpaar und die RS485-Signale auf das andere Adernpaar.

: Bearbeitet durch Moderator
von A. S. (Gast)


Lesenswert?

FN schrieb:
> Würde es überhaupt zur Verdrillung helfen, das ganze Kabel in sich zu
> verdrillen, oder funktioniert das nur paarweise?

Nur RS485-A und -B.

Es ist vorteilhaft, wenn alle 5 Adern nochmals ein bis zwei Mal pro 
Meter verdreht sind, aber bei 9k6 und

> 10-20m würden mir völlig reichen.
nicht notwendig. Wenn RS485 da nicht funktioniert, liegt es an einem 
groben Fehler.

Was hast Du da? Multimeter, Oszi,

Was für Fehler genau stellen sich ein?

von Steve van de Grens (roehrmond)


Lesenswert?

Ich denke auch, dass Verdrillung ja/nein bei der kurzen Leitung 
scheißegal sein sollte. Da liegt bestimmt es ein wesentlich 
grundsätzlicher Fehler vor.

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


Lesenswert?

Falls das ganze mit einem schrottigen Schaltnetzteil versorgt wird, kann 
es durchaus sein, dass sich dessen Störungen auf den Datenleitungen 
bemerkbar machen.

Wenn die Spitzen(!)stromaufnahme der Baugruppen zu hoch sein sollte, 
können solche Spitzenströme bei langen Versorgungsleitungen dazu führen, 
dass das Massepotential kurz angehoben wird und somit der 
Gleichtaktbereich einiger RS-485-Treiber verlassen wird. Bei den Treiber 
gibt es gerade bezüglich des Gleichtaktbereichs ganz gewaltige 
Qualitätsunterschiede; einige funktionieren sogar noch bei -5 V oder 
mehr/wenige, andere bis zu +70 V, und schrottige mögen nix, was auch nur 
in die Nähe ihrer Versorgungsspannung kommt.

Viele Markenprodukte (Maxim, Analog Devices, TI, usw.) sind derzeit 
nicht erhältlich. Ich musste auch gerade eine Bestellung meines 
Lieblinggstyps direkt bei AD platzieren, um schon Ende März 2023 
hoffentlich welche zu bekommen. Es gibt aber sehr viele chinesischen 
Hersteller, z.B. bei LCSC, mit Preisen im Centbereich. Bei denen wäre 
ich durchaus etwas vorsichtiger. Das große Problem: Es wird sicherlich 
einige Plagiateure geben, die solche Billigtypen umetikettieren und für 
den zehn- oder zwanzigfachen Preis als Markenware verkaufen. Und viele 
Eigenschaften (ESD, Slewrate- Störempfindlichkeit, Gleichtaktbereich) 
bemerkt man eben nicht auf Anhieb.

Hast Du denn die RS-485-Treiber von einem der offiziellen Distributoren 
einschließlich Herkunftsnachweis gekauft?

von FN (Gast)


Lesenswert?

Danke euch für die vielen Hinweise. Ich sehe schon, eine Oszi-Messung 
würde da sehr viel Licht ins Dunkel bringen. Vielleicht darf ich in der 
nächsten Zeit bei der Arbeit mal an eines ran, dann bin ich auf jeden 
Fall schlauer und melde mich nochmal.

von A. S. (Gast)


Lesenswert?

Falls Du nur ein Multimeter hast, kann das vielleicht einen Hinweis 
liefern:

a) Bricht die Versorgungsspannung ein (am Netzteil, am letzten Gerät)
b) Bricht die Ruhespannung am 485 ein? (Keine Kommunikation)
c) Verschiebt sich die Ruhespannung (also z.B. A gegen Masse?
d) Kurzschlussstrom A/B

Jeweils mit einem / allen Devices.

von Wolfgang (Gast)


Lesenswert?

FN schrieb:
> Messen steht bei mir auch auf dem Programm, komme nur leider gerade
> nicht an ein Oszi ran.

Den von dir vermuteten hohen Übergangswiderständen sollte man mit einem 
simplen Multimeter auf die Spur kommen können.
Wenn es allerdings daran nicht liegt, ist ein Oszi ausgesprochen 
hilfreich.

von Martin S. (strubi)


Lesenswert?

Erst mal sollten die Hausaufgaben gemacht werden, als Einstieg:

https://docplayer.org/16588399-Control-systems-and-components-fehlersuche-in-seriellen-s-bus-rs485-netzen.html

In deinem Fall ist typischerweise weder Schirmung noch galvanische 
Trennung notwendig, ausser das muesste an eine Punktschweissanlage ran 
:-)

von Alt G. (altgr)


Lesenswert?

Erst mal sollten die Hausaufgaben gemacht werden, als Einstieg:

https://de.aliexpress.com/item/1005004237412603.html

von Georg (Gast)


Lesenswert?

FN schrieb:
> eine Oszi-Messung
> würde da sehr viel Licht ins Dunkel bringen. Vielleicht darf ich in der
> nächsten Zeit bei der Arbeit mal an eines ran

Wer um Gottes Willen beauftragt einen Mitarbeiter mit der Entwicklung 
eines Bussystems, ist aber zu knauserig einen Oszi zur Verfügung zu 
stellen? Das ist ja so als ob jemand einen Pkw-Motor auswechseln soll, 
aber das Werkzeug in der Werkstatt darf er nicht benutzen.

Georg

von TotoMitHarry (Gast)


Lesenswert?

Wir benutzen einen Rs485 Bus mit 20 Teilnehmern der durch 10 Gebäude 
geht mit über 1.5km länge, bestimmt 50 Klemmleisten/Wagos in 30 Jahre 
alten Kabeln.. in 30DA gemeinsam neben Alten Telefonleitungen, neuen 
Digitalen Leitungen, anderen  Ring/Bus Systemen und sogar mehrere Point 
to Point 2 Wire Ethernet Lösungen.

Wenn man mal etwas umklemmt können schonmal Treiber aussteigen das man 
ein Gerät neu starten muss, ansonsten läuft es wie es läuft bei 38400 
Baud ohne verlorene Pakete bei mehreren Tausend am Tag.

Das einzig wichtige sind die Richtigen Pullups auf einer Seite und die 
einmalige Terminierung an jedem Ende.

Dann kann man noch drüber streiten ob man eine geschlossene Masse ohne 
Erdverbindung als zusätzliche Leitung unter den Treibern mitzieht.

von Harald A. (embedded)


Lesenswert?

FN schrieb:
> ABER: Der Bus verläuft über die jeweiligen Boards. Die Verbindung
> dazwischen verläuft über (ungeschirmte) JST-XH Kabel. Und genau da liegt
> der Haken.


> Meine Frage zielte ja darauf ab, ob es Möglichkeiten zum Filtern
> von Störungen oder zur Signalverstärkung gibt, falls sich die Qualität
> von Steckern und Kabeln nicht verbessern lässt.

Du hast ja mittlerweile einige Hinweise bekommen. Es ist momentan nur 
eines relativ sicher: Genau da wird der Haken NICHT liegen!

von Peter D. (peda)


Lesenswert?

FN schrieb:
> dass ab einer bestimmten Anzahl Slaves am Bus die Verbindung nicht
> mehr funktioniert.

Das schreit geradezu nach einem Fehler in der Implementierung Deines 
unbekannten Protokolls. Die Adressierung muß absolut sauber erfolgen mit 
genügend Gap zum Umschalten des jeweiligen Transceivers.
Meine obige Nachfrage hast Du ja standhaft ignoriert.
Beitrag "Re: RS485 Mehrere Signalverstärker im Bus gegen Störungen"

von Alt G. (altgr)


Lesenswert?

Peter D. schrieb:
> Fehler in der Implementierung Deines
> unbekannten Protokolls.

Mit genügend busverstärkern bekommt man auch einen 
implementierungsfehler weg. Denkt OP.

von Totomitharry (Gast)


Lesenswert?

Rs485 ist ja auch nicht rs485..

Ich kenne je nach Hardware Umsetzung viele verschiedene Geräte von PV 
Wechselrichtern bis Industriebus die in den Anleitungen verschiedene 
maximale Längenangaben haben welche wohl auf verschiedene Treiber 
zurückzuführen sind.

Das geht bunt laut Anleitungen von 30m,100m, 300m bis
Verdrahtungsabhängig >1000m.

Wenn man Budget hat gibt es auch von Westermo frei konfigurierbare 
isolierte Bus Verstärker mit denen man sogar Sternabzweige für gerade 
mal 700€ umsetzen kann.

von FN (Gast)


Lesenswert?

Hallo nochmal,

Wolfgang schrieb:
> Den von dir vermuteten hohen Übergangswiderständen sollte man mit einem
> simplen Multimeter auf die Spur kommen können.
> Wenn es allerdings daran nicht liegt, ist ein Oszi ausgesprochen
> hilfreich.

Das habe ich inzwischen mit meinem Multimeter auch überprüft und ist in 
der Tat quatsch, der Widerstand auch von mehreren Steckverbindungen 
hintereinander ist kaum messbar.

Peter D. schrieb:
> Das schreit geradezu nach einem Fehler in der Implementierung Deines
> unbekannten Protokolls. Die Adressierung muß absolut sauber erfolgen mit
> genügend Gap zum Umschalten des jeweiligen Transceivers.

Selbst wenn ich da Wartezeiten von 1s einbaue tritt der Fehler weiter 
auf. Die Adressierung funktioniert, die Slaves haben eine Anzeige. Nur 
ist die Übertragung eben fehlerhaft.

TotoMitHarry schrieb:
> Das einzig wichtige sind die Richtigen Pullups auf einer Seite und die
> einmalige Terminierung an jedem Ende.

Für die ersten Tests hab ich son RS485 Konverter Modul gekauft und mich 
dann beim weiteren Design der Platine an den Widerständen (20k Pullups) 
in dessen Schaltplan orientiert. Hab auch spaßeshalber geringere Werte 
(500R) getestet, das hatte in meiner Erinnerung gar keinen großen 
Einfluss, solange da immerhin welche dran sind.
https://www.makershop.de/download/MAX485-Module-Sch1.jpg

Morgen komme ich endlich an ein Oszi ran, mit den Ergebnissen melde ich 
mich nochmal.

von Peter D. (peda)


Lesenswert?

FN schrieb:
> Selbst wenn ich da Wartezeiten von 1s einbaue tritt der Fehler weiter
> auf.

Wie sollen Wartezeiten Fehler in der Software beheben können?
Können sie nicht!
Maximal können Wartezeiten bewirken, daß Konflikte seltener auftreten.

von R42 (Gast)


Lesenswert?

Mit den Informationen ist garantiert R42 zu groß.

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.