Eine CAN Bus Fibel Teil 2: Implementierung
Untersuchung von Produkten für die Entwicklung und den Anschluss an einen CAN-Bus sowie einige Beispiele von Anbietern.
Einleitung
In Teil 1 dieser Serie haben wir uns mit dem CAN-Bus an sich befasst, einschließlich dessen, was er ist, der Feinheiten der physikalischen Schicht, der Behandlung von Kollisionen und verschiedener gängiger Anwendungen. In diesem Artikel werfen wir einen Blick auf verschiedene Geräte und Entwicklungskits, die für die Interaktion mit einem CAN-Bus verwendet werden können, auf Überlegungen bei der Auswahl von Teilen und auf eine Beispielanwendung.
Schnittstellen mit CAN Bus
Es ist selten, dass Computer (PCs, Laptops usw.) mit nativen CAN-Bus-Schnittstellen ausgestattet sind - was nicht heißen soll, dass es sie nicht gibt, wie z. B. in einigen Embedded-Computern von Dell -, so dass in der Regel eine Art USB-Adapter verwendet werden muss. Es gibt verschiedene Entwicklungskits und -platinen, die es Mikrocontrollern ermöglichen, sich mit einem Netzwerk zu verbinden, was weitaus häufiger der Fall ist.
USB Schnittstellen
USB-CAN-Schnittstellen sind allgegenwärtig und variieren im Preis von den Kosten für eine kleine Entwicklungsplatine und eine PHY-Kombination bis hin zu professionellen Geräten, die von Unternehmen wie Kvaser hergestellt werden.
Die günstigste Option: Ein preiswertes Entwicklungsboard mit CAN PHY
Wenn Sie ein „Hacker“ oder „Bastler“ sind, haben Sie wahrscheinlich eine oder mehrere Entwicklungsplatinen wie einen Arduino oder STM32 „Blue Pill“ zur Hand. Diese Boards in Kombination mit einem kostengünstigen CAN PHY Breakout können einen schnellen und schmutzigen Adapter zum Schnüffeln und Interagieren mit einem CAN-Bus darstellen.
Im Falle eines Arduino (oder eines anderen Mikrocontrollers, der keinen CAN-Controller integriert hat) wird ein externer Controller benötigt, um die Bus-Interaktionen zu steuern, sowie der PHY, um die elektrische Schnittstelle bereitzustellen. Seeed Studio hat ein CAN-Bus-Shield (174-3227) zu einem günstigen Preis von £29 hergestellt, das einen CAN-Controller, einen PHY und einen zusätzlichen microSD-Kartensockel enthält, der verwendet werden kann.
Der gewählte CAN-Controller ist der allgegenwärtige MCP2515 von Microchip, der CAN 2.0A und B mit bis zu 1Mbps unterstützt. Der Chip verfügt über fünf Puffer, von denen drei für die Übertragung und zwei für den Empfang vorgesehen sind. Außerdem sind zwei Akzeptanzmasken und sechs Filter vorhanden, mit denen nur bestimmte Nachrichten-Identifikatoren ausgewählt werden können, um die Arbeitslast des angeschlossenen Mikrocontrollers zu verringern.
Diese Schnittstelle ist nicht isoliert, d.h. es besteht eine galvanische Verbindung zwischen dem Bus selbst und dem angeschlossenen Mikrocontroller - in elektrisch besonders rauen Umgebungen könnte dies zu Problemen führen, aber angesichts des Preises ist dies nicht zu erwarten.
Ein preiswertes schlüsselfertiges USB-Interface: Der Innomaker MS123
Wenn die Entwicklung einer eigenen CAN-Bus-Schnittstelle zu aufwendig ist und eine Plug-and-Play-Lösung benötigt wird, hat Innomaker eine kleine USB-zu-CAN-Schnittstelle (230-5617) herausgebracht, die eine Isolierung bietet - und das für den geringen Betrag von € 46.
Die Unterstützung für Linux SocketCAN ist bereits im Lieferumfang enthalten, was den Einstieg in die Arbeit mit gängigen Tools sehr schnell und einfach macht. Zu den unterstützten CAN-Spezifikationen gehören 2.0A (Standard 11-Bit-Frames), 2.0B (erweiterte 29-Bit-Frames) und ISO 11898-2, ein High Speed CAN mit bis zu 1 Mbps. Angesichts des niedrigen Preises ist das Fehlen von CAN-FD-Unterstützung nicht überraschend.
Die Isolierung des MS123 ist auf 1,5 kV DC für eine Minute bzw. 3 kV DC für eine Sekunde ausgelegt, womit die schlimmsten elektrischen Störungen auf einem Bus bewältigt werden können. Ein integrierter Abschlusswiderstand ist ebenfalls vorhanden, der über einen Pin-Jumper ausgewählt werden kann.
Die Mittelklasse: Der Innomaker MS125
Der MS125 (252-6693) hat einen ähnlichen Funktionsumfang wie der Innomaker MS123, kostet £132 und bietet zwei CAN-Kanäle sowie verbesserte Isolierung und ESD-Schutz. Innomaker hat die Unterstützung für SocketCAN beibehalten und eine DLL für die Erstellung von Windows-Anwendungen in C# und C++ eingeführt.
Die verbesserten Isolations- und ESD-Spannungswerte bedeuten, dass bis zu 3kV DC-Isolation und 15kV ESD-Schutz geboten werden. Ähnlich wie beim MS123 sind an jedem Port schaltbare 120-Ohm-Abschlusswiderstände vorhanden.
Die High-End-Lösung: Ixxat USB-to-CAN V2 Compact
Mit € 376 hat der USB-CAN-Adapter von Ixxat eine Reihe von Funktionen, die bei den zuvor besprochenen kostengünstigeren Optionen nicht zu finden sind. Unterstützt werden die CAN-Bus-Standards 2.0A und 2.0B sowie ISO 11898-2 für Busgeschwindigkeiten bis zu 1Mbps.
ESD-Schutz wird ebenfalls angeboten, zusammen mit einer galvanischen Isolierung, die bis zu 1kV DC für eine Sekunde und 500V AC für eine Minute ausgelegt ist. Ein Merkmal, das bei den anderen Adaptern nicht zu finden ist, ist die hochauflösende Zeitstempelung von CAN-Nachrichten - die angegebene Auflösung beträgt 150-250 Mikrosekunden.
Die Softwareunterstützung umfasst einen Windows-VCI-Treiber, SocketCAN oder ECI für Linux sowie Unterstützung für die eingebetteten Echtzeitbetriebssysteme QNX und VxWorks.
Überlegungen bei der Auswahl von CAN-Schnittstellengeräten
Bei der Auswahl geeigneter Bauteile für die Schnittstelle zu einem CAN-Bus sollten eine Reihe von Überlegungen angestellt werden, z. B. zur galvanischen Trennung, zu den Busbetriebsarten und -geschwindigkeiten sowie zur Mikrocontroller-Schnittstelle.
Galvanische Isolierung
In Anbetracht der Art der Umgebung, in der der CAN-Bus üblicherweise eingesetzt wird, z. B. in Motorräumen in der Nähe von Zündkerzen und Lichtmaschinen, kann eine galvanische Isolierung erforderlich sein, um die Auswirkungen von ESD-Ereignissen auf das angeschlossene Gerät zu minimieren.
Die Isolierung kann auf verschiedene Weise erreicht werden, von der Verwendung eines diskreten digitalen Isolators und eines Standard-CAN-Transceivers bis hin zu einem speziellen isolierten Transceiver, der beide Teile in einem Chip integriert. Ein solches Beispiel ist der ISO1044-Transceiver von Texas Instruments, der CAN 2.0A/B, ISO 11898-2 und CAN FD in einem kostengünstigen, kompakten 8-Pin-Gehäuse unterstützt.
Bus Modi
Eine weitere wichtige Überlegung ist der Busbetriebsmodus, der so einfach sein kann wie CAN 2.0A oder 2.0B, die 11- bzw. 29-Bit erweiterte Rahmen sind, bis hin zur CAN-FD-Unterstützung, die Datenraten bis zu 5 Mbps ermöglicht, oder sogar ISO 11898-3, die Fehlertoleranz bietet.
Die Fehlertoleranz erfordert oft eine größere Sorgfalt bei der Auswahl von Transceivern, da diese noch nicht weit verbreitet sind, während die „traditionellen“ CAN-Busse weiter verbreitet sind und unterstützt werden.
Microcontroller Schnittstelle
Immer häufiger findet man Mikrocontroller mit einem oder mehreren On-Die-CAN-Controllern, die nur einen externen Transceiver benötigen, um zu funktionieren. Viele kleinere Acht-Bit-Mikrocontroller verfügen jedoch nicht über integrierte Controller.
In der Regel wird ein externer Controller über SPI mit einer recht hohen Geschwindigkeit angeschlossen, die von der Geschwindigkeit des CAN-Busses abhängt. Der Microchip MCP2518FD (ein Ersatz für den jetzt nicht mehr empfohlenen MCP2515) bietet beispielsweise klassische CAN- und CAN-FD-Unterstützung mit bis zu 8 Mbit/s, was eine SPI-Bustaktrate von 17 MHz erfordert.
Ein Embedded-Controller benötigt in der Regel nur ein TX/RX-Signal an einen externen Transceiver, obwohl einige auch ein Standby-/Shutdown-Signal unterstützen, um den Stromverbrauch bei Nichtgebrauch zu senken.
High-Level Beispiel
STMicroelectronics haben eine gut dokumentierte API mit Beispielen für die On-Chip-„BxCAN“-Controller.
Der Controller selbst bietet Unterstützung für CAN 2.0A und 2.0B mit einer Bitrate von bis zu 1 Mbps. Es sind drei Sendewarteschlangen mit konfigurierbarer Priorität vorhanden, die sicherstellen, dass die wichtigsten Nachrichten zuerst auf den Bus geschickt werden. Zwei Empfangspuffer mit jeweils drei Stufen und vierzehn Filterbänken sorgen dafür, dass nur Nachrichten, die mit bestimmten CAN-IDs übereinstimmen, an den Mikrocontroller weitergeleitet werden, wodurch die CPU-Belastung und die Zeit für die Verarbeitung von Nachrichten reduziert werden.
Zur Verwaltung des CAN-Subsystems stehen vier dedizierte Interrupt-Vektoren zur Verfügung, darunter ein Interrupt bei der Übertragung, beide FIFO-Puffer und Statusänderungen.
Es stehen verschiedene Betriebsmodi zur Verfügung, darunter ein Modus mit drei verschiedenen Tests, der sowohl zur Durchführung eines Selbsttests als auch zur Beobachtung des Busverkehrs verwendet werden kann.
Da sich die CAN-Controller der verschiedenen STM32-Serien in Bezug auf ihre Funktionen unterscheiden können, ist die Dokumentation der HAL-Gerätetreiber leicht unterschiedlich. Die Dokumentation ist gründlich und beschreibt detailliert, was jede Methode, jeder Typ und jede Funktion tut.
Verschiedene Beispiele für die Verwendung der CAN-Controller sind auf GitHub, von Keil und gebündelt in den STM32Cube-Mikrocontroller-Paketdateien verfügbar, typischerweise mit mehreren Beispielen zur Demonstration der verschiedenen Controller-Funktionen.
Fazit
In diesem Artikel haben wir einen Blick auf verschiedene Geräte und Teile für die Anbindung an einen CAN-Bus geworfen und die Funktionen, die sie bieten. Wir haben auch wichtige Punkte untersucht, die bei der Auswahl einer geeigneten Schnittstelle zu beachten sind und die sich auf die Leistung eines Geräts auswirken.
Wir haben auch einen Blick auf die Dokumentation und einige Beispiele geworfen, die STMicroelectronics für die Verwendung mit ihren „bxCAN“ On-Chip-CAN-Controllern zur Verfügung stellt.
Kommentare