Signifikante Unterschiede zwischen CAN und RS485 bezüglich der physikalischen Schicht

Beim Vergleich der physikalischen Schicht von CAN und RS485 versuche ich, die Vorteile der einen gegenüber der anderen zu finden. Ich fand heraus, dass sie ziemlich ähnlich sind. Beide sind gut in Bezug auf die Gleichtaktunterdrückung und beide müssen gegen ESD und Überspannung geschützt werden. Ich habe nur einen wesentlichen Vorteil von CAN gegenüber RS485 (in Bezug auf die physikalische Schicht) gefunden, in dem CAN über einen fehlertoleranten Modus verfügt, der es ermöglicht, die Verbindung zwischen CANbus-Knoten über nur eine Datenleitung aufrechtzuerhalten, selbst wenn eine Datenleitung kurzgeschlossen oder geöffnet ist oder Beide Datenleitungen sind miteinander kurzgeschlossen.

Weg von der Kollisionsvermeidung und dem Nachrichtenprioritätssystem, das CAN hat,

1. Hat RS485 denselben fehlertoleranten Mechanismus?

2. Gibt es weitere wichtige Vorteile oder Unterschiede zwischen CAN und RS485 bezüglich der physikalischen Schicht?

Vielleicht könnten Sie auf den CAB-Bus-Fehlertoleranzmodus verlinken?
Dieses PDF spricht über die Fehlertoleranzfunktion des TJA1055T CAN-Transceivers.
Der Hauptunterschied besteht in der Busarbitrierung von CAN, was bedeutet, dass die Netzwerktopologie flexibel ist und kein Master zur Steuerung des Datenverkehrs erforderlich ist. In RS-485 gibt es keinen eingebauten Mechanismus zum Umschalten, wer senden darf, was bedeutet, dass RS-485 dazu neigt, in einer sternförmigen Netzwerktopologie zu enden, die sich um einen Master dreht. Dies wird auf den höheren Ebenen diktiert, wirkt sich jedoch dramatisch auf die physische Ebene aus.
Insgesamt gibt es heute wirklich keinen Grund, RS-485 und andere UART-basierte Technologien zu verwenden, es sei denn, Sie benötigen eine Art Abwärtskompatibilität. Ein Vorteil war früher, dass alle PC-Computer UART hatten, aber das ist nicht mehr der Fall.

Antworten (2)

Beim Vergleich nur der physikalischen Schicht sind CAN und RS-485 insofern ähnlich, als sie beide differenzielle Signalisierung verwenden. Dies verleiht beiden eine gute Immunität gegen Gleichtaktstörungen.

Der Hauptunterschied besteht darin, dass RS-485 eine symmetrische Signalisierung verwendet. Eine Leitung ist 5 V und die andere 0 V, um einen Zustand zu signalisieren, und wird dann für den anderen Zustand auf 0 V und 5 V gekippt. Dies macht das Erkennen des Zustands sehr einfach (ein einfacher Komparator, vielleicht mit einer kleinen Hysterese), stellt jedoch eine Herausforderung beim Beenden des Busses dar.

Wenn Sie der Meinung sind, dass das verdrillte Paar, das die Signale überträgt, eine charakteristische Impedanz von 120 Ω hat, sollten Sie idealerweise 120 Ω zwischen die beiden Leitungen legen. Das wären insgesamt 60 Ω zwischen den beiden Leitungen. (5 V)/(60 Ω) = 83 mA. Das ist viel Strom für den Bus und würde die ganze Zeit gezogen werden. Das entspricht fast einem halben Watt Ruheleistung. Beachten Sie, dass jeder 120-Ω-Abschlusswiderstand 208 mW verbrauchen würde, was bedeutet, dass es sich um mindestens "¼ W"-Widerstände handeln müsste. 0805 Oberflächenmontage muss beispielsweise nicht angewendet werden.

Wahrscheinlich aufgrund dieser Überlegungen sind die Abschlussanforderungen für RS-485 etwas gelockert. Dies führt zu einer reduzierten nutzbaren Busgeschwindigkeit. Das ist für die meisten RS-485-Anwendungen in Ordnung, da sie normalerweise mit üblichen Baudraten laufen, selten über 115,2 kBaud.

CAN hingegen adressiert die Terminierung richtig. Es wird davon ausgegangen, dass für die verschiedenen Signale ein verdrilltes 120-Ω-Kabelpaar verwendet wird, und es wird ein Abschlusswiderstand von 120 Ω an jedem Ende des Busses angegeben. Es gibt dann zwei wichtige Unterschiede, um die oben beschriebenen Probleme zu vermeiden:

  1. Der Ruhezustand ist ungetrieben, d. h. die Leitungen werden durch die Abschlusswiderstände auf gleicher Spannung gehalten.

  2. Der aktive Buszustand (in der CAN-Spezifikation als dominanter Zustand bezeichnet) ist, dass jede Leitung nur 900 mV vom Ruhepegel gezogen wird. Die beiden Zustände sind daher 0 V oder 1,8 V differentiell, nicht 5 V und -5 V wie bei RS-485.

Die Leistung, um einen CAN-Bus im dominanten Zustand zu halten, beträgt nur 54 mW, und überhaupt keine, um ihn im rezessiven (idle) Zustand zu halten. CAN ist für Geschwindigkeiten bis zu 1 MBaud vorgesehen, was durch eine bessere Terminierung als bei RS-485 ermöglicht wird.

Ein weiterer wichtiger Unterschied zwischen CAN und RS-485, auf den bereits hingewiesen wurde, besteht darin, dass RS-485 aktiv in beide Zustände getrieben wird, während CAN immer nur in den dominanten Zustand getrieben wird, während sich der Bus selbst in den rezessiven Zustand entspannt. Dies macht auf höheren Protokollebenen einen signifikanten Unterschied zur Busarbitrierung.

Was also verwenden? CAN ist in den meisten Fällen die klare Wahl für neue Designs, weil:

  1. Die Signalisierung auf niedrigem Niveau ermöglicht ein Kollisionserkennungsschema. Wenn ein Knoten den rezessiven Zustand auf den Bus "schreibt" und sieht, dass er sich tatsächlich im dominanten Zustand befindet, weiß er, dass ein anderer Knoten den Bus antreibt. Der Knoten, der versucht, den rezessiven Zustand zu schreiben, zieht sich zurück und wartet auf das Ende der Nachricht. Der Knoten, der den dominanten Zustand schreibt, weiß nie, dass dies passiert ist. Seine Nachricht wird von allen anderen Knoten normal gesendet und empfangen.

  2. Diese Kollisionserkennungsfähigkeit ermöglicht Peer-to-Peer-Netzwerkarchitekturen ohne zentrale Arbitrierung. Knoten senden einfach Nachrichten, halten sich jedoch zurück, wenn eine Kollision erkannt wird, und versuchen es dann erneut, nachdem das aktuelle Paket abgeschlossen ist. Schließlich werden diese anderen Nachrichten gesendet, der Bus ist verfügbar und die zuvor kollidierten Nachrichten werden ohne Kollision gesendet.

  3. CAN spezifiziert viel mehr als nur die physikalische Schicht, während Sie mit RS-485 nur das bekommen. In RS-485 gibt es keine Standardmethode, um zu entscheiden, wer senden darf, was gesendet wird, woran man erkennt, dass es dort intakt angekommen ist usw. CAN spezifiziert vollständige Pakete auf dem Bus, die eine 16-Bit-CRC-Prüfsumme enthalten.

  4. Da bei CAN mehrere Protokollschichten über der physikalischen Ebene spezifiziert sind, kann die Logik zu ihrer Implementierung in handelsübliche Hardware eingebaut werden. Sie finden kleine und günstige Mikros mit Hardware, die ganze CAN-Pakete sendet und empfängt. Diese Hardware kümmert sich automatisch um Paketstart/-ende-Erkennung, Kollisionserkennung, Backoff, Wiederholung, Prüfsummengenerierung und -überprüfung sowie einige weitere Funktionen im Zusammenhang mit dem Umgang mit Hardwarefehlern.

    Im Gegensatz dazu erhalten Sie mit RS-485 einen UART und der Rest ist Ihr Problem. Während es sicherlich möglich ist, ein robustes Protokoll über RS-485 zu implementieren, ist es nicht so einfach, alle Eckfälle richtig zu machen, wie naive Ingenieure denken.

Eine Einschränkung von CAN, die für einige Anwendungen möglicherweise umgangen werden muss, ist die Grenze von 8 Datenbytes pro Paket. Dies ist auch eine gute Sache für den Kollisions-/Wiederholungsmechanismus, aber etwas, das Sie berücksichtigen müssen, wenn Sie beabsichtigen, Streaming-Daten über CAN zu übertragen. Das Gleiche mit RS-485 zu tun, ist jedoch auch nicht so trivial, wie es auf den ersten Blick erscheinen mag.

"Wahrscheinlich aufgrund dieser Überlegungen sind die Terminierungsanforderungen für RS-485 etwas gelockert. Das führt zu einer reduzierten nutzbaren Busgeschwindigkeit." Ich weiß nicht genau, was Sie damit meinen, aber RS485 kann eine Bitrate von bis zu 10 Mbit / s erreichen, was zehnmal höher ist als das, was CAN leisten könnte.
Was ist mit dem fehlertoleranten Mechanismus? Hat RS485 eine solche Funktion?
@Maj: Bei kurzen Längen kann RS-485 schnell gehen. Wenn jedoch eine typische Twisted-Pair-Übertragungsleitung verwendet wird, werden die Enden nicht richtig abgeschlossen.

RS485 verwendet +/- 400 mV, nicht 0-5 V, daher hat der Abschlusswiderstand eine geringere Wattleistung als der CAN-Bus. Es gibt einen Vorteil, den viele (jeder) zu vermissen scheinen. Da RS485 tatsächlich um 0 V herum bidirektional ist, dh es muss eine vollständige H-Brücke sein, bedeutet dies, dass Strom in die eine oder andere Richtung fließt. Es geht nicht um die Spannungspegel, sondern um die tatsächliche Stromrichtung. Dies unterscheidet sich also von CAN, wo Sie effektiv zwei verschiedene Signale relativ zu GND betrachten. Sie möchten sehen, dass es diesen 2,5-V-Pegel RELATIV zu GND gibt und dass diese beiden Leitungen relativ zu GND auf derselben Spannung liegen oder dass eine über und eine unter 2,5 V relativ zu GND liegt.

Das sind zwei sehr unterschiedliche Dinge. CAN funktioniert nur, wenn es einen GND gibt, auf den man sich beziehen kann, also muss GND dem Signal überall folgen. Das bedeutet, dass Sie diese GND-Referenz benötigen, wenn Sie isoliertes CAN verwenden möchten.

Jetzt ist RS485 im Grunde ein Wechselstromantrieb aus einer H-Brücke, die Elektronen fließen in die eine oder andere Richtung, was die Spannung gegenüber GND völlig irrelevant macht. Die Spannung wird nicht mit GND verglichen, es wird die Richtung des Elektronenflusses betrachtet, sodass Sie keinen GND benötigen. Dies bedeutet, dass in Situationen, in denen Sie zwei Systeme miteinander verbinden möchten, die keine gemeinsame Masse haben, oder dies nicht erforderlich ist, dies in Ordnung ist, und in Situationen, in denen die Masse nicht gemeinsam ist, sich jedoch unterscheidet, ist dies in Ordnung, da die Messung nicht relativ zu GND ist und nimmt es out bedeutet, dass Isolation dort vermieden werden kann, wo CAN es erfordern würde.

Der Hauptgrund für die Verwendung von CAN ist, dass, sofern Sie nicht dieselbe ID für zwei Geräte verwenden, kein Gerät etwas über ein anderes Gerät wissen muss und Geräte einfach zum Bus hinzugefügt werden können.

Entschuldigung, aber das ist einfach falsch. RS-485-Ausgang zwischen 1,5 V und 6,0 ​​V ist zulässig, und die Empfangsseite erfordert +/- 200 mV. Ein 120-Ohm-Abschlusswiderstand muss also 0,3 W bewältigen. Der CAN-Bus-Standard sagt 0,25 W, es sei denn, Sie möchten Kurzschlüsse zur Batteriespannung behandeln. Und bei RS-485 geht es um Spannungspegel, nicht um Stromrichtung. Sowohl RS-485 als auch CAN sind differenzielle Busse und beide erfordern eine gemeinsame Masse zwischen Transceivern, RS-485 kann einfach mehr Gleichtaktspannung verarbeiten als CAN. Der Unterschied ist relevant, und die RS-485-Busspannungen am Empfänger müssen zwischen -7 und +12 V im Vergleich zur lokalen Masse liegen.
Ja, der Differenzausgang kann bis zu 5 V (+/-2,5 V) betragen, aber die Funktionsweise dieser beiden Busse ist ziemlich unterschiedlich. CAN erzeugt eine virtuelle Masse um die 2,5 V, deshalb teilen viele Schaltungen die 120 Ohm tatsächlich in 2 und setzen dort einen Kondensator ein, um zu versuchen, diesen Punkt zu halten. Es gibt also eine positive und negative Spannung oder einen differentiellen Antrieb relativ zu diesen 2,5 V, die nicht geerdet sind. RS485 ist differenziell zu Masse, was bedeutet, dass es sich um einen echten Gegentakt handeln muss und die Masse irrelevant wird, da die Polarität der Spannung, die Sie messen, nicht die Größe ist.
Sie können die Terminierung von RS-485 auf die gleiche Weise aufteilen wie CAN. Und Sie können RS-485 mit Transmitter Enable ausführen, um es wie CAN mit differentiellem Open-Drain zu simulieren. Und Sie können RS-485 im Ruhezustand mit ausfallsicherer Vorspannung auf nahe 2,5 V vorspannen, solange die Differenz jederzeit die logische 1-Schwelle von 200 mV überschreitet. RS-485 hat eine Hysterese, sodass die Größe jeder Polarität einen bestimmten Schwellenwert überschreiten muss. CAN hat nur eine größere Schwelle. Ich habe mich nicht darauf konzentriert, wie ähnlich oder unterschiedlich sie sind, sondern nur auf die falschen Behauptungen in Ihrer Antwort.