Frage:
CAN-Bus-Bit-Timing mit 16-MHz-Quarz
Daniel
2013-02-20 18:44:05 UTC
view on stackexchange narkive permalink

Ich versuche, CAN-Nachrichten von einem Radar zu empfangen, dessen Spezifikation die folgenden Daten für das Bit-Timing definiert:

  CAN-Baudrate = 250 kBaudTseg1 = 8Tseg2 = 7Tsjw = 4Synchronisation nur an einer Kante  

Ich verwende einen 16-MHz-Quarz im klassischen MCP2515 (CAN-Controller) + MCP2551 (CAN-Transceiver) Setup, das ich zwischen dem CAN-Bus und einem Arduino Uno verwende, aber ich glaube, ich habe Probleme beim Einstellen der Bit-Timing-Konfiguration im MCP2515.

Dies liegt daran, dass die Verwendung einer Taktfrequenz von 16 MHz die Zeitquante pro Bitzeit auf 16 begrenzt. Ich verwende das Tool MBtime, um das Bit-Timing zu überprüfen.

  1 Zeitquanten-Synchronisationssegment + 1 Zeitquantenausbreitungsverzögerung + 8 Zeitquantenphasensegment 1 + 7 Zeitquantenphasensegment 2 ----------------------- ----- = 17 Zeitquanten  

Welches ist eins mehr als das erforderliche (16). Das Synchronisationssegment ist immer eins und das Ausbreitungssegment mindestens eins. Wie ist es möglich, es mit den erforderlichen Parametern arbeiten zu lassen?

Meine Ideen verwenden einen anderen Kristall, vielleicht 18 oder 20 MHz. (Ich habe es tatsächlich mit 20 MHz und einer vierfachen Quantenausbreitungsverzögerung versucht, und es hat nicht funktioniert.)

Mit einem CAN-zu-USB-Konverter in meinem PC habe ich den CAN jedoch erfolgreich empfangen Frames, die ich vom Radar erwartet hatte. Ich habe die gleichen Einstellungen vorgenommen (Tseg1, Tseg2, SJW und Baudrate). Und dieser Konverter verwendet einen 16-MHz-Kristall ...

Fehlt mir etwas? Sollte ich die Oszillatorfrequenz auf einen anderen Wert ändern?

Sie sollten nur in der Lage sein, das Phasensegment 2 um 1 zu reduzieren.
Warum spezifiziert das Radar dann das Phasensegment2 als 7? Ich werde es mit PHS2 = 6 versuchen, nur für den Fall. Vielen Dank ;)
Die Zahlen für Segment 1 und 2 sind nicht so kritisch. Sie kontrollieren nur genau, wann die Probe entnommen wird. Auf einigen Systemen können Sie diese Zahlen nicht einmal auswählen. Sie können einfach so etwas wie "Sample at the 75% bit time" sagen.
Ich verstehe, also ist Ihr Vorschlag, dass das Bit-Timing vielleicht nicht das Problem ist, das ich habe, oder? Das Merkwürdige ist, dass ich Daten erhalte, wenn ich an den CAN-Bus angeschlossen bin (als Sniffer), aber immer die gleiche Unsinnsnachricht: S.
Alles, was Sie mit den Bit-Timings tun müssen, ist sicherzustellen, dass sie 16 ergeben. Das ist das Entscheidende.
Einer antworten:
Olin Lathrop
2013-02-20 20:13:42 UTC
view on stackexchange narkive permalink

Die andere Seite kann Ihnen nicht sagen, wie viele Zeitquanten für verschiedene Teile des Bits verwendet werden sollen. Es kann nur die Bitrate angeben, die Sie einhalten müssen.

Wählen Sie eine Reihe von Zeitquanten aus, die nahe an der verwendeten Bitrate liegen, die jedoch immer noch die angegebene Bitrate erreicht, und alles wird in Ordnung sein. Betrachten Sie ihre Zeitquanten als "Spezifikation", indem sie Ihnen lediglich sagen, wie ihre Implementierung funktioniert, und nicht, was Sie tun müssen.

Vielen Dank für Ihre Antwort! Ich werde versuchen zu sehen, was passiert.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...