Ich versuche, die ECAN-Funktionalität auf einem dsPIC33 zum Laufen zu bringen. Ich habe zwei identische dsPIC33s mit jeweils identischen CAN-Transceivern, die über einen kurzen Bus (3 Zoll) verbunden sind. Man sendet, man empfängt. Ich sehe jedoch keine Nachrichten, sondern nur eine sich wiederholende Wellenform mit einer Periode von 34,5us. Schlägt dies eine bestimmte Fehlerbedingung auf einem CAN-Bus vor?
7
Antworten:
Es stellte sich heraus, dass die Antwort aus den obigen Wellenformen ersichtlich sein sollte.
Wenn TX niedrig wird, wird auch RX niedrig. Aber wenn TX hoch geht, braucht RX mehr als 1us, um wieder zu steigen. Das ist mehr als eine ganze Weile! CAN kann unter diesen Bedingungen nicht arbeiten.
Der Grund, warum RX hinter TX zurückbleibt, wäre mit einem geeigneten Oszilloskop und nicht mit einem einfachen Logikanalysator offensichtlich gewesen. Da der Bus so kurz war, habe ich mir nicht die Mühe gemacht, die Abschlusswiderstände hinzuzufügen, da ich nicht dachte, dass Reflexionen ein Problem darstellen würden. Die Widerstände sind aber auch wichtig, um die geringe Kapazität des But zu entladen, damit es schnell genug von dominant zu rezessiv übergehen kann.
Durch das Löten der Widerstände werden auf magische Weise ganze CAN-Meldungen angezeigt.
quelle
An den Abschlusswiderständen ist nichts Magisches. Sie sind für einen CAN-Bus unbedingt erforderlich. Sie können als "Abschlusswiderstände" bezeichnet werden, und dies ist in der Tat Teil ihrer Funktion, wenn der Bus lang genug ist, um eine Übertragungsleitung zu sein. Sie bewirken jedoch auch, dass ein entladener Bus in den rezessiven Zustand übergeht. Dies ist eine grundlegende Annahme, auf der das CAN-Protokoll basiert.
Stellen Sie sich CAN als einen passiv hochgezogenen Open-Collector-Bus vor, außer dass er (normalerweise) als Differenzpaar implementiert ist. Die Abschlusswiderstände terminieren nicht nur die Übertragungsleitung, sondern wirken auch als Pullup-Widerstand. In der differentiellen CAN-Implementierung sind sie wirklich Pull-Together-Widerstände, haben aber logischerweise die gleiche Funktion wie Pullup auf einem Single-Ended-Open-Collector-Bus.
Beachten Sie, dass der CAN-Standard den tatsächlichen physischen Bus nicht spezifiziert. Für kurze Strecken auf derselben Karte mit den richtigen Bitraten können Sie can als Single-Ended Passiv Pulled Bus implementieren. Wenn Sie nichts Besonderes tun, ist die Verwendung von zwei CAN-Transceiver-Chips, um zwischen nur zwei Knoten mit einem Abstand von 3 Zoll auf derselben Platine zu wechseln, ein grober Overkill und eine Verschwendung von Geld, Leistung, Platz und Teilen.
quelle