Korrekte CAN-Bus-Terminierung

Ich habe Probleme damit, die CAN-Bus-Übertragung richtig zum Laufen zu bringen. Ich fahre das Setup mit einem Parallax-Propeller-Board und die Einzelheiten sind in einem anderen Beitrag , aber ich habe eine spezifischere Frage zur CAN-Bus-Verkabelung und -Terminierung:

Jede Quelle, die ich gefunden habe und die die CAN-Bus-Terminierung beschreibt, tut dies mit etwas wie dem oberen Rand des unten gezeigten Diagramms - einem hohen und einem niedrigen Draht mit 120-Ohm-Widerständen an jedem Ende.

In meinem Laboraufbau entspricht das, was ich tatsächlich habe, jedoch dem unteren Teil des gezeigten Diagramms - der Widerstand liegt tatsächlich in der "Mitte" zwischen den beiden Geräten. Ich habe auch versucht, mit diesem Widerstandswert zu spielen, indem ich ihn vollständig abnahm, und um 110 Ohm sowie 220 Ohm herum, und sie alle leiden unter dem gleichen Problem, und der Chip, den ich verwende, meldet einen Übertragungsfehler.

Zwei parallel geschaltete 120-Ohm-Widerstände sollten dem 60-Ohm-Widerstand entsprechen. Aber spielt die tatsächliche Position der Widerstände entlang des Drahtes eine Rolle? Die Geräte sind physisch etwa 6 Fuß Kabel voneinander entfernt und es läuft mit 500 kHz. Ich kenne einige Grundlagen, einschließlich des Ohmschen Gesetzes, und ich verstehe, dass CAN zum Übertragen eine Spannungsdifferenz verwendet, aber wenn die Position der Widerstände falsch ist, verstehe ich definitiv etwas nicht darüber, wie diese Schaltung funktionieren soll.

schematisch

Simulieren Sie diese Schaltung – Mit CircuitLab erstellter Schaltplan

Teilen sich die von Ihnen verwendeten Boards eine gemeinsame 0V? CAN wurde für den Einsatz im Automobil entwickelt, daher wird davon ausgegangen, dass alle Platinen eine Chassis-Referenz haben. Die Sender und Empfänger müssen innerhalb des Gleichtakt-Busspannungsbereichs liegen.
Die Propellerplatine, meine CAN-Bus-Abschirmung und die Erdungsstifte am ODB-II-Anschluss sind alle miteinander verbunden, also ja. Ich bin mir ehrlich gesagt nicht sicher, was "Common Mode" in diesem Zusammenhang bedeutet (jetzt googeln). Wenn ich mein Voltmeter auf einen der Drähte stecke (und das andere Ende auf meine gemeinsame Masse), gibt es die erwartete rezessive Spannung von etwa 2,5 V).

Antworten (1)

Der Zweck der Widerstände an jedem Ende des Busses besteht darin, Transienten aufgrund von Zeitverzögerungen zu kontrollieren. Der Bus muss an jedem Ende mit seinem Wellenwiderstand abgeschlossen werden.

Wenn der Bus jedoch nur 6 Fuß lang ist, würde ich erwarten, dass Ihre Implementierung mit einem 60-Ohm-Widerstand in der Mitte funktioniert. Ich nehme an, Sie haben ein anderes Problem.

Sie müssen ein Gerät haben, das so konfiguriert ist, dass es das CAN-Paket empfängt und ein ACK zurücksendet, um keinen Fehler vom Sender zu erhalten - einige CAN-Bus-Monitore tun dies nicht, da von ihnen erwartet wird, dass sie nicht aufdringlich sind. In diesem Fall erhalten Sie eine Fehlermeldung vom Sender, wenn kein anderer Knoten vorhanden ist.

Möglicherweise müssen Sie einen anderen normalen CAN-Knoten in das Netzwerk einfügen, um die richtige Antwort zu erhalten.

Macht Sinn. Das Gerät, das ich fahre, ist ein MCP2515 (das mit einem MCP2551 verbunden ist, das die eigentliche CAN-Übertragung durchführt) und am anderen Ende ist ein Sinocastel "ODB-Smart" GPS-Gerät: sinocastel.com/product/item-3.html I Ich bin davon ausgegangen, dass dies die Bereitstellung der ACK wäre, aber vielleicht irre ich mich. Und abgesehen von der Verwendung eines Oszilloskops (habe keins zur Hand) habe ich noch nicht herausgefunden, wie ich feststellen kann, ob dies der Fall ist.
Auch dieser MCP2515 muss so programmiert werden, dass er mit der gleichen Bitrate, dem gleichen Nachrichtenformat (normal oder erweitert) und wahrscheinlich einigen anderen Parametern wie das Gerät am anderen Ende läuft.