Forum: Mikrocontroller und Digitale Elektronik RS485 Terminierung und Verdrahtung 3 Geräte


von Zoni B. (zonibadneck)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

Ich baue grade einen kleinen Schaltschrank der Daten von 2 Sensoren 
(Drucksensor 0-10V, Laser Distanzsensor RS-485) empfängt.
Der Lasersensor sendet direkt ein RS-485 Signal. Die Analog-Spannung des 
Drucksensors wird von einem Waveshare Analog Acquistion Module in RS-485 
gewandelt.
Beide RS-485 Signale gehen dann an einen Waveshare RS-485-zu-USB 
Wandler, dieser wird durch einen Raspberry angesprochen.

Der Analog-Digital-Wandler und der RS-485-zu-USB Wandler sitzen dabei 
beide im Schaltschrank nah beieinander. Beide verfügen über zuschaltbare 
120Ohm Terminierungswiderstände sodass sie sich für die jeweiligen Enden 
des Busses eignen würden.
Der Laser-Sensor kommt mit einem vorkonfektionierten Kabel und verfügt 
offenbar nicht über einen Terminierungswiderstand (konnte keinen 
Widerstand über A und B messen).
Nach Lesen der RS-485 Artikel habe ich mitgenommen dass ein ideales 
RS-485-Setup als Daisy-Chain verdrahtet und mit 120 Ohm Widerständen an 
beiden Enden terminiert sein sollte.

Wenn ich aber nun alles in einer Daisy-Chain verdrahten möchte, würde 
das ja bedeuten dass ich eine neue 4-Adrige Leitung bis Laser-Sensor 
legen müsste um dann die Leitungen für A und B wieder zurück zum 
Analog-Digital-Wandler zu führen, andernfalls käme ich ja sonst auf 
einen einzigen Sternpunkt der effektiv an den Klemmen des 
RS-485-zu-USB-Wandlers säße.
So wie im anghehängten Schaltbild dargestellt.
Die Andere möglichkeit sehe ich darin, das Kabel kurz vor dem Sensor zu 
kappen, dort mit 120 Ohm-Widerstand zu terminieren und den Sensor an das 
Ende des Busses zu legen und das Analog-Digital-Modul auf 0 Ohm zu 
jumpern.

Sind das meine einzigen Möglichkeiten oder übersehe ich hier etwas?

Hier noch die Links zu den verwendeten Geräten:
AD-Wandler: https://www.waveshare.com/modbus-rtu-analog-input-8ch.htm
RS-485-USB-Wandler: https://www.waveshare.com/usb-to-rs485-422.htm
Laser-Sensor: https://www.phoskey.com/fb07992f814/u8b56d841f159da16.html

Vielen Dank im Vorraus.

von Gerd E. (robberknight)


Lesenswert?

Der spannende Punkt ist die Steilheit der Signalflanken. Denn die 
bestimmt wie kritisch die Terminierung ist.

Daher schau mal was für RS485-Transceiver bei Deinen 3 Bus-Teilnehmern 
eingesetzt werden und dann in deren Datenblatt für was für eine 
Geschwindigkeit die maximal vorgesehen sind. Der tatsächliche Bustakt 
spielt weniger eine Rolle, es geht um die Flankensteilheit und die hängt 
vom maximal möglichen Bustakt ab.

Alternativ kannst Du es natürlich auch mit der 3m Stichleitung 
ausprobieren und das Überschwingen mit dem Oszi ausmessen.

Vermutlich wird es mit der Stichleitung funktionieren, RS485 ist recht 
robust und Dein Bus insgesamt ziemlich kurz.

von N. M. (mani)


Angehängte Dateien:

Lesenswert?

Zoni B. schrieb:
> Der Laser-Sensor kommt mit einem vorkonfektionierten Kabel und verfügt
> offenbar nicht über einen Terminierungswiderstand (konnte keinen
> Widerstand über A und B messen).

Dann misst du entweder falsch oder die Chinesen malen Mal wieder falsche 
Bilder (Link von dir, Wiring Diagramm).

Bei so kurzen Strecken vermutlich alles halb so wild.

von N. M. (mani)


Lesenswert?

Zoni B. schrieb:
> Der Lasersensor sendet direkt ein RS-485 Signal.

Das heißt der sendet ohne Aufforderung? Also als Master sozusagen?
Wie verhindert du dann Kollisionen?

von Zoni B. (zonibadneck)


Lesenswert?

N. M. schrieb:
> Zoni B. schrieb:
>> Der Laser-Sensor kommt mit einem vorkonfektionierten Kabel und verfügt
>> offenbar nicht über einen Terminierungswiderstand (konnte keinen
>> Widerstand über A und B messen).
>
> Dann misst du entweder falsch oder die Chinesen malen Mal wieder falsche
> Bilder (Link von dir, Wiring Diagramm).
>
> Bei so kurzen Strecken vermutlich alles halb so wild.

Ich messe mit Multimeter mit den Prüfspitzen an Data+ und Data- (schw. 
und weißes Kabel).

von Zoni B. (zonibadneck)


Lesenswert?

N. M. schrieb:
> Zoni B. schrieb:
>> Der Lasersensor sendet direkt ein RS-485 Signal.
>
> Das heißt der sendet ohne Aufforderung? Also als Master sozusagen?
> Wie verhindert du dann Kollisionen?

Nein, das ist vlt. Missverständlich ausgedrückt. Ich meinte damit 
lediglich dass der Sensor direkt digital über RS-485 ansprechbar ist im 
Gegensatz zum Drucksensor dessen Signal ich erst über den ADC in RS-485 
wandle.
Um ihn auszulesen muss ich einen modbus-Request senden. Er bietet 
allerdings tatsächlich eine Funktion bei der er kontunierlich von 
alleine ein Signal sendet, aber bei mehreren Teilnehmern natürlich nicht 
sinnvoll diese Funktion einzuschalten.

von Harald K. (kirnbichler)


Lesenswert?

Zoni B. schrieb:
> Nach Lesen der RS-485 Artikel habe ich mitgenommen dass ein ideales
> RS-485-Setup als Daisy-Chain verdrahtet und mit 120 Ohm Widerständen an
> beiden Enden terminiert sein sollte.

Je nach Länge und Baudrate ist das vollkommen irrelevant. Länge scheint 
bei Dir kein Thema zu sein; und solange Du nicht auf die Idee kommst, 
irgendwelche Geschwindigkeitsrekorde mit Baudraten im drei- oder 
vierstelligen Kilobitbereich aufzustellen, ist das ziemlich schnurz.

Interessanter ist die in Deiner Zeichnung nicht eingezeichnete Masse; 
werden alle drei Geräte vom gleichen Netzteil versorgt?

Wenn nicht sichergestellt ist, daß alle drei Geräte den gleichen 
Massebezug haben, kann es Probleme geben; RS485 ist zwar eine 
differentielle Übertragung, aber nicht potentialfrei.

Wenn alle RS485-Transceiver galvanisch getrennt sind und mit einer 
Vorspannung (Pullup/-Down an den Datenleitungen gegen 
Versorgungsspannung bzw. Masse) gearbeitet wird, dann ist so ein 
massebezugloser Bus möglich.

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Zoni B. schrieb:
> Sind das meine einzigen Möglichkeiten oder übersehe ich hier etwas?

Ich habe den Eindruck, du hast genau verstanden wie ein solcher Bus 
funktioniert und aufgebaut werden muss.

Also kein Stern und mit Terminierung an den Enden.

Mein Rat: Mache das auch so!

Ja, RS485 mag einiges an Fehlkonfiguration wegstecken, z.B. kurze 
unterminierte Stichleitungen, aber betriebssicher und reproduzierbar, 
mag ich das nicht nennen wollen.


Wenn ich hier lese, dass 3m 4-adrige (oder 2 * 2-adrig) Leitung zu einer 
Kostenexplosion führen, dann frage ich mich was da sonst noch für 
fragwürdige Designentscheidungen getroffen wurden/werden.

von Zoni B. (zonibadneck)


Lesenswert?

Gerd E. schrieb:
> Der spannende Punkt ist die Steilheit der Signalflanken. Denn die
> bestimmt wie kritisch die Terminierung ist.
>
> Daher schau mal was für RS485-Transceiver bei Deinen 3 Bus-Teilnehmern
> eingesetzt werden und dann in deren Datenblatt für was für eine
> Geschwindigkeit die maximal vorgesehen sind. Der tatsächliche Bustakt
> spielt weniger eine Rolle, es geht um die Flankensteilheit und die hängt
> vom maximal möglichen Bustakt ab.
>
> Alternativ kannst Du es natürlich auch mit der 3m Stichleitung
> ausprobieren und das Überschwingen mit dem Oszi ausmessen.
>
> Vermutlich wird es mit der Stichleitung funktionieren, RS485 ist recht
> robust und Dein Bus insgesamt ziemlich kurz.

Vom Laser-Sensor kenne ich leider nicht den verwendeten Transceiver 
(China, Aliexpress, Datenblatt gibt das nicht her).
Das beiden Waveshare-Geräte verwenden den SP485EEN.

Der maximale Bustakt den alle Geräte unterstützen länge bei 115200Baud. 
Der LaserSensor kann zwar schneller, aber die höheren Raten sind dann 
230400, 312500, 458800Baud, etc. Diese Raten können die Waveshare-Geräte 
aber nicht.

Wenn es also wegen der recht kurzen Buslänge mit Stichleitung 
funktionieren sollte, wie gehe ich dann mit der Terminierung an den 
Geräten wo ich sie einstellen kann um? Gar keine?

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Zoni B. schrieb:
> wie gehe ich dann mit der Terminierung an den
> Geräten wo ich sie einstellen kann um? Gar keine?

Du terminierst an beiden Enden des Busses.
So ist es für RS485 vorgesehen.

Aus meiner Sicht ist das ohne jede Alternative.

von Zoni B. (zonibadneck)


Lesenswert?

Arduino F. schrieb:
> Zoni B. schrieb:
>> Sind das meine einzigen Möglichkeiten oder übersehe ich hier etwas?
>
> Ich habe den Eindruck, du hast genau verstanden wie ein solcher Bus
> funktioniert und aufgebaut werden muss.
>
> Also kein Stern und mit Terminierung an den Enden.
>
> Mein Rat: Mache das auch so!
>
> Ja, RS485 mag einiges an Fehlkonfiguration wegstecken, z.B. kurze
> unterminierte Stichleitungen, aber betriebssicher und reproduzierbar,
> mag ich das nicht nennen wollen.
>
>
> Wenn ich hier lese, dass 3m 4-adrige (oder 2 * 2-adrig) Leitung zu einer
> Kostenexplosion führen, dann frage ich mich was da sonst noch für
> fragwürdige Designentscheidungen getroffen wurden/werden.

Danke dir!
Dass ein anderes Kabel mit 4Adern um das Daiyschain korrekt aufzubauen 
zu einer Kostenexplosion führt habe ich aber gar nicht geschrieben, das 
ist überhaupt kein Problem.
Da mir bei dem Thema aber noch die Praxis-Erfahrung fehlt wollte ich nur 
wissen ob dieser Aufbau dann dem entsprechen würde wie ihr und andere 
Profis  das angehen würden.

von Zoni B. (zonibadneck)


Lesenswert?

Harald K. schrieb:
> Zoni B. schrieb:
>> Nach Lesen der RS-485 Artikel habe ich mitgenommen dass ein ideales
>> RS-485-Setup als Daisy-Chain verdrahtet und mit 120 Ohm Widerständen an
>> beiden Enden terminiert sein sollte.
>

> Interessanter ist die in Deiner Zeichnung nicht eingezeichnete Masse;
> werden alle drei Geräte vom gleichen Netzteil versorgt?
>

Fairer Punkt, habe ich zunächst nicht eingezeichnet da mir hier 
vorranging der Aufbau von Daisy-Chain und Terminierung im RS-485 Bus im 
Fokus stand.
Habe jetzt mal einen weitesgehend vollständigen Plan erstellt und 
angehangen. Ich hoffe der schafft Klarheit.
Alle Geräte werden vom selben Netzteil, ein Meanwell RD-50B mit 24 und 
5V Ausgang versorgt, es hat zwar zwei COM-Ausgänge, aber die haben 
Durchgang zueinander.
https://www.meanwell.com/Upload/PDF/RD-50/RD-50-SPEC.PDF
Das Waveshare RS485-zu-USB modul ist nach Herstellerangaben galvanisch 
getrennt.

Einen ersten Aufbau nur mit dem Laser-Sensor angeschlossen habe ich 
bereits erfolgreich testen können, Kommunikation bei 115200 Baud 
funktioniert problemlos.
Mein Thread geht jetzt eben dahin alle 3 Geräte korrekt in den RS-485 
Bus zu integrieren.

von Rainer W. (rawi)


Lesenswert?

Arduino F. schrieb:
> Ja, RS485 mag einiges an Fehlkonfiguration wegstecken, z.B. kurze
> unterminierte Stichleitungen, aber betriebssicher und reproduzierbar,
> mag ich das nicht nennen wollen.

Selbst bei CAN-Bus sind kurze Stichleitungen zulässig. "Kurz" bedeutet 
hier für 250 kBit/s "kleiner als 10 m". Bei RS485 ist die 
Stichleitungslänge genauso durch die Signalreflektionen begrenzt. Also 
brauchst du bei 3m und 115.2 kBd nicht gleich die Panik ins Gesicht zu 
kriegen.

: Bearbeitet durch User
von Zoni B. (zonibadneck)


Angehängte Dateien:

Lesenswert?

Anhang vergessen, Klassiker.
hier der Schaltplan.

von Gerd E. (robberknight)


Lesenswert?

Zoni B. schrieb:
> Das beiden Waveshare-Geräte verwenden den SP485EEN.

Wenn Du in dessen Datenblatt schaust ist das ein 10 MBit/s Transceiver. 
Also mit knackig steilen Flanken. Eher ungut für unsaubere Verkabelung.

> Der maximale Bustakt den alle Geräte unterstützen länge bei 115200Baud.

Das ist die digitale Seite. Die spielt hier keine Rolle. Es geht um die 
Flankensteilheit die die Transceiver liefern, denn die macht hinterher 
die Reflexionen am Busende bzw. Stichleitungen.

> Wenn es also wegen der recht kurzen Buslänge mit Stichleitung
> funktionieren sollte, wie gehe ich dann mit der Terminierung an den
> Geräten wo ich sie einstellen kann um? Gar keine?

Die sauberste Lösung dürfte sein direkt am Laser-Sensor die Leitung zu 
öffnen und  eine Terminierung zu machen. Vielleicht auch aufschrauben 
und auf der Platine ist schon ein Footprint für vorgesehen oder 
ähnliches. Innerhalb des Schaltschranks ist die Verkabelung ja einfach 
anzupassen. Das machst Du in Reihe und setzt an einem Gerät die 
Terminierung, z.B. an dem USB-Gateway.

Wenn das aufwendig ist kannst Du ja mal probieren die Terminierung nur 
an den beiden anderen Geräten zu setzen und mit der Stichleitung zu 
leben. Dann mit dem Oszi die Signalflanken prüfen.

von Zoni B. (zonibadneck)


Angehängte Dateien:

Lesenswert?

Gerd E. schrieb:

> Das ist die digitale Seite. Die spielt hier keine Rolle. Es geht um die
> Flankensteilheit die die Transceiver liefern, denn die macht hinterher
> die Reflexionen am Busende bzw. Stichleitungen.
>

Ok, verstehe. Habe den Sensor jetzt mal geöffnet, verbaut ist ein
MAX33070E der laut Datenblatt 
(https://www.analog.com/media/en/technical-documentation/data-sheets/MAX33070E-MAX33074E.pdf) 
max 0.5Mbps hat, aber ich nehme an der Transceiver mit der höchsten Rate 
im Bus ist dann ausschlaggebend?


> Die sauberste Lösung dürfte sein direkt am Laser-Sensor die Leitung zu
> öffnen und  eine Terminierung zu machen. Vielleicht auch aufschrauben
> und auf der Platine ist schon ein Footprint für vorgesehen oder
> ähnliches.

Habe mal den Deckel aufgemacht, aber einen jumper oder Footprint für 
einen Terminierungswiderstand erkenne ich auf Anhieb nicht. Foto im 
Anhang.
Ich denke ich werde dann die leitung eben außen am Gerät öffnen und 
terminieren.

> Wenn das aufwendig ist kannst Du ja mal probieren die Terminierung nur
> an den beiden anderen Geräten zu setzen und mit der Stichleitung zu
> leben. Dann mit dem Oszi die Signalflanken prüfen.
Da das relativ einfach zu verproben ist würde ich das initial versuchen. 
Sonst wie oben beschreiben terminieren und den Sensor ans Ende des 
Busses setzen.

Danke für deine hilfreichen Antworten.

von Zoni B. (zonibadneck)


Angehängte Dateien:

Lesenswert?

Zoni B. schrieb:
> Gerd E. schrieb:
>

>> Die sauberste Lösung dürfte sein direkt am Laser-Sensor die Leitung zu
>> öffnen und  eine Terminierung zu machen. Vielleicht auch aufschrauben
>> und auf der Platine ist schon ein Footprint für vorgesehen oder
>> ähnliches.
>
> Habe mal den Deckel aufgemacht, aber einen jumper oder Footprint für
> einen Terminierungswiderstand erkenne ich auf Anhieb nicht. Foto im
> Anhang.

Muss mich korrigieren, dort ist ein leerer Footprint zwischen den A und 
B Pins des Chips zu erkennen.
Da ich aber derzeit keine vernünftige Ausrüstung zum Platinen/SMD löten 
besitze würde ich den Widerstand dennoch außen am Kabel anbringen.

von Gerd E. (robberknight)


Angehängte Dateien:

Lesenswert?

Zoni B. schrieb:
> aber ich nehme an der Transceiver mit der höchsten Rate
> im Bus ist dann ausschlaggebend?

korrekt

> Habe mal den Deckel aufgemacht, aber einen jumper oder Footprint für
> einen Terminierungswiderstand erkenne ich auf Anhieb nicht.

Doch, Footprint ist da. Sieht nach 0402 aus.

Ich weiß nicht ob Du Dir zutraust das zu löten. Wenn nein, dann könntest 
Du die Terminierung auch an die Pins der Common-Mode-Drossel setzen. 
Oder halt außen ans Kabel.

: Bearbeitet durch User
von N. M. (mani)


Lesenswert?

Wenn das A/B ist, warum ist da dazwischen ein Kondensator?
Und so wie es aussieht geht es auf etwas Optokoppler artiges 🤔
Oder ist das eine Gleichtaktdrossel?

: Bearbeitet durch User
von Gerd E. (robberknight)


Lesenswert?

N. M. schrieb:
> Wenn das A/B ist, warum ist da dazwischen ein Kondensator?
> Und so wie es aussieht geht es auf etwas Optokoppler artiges 🤔
> Oder ist das eine Gleichtaktdrossel?

Ist höchstwahrscheinlich eine Gleichtaktdrossel. Und damit die richtig 
filtern kann, braucht es einen kleinen Kondensator dahinter.

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.