Reicht ein CAN-fähiger Mikrocontroller aus, um einen CAN-Bus anzusteuern?

45

In diesen Tagen sind eine Reihe von CAN-Modulen in Mikrocontrollern eingebaut. Der PIC18F2480 ist ein Beispiel dafür. Ist dieser Mikrocontroller (mit integriertem CAN) in der Lage, einen CAN-Bus alleine anzusteuern, oder ist ein externer CAN-Transceiver / Controller erforderlich?

Ich glaube, CAN hat sowohl eine Software- als auch eine Hardwareschicht, und wie es aussieht, scheinen diese CAN-fähigen Mikrocontroller nur die Software zu haben, aber es heißt nicht, dass sie den CAN-Bus so wie er ist ansteuern können oder nicht.

Ich möchte mehr als sechs Mikrocontroller über einen CAN-Bus verbinden und möchte wissen, ob ich über alle einen Transceiver benötige oder ob das eingebaute Material die Kommunikation aus Software- und Hardware-Sicht bewältigen kann.

Angenommen, ich habe die erforderlichen Abschlusswiderstände und andere kleine diskrete Komponenten (Kappen, Widerstände usw.).

efox29
quelle

Antworten:

55

Das ist eine sehr gute Frage. In der Regel benötigt CAN für jeden Knoten einen Transceiver:

Bildbeschreibung hier eingeben

Unter bestimmten Umständen können Sie jedoch tatsächlich ohne Transceiver davonkommen! Diese Umstände sind:

  • Kurze Buslänge (viel weniger als 1 Meter)
  • Vorzugsweise befinden sich alle Mikrocontroller auf derselben Leiterplatte oder einem Stapel von Leiterplatten.
  • Die Bitrate ist niedrig
  • Die Umgebung ist nicht zu laut

Das sind keine harten Regeln. Sie könnten mit maximaler Bitrate (1 MB / s) davonkommen, wenn Sie einen wirklich kurzen Bus (10 cm) haben.

Um dies zu erreichen, müssen Sie ein wenig über die Funktionsweise des Transceivers wissen. Wie die meisten Transceiver können sie ein High oder Low an den Bus ausgeben (für 1 und 0), aber die 0 kann eine 1 dominieren. IE Wenn zwei Transceiver versuchen, gleichzeitig zu sprechen, und einer 1 und der andere sagt sagt 0, dann gewinnt die 0. Wir können die gleiche Situation einfach mit Dioden wiederherstellen:

Einfaches CAN

Siehe den Seimens Application Note AP2921: On-Board-Kommunikation über CAN ohne Transceiver

Aber hier ist noch etwas Interessanteres: Der PIC hat tatsächlich Hardware-Unterstützung für transceiverloses CAN!

CIOCON-Register

Sie können den CAN-TX-Pin so konfigurieren, dass er sich genauso verhält wie der Transceiver. Das heißt, Sie können den CAN-Bus ohne Dioden verdrahten. Du wirst den Widerstand trotzdem brauchen.

Einfacher CAN

Raketenmagnet
quelle
2
Absolut fantastische Antwort. Ich schätze die Zeit sehr, die Sie gebraucht haben, um zu antworten. Möglicherweise muss ich mit dem Transceiver gehen, da es möglicherweise eine Menge elektrischer Störungen gibt, und obwohl alles in einer "Box" untergebracht ist, befinden sie sich auf mehreren Leiterplatten. Danke noch einmal!
efox29
@ efox29 - Gern geschehen. Es ist sicherlich besser, mit Transceivern zu gehen, wenn Sie können.
Rocketmagnet
Dieses transceiverlose Setup war für mich neu und sieht sehr interessant aus, um ein einfaches Netzwerk von Controllern über größere Entfernungen aufzubauen. Nett!
0x6d64
@ 0x6d64 - Wenn Sie es lange brauchen, vergessen Sie nicht, eine niedrige Bitrate zu verwenden, und begrenzen Sie die Anstiegsgeschwindigkeit der Kanten.
Rocketmagnet
1
Beachten Sie, dass dies funktioniert, wenn alle Geräte am Bus dieselbe Konfiguration verwenden und einen Single-Wire-CAN-Bus verwenden. Wenn Sie eine Schnittstelle zu etwas anderem herstellen möchten, das tatsächlich "echtes" ISO-CAN ist und einen Zweidrahtbus verwendet, funktioniert dieser Modus nicht.
Jon Watte
10

Die Mikrocontroller- Familie LPC11Cxx (ARM Cortex-M0-basiert) enthält den integrierten CAN-Transceiver.

