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
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 !?
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.
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.
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 ;-)
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
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.
Hallo Michael, VCC ist stabil. Der GND ist auch verbunden. Das Kabel ist ca. 1 Meter lang und der Sensor ist der einzige Teilnehmer.
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
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.
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?
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!
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.