Hallo zuasmmen ich habe vor langer Zeit mal ein Projekt eines RS485 Haussteuerbus mit einem MAX485 realsiert. Nun wollte ich das Projekt für eine Projektarbeit wieder aufleben lassen. Die Vorgabe war, Arduino-Boards für die realisierung zu verwenden. Nach einer kurzen Recherche bin ich auf die RS485-Platine von Groove gestossen, mit welcher ich die Kommunikation realisieren wollte. www.embeddedsys.com/subpages/resources/images/documents/microsys_art_RS4 85.pdf Ich habe die Verkabelung aufgebaut und alle Komponenten einzeln getestet. Wollte ich anber alle 5 Teilnehmer an den Bus anschliessen so funktionierte die Kommunikation zwischen dem Master und dessen Slaves nicht mehr. Ich habe während meiner Recherche bemerkt, dass auf der Platine von Groove die 120 Ohm Terminationswiederstände fix eingelötet sind. Ich dache mir damals bereits, dass dies Probleme geben könnte. Nach einigen Forumsbeiträgen habe ich die Terminationswiederstände auf allen Teilnehmer bis auf dem Master und dem letzten Teilnehmer entlötet. Leider will die Kommunikation mit allen Teilnehmern immer noch nicht funktionieren. Hat jemand eine Idee? Die Wiederstände R14 & R15 habe ich bis anhin nicht ausgelötet.
Bias-Widerstände sollte nur ein Teilnehmer haben. Da die mit 4k7 ohnehin überdimensioniert sind, sollte das aber mit 5 Teilnehmern trotzdem klappen.
Michael B. schrieb: > Hat jemand eine Idee? Falls dein Schaltplan stimmt, hast du DE und /RE fest verdrahtet, es kann also garnicht auf Empfang umgeschaltet werden. Georg
Der Schaltplan stammt von Groove. Dachte auch, dass dies ein Einfluss haben könnte. Aber bei 3 Teinmehmern funtioniert die Kommunikation einwandfrei.
:
Bearbeitet durch User
Der Schaltplan kann so nicht stimmen, denn so ist nicht nur der Treiber permanent eingeschaltet, sondern auch der Empfänger permanent ausgeschaltet.
Sind die bei mir auch. Allerdings nicht fest an Vcc damit kann er nicht antworten. Hier sprechen bis zu fünf miteinander. Funktionieren denn alle einzeln/zu dritt oder ist einer so aus dem Tackt ist das er alles durcheinander haut?
:
Bearbeitet durch User
Hmmm schrieb: > Der Schaltplan kann so nicht stimmen, denn so ist nicht nur der Treiber > permanent eingeschaltet, sondern auch der Empfänger permanent > ausgeschaltet. Das sieht mir eher so aus, als sollte es eine automatische Umschaltung geben. Oder wofür ist das ganze Geraffel zwischen dem UART Verbinder und den DI/RO Pins des Transceivers?
Ich lag falsch. Hmmm hat recht aber so wird es nie funktioniert haben. Dort wo es funktionierte war etwas anders.
A. H. schrieb: > Sind die bei mir auch. Allerdings nicht fest an Vcc damit kann er nicht > antworten. Hier sprechen bis zu fünf miteinander. Funktionieren denn > alle einzeln/zu dritt oder ist einer so aus dem Tackt ist das er alles > durcheinander haut? Die Komination aller Teilnemer zu dritt funktioniert. Heisst 1x MAster 1x letzter Teilnehmer und 1x ein Teilnehmer dazwischen. Sobald ich einen vierten Teilnehmer anschliesse empfangen alle Teilnehmer nichts mehr.
Interessant wäre erstmal, ob !RE und DE wirklich dauerhaft auf +5V liegen. Wenn ja, kann es nur durch Fehlerzustände (z.B. einbrechende Spannungen bei der Buskollision) überhaupt mal funktionieren.
Nee, der Schaltplan ist leicht irreführend. Der MAX13487 hat ein Auto-Direction Feature. Wenn !RE HIGH ist, dann ist die automatische Umschaltung aktiviert. Wenn !RE Low ist, dann ist der Transceiver permanent als Empfänger konfiguriert. Und DE (wie im Schaltplan) gibt es bei dem Kollegen gar nicht. Richtig wäre !SHDN... Der muss also auch high sein. Ich vermute mal, dass entweder die BIAS Widerstände das Problem sind oder wir mal genauer wissen müssten, was "Kommunikation" überhaupt bedeutet. Die automatische Umschaltung schützt Dich nämlich davor, zwei aktive transmitter gleichzeitig auf dem Bus zu haben. Und dann gibt's natürlich Datenmüll...
Its magic schrieb: > schützt Dich nämlich davor, meh... ich meinte natürlich, "schützt Dich N I C H T davor"... Und hier noch das DaBla: https://datasheets.maximintegrated.com/en/ds/MAX13487E-MAX13488E.pdf
Hmmm schrieb: > Interessant wäre erstmal, ob !RE und DE wirklich dauerhaft auf +5V > liegen. Wenn ja, kann es nur durch Fehlerzustände (z.B. einbrechende > Spannungen bei der Buskollision) überhaupt mal funktionieren. Habe es gleich mal mit dem KO ausgemessen. !RE und DE liegen immer an +5V.
Its magic schrieb: > Ich vermute mal, dass entweder die BIAS Widerstände das Problem sind > oder wir mal genauer wissen müssten, was "Kommunikation" überhaupt > bedeutet. ich Kommuniziere mit 9600 bps (8 data bits, kein parity, ein Stopbit) vom Master (Arduino DUE oben links) zu den Teilnehmern (Arduino UNO). Der Master fragt über ein Protokoll den Zustand der "Sensoren" ab. Diese antworten ihm anschliessend. Wenn er die Antwort ausgewertet hat steuert er die "Effektoren" an. Diese Kommunikation funktioniert z.B. zwischen Master, "Sensor" Taster (unten links) und "Effektor" LED-Spot (unten rechts).
Michael B. schrieb: > Habe es gleich mal mit dem KO ausgemessen. !RE und DE liegen immer an > +5V. Ist korrekt, der Treiber befindet sich dann im Auto Direction Mode. Das Datenblatt zeigt in der Function Tables wie die State Machine intern funktioniert.
Was liegt in Ruhelage an DI (Pin 4) der Teilnehmer an? Dort solltest Du High-Pegel (+5V) messen. Wie sieht's mit der Spannung zwischen A und B in Ruhelage aus?
Michael B. schrieb: > Der Master fragt über ein Protokoll den Zustand der "Sensoren" ab. Diese > antworten ihm anschliessend. Wenn er die Antwort ausgewertet hat steuert > er die "Effektoren" an. Und Du kannst ausschließen, dass zwei Slaves gleichzeitig antworten?
Its magic schrieb: > Und Du kannst ausschließen, dass zwei Slaves gleichzeitig antworten? Jap, den Fall dass zwei gleichzeitig antworten bahe ich überprüft. Dies war bei allen Messungen nie der Fall.
Mr. Eder schrieb: > Oder wofür ist das ganze Geraffel zwischen dem UART Verbinder und > den DI/RO Pins des Transceivers? Pegelwandler zwischen 3.3V (Controller) und 5V (Bus).
Hmmm schrieb: > Was liegt in Ruhelage an DI (Pin 4) der Teilnehmer an? Dort solltest Du > High-Pegel (+5V) messen. > > Wie sieht's mit der Spannung zwischen A und B in Ruhelage aus? In Ruhelage messe ich mit dem KO an DI eines Teilnehmers +5V. Wenn der Maser, der letzte und der zweite Teilnehmer am Bus sind messe ich mit dem Fluke 87 Digitalmultimeter --> 0.145V Wenn ich dann noch den Teilnehmer 3 (unten links) dazu schalte -->0.195V Mit dem vierten Teilnehmer --> 0.158 Volt
Michael B. schrieb: > In Ruhelage messe ich mit dem KO an DI eines Teilnehmers +5V. > > Wenn der Maser, der letzte und der zweite Teilnehmer am Bus sind messe > ich mit dem Fluke 87 Digitalmultimeter --> 0.145V > > Wenn ich dann noch den Teilnehmer 3 (unten links) dazu schalte -->0.195V > > Mit dem vierten Teilnehmer --> 0.158 Volt Das ist zwar nicht sauber (RS485 sieht mindestens 0.2V Differenz vor, was an den zu grossen Bias-Widerständen scheitert), aber entspricht den Erwartungen und würde sonst mit mehr Teilnehmern besser statt schlechter funktionieren. Am besten mal mit dem Oszi die Bus-Kommunikation mitschneiden, vielleicht sieht man dann Auffälligkeiten.
Habe auf dem KO gesehen, dass mit jedem Teilnehmer der Bus angeschlossen wird der Arbeitsbereich sich gegen 2.5V erhöht. Für sobald die 2.3V überschritten wurden, funktionierte die Kommunikation nicht mehr. Da ebenfalls die Spannung zwischen A und B auf 0.07V zusammen gerissen wurde, dachte ich mir, ich löte bei allen Teilnehmer ausser dem Master und dem letzten Teilnehmer die Terminationswiderstände aus. Da aus meiner sicht der Arbeitsbereich ebenfalls noch schlecht eingestellt war, lötet eich die 4.7kOhm Bias-Widerstände aus. Diese sind nur noch am Master vorhanden. Nun habe ich die Problematik, dass sich die Spannung zwischen A und B auf 0.05V einstellt und der Empfänger des Masters sobald ein Teilnehmer eine Antwort sende bis zum nächsten Sendeimpuls des MAsters auf 0V runtergeht.
Michael B. schrieb: > Habe auf dem KO gesehen, dass mit jedem Teilnehmer der Bus angeschlossen > wird der Arbeitsbereich sich gegen 2.5V erhöht. Für sobald die 2.3V > überschritten wurden, funktionierte die Kommunikation nicht mehr. Hast Du vom nicht-funktionierenden Fall mal einen Screenshot? > Da ebenfalls die Spannung zwischen A und B auf 0.07V zusammen gerissen > wurde, dachte ich mir, ich löte bei allen Teilnehmer ausser dem Master > und dem letzten Teilnehmer die Terminationswiderstände aus. Da aus So muss es sein, ein Terminator pro Ende. > meiner sicht der Arbeitsbereich ebenfalls noch schlecht eingestellt war, > lötet eich die 4.7kOhm Bias-Widerstände aus. Diese sind nur noch am > Master vorhanden. > Nun habe ich die Problematik, dass sich die Spannung zwischen A und B > auf 0.05V einstellt und der Empfänger des Masters sobald ein Teilnehmer Das ist nicht anders zu erwarten, weil die beiden Terminatoren und die (zu grossen) Bias-Widerstände einen Spannungsteiler bilden. Um mit 120-Ohm-Terminatoren die RS485-Spezifikationen einzuhalten, empfiehlt sich ein Wert von z.B. 680 Ohm, natürlich nur ein Satz pro Bus. > eine Antwort sende bis zum nächsten Sendeimpuls des MAsters auf 0V > runtergeht. Das dürfte am nicht definierten Ruhepegel liegen und produziert Salat, weil die High-Low-Flanke beim Abschalten des Treibers als Startbit interpretiert wird. Und noch ein anderes typisches Problem: Wartest Du nach Empfangen eines Datenpakets einen Moment, bevor Du antwortest, damit der Bus bis dahin auch freigegeben wurde? Gerade bei automatischer Umschaltung sollte man das nicht vernachlässigen.
Hallo, herzlichen Dank für eure Unterstützung. Ich habe mich dazu entschlossen die Bias-Widerstände der Groveplatine ebenfalls auszulöten und durch 2x680 Ohm Widerstände am Master zu ersetzen. Somit habe ich über dem 60 Ohm Terminationswiderstand (2x 120 Ohm an jedem Ende) berechnet 0.22V und tatsächlich 0.21V. Die Schaltung scheint bis anhin zu funktionieren.
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.