timrorr
quelle
3
Ja. Richtig. OP fragt nach PIC18. Das ist nicht wirklich hilfreich.
Federico Russo
4
@ FedericoRusso gibt er ein Beispiel mit dem PIC18, und timrorr hat eine Lösung mit eingebautem Treiber angegeben. Was stimmt damit nicht?
Clabacchio
8
@FedericoRusso - Sei nicht so anal. Diese Antwort ist sehr interessant.
Rocketmagnet
1
@Rocketmagnet: Also Q: "Wie mache ich X?" A: "Tu Y." ist alles in ordnung (Aus Ihrer eigenen Antwort)
Federico Russo
2
@FedericoRusso - Wenn die Frage zur Zufriedenheit des OP gut beantwortet wurde und jemand einige interessante verwandte Informationen erwähnt, sicher, warum nicht?
Rocketmagnet
9

Ja, du brauchst einen Tranceiver. Die CAN-Pins am Mikro empfangen und senden. Der CAN-Bus selbst verwendet ein Twisted-Pair-Kabel mit differentieller Signalisierung auf zwei Drähten, die als HIGH und LOW bezeichnet werden.

Eine der Aufgaben des Transceivers besteht darin, den auf dem TX-Pin vorhandenen Logikpegel in CAN-Bus-Signale umzuwandeln:

  • Eine logische '1' wird dargestellt, wenn der Bus nicht angesteuert wird. Die Leitungen HIGH und LOW "schweben" auf 2,5 V, was in der CAN-Terminologie als "rezessives Bit" bezeichnet wird.
  • Eine logische '0' wird durch Ansteuern der HIGH-Leitung auf High und der LOW-Leitung auf Low dargestellt - dies wird als "dominantes Bit" bezeichnet, da es alle rezessiven Bits überschreibt, die übertragen werden.

Das andere ist, das, was sich auf dem Bus befindet, zu nehmen und es wieder in einen Logikpegel umzuwandeln, um es vom RX-Pin zu Ihrem Mikro zurückzusenden.

Martin Thompson
quelle
8

Sie benötigen einen CAN-Transceiver-Chip zwischen der CPU und dem CAN-Bus. Schauen Sie sich den MCP2551 an.

Update 17. August 2017:

Ich bin gerade auf der Microchip Masters-Konferenz. Die Ingenieure von Microchip haben mir sofort mitgeteilt, dass eines der neuen Teile, die aus der Übernahme von Atmel hervorgegangen sind, sowohl billiger als auch besser als das MCP2551 ist.

Olin Lathrop
quelle
1
Microchip empfiehlt jetzt den 2561 gegenüber dem 2551. NXP hat auch einige interessante CAN-Chips. Die meisten MCUs benötigen einen Transceiver.
Ludwig Schreier
2

Analog Devices verfügt über eine beispielhafte CAN-Transceiver-Schaltung , die einen Differenzverstärker verwendet.
Ich habe das nicht ausprobiert, bin mir dessen nur bewusst. Interessiert auch, ob es mit einem Operationsverstärker implementiert werden könnte

Analoge Schaltung

Der Vorteil der Verwendung eines dedizierten IC-CAN-Transceivers besteht darin, dass die Arbitrierung für Sie erledigt wird und Sie sich keine Sorgen um Busstörungen machen müssen. Wenn Sie nur den Bus beobachten und es sich nicht um eine fehlerkritische Umgebung handelt, ist die Schaltung möglicherweise in Ordnung. Während der mcp2551 sehr beliebt ist, gibt es viele Optionen für Schnittstellen-Chips.

Eine neue Entwicklung sind die System Base-Chips, die Spannungsregelung, Leistungsmodi und ESD-Schutz vor dem Bus umfassen.

Wie oben erwähnt, ist der LCP11C24 von NXP insofern einzigartig, als der Prozessor einen CAN-Transceiver enthält. Ein Demoboard kostet damit nur 19 US-Dollar. Eine weitere kostengünstige Lösung ist die Verwendung des Cypress PSoC5-Demoboards CY8CKIT-059 für 9,38 USD. Die PSoC5 hat keinen CAN-Controller. es geht noch einen Schritt weiter: Der Controller ist in den FPGA-ähnlichen Universalblöcken implementiert. Die Register des Controllers werden über die GUI der IDE konfiguriert, was das Filtern und F & E ziemlich einfach macht.

Eine wichtige Methode, die ich beim Durchsuchen von Datenblättern gefunden habe, ist, dass das mcu TTL mit CAN-Tx und CAN-Rx beschriftet ist, während die Datenleitungen der Transceiver zum Bus immer mit CAN-H und CAN-L beschriftet sind. Ich mag die Diagramme in der anderen Antwort nicht, in denen TxRx gezeigt wird, das an den Bus angeschlossen wird; Dies verstößt gegen die Konvention und trägt zur Verwirrung bei.

Chris K
quelle