Forum: Mikrocontroller und Digitale Elektronik Groove RS485 & Bustermination


von Michael B. (michael_b)



Lesenswert?

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.

von Hmmm (Gast)


Lesenswert?

Bias-Widerstände sollte nur ein Teilnehmer haben. Da die mit 4k7 ohnehin 
überdimensioniert sind, sollte das aber mit 5 Teilnehmern trotzdem 
klappen.

von georg (Gast)


Lesenswert?

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

von Michael B. (michael_b)


Lesenswert?

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
von Hmmm (Gast)


Lesenswert?

Der Schaltplan kann so nicht stimmen, denn so ist nicht nur der Treiber 
permanent eingeschaltet, sondern auch der Empfänger permanent 
ausgeschaltet.

von Achim H. (pluto25)


Lesenswert?

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
von Mr. Eder (Gast)


Lesenswert?

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?

von Achim H. (pluto25)


Lesenswert?

Ich lag falsch. Hmmm hat recht aber so wird es nie funktioniert haben. 
Dort wo es funktionierte war etwas anders.

von Michael B. (michael_b)


Lesenswert?

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.

von Hmmm (Gast)


Lesenswert?

Was hast Du denn für Messtechnik zur Verfügung?

von Michael B. (michael_b)


Lesenswert?

Habe ein Fluke Multimeter, sowie ein KO von Hantek.

von Hmmm (Gast)


Lesenswert?

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.

von Its magic (Gast)


Lesenswert?

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...

von Its magic (Gast)


Lesenswert?

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

von Michael B. (michael_b)


Lesenswert?

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.

von Michael B. (michael_b)


Lesenswert?

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).

von Joe G. (feinmechaniker) Benutzerseite


Lesenswert?

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.

von Hmmm (Gast)


Lesenswert?

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?

von Its magic (Gast)


Lesenswert?

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?

von Michael B. (michael_b)


Lesenswert?

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.

von Hmmm (Gast)


Lesenswert?

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).

von Michael B. (michael_b)


Lesenswert?

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

von Hmmm (Gast)


Lesenswert?

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.

von Michael B. (michael_b)


Lesenswert?

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.

von Hmmm (Gast)


Lesenswert?

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.

von Michael B. (michael_b)


Lesenswert?

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
Noch kein Account? Hier anmelden.