Forum: Mikrocontroller und Digitale Elektronik RS485 Pegel Probleme


von Moritz (anonymouse)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

bei der Inbetriebnahme eines Sensors, der über RS485 kommuniziert, habe 
ich Probleme mit dessen Antwort.

Ich verwende als Transciver den MAX13430EEUB und Versorge diesen mit 
3V3.
Terminierung habe ich im ausgesteckten Zustand beim Sensor gemessen und 
diese lag, (warum auch immer) bei 238 ohm. Ich habe meine EOL Widerstand 
dann auch entsprechend auf 240 ohm angepasst. Pullup und Pulldowns sind 
keine Vorhanden. Das Toggeln des DE und RE realisiere ich über einen 
GPIO Pin und funktioniert wunderbar. Zu erwähnen ist vielleicht noch, 
dass ich am Sensor zu Masse sowohl auf A als auch auf B 553 ohm messe. 
Im ersten Moment würde ich sagen, dass der Sensor nicht fehlerhaft ist.

Meine Frage lautet, warum antwortet der Sensor mit unterschiedlichen 
High und Low Pegeln als mein Transciver? Das Problem ist, dass mein 
Transciver die Daten nicht Recieved. Also an RX kommt nichts raus. Damit 
RO = 1 ist, muss die Differenz zwischen A und B größer gleich -50mV. 
Damit RO = 0 muss die Differenz zwischen A-B kleiner gleich -200mV sein.
In dem Fall wird diese Aber nirgendwo kleiner gleich -200mV. Daher kann 
der Transciever auch nichts herausgeben.

Hat jemand eine Idee wo das Problem ist?

Zum Bild:
rot  = A
gelb = B
unteres Diagramm ist die Differenz zwischen A und B

Würde mich freuen, wenn wir eine Lösung finden. :)

Viele Grüße

von Nils S. (wall-e)


Lesenswert?

Ohne den Sensor zu kennen würde ich jetzt einfach mal tippen das Pullup 
und Pull-Down notwendig sind. Der Sensor schafft die notwendigen Pegel 
nicht !?

von Michael B. (laberkopp)


Lesenswert?

Moritz schrieb:
> Hat jemand eine Idee wo das Problem ist?

Keine Ahnung, aber wenn man DO (Sendedaten) und TE (TransmitEnable) 
verwechselt, kann so was rauskommen.

Wenn man GND des Senders nicht mit GND des Empfängers verbindet, und sei 
es über Schutzleiter PE beider Geräte, hüpft die (in welchem Bezug auch 
immer, nehmen wir Empfängerbezug) Versorgungsspannung des Senders mit 
den Daten beliebig herum, denn die Leitung ist recht niederohmig. Aber 
dabei sollte wenigstens trotzdem die Differenzpegel richtig bleiben.

von Michael (Firma: HW Entwicklung) (mkn)


Lesenswert?

Moritz schrieb:
> Hat jemand eine Idee wo das Problem ist?

Ich denke Du lässt den Ausgangstreiber des Masters aktiv.
Daher schafft der Slave probemlos High Pegel, aber er kann es nicht 
schaffen die Low zu ziehen, weil der Master gegenhält.

Es darf immer nur ein Treiber aktiv sein.
Man darf die ganze Zeit hören, aber nicht die ganze Zeit schreiben.

von Rainer W. (rawi)


Lesenswert?

Moritz schrieb:
> ... mein Transciver? Das Problem ist, dass mein Transciver ...

Englisches Sprache - schweres Sprache

Sag statt dessen einfach "Sendeempfänger", wenn dir die Fremdworte so 
fremd sind ;-)

von Moritz (anonymouse)


Angehängte Dateien:

Lesenswert?

Hallo allerseits,
vielen Dank für die Antworten!

In der Schaltung habe ich RE und DE zusammen verbunden. Laut der 
Funktionstabelle sollte das auch so gehen (siehe LogikTabelle.PNG). In 
dem anderen Bild ist zusehen, dass ich den DE Und RE während des Sendens 
HIGH ziehe und danach LOW ziehe. Meiner Erkenntnis nach müsste der 
MAX13430 nach dem Senden dann im RECEIVING mode sein. Vielleicht habe 
ich die Tabelle auch nicht korrekt verstanden und es ist nicht egal, 
dass DE auch LOW ist.

Viele Grüße

von Michael (Firma: HW Entwicklung) (mkn)


Lesenswert?

DE & /RE verbinden ist okay.

Wie wird der Sensor versorgt, ist seine VCC stabil und hast Du den GND 
zwischen Master und Slave verbunden?

Wie weit sind Master und Slave auseinander und sind es die einzigen 
Geräte am Bus?

Beitrag #7495922 wurde vom Autor gelöscht.
von Moritz (anonymouse)


Lesenswert?

Hallo Michael,
VCC ist stabil. Der GND ist auch verbunden.

Das Kabel ist ca. 1 Meter lang und der Sensor ist der einzige
Teilnehmer.

von Kai B. (kaib) Benutzerseite


Lesenswert?

Also ich würde weiterhin behaupten das da ein Teilnehmer die 
Busleitungen nicht freigibt. Bei Bus Ruhe/deaktiviertem Transmitter 
sollten beide Signale bei entsprechender Terminierung etwa halben 
Buspegel annehmen.
Hier sieht man das exakt gleiche Problem.
https://electronics.stackexchange.com/questions/342413/rs-485-differential-signals-wont-cross

Ansonsten ein gern gemachter Fehler die Bus Leitungen A/B vertauscht.

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Moritz schrieb:

> bei der Inbetriebnahme eines Sensors, der über RS485 kommuniziert, habe
> ich Probleme mit dessen Antwort.

Bist du sicher, daß der RS485 benutzt und nicht CAN?

> Terminierung habe ich im ausgesteckten Zustand beim Sensor gemessen und
> diese lag, (warum auch immer) bei 238 ohm. Ich habe meine EOL Widerstand

Was für einen EOL Widerstand?

> dann auch entsprechend auf 240 ohm angepasst.

Der Terminierungswiderstand ist normalerweise 100-120 Ohm, je nach 
Leitung. Wenn man den mit Pull-Up/DOWN Wiederständen kombiniert, wird er 
größer, siehe hier.

https://www.mikrocontroller.net/articles/RS-485#Weitere_Hinweise

> Pullup und Pulldowns sind
> keine Vorhanden. Das Toggeln des DE und RE realisiere ich über einen
> GPIO Pin und funktioniert wunderbar. Zu erwähnen ist vielleicht noch,
> dass ich am Sensor zu Masse sowohl auf A als auch auf B 553 ohm messe.

Da stimmt was nicht. RS484 Tranceiver sollen min. 12k differentiellen 
Eingangswiderstand haben.

> Im ersten Moment würde ich sagen, dass der Sensor nicht fehlerhaft ist.

Ich nicht.

> Meine Frage lautet, warum antwortet der Sensor mit unterschiedlichen
> High und Low Pegeln als mein Transciver?

Der Treiber erreicht nicht den Pegel. C1 bleibt zu niedrig, C2 zu hoch. 
Bei RS485 müssen +/-200mV MINDESTENS erreicht werden. Im Normalfall 
schafft ein derartigen Tranceiver MIT 2x 100 Ohm Terminierung min. +/- 
1,5V.

> Das Problem ist, dass mein
> Transciver die Daten nicht Recieved.

Und du Denglisch faselst.

> Hat jemand eine Idee wo das Problem ist?

Dein Sensor ist kaputt oder falsch angeschlossen.

von Moritz (anonymouse)


Angehängte Dateien:

Lesenswert?

Tatsache ich hatte wirklich den DE Pin dauerhaft High und nur den /RE 
Pin getoggelt.

