Forum: Haus & Smart Home RS-485 Kollisionserkennung (MAX13487/13488)


von Christian C.-Z. (Gast)


Lesenswert?

Hallo allerseits,

wieder einmal das Thema "Kollisionserkennung bei RS-485" bei 
Multimaster-Betrieb.

Zunächst vorne weg:
1) Mir geht es hier um die Kollisionserkennung und nicht deren 
Vermeidung (z.B. durch Token oder Zeitslots)
2) ja, CAN kann das. ;-)

Interssant finde ich diesen Baustein von Maxim (MAX1348x):
http://www.maxim-ic.com/quick_view2.cfm/qv_pk/5387

Dieser beinhaltet eine kleine State-Machine und einen Komparater, der 
automatisch zwischen Senden und Empfangen umschalten kann (siehe 
Datenblatt Seite 11/12).

Die Frage ist jetzt, ob man so etwas nicht für die Kollisionserkennung 
benutzen kann? Und zwar mit "normalen" RS-486 Transceivern...

Der Knackpunkt bei dieser Geschichte ist, dass das DE Signal (TX enable) 
in Kombination mit dem Signal DI (TX data bit) clever genutzt wird, um 
die Tatsache auszunutzen, dass der Bus bei Idle durch die Terminierung 
mit Pull-Ups und Pull-Downs in einen definierten Zustand "logisch 1" 
gezogen wird. Natürlich wird der Flankenwechseln von 0->1 nicht den 
Pull-Ups überlassen, sondern der Treiber wird kurz aktiviert. Danach 
wird geschaut, ob der Zustand immer noch "logisch 1" ist. Ist er es 
nicht, belegt ein anderer Teilnehmer den Bus.

Könnte man das zuletzt beschriebene nicht mit normalen RS-485 
Transceivern benutzen, um eine Kollision bzw. eine Busbelegung zu 
Erkennen?

Gruss,
Christian

von Andreas K. (a-k)


Lesenswert?

Anders ausgedrückt: Maxim hat einen RS485-Tranceiver so dressiert, dass 
er beinahe wie ein CAN-Transceiver arbeitet.

von Andreas K. (a-k)


Lesenswert?

Könnte funktionieren, aber wohl nur wenn der Leitungswiderstand zwischen 
2 Nodes gross genug ist, um den Transceiver im Konfliktfall 
abzuschalten.

Ersatzdarstellung in diesem Fall:


                VCC
                 +
                 |
                 |
                .-.
                | |
  Treiber 1     | |R(i)
                '-'
                 |
                 |         _
       Sense o---o--------|___|--------o---o Sense
                        R(Leitung)     |
                                       |
                                      .-.
                                      | |
                                      | |R(i)   Treiber 2
                                      '-'
                                       |
                                       |
                                      ===
                                      GND


Ist R(Leitung) << R(i) dann bleiben A und B in der Mitte hängen und 
keiner schaltet ab.

von Jörg (Gast)


Lesenswert?

Meine halbwissende Meinung:

So recht verstanden habe ich diesen Chip nicht. Er versucht zu senden, 
macht es dann davon abhängig ob er sich durchsetzen kann. Leider gibt es 
keine Rückmeldung darüber. Man kann aber wohl die Daten zurücklesen und 
vergleichen.

RS485 ist kein Open Collector wie z.B. I²C, wo in eine Richtung einer 
klar gewinnt, man bei Kollisionen das Low des anderen sehen kann, 
während man selbst den Bus High floaten lassen will.
Stattdessen ist RS485 eine sauber mit der richtigen Impedanz getriebene 
und terminierte differenzielle Doppelleitung. 
Elektrisch/übertragungstechnisch ist das ideal.

Kollisionen sind eventuell nur indirekt erkennbar. Ich lese zwar alle 
meine gesendeten Pakete mit, verifiziere sie, höre mich selbst aber auch 
am lautesten. Bei mir kann der selbst getriebene Pegel trotz Kollision 
noch lesbar sein, am letzten Empfänger auf der anderen Seite mag das 
anders aussehen. Diese Situation könnte dein Chip vermeiden, da er sich 
zurückzieht. Was aber, wenn die andere Seite das gleiche tut?

Unabhängig von Spezial-Hardware werden bei mir alle Pakete mit CRCs 
versehen und vom Empfänger quittiert. Beim Ausbleiben der Quittierung 
gibt es einen Retransmit-Mechanismus.

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.