Groove RS485 & Bustermination

OP #6161980
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.
Angehängte Dateien:
Gast #6162011
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?
OP #6162019
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.
Gast #6162028
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.
Gast #6162032
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...
OP #6162041
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).
OP #6162079
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
Gast #6162088
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.
OP #6163579
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.
Gast #6163985
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.
OP #6166595
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren