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
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
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.
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?
Nach mehreren experimenten mit RS485 bin ich zum schluss gekommen dass RS485 nix taugt.
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.
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".
Willst du das in 3 fachem durchschlag und parfumiert?
Alt G. schrieb: > Willst du das in 3 fachem durchschlag und parfumiert? Eine sachliche Begründung würde ich bevorzugen.
Hallo, RS485 läuft perfekt, wenn man es richtig macht, über viele 100m. Wird in der Industrie oft verwendet. Ludger
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
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.
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.
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.
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
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
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?
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.
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
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?
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.
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?
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.
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.
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.
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 :-)
Erst mal sollten die Hausaufgaben gemacht werden, als Einstieg: https://de.aliexpress.com/item/1005004237412603.html
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
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.
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!
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"
Peter D. schrieb: > Fehler in der Implementierung Deines > unbekannten Protokolls. Mit genügend busverstärkern bekommt man auch einen implementierungsfehler weg. Denkt OP.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.