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
Anders ausgedrückt: Maxim hat einen RS485-Tranceiver so dressiert, dass er beinahe wie ein CAN-Transceiver arbeitet.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.