Ursprünglich für Pkws entwickelt, kommt der CAN-Bus inzwischen auch in Industrieanlagen zum Einsatz. Mit einem PiXtend-Board lässt sich der robuste Standard auch auf dem Raspberry Pi verwenden.
Bevor wir uns praktisch mit dem CAN-Bus (Controller Area Network) beschäftigen, werfen wir einen kurzen Blick in dessen theoretische Grundlagen. Ursprünglich wurde der CAN-Bus von Bosch für den Einsatz in Automobilen entwickelt. Aufgrund seiner Störungsunempfindlichkeit ist er mittlerweile weitverbreitet. Man findet ihn in Fahrzeugen aller Art, nicht nur im Pkw, sondern auch in Schiffen oder Zügen. In der Industrie kommt CAN oft für die Kommunikation zwischen Sensoren und Steuerungsanlagen zum Einsatz. Selbst moderne digitale Modelleisenbahnen greifen auf die Technik zurück.
Der CAN-Bus ist als Feldbus konzipiert, der Daten in störanfälligen Umgebungen und über größere Distanzen zuverlässig und sicher übertragen soll. Die elektrische Spezifikation wurde im Gegensatz zu Bussen für den Nahbereich, wie etwa SPI und I2C, auf Betriebssicherheit und Reichweite ausgelegt. Allerdings geht die höhere Reichweite zulasten der Geschwindigkeit. Die Tabelle “Reichweiten” zeigt das Absinken der Datenrate bei steigender Leitungslänge.
|
Max. Länge |
Geschwindigkeit |
|---|---|
|
40 Meter |
1 Mbit/s |
|
100 Meter |
500 kbit/s |
|
500 Meter |
125 kbit/s |
|
1000 Meter |
50 kbit/s |
Der CAN-Bus arbeitet seriell. Er verwendet zwei Leitungen, über die er die Daten gleichzeitig, aber mit invertierten Signalpegeln überträgt (CAN-Hi und CAN-Low). Das Verfahren kodiert die Information, ob es sich um ein logisches Low oder High handelt, in der Differenz der Spannung zwischen diesen beiden Leitungen. Eine positive Differenz entspricht einem logischen High, eine negative signalisiert logisch Low.
Störungen von außen beeinflussen zwar die Pegel, nicht aber die zwischen ihnen bestehende positive oder negative Differenz. Das macht die Technik sehr robust. Selbst ein Absinken der Signalpegel mit zunehmender Leitungslänge behindert die Datenübertragung nicht, da sich dadurch das Vorzeichen der Spannungsdifferenz nicht ändert.
Darüber hinaus ermöglicht die Methode, Kurzschlüsse oder Kabelbrüche auf dem Bus zu erkennen, da die Signalspannungen definierte Pegel besitzen, die nicht der Betriebsspannung oder Masse entsprechen. Der High-Pegel liegt bei einem 5V-CAN-Bus definitionsgemäß bei 3,5 Volt, der Low-Pegel bei 1,5 Volt. Falls eine der beiden Signalleitungen ausfällt, arbeitet der Bus in einer Art Notbetrieb weiter, dem sogenannten Limp-Home-Modus. All diese Maßnahmen sichern den CAN-Bus im Betrieb ab, sodass er sich bestens für den Einsatz in rauen Umgebungen eignet.
Der Bus erfordert an beiden Enden eine Terminierung mit 120-Ohm-Widerständen. Da es keine separate Taktleitung gibt, müssen alle Teilnehmer die Übertragungsrate kennen. Der Bus verwendet keine Adressen, sondern sogenannte Objekt-Identifier. Jeder Parameter, wie beispielsweise Temperatur oder Druck in einem System, besitzt einen eigenen Identifier. Dafür sieht die Spezifikation zwei Formate vor, das Base-Frame-Format mit einer Identifier-Länge von 11 Bit und das Extended-Frame-Format mit 29 Bit. Der Vorteil der Identifier liegt darin, dass anders als bei Adressen die Empfänger entscheiden, ob die Nachricht für sie relevant ist.
In traditionellen Netzwerken fragt immer ein Teilnehmer eine explizite Adresse an, um an Informationen zu gelangen, und bekommt auch als Einziger eine Antwort. Dieses Verfahren gibt es beim CAN-Bus zwar ebenfalls, aber dessen Stärke liegt darin, dass die Nachrichten an alle Teilnehmer auf dem Bus gehen. Manche Teilnehmer senden kontinuierlich Daten an alle Empfänger. Nur die Empfänger, die diese Daten benötigen, verarbeiten sie auch, alle anderen ignorieren die Nachrichten. Das gilt zum Beispiel für einen Temperatursensor, der an alle Teilnehmer die Temperatur übermittelt, aber nur die Temperaturanzeige verarbeitet die Eingabe.
Der CAN-Bus überträgt sogenannte Frames. Sie enthalten den Identifier, die Daten und Verwaltungsinformationen. Ein solcher Framer enthält bis zu 8 Byte an Daten und ist durch CRC-Prüfsummen abgesichert. Als Verfahren für den Zugriff kommt Carrier Sense Multiple Access with Collision Avoidance (CSMA/CA) zum Einsatz. Das bedeutet, dass jeder Teilnehmer den Datenverkehr auf dem Bus überwacht (Carrier Sense) und erst sendet, sobald dieser frei ist (Multiple Access). Das vermeidet theoretisch Kollisionen (Collision Avoidance). Senden zwei Teilnehmer zufällig gleichzeitig, kommt es jedoch zu einer Kollision. Der Teilnehmer mit der niedrigeren Priorität bricht daraufhin die Übertragung ab und versucht es zu einem späteren Zeitpunkt erneut.
PiXtend
Um den Raspberry Pi an einen CAN-Bus zu hängen, bietet sich das PiXtend an. Die professionelle Erweiterungsplatine verwendet nicht nur die vorhandenen GPIO-Ports des RasPi, sondern stellt mithilfe eines zusätzlichen Mikrocontrollers Funktionen bereit, über die der Raspberry Pi von Haus aus nicht verfügt. Dazu zählen beispielsweise analoge Ein- und Ausgänge sowie auch eine CAN-Schnittstelle. Darüber hinaus gibt es für das PiXtend-Board ein Gehäuse für die Hutschienenmontage. Damit steht dem Einsatz im heimischen Schaltschrank nichts mehr im Weg. Hinzu kommt Software, die das PiXtend-Board zum Beispiel zur Steuerzentrale für die Hausautomation macht.
Die Tabelle “Hardware-Ausstattung” gibt einen Überblick über die technischen Details des PiXtend. Weiterreichende Informationen finden Sie im Datenblatt des Herstellers [1]. Das PiXtend kann sich über den CAN-Bus mit anderen Industriekomponenten vernetzen, wozu üblicherweise die Software von Codesys zum Einsatz kommt. Den CAN-Bus realisiert das PiXtend-Board über einen MCP2515-CAN-Controller. Auch für diesen Chip gibt es ein ausführliches Datenblatt [2].
|
Digitale Eingänge |
8 |
|
Digitale Ausgänge |
6 |
|
PWM/Servo-Ausgänge |
2 |
|
Relais-Ausgänge |
4 |
|
Analoge Spannungseingänge |
2 |
|
Analoge Stromeingänge |
2 |
|
Analoge Ausgänge |
2 |
|
Serielle Schnittstellen |
RS232, RS485, CAN 2.0B |
|
Real Time Clock |
RTC mit Batterie-Pufferung |
|
Temperatur, Luftfeuchte |
Support für bis zu vier DHT11/DHT22 |
|
Transceiver |
433-MHz-Transceiver steckbar |
Testumgebung
Für den Aufbau einer Testumgebung bestücken wir zwei PiXtend-Module mit Raspberry-Pi-Platinen der ersten Generation. Für die folgenden Versuche genügen die etwas älteren RasPis vollkommen. Als Betriebssystem setzen wir jeweils Raspberry Pi OS Lite (32 Bit) ein. Diese Variante von Pi OS kommt, da sie auf einen X-Server verzichtet, auch mit den begrenzten Systemressourcen des RasPi 1 gut zurecht. Falls Sie keine zwei PiXtend-Module in der Bastelkiste liegen haben, können Sie einen Blick in den Schaltplan [3] des PiXtend werfen und nur den CAN-Controller-Teil nachbauen.