Jetzt scheint B keine Probleme mehr zu haben. A jedoch wird LOW zu dem 
Zeitpunkt, wo es eigentlich HIGH sein sollte.

Hat jemand eine Idee woran es liegen kann?

von Moritz (anonymouse)


Angehängte Dateien:

Lesenswert?

Habs geschafft!

grün = RO
gelb = B
rot  = A
und ganz unten Differenz von A und B

Ich habe jetzt pull up und pull down Widerständen von 390ohm und nur die 
Terminierung (240 ohm) des Sensors am Bus. Dadurch hat es funktioniert!

Durch die pull up und pull down Widerstände konnte ich die Differenz auf 
-400mV ziehen, wodurch eine 0 erkannt wird.

Vielen Dank für eure Hilfe!

von Falk B. (falk)


Lesenswert?

Moritz schrieb:
> Habs geschafft!
>
> grün = RO
> gelb = B
> rot  = A
> und ganz unten Differenz von A und B
>
> Ich habe jetzt pull up und pull down Widerständen von 390ohm und nur die
> Terminierung (240 ohm) des Sensors am Bus. Dadurch hat es funktioniert!

OK.

> Durch die pull up und pull down Widerstände konnte ich die Differenz auf
> -400mV ziehen, wodurch eine 0 erkannt wird.

Man braucht keine Pull UP/DOWN Widerstände, um bei AKTIVEM Tranceiver 
korrekte Pegel zu erreichen. Die sind dann notwendig, denn alle 
Tranceiver auf dem Bus inaktiv sind!

Moritz schrieb:
> Tatsache ich hatte wirklich den DE Pin dauerhaft High und nur den /RE
> Pin getoggelt.

Im Normalfall werden die beiden Pins direkt verbunden und mit einem 
IO-Pin gesteuert. Denn RS485 ist in Normalfall halbduplex.

von Εrnst B. (ernst)


Angehängte Dateien:

Lesenswert?

Moritz schrieb:
> Durch die pull up und pull down Widerstände konnte ich die Differenz auf
> -400mV ziehen, wodurch eine 0 erkannt wird.

Das würde ich aber nicht als "funktioniert" bezeichnen, eher als 
"irgendwie hingefrickelt, dass es gerade so klappt".

RS485-Treiber sind für einen Bus ausgelegt, der an beiden Enden mit 
(z.B., je nach Kabel) 120 Ohm terminiert ist, also 60 Ohm.
Laut Datenblatt (die messen mit 54 Ohm und 3V Versorgung) und nur einem 
Meter Kabel solltest du an beiden Enden da mindestens ±1.5V rauskriegen. 
Mit deinen 3.3V und wesentlich schwächerer Terminierung: Eher mehr.

von Moritz (anonymouse)


Angehängte Dateien:

Lesenswert?

Ich bin auch nicht zufrieden mit der Lösung.

Bei diesem Beitrag hatte ich das falsche Bild angehängt...
Moritz schrieb:
> Jetzt scheint B keine Probleme mehr zu haben. A jedoch wird LOW zu dem
> Zeitpunkt, wo es eigentlich HIGH sein sollte.

In dem Bild "Korrekte_Ansteuerung_von_RE_und_DE.png" wirde der DE und RE 
entsprechend HIGH und LOW gezogen. Der Pegel von B scheint jetzt in 
Ordnung zu sein, aber der Pegel von A stimmt nicht.
Die Schaltung besitzt in dem Fall keine Pullup- oder Pulldown 
Widerstände, sondern jeweils an den Enden 240 ohm.

Hat jemand eine Ahnung, warum A nicht den entsprechenden Pegel 
hinbekommt?

Mit den Pullup- und Pulldown Widerständen kann ich auch die Werte des 
Sensors auslesen. Von daher kann ich zumindest mit der Lösung arbeiten. 
Aber interessieren würde es mich dennoch, was ich falsch gemacht habe.

: Bearbeitet durch User
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.