Projekt 14: Sensor mit CAN-Schnittstelle: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(77 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Datei:Titelbild.jpg|thumb|300px|VW-Kombiinstrument mit Peripherie]]Dieser Bericht beschreibt die Ansteuerung eines Kombiinstruments für PKW der Marke Volkswagen mit Hilfe der Entwicklungs-, Test- und Analyseumgebung CANoe<ref>[http://de.wikipedia.org/wiki/CANoe] CANoe Erläuterungen (07.01.2014)</ref> der Firma Vector<ref>[https://vector.com/vi_canoe_de.html] CANoe von der Firma Vector (20.01.2014)</ref> und mit einem [http://arduino.cc/en/Main/ArduinoBoardUno Arduino Uno]. Die Lösung wurde im Rahmen des Elektrotechnik-Fachprakikums im Studiengang Mechatronik der [http://www.hshl.de/startseite/ HSHL] während des WS 13/14 von [http://193.175.248.56/wiki/index.php/Benutzer:Ziad_Abuelkhair Ziad Abuelkhair] und [http://193.175.248.56/wiki/index.php/Benutzer:Daniel_Block Daniel Block] erarbeitet.  
[[Kategorie:Projekte]]
Dieser Bericht beschreibt die Ansteuerung eines Kombiinstruments für Kraftfahrzeuge der Marke Volkswagen mit Hilfe der Entwicklungs-, Test- und Analyseumgebung CANoe<ref>[http://de.wikipedia.org/wiki/CANoe] CANoe Erläuterungen (07.01.2014)</ref> der ''Vector Informatik GmbH''<ref>[https://vector.com/vi_canoe_de.html] CANoe von der ''Vector Informatik GmbH'' (20.01.2014)</ref> und mit einem [http://arduino.cc/en/Main/ArduinoBoardUno Arduino Uno]. Die Lösung wurde im Rahmen des Elektrotechnik-Fachprakikums im Studiengang Mechatronik der [http://www.hshl.de/startseite/ HSHL] während des WS 13/14 von [http://193.175.248.56/wiki/index.php/Benutzer:Ziad_Abuelkhair Ziad Abuelkhair] und [http://193.175.248.56/wiki/index.php/Benutzer:Daniel_Block Daniel Block] erarbeitet.  
[[Datei:Titelbild.jpg|thumb|800px|VW-Kombiinstrument mit Peripherie]]


== Aufgabenstellung ==
== '''Aufgabenstellung''' ==
In diesem Projekt wurde einen VW-Passat-Kombiinstrument zu Verfügung gestellt.
In diesem Projekt wurde einen VW-Kombiinstrument zur Verfügung gestellt.
Hauptsichtlich bestand Die Aufgabe darin, die Anzeigenelemente des Kombiinstruments zu steuern.
Hauptsichtlich bestand die Aufgabe darin, die Anzeigeelemente des Kombiinstruments anzusteuern.
Die Ansteuerung der Anzeigeelemente sollte mit zwei unterschiedlichen Mittels erfolgen.
Die Ansteuerung der Anzeigeelemente wie z.B. des Drehzahl-Zeigers sollte mit zwei unterschiedlichen Mitteln erfolgen.
Einmal mit Hilfe der Software-CANoe- mit dem Interaktiven Generatorblock.
Zum Einen sollte mit Hilfe des bereitgestellten USB-Seriell-Adapters der ''Vector Informatik GmbH'' und der Software ''[[CANoe]]'' mit dem Kombiinstrument eine Kommuikation aufgebaut werden.  
Die andere Methode war, der Kombiinstrument mit dem Mikrocontroller (Arduino) über ein CAN-BUS zu verbinden. Die Analoge Sensordaten sollten vom Arduino erfasst werden und über den CAN-BUS gesendet werden.
Zum Anderen sollte das Kombiinstrument mit dem Mikrocontroller Arduino über ein CAN-Shield verbunden werden.


== Grundlagen CAN-Bus ==
Im Einzelnen sollte das Kombiinstrument eines Volkswagen Passats, die Software Vector CANoe und ein Arduino mit einem CAN-Shield zum Einsatz kommen. Dazu sollte zwischen dem Kombiinstrument und einem CAN-Bus eine Verbindung aufgebaut werden. Bei der Nutzung von CANoe war die Ansteuerung der Anzeigeelemente mit dem Interaktiven Generatorblock vorgesehen. Durch die Verwendung des Arduino sollten Sensordaten gemessen und auf den CAN-Bus gesendet werden. Beispielhaft war die Ansteuerung eines Anzeigeelements mit einem Potentiometer am Arduino vorgesehen.  
Um die Funktion der zur verfügung gestellten Hardware zu testen, wird ein kleines CAN-Netzwerk mit zwei
 
Teilnehmern aufgebaut. Ein Teilnehmer ist dabei der Arduino mit einem CAN-Shield der Firma Sparkfun. Der
Die Aufgaben waren im Team zu lösen, und dann die Lösung und der Lösungsweg zu präsentieren und zu dokumentieren.
andere Teilnehmer ist ein CAN-Case der Firma Vector. Es soll gewährleistet werden, dass beide Teilnehmer
 
senden und empfangen können. Um dies zu wird ein kleines Programm erstellt, welches eine CAN-Botschaft
Es wurde neben dem genannten Equipment ein fertiges Bus-Kabel mit drei Knoten in Form von neunpoligen Sub-D Steckern und den beiden Abschlusswiderständen von 120 Ohm zur Verfügung gestellt. Auch ein Adapter zum Anschluss an die Buchse am Kombiinstrument wurde gestellt. Damit war der direkte Anschluss an ein Labor-Netzteil sowie an den Bus möglich. Diese Peripherie war im Vorjahr im Rahmen eines Kleinprojekts von einem Kommilitonen erstellt worden.
empfängt und zurückschickt. Das Programm bedient sich dieser Library (http://code.google.com/p/skpang
 
/downloads/detail?name=Canbus_v4.zip&can=2&q=) , welcher auf der Sparkfun Seite von diversen Nutzern
== '''Grundlagen CAN-Bus''' ==
hochgeladen wurde. Die Library lässt durch einfaches Kopieren in den Arduino Unterordner "Libraries" (z.B.
[[Datei:CAN-Bus schematisch.png|thumb|300px|schematischer Aufbau des CAN-Bus]]
...\arduino-1.0.3\libraries) einbinden. Der Ablauf des Programmes wird am Ende dieses Kapitels erläutert.
[[Datei:Sub-D Stecker.png|thumb|300px|schematischer Aufbau des Sub-D Steckers]]
Erste Versuche mit gegebener Hard- und Software blieben erfolglos, nach diversen Tests stellte sich heraus das
Bus-Systeme sollen den Aufwand für die Verkabelung zwischen den Schnittstellen einzelner Komponenten eines Systems verringern. Das zugrundeliegende Prinzip ist, dass alle Komponenten an eine gemeinsame Datenleitung angeschlossen sind. Somit können leicht einzelne Komponenten ausgetauscht oder hinzugefügt werden. Jedoch erfordert die gemeinsame Datenleitung einen geregelten Zugriff mittels eines Protokolls.
die Verbindung über das vorgekrimpte Kabel nicht funktioniert. Der Grund dafür ist, dass das Pinning des Sub-D
Die Abkürzung ''Can'' steht für ''Controller Area Network''. Der CAN-Bus ist ein ursprünglich für die Verwendung in Automobilen entwickeltes Bus-System. Es kommt gegenwärtig in einer Vielzahl der entwickelten, produzierten und verkauften Fahrzeuge zum Einsatz. Jedoch findet man es heute auch immer häufiger im Einsatz in der Industrie, zum Beispiel in der Automatisierungstechnik von Produktionsanlagen. Das CAN-Protokoll wurde in der zweiten Hälfte der 1980er Jahre von der Firma Bosch entwickelt. Im CAN werden die Komponenten, die in diesem Kontext auch als Knoten bezeichnet werden, über einen 2-Draht Bus miteinander verbunden. Die beiden Leitungen werden als Can-High (CAN-H) und CAN-Low (CAN-L) bezeichnet. Dies ist schematisch in der Abbildung ''schematischer Aufbau des CAN-Bus'' zu sehen. Für die elektrische Verbindung wird außer in Fahrzeugen häufig der neunpolige Sub-D Stecker verwendet (vgl. Abbildung ''schematischer Aufbau des Sub-D Steckers''). Die beiden Busleitungen müssen beidseitig mit einem 120 Ohm Widerstand abgeschlossen werden, um Störungen zu verhindern. Eine Nachricht wird in einer für den CAN-Bus charakteristischen Form aufgebaut, die als Botschaft oder Frame bezeichnet wird. Diese enthält im Wesentlichen sieben Kernfelder, die Anfang und Ende kennzeichnen, Information für den Empfänger zum Beispiel hinsichtlich der Priorität enthalten, Auskunft über die Identifizierung und Länge der Nachricht geben, den Datensatz darstellen und einige Prüfbits. Besonders wichtige Eigenschaften sind die Echtzeitfähigkeit, die Stabilität und Störsicherheit sowie die einfache und kostengünstige Umsetzung.
Stecker nicht der üblichen Vector-Norm entspricht. Sollen vorgefertigte Kabel verwendet werden, ist ein Adapter
<ref>Reif, Konrad (Hrsg.): ''Batterien, Bordnetze und Vernetzung''. Vieweg+Teubner, Wiesbaden, 2010. S. 120ff. ISBN 978-3-8348-1310-7</ref>
Notwendig. Üblicherweise liegt der CAN-High (im folgenden als CAN-H bezeichnet) an Pin 7 des Sub-D
<ref>Zimmermann, Werner; Schmidgall: ''Bussysteme in der Fahrzeugtechnik''. Friedr. Vieweg & Sohn Verlag, Wiesbaden, 2007. S. 32ff. ISBN 978-3-8348-0235-4</ref>
Steckers und CAN-Low (im folgenden als CAN-L bezeichnet) an Pin 2. Auf dem Sparkfun Shield liegt CAN-H
<ref>Borgeest, Kai: ''Elektronik in der Fahrzeugtechnik''. Vieweg+Teubner, Wiesbaden, 2010. S. 78ff. ISBN 978-3-8348-0548-5</ref>
auf Pin 3 und CAN-L auf Pin 1. Die folgende Tabelle zeigt die Zuordnung des Adapters:
{| border="1"
|'''Bezeichnung''' ||  '''Vector-Pinning''' ||  '''Sparkfun-Pinning'''
|-
|-
|CAN-H || pin7 || Pin3
|-
|-
|CAN-L || Pin2 || Pin1
|}
Alternativ stellt das Arduino-Shield an anderer Stelle CAN-H und CAN-L zur verfügung, über diese Kontakte
kann mit zwei einadrigen Leitungen einer direkte Verbindung zu dem CAN-Case hergestellt werden.
Ein einfaches Aufstecken des CAN-Shieldes nur bei dem Arduino UNO möglich ist. Wird ein Arduino Mega
2560 vewendet, müssen die Pins des Shieldes mit Leitungen zu bestimmten Pins des Arduino Megas geleitet
werden. Der Grund dafür ist, dass Arduino und Shield über eine sogenannte SPI Schnittstelle Kommunizieren.
SPI bedeutet "Serial Peripheral Interface" und ist ein serieller Datenbus mit einer Master und Slave Architektur.
Die Pins die die Schnittstelle zum SPI zur verfügung stellen liegen beim Arduino Mega 2560 anders als beim
UNO. Die Pin-Zuordnung dieser Pins zeigt folgende Tabelle:
{| border="1"
|'''CAN-Shild'''  ||  '''Arduino-MEGA''' ||  '''Arduino-UNO'''
|-
|-
|VIN|| VIN || VIN
|-
|-
|GND|| GND || GND
|-
|-
|GND|| GND || GND
|-
|-
|5V|| 5V || 5V
|-
|-
|3,3V|| 3,3V ||3,3V
|-
|-
|RST|| RST || RST
|-
|-
|D10|| D50 || D10
|-
|-
|D11|| D51 || D11
|-
|-
|D12|| D52|| D12
|-
|-
|D13|| D53|| D13
|}
alle anderen Pins sind zum Betrieb des Shields nicht notwendig.


== Benötigte Hardware/Bauteile und Dateien/Software ==
== '''Benötigte Hardware/Bauteile und Dateien/Software''' ==
[[Datei:Kombiinstrument.png|thumb|200px|Kombiinstrument von VW]]
[[Datei:ArduinoUno R3 Front 450px.jpg|thumb|100px|ArduinoUNO]]
Nun werden in einer Übersicht die benötigten und verwendeten Komponenten zum Lösen der Aufgabe vorgestellt. Bei Bedarf wird eine kurze Erklärung hinzugefügt. Wenn nichts anderes angegeben ist, wurden die jeweiligen Komponenten im Rahmen des zur Verfügung gestellten Budgets beschafft.
Nun werden in einer Übersicht die benötigten und verwendeten Komponenten zum Lösen der Aufgabe vorgestellt. Bei Bedarf wird eine kurze Erklärung hinzugefügt. Wenn nichts anderes angegeben ist, wurden die jeweiligen Komponenten im Rahmen des zur Verfügung gestellten Budgets beschafft.
[[Datei:Vector-Adapter.png|thumb|100px|USB-Seriell-Adapter der ''Vector Informatik GmbH'']]
[[Datei:10039-01.jpg|thumb|100px|CAN-BUS shield von ''SparkFun Electronics®'']]
<br>
=== Hardware-Komponenten und elektrische Bauteile ===
=== Hardware-Komponenten und elektrische Bauteile ===
* '''VW Passat Kombiinstrument''' mit Anschlüssen für Stromversorgung und Bus-Schnittstelle; wurde von betreuendem Professor gestellt
* '''VW Passat Kombiinstrument''' mit Anschlüssen für Stromversorgung und Bus-Schnittstelle; wurde von betreuendem Professor gestellt
* '''Labor-Netzteil''' für 12V DC; Inventar der HSHL
* '''Labor-Netzteil''' für 12V DC; Inventar der HSHL
* '''USB-Seriell-Adapter der Firma Vector'''; wurde von betreuendem Professor gestellt
* '''USB-Seriell-Adapter der ''Vector Informatik GmbH'''''; wurde von betreuendem Professor gestellt
* '''Arduino UNO'''; Eigentum der Studenten
*'''Bus-Kabel''' mit drei Knoten in Form von neunpoligen Sub-D Steckern und zwei Abschlusswiderständen von 120 Ohm; wurde von betreuendem Professor gestellt
* '''CAN-BUS Shield der Firma sparcfun'''; wurde von betreuendem Professor gestellt
*'''Adapter''' zum Anschluss an die Buchse am '''Kombiinstrument'''; wurde von betreuendem Professor gestellt
* '''Holzplatte''' für Pult
* '''Arduino UNO'''; Eigentum der Studenten, wurde später ersetzt
* '''CAN-BUS Shield von ''SparkFun Electronics®'''''; wurde von betreuendem Professor gestellt
* '''Holzplatte''' für Pult; Reststücke aus dem Eigentum der Studenten
* '''Flach-Senkkopf Holzschrauben''', Kreuzschlitz PZD, 3.5 x 30 mm für das Pult
* '''Flach-Senkkopf Holzschrauben''', Kreuzschlitz PZD, 3.5 x 30 mm für das Pult
* '''USB-Kabel 2.0''', Hi-Speed A-St auf B-St, 3m zur Kommunikation zwischen Arduino und PC
* '''USB-Kabel 2.0''', Hi-Speed A-St auf B-St, 3m zur Kommunikation zwischen Arduino und PC
Zeile 92: Zeile 50:
* '''Rote 5mm-LED''' mit Vorwiderstand, 5 Volt
* '''Rote 5mm-LED''' mit Vorwiderstand, 5 Volt
* '''Leitungen''' 0.5 mm; Inventar der HSHL
* '''Leitungen''' 0.5 mm; Inventar der HSHL
 
<br>
=== Software-Komponenten und Dateien ===
=== Software-Komponenten und Dateien ===
* '''Vector CANoe'''  in der Version 7.3; wurde von betreuendem Professor gestellt
* '''Vector Informatik GmbH CANoe'''  in der Version 7.6.84; wurde von betreuendem Professor gestellt
* '''DBC-File''' für Kommunikation mit dem Kombiinstrument; die Datenbank enthält alle Botschaften mit den jeweiligen Signalen; wurde von betreuendem Professor gestellt
* '''DBC-File''' für Kommunikation mit dem Kombiinstrument; die Datenbank enthält alle Botschaften mit den jeweiligen Signalen; wurde von betreuendem Professor gestellt
* '''Can-Library''' für Arduino; [http://code.google.com/p/skpang/downloads/list Canbus_v4.zip]
* '''Can-Library''' für Arduino; [http://code.google.com/p/skpang/downloads/list Canbus_v4.zip]
* '''Software Arduino IDE''' in der Version 1.0.5; freier Download direkt auf der [http://arduino.cc/en/Main/Software Arduino-Homepage]
* '''Software Arduino IDE''' in der Version 1.0.5; freier Download direkt auf der [http://arduino.cc/en/Main/Software Arduino-Homepage]
<br>
== '''Konstruktion und Bau eines Pults''' ==
Um den Anschluss der Bauteile zu vereinfachen, die Leitungen besser zu ordnen und das Kombiinstrument besser einsehen zu können, wurde ein Holz-Pult gebaut. Die Maße der einzelnen Platten können der [http://193.175.248.56/wiki/index.php/Datei:Zeichnung.PDF technischen Zeichnung] entnommen werden. Bei dem Bau wurden die Maße jedoch nicht ganz eingehalten, da die verwendeten Holzplatten aus Reststücken stammen und somit den Gegebenheiten angepasst wurden. Nach der Bearbeitung mit einer Sticksäge musste der Ausschnitt an einigen Stellen noch mit einem Bohrer und einer Holz-Raspel nachbearbeitet werden, damit eine sichere Fixierung des Kombiinstruments realisiert werden konnte. Zusätzlich wurden einige Bohrungen erstellt, in denen die Fixierung der Leitungen mittels der Kabelbinder erfolgen kann. Auch das Steckboard, der Mikrokontroller und die Bus-Leitung mit den Knoten findet dort Platz. Diese Komponenten wurden bedarfsgerecht mit Schrauben befestigt.
== '''Erläuterungen CANoe''' ==
Zu diesem Thema wurde ein separater Artikel [[CANoe]] erstellt, in dem die Grundlagen der Software erläutert werden.


== Erläuterungen CANoe ==
== '''Ansteuerung Kombiinstrument mit CANoe''' ==
Im folgenden Abschnitt geht es um die Ansteuerung des Kombiinstrumentes mit der Software CANoe. Dazu muss mittels des USB-Seriell-Adapters eine Verbindung des physikalischen CAN-Buses mit dem Computer hergestellt werden. Das Kombiinstrument ist auch mit dem Bus zu verbinden. Desweiteren ist ein Anschluss an eine 12 V-Gleichspannungsquelle erforderlich. Es sei darauf hingewiesen, dass beim Anschließen des Kombiinstruments an das Netzteil ersteres einige Störmeldungen anzeigt sowie einige Signaltöne zu hören sind. Da keine Komponenten angeschlossen sind, werden verschiedenartige Störungen angenommen. Im weiteren Verlauf der Ansteuerung können einige davon unterbunden werden.


== Ansteuerung Kombiinstrument mit CANoe ==
In CANoe ist die Erstellung einer Konfiguration erforderlich. Es muss darauf geachtet werden, dass die Baudrate 500 Baud beträgt. Dazu ruft man das Kontextmenü des Netwerks im Simulationsaufbau auf und wählt ''Netzwerk-Hardware...''. Dort lässt sich die Baudrate verändern. Desweiteren ist am virtuellen Bus im Simulationsaufbau ein ''Interaktiver Generator'' einzufügen. Dieser lässt sich über das Kontextmenü des angezeigten Bus (rote Linie) aufrufen. In diesem können aus der Datenbank einzelne Botschaften importiert werden. Zuvor müssen jedoch die Datenbasen des Netzwerkes hinzugefühgt werden. Dazu kann im Fenster ''Systemansicht'' (ist meist am Simulationsaufbau-Fenster angedockt) im Kontextmenü der Datenbasen den Befehl ''Hinzufügen'' aufrufen. Im Konfigurationsfenster des ''Interaktiven Generators'' kann durch Doppelklick auf eines leeres Feld in der Spalte ''Botschaftsname'' eine Botschaft eingefügt werden. Jede Botschaft enthält eine Reihe von Signalen. Der ''interaktive Generator'' ermöglicht die Simulation eines jeglichen Signals. So kann zum Beispiel das Drehzahl-Signal folgendermaßen stimuliert werden:
#Importieren der Botschaft ''mMotor_1'' aus der Datenbank ''zb''.
#Aufrufen des Fensters der Signal-Definition für das Signal ''MO1_Drehzahl'' (Schaltfläche ''Definieren'' am Ende der Zeile).
#Konfigurieren des Sinus-Signals (''Signalgenerator Typ'') mit einer Amplitude von 4000 und einer Verschiebung von 4000. Der Wert schwingt somit zwischen 0 und 8000.
#Auslösung der Botschaft aktivieren (Auswahlfeld in der Spalte ''Zykluszeit'' anwählen).
#Starten der Simulation (gelber Blitz in der Symbolleiste). Der Drehzahl-Zeiger des Instruments oszilliert zwischen 0 und 8000 Umdrehungen pro Minute.
#Das Verlauf der Werte und die hexadezimale Botschaft kann im ''Trace'' des Messaufbaus (Doppelklick auf das Symbol) eingesehen werden.
Damit im nächsten Schritt das Drehzahl-Signal mittels des Arduinos angesteuert werden kann, müssen für diese Botschaft die hexadezimalen Werte, die ID und die Länge notiert werden. Im Rahmen der Bearbeitung wurde folgende Tabelle aufgestellt, die sämtliche verwendeten Botschaften enthält.
{| class="wikitable"
|'''Datenbank'''
|'''Botschaft'''
|'''Signal'''
|'''Beschreibung'''
|'''Wert min'''
|'''Data min'''
|'''Wert max'''
|'''Data max'''
|'''ID'''
|'''Länge'''
|-
|zb || mMotor_1 || MO1_Drehzahl || Motordrehzahl || 0 || FA C0 00 00 00 00 00 00 || 8000 || FA C0 7D 00 00 00 00 00 || 280 || 8
|-
|KOM_339_PQ46 || mBSG_Kombi || BSK_FT_geoeffnet || Türsymbol Fahrertür || Tür auf || 00 0F 7F 7F 00 || Tür zu || 00 00 7F 7F 00 || 470 || 5
|-
|KOM_339_PQ46 || mBSG_Kombi || BSK_BT_geoeffnet || Türsymbol Beifahrertür || Tür auf || 00 0F 7F 7F 00 || Tür zu || 00 00 7F 7F 00 || 470 || 5
|-
|KOM_339_PQ46 || mBSG_Kombi || BSK_HL_geoeffnet || Türsymbol Tür hinten links || Tür auf || 00 0F 7F 7F 00 || Tür zu || 00 00 7F 7F 00 || 470 || 5
|-
|KOM_339_PQ46 || mBSG_Kombi || BSK_HR_geoeffnet || Türsymbol Tür hinten rechts || Tür auf || 00 0F 7F 7F 00 || Tür zu || 00 00 7F 7F 00 || 470 || 5
|-
|zb || mBremse_2 || BR2_mi_Radgeschw || mittlere Radgeschwindigkeit (erfordert mBremse_1) || 0 || 00 00 00 00 00 00 00 28 || (entspricht 200) || 00 00 6C 00 00 00 00 00 || 5A0 || 8
|-
|zb || mMotor_2 || Mo2_Kuehlm_T || Kühlmitteltemperatur || 0 || FA 00 0C FF 00 80 00 00 || 130 || FA C5 0C FF 00 80 00 00 || 288 || 8
|-
|zb || mBremse_1 ||  || erforderlich für BR2_mi_Radgeschw ||  || 10 F0 01 00 00 30 00 E1 || statisch ||  || 1A0 || 8
|-
|zb || mAirbag_1 ||  || Airbag Kontrollleuchte || nicht ausgelöst || E0 F0 00 FF || statisch ||  || 50 || 4
|-
|zb || mBremse_8 ||  || Bremse Kontrollleuchte und Signalton || ohne Störung || 00 80 7F 7F 69 A1 00 C2 || statisch ||  || 1AC || 8
|}


== CAN-BUS Shield von SparcFun ==
== '''CAN-BUS Shield von ''SparkFun Electronics®''''' ==
[[Datei:10039-01.jpg|CAN-BUS shield von sparkfun]]
[[Datei:Canbusshield.png|thumb|100px|Pin-Belegung am CAN-BUS shield]]
[[Datei:Canbusshield.png|thumb|200px|Pin-Belegung am CAN-BUS shield]]
[[Datei:Canbus shield-v12.png|thumb|200px|Schaltplan des CAN-BUS shields]]
[[Datei:Canbus shield-v12.png|thumb|200px|Schaltplan des CAN-BUS shields]]
<br />
<br />
== Ansteuerung Kombiinstrument mit Arduino ==
An dieser Stelle wird das verwendete CAN-Shield des Herstellers ''SparkFun Electronics®'' vorgestellt. Die Arduino-Community beschreibt Arduino-Shields im Allgemeinen folgendermaßen:
<blockquote>Shields are boards that can be plugged on top of the Arduino PCB extending its capabilities. The different shields follow the same philosophy as the original toolkit: they are easy to mount, and cheap to produce. <ref>[http://arduino.cc/en/Main/ArduinoShields] Arduino: ''Shields''. (Abruf: 22.01.2014)</ref></blockquote>
Die Shields sind also Platinen, die zur Erweiterung der Funktionen oder Möglichkeiten auf die Oberseite eines Arduino gesteckt werden können. Die unterschiedlichen Shields verfolgen dabei das gleiche Ziel: Einfach in der Anwendung und Verbindung sowie günstig in der Produktion.
Es gibt auch viele solcher Shields, die von anderen Herstellen angeboten werden. So ist das [https://www.sparkfun.com/products/10039 CAN-Shield] ein Produkt der Firma ''SparkFun Electronics®''. Es wird in Zusammenarbeit mit SK Pang Electronics vertrieben. Dieses ermöglicht es, mit einem Arduino in einem CAN-Bus zu kommunizieren. Somit kann der Mikrokontroller sowohl als Sender als auch als Empfänger verwendet werden. Es kommt ein MCP2515 [https://www.sparkfun.com/datasheets/DevTools/Arduino/MCP2515.pdf (Datenblatt)] CAN-Kontroller mit einem kombinierten CAN-Sender-Empfänger (engl. ''transceiver'') MCP2551 [https://www.sparkfun.com/datasheets/DevTools/Arduino/MCP2551.pdf (Datenblatt)] zum Einsatz. Es stehen ein neunpoliger SUB-D-Anschluss, ein microSD-Kartenslot und andere Peripherie zur Verfügung. Desweiteren können die Signale HIGH und LOW für den Can-Bus direkt auf der Platine abgegriffen werden. Dazu wurde ein Stück einer Buchsenleiste auf die Platine aufgelötet. Desweiteren müssen zur Verwendung mit einem Arduino einige Stiftleisten angelötet werden. Gelötet wurde mit circa 320°C, es handelt sich somit um einen Weichlot-Prozess. Um später am Arduino Sensoren und Aktuatoren anschließen zu können, sollten nur an den Pins Stifte angelötet werden, die für die Kommunikation zwischen Arduino und CAN-Shield notwendig sind. Die Kontakte Digital 3-6 und Analog 0-5 sind auf jeden Fall frei für andere Peripherie (vgl. Abbildung ''Pin-Belegung am CAN-BUS shield''). An dieser Stelle sei ein Verweis auf den Artikel [[CAN-Kommunikation mit Arduino]] von Jens Henze gegeben.
<br>
Jedoch muss beachtet werden, dass die Pin-Belegung am Sub-D Stecker von Vector und die des CAN-Shields nicht übereinstimmen. Dies lässt sich durch den Vergleich des Schaltplans des CAN-Shields (Abbildung ''Schaltplan des CAN-BUS shields'') mit der Konvention des Sub-D Steckers (Abbildung ''schematischer Aufbau des Sub-D Steckers'' im Abschnitt ''Grundlagen CAN-Bus'') herausfinden.
{| class="wikitable"
!Bezeichnung
!Vector-Pinning
!Sparkfun-Pinning
|-
| CAN-H
| Pin 7
| Pin 3
|-
| CAN-L
| Pin 2
| Pin 5
|-
|}
Eine Lösung des Problems kann dadurch erreicht werden, indem man selber ein Adapter-Kabel fertigt. Eine Seite des Kabels ist ein Sub-D Stecker mit der Pin-Belegung von Vector (siehe Tabelle oben). Die andere Seite ist ein 2-poliger Stecker, der zum Beispiel aus einem Stück Stiftleiste hergestellt werden kann. Es wird dringend empfohlen zwei verschiedene Leiterfarben zu verwenden, um CAN-HIGH und CAN-LOW unterscheiden zu können. Dieser Stecker kann dann in die vorher aufgelöteten Buchsen auf dem CAN-Shield eingesteckt werden.
 
== '''Ansteuerung Kombiinstrument mit Arduino''' ==
Nachdem das Kombiinstrument mit CANoe angesteuert worden ist und für die zu sendenden Botschaften die Werte, die ID sowie die Länge herausgefunden wurden, können die Anzeigen nun mit dem Arduino Uno angesteuert werden. Dazu wird, wie bereits oben ersichtlich, das CAN-BUS Shield verwendet. Zur Ansteuerung ist das Einbinden der oben genannten Bibliothek (engl. Library) notwendig. Dieses kann auf zwei Arten geschehen. Erstens bietet die Arduino-IDE eine entsprechende Funktion, die über ''Sketch\Library importieren\Add Library'' aufgerufen werden kann. Dort wählt man einfach das Download-Verzeichnis als Quelle aus. Alternativ kann der Ordner direkt in den entsprechenden Pfad für die Arduino-Libraries kopiert werden.
Nachdem das Kombiinstrument mit CANoe angesteuert worden ist und für die zu sendenden Botschaften die Werte, die ID sowie die Länge herausgefunden wurden, können die Anzeigen nun mit dem Arduino Uno angesteuert werden. Dazu wird, wie bereits oben ersichtlich, das CAN-BUS Shield verwendet. Zur Ansteuerung ist das Einbinden der oben genannten Bibliothek (engl. Library) notwendig. Dieses kann auf zwei Arten geschehen. Erstens bietet die Arduino-IDE eine entsprechende Funktion, die über ''Sketch\Library importieren\Add Library'' aufgerufen werden kann. Dort wählt man einfach das Download-Verzeichnis als Quelle aus. Alternativ kann der Ordner direkt in den entsprechenden Pfad für die Arduino-Libraries kopiert werden.
<br>  
<br>  
Zeile 171: Zeile 197:
     CanBus_send(0x280,8, txBufferDrehzahl);
     CanBus_send(0x280,8, txBufferDrehzahl);


== Reflexion – Was haben wir gelernt ==
== '''Verwendung eines PC-Pedal-Sets''' ==
Um der Anwendung im Fahrzeug möglichst nahe zu kommen, wurde ein altes PC-Pedal-Set an den Arduino angeschlossen. Dazu wurde das Gehäuse geöffnet und das Kabel mit der seriellen Schnittstelle entfernt. Da in dem Pedal nur ein Potentiometer verbaut ist, genügen drei Leitungen zur Ansteuerung desselben. Diese wurden direkt an das Potentiometer angelötet und das Gehäuse wurde wieder verschlossen. Die drei Leitungen lassen sich zum Beispiel mit kleinen Kabelbindern bündeln. Das Pedal wird wie jedes andere Potentiometer angeschlossen, die äußeren Kontakte auf VCC (+) und Ground (-) und der Mittelabgriff an einen Analog-Eingang des Arduino. Die Werte des Potentiometers wurden wie folgt ermittelt:
{|class="wikitable"
!"100px"|Mittelstellung
!"100px"|Min
!"100px"|Max
|-
|<center>596</center>
|<center>104</center>
|<center>1023</center>
|}
 
Die Besonderheiten bei der Implementierung in der Software sollen nun kurz dargestellt werden. Das Einlesen geschieht analog zu dem oben beschriebenen Potentiometer, jedoch muss die Verschiebung der Ruhestellung berücksichtigt werden. Der konkrete Wert wurde experimentell ermittelt.
valPedal=(analogRead(PedalPin)-612)/3;//mal 1,85 ergibt Geschwindigkeit auf Tacho
Bevor der eingelesene Wert in die entsprechende Botschaft geschrieben wird, wird kontrolliert, ob der Wert nicht zu klein ist. In diesem Falle würde nämlich die Geschwindigkeitsanzeige eine sehr hohe Geschwindigkeit anzeigen, obwohl eigentlich „gebremst wird“. Die Implementierung dafür kann folgendermaßen aussehen.
  // Fehler ausschließen
    if (valPedal<-75)
    {
        valPedal=0;
    }


<!--== Siehe auch ==
== Weblinks ==
{{Commonscat|Arduino}}
* [http://www.arduino.cc/ Offizielle Webpräsenz] (''englisch'', teilweise Deutsch, mit deutschem Forum)
* [http://www.youtube.com/MaxTechTV1 Einsteiger Video Tutorials auf Youtube] (youtube.de)
* [http://www.freeduino.de/books/arduino-tutorial-lady-ada Deutschsprachiges Tutorial für Einsteiger ]
* [https://docs.google.com/file/d/0Bw_ruMOtRDDgNXI3OTFGZXhIZ2c/edit?usp=sharing The Complete Beginners Guide to the Arduino] (E-Buch, pdf, ''englisch'' von Earthshine Electronics; 8,15&nbsp;MB)
* [http://www.heise.de/ct/projekte/machmit/processing Kreativ programmieren mit Processing und Arduino] (heise.de)
* [http://fritzing.org/projects Graphisch dokumentierte Beispiele zur Implementierung von Komponenten] (fritzing – eine Projektgruppe der [[Fachhochschule Potsdam]])
* [http://vimeo.com/18539129 Arduino The Documentary (2010) English HD]
* [http://www.arduino-projekte.de/ Übersicht über die Arduino Hardwarewelt] (Deutsch)
* [http://www.arduino-ag.de/ Arduino AG: Übersicht über Hardware und Tutorial] (Deutsch)
* [http://www.arduinoprx.de/ Arduino PrX: Alles über Arduino und vieles zum Nachbauen] (Deutsch)


== Literatur ==


* Erik Bartmann: ''Die elektronische Welt mit Arduino entdecken''. Mit dem Arduino messen, steuern und spielen, Elektronik leicht verstehen, kreativ programmieren lernen. O'Reilly, Köln 2011, ISBN 978-3-89721-319-7 (behandelt Arduino 1.0).
== '''Reflexion''' ==
* Thomas Brühlmann: ''Arduino: Praxiseinstieg'', mitp, Heidelberg 2010, ISBN 978-3-8266-5605-7.
* Michael Margolis: ''Arduino Kochbuch'', O'Reilly, Köln 2012, ISBN 978-3-86899-353-0.
* Simon Monk: ''30 Arduino Selbstbau-Projekte'', Franzis, Haar 2012, ISBN 978-3-645-65136-3.
* Manuel Odendahl, Julian Finn, Alex Wenger: ''Arduino – Physical Computing für Bastler, Designer und Geeks'', O'Reilly, Köln 2009, ISBN 978-3-89721-893-2.
* Mike Riley: ''O'Reillys basics: Das intelligente Haus – Heimautomation mit Arduino, Android und PC'', O'Reilly, Köln 2012, ISBN 978-3-86899-363-9.
* Maik Schmidt: ''Arduino Ein schneller Einstieg in die Microcontroller-Entwicklung'', dpunkt, Heidelberg 2011, ISBN 978-3-89864-764-9.
* Ulli Sommer: ''Arduino: Mikrocontroller-Programmierung mit Arduino, Freeduino'', Franzis, Poing 2010, ISBN 978-3-645-65034-2.
* Günter Spanner: ''Arduino: Schaltungsprojekte für Profis'', Elektor, Aachen 2012, ISBN 978-3-89576-257-4.
* Harold Timmis: ''Arduino in der Praxis'', Franzis, Haar 2012, ISBN 978-3-645-65132-5.
* Dale Wheat: ''Arduino Internals'', Apress, New York, NY 2011, ISBN 978-1-4302-3882-9 (englisch).


-->
Die Bearbeitung der Aufgabe im  Rahmen des Elektrotechnik-Fachprakikums war vielseitig und interessant zugleich. Für Mechatronik-Studenten ist es gut, wenn eine Aufgabe mechanische, elektrotechnische und informationstechnische Aspekte hat. Genau dieses war hier der Fall. Interessant war die Aufgabe auch dahingehend, weil ein direkter Praxisbezug vorhanden war. Desweiteren hat die Beschäftigung mit Komponenten eines Automobils an für sich einen gewissen Reiz.
Es war möglich gelernte Grundlagen, wie z.B. die Programmierung von Mikrokontrollern, in der Praxis umzusetzen.


== Weiterführende Weblinks ==
Allerdings war es notwendig, den Umgang und die Bedienung der eingesetzten Software, in diesem Fall CANoe, zu erlernen. Daher erschienen die Lösungsansätze beim Einstieg etwas unklar, aber mit Hilfe der Dozenten und wissenschaftlichen Mitarbeitern der Hochschule konnten diese Probleme gelöst werden.
 
Gelernt wurde im Rahmen der Bearbeitung, wie man mit CANoe eine Simulation aufbauen kann. Diese enthält Konfigurationen von Botschaften und Signalen. Die Ansteuerung der Anzeigeelemente des Kombiinstruments erfolgt durch Sendung der Simulationsdaten über den USB-Seriell-Adapter der Firma Vector an das Kombiinstrument. Anderseits kann die Ansteuerung mit Arduino und CAN-Bus-Shield erfolgen.
 
Teilweise konnten geplante Vorhaben nicht realisiert werden. Zum Beispiel wollte man die Anzeige des Kilometerstands manipulieren, doch dies gelang nicht. Möglicherweise ist die Zugangsberechtigung gesperrt. Die Aufgabenstellung konnte aber im Ganzen erfüllt werden. In Zukunft könnte an der Ansteuerung weiterer Signale bis hin zur Simulation einer echten Fahrzeug-Umgebung weiter gearbeitet werden.
 
== '''Weiterführende Weblinks''' ==
*Artikel von Jens Henze ''CAN-Kommunikation mit Arduino'' (Abruf: 22.01.2014) ''Achtung: Zugangsberechtigung erforderlich!'' [http://193.175.248.56/wiki/index.php/CAN-Kommunikation_mit_Arduino]
*Artikel von Jens Henze ''CAN-Kommunikation mit Arduino'' (Abruf: 22.01.2014) ''Achtung: Zugangsberechtigung erforderlich!'' [http://193.175.248.56/wiki/index.php/CAN-Kommunikation_mit_Arduino]
*Bedienungsanleitung zu CANoe (Abruf: 19.11.2013) [http://eitidaten.fh-pforzheim.de/daten/labore/mec_bc/bslt/doc_webseite/hilfsmittel/canoe/CANoe_Manual_DE.pdf]
*Bedienungsanleitung zu CANoe (Abruf: 19.11.2013) [http://eitidaten.fh-pforzheim.de/daten/labore/mec_bc/bslt/doc_webseite/hilfsmittel/canoe/CANoe_Manual_DE.pdf]
*Beschreibung des CAN-BUS Shields (Homepage von sparkfun)[https://www.sparkfun.com/products/10039]
*Beschreibung des CAN-BUS Shields (Homepage von ''SparkFun Electronics®'')[https://www.sparkfun.com/products/10039]
*Homepage der Arduino-Community [http://arduino.cc/]
*Homepage der Arduino-Community [http://arduino.cc/]
*Homepage der Hochschule Hamm-Lippstadt [http://www.hshl.de/startseite/]
*Homepage der Hochschule Hamm-Lippstadt [http://www.hshl.de/startseite/]


== Einzelnachweise ==
== '''Einzelnachweise''' ==
<references />
<references />
== '''Anlagen''' ==
[[Datei:Projekt_14_Sensor_mit_CAN.zip|ZIP-Archiv mit Projekt-Dateien]]
== Feedback und Verbesserungsvorschläge zum Artikel ==
[[Benutzer:Mirekgoebel| Prof. Dr. Mirek Göbel]] am 31. Jan. 2014:
* Thema CANOe bitte als separaten Artikel anlegen und dann darauf verweisen (für den allgemeinen Teil)
[[Benutzer:Daniel Block|Daniel Block]] am 12.02.14
* wurde umgesetzt

Aktuelle Version vom 22. Dezember 2014, 12:02 Uhr

Dieser Bericht beschreibt die Ansteuerung eines Kombiinstruments für Kraftfahrzeuge der Marke Volkswagen mit Hilfe der Entwicklungs-, Test- und Analyseumgebung CANoe[1] der Vector Informatik GmbH[2] und mit einem Arduino Uno. Die Lösung wurde im Rahmen des Elektrotechnik-Fachprakikums im Studiengang Mechatronik der HSHL während des WS 13/14 von Ziad Abuelkhair und Daniel Block erarbeitet.

VW-Kombiinstrument mit Peripherie

Aufgabenstellung

In diesem Projekt wurde einen VW-Kombiinstrument zur Verfügung gestellt. Hauptsichtlich bestand die Aufgabe darin, die Anzeigeelemente des Kombiinstruments anzusteuern. Die Ansteuerung der Anzeigeelemente wie z.B. des Drehzahl-Zeigers sollte mit zwei unterschiedlichen Mitteln erfolgen. Zum Einen sollte mit Hilfe des bereitgestellten USB-Seriell-Adapters der Vector Informatik GmbH und der Software CANoe mit dem Kombiinstrument eine Kommuikation aufgebaut werden. Zum Anderen sollte das Kombiinstrument mit dem Mikrocontroller Arduino über ein CAN-Shield verbunden werden.

Im Einzelnen sollte das Kombiinstrument eines Volkswagen Passats, die Software Vector CANoe und ein Arduino mit einem CAN-Shield zum Einsatz kommen. Dazu sollte zwischen dem Kombiinstrument und einem CAN-Bus eine Verbindung aufgebaut werden. Bei der Nutzung von CANoe war die Ansteuerung der Anzeigeelemente mit dem Interaktiven Generatorblock vorgesehen. Durch die Verwendung des Arduino sollten Sensordaten gemessen und auf den CAN-Bus gesendet werden. Beispielhaft war die Ansteuerung eines Anzeigeelements mit einem Potentiometer am Arduino vorgesehen.

Die Aufgaben waren im Team zu lösen, und dann die Lösung und der Lösungsweg zu präsentieren und zu dokumentieren.

Es wurde neben dem genannten Equipment ein fertiges Bus-Kabel mit drei Knoten in Form von neunpoligen Sub-D Steckern und den beiden Abschlusswiderständen von 120 Ohm zur Verfügung gestellt. Auch ein Adapter zum Anschluss an die Buchse am Kombiinstrument wurde gestellt. Damit war der direkte Anschluss an ein Labor-Netzteil sowie an den Bus möglich. Diese Peripherie war im Vorjahr im Rahmen eines Kleinprojekts von einem Kommilitonen erstellt worden.

Grundlagen CAN-Bus

schematischer Aufbau des CAN-Bus
schematischer Aufbau des Sub-D Steckers

Bus-Systeme sollen den Aufwand für die Verkabelung zwischen den Schnittstellen einzelner Komponenten eines Systems verringern. Das zugrundeliegende Prinzip ist, dass alle Komponenten an eine gemeinsame Datenleitung angeschlossen sind. Somit können leicht einzelne Komponenten ausgetauscht oder hinzugefügt werden. Jedoch erfordert die gemeinsame Datenleitung einen geregelten Zugriff mittels eines Protokolls. Die Abkürzung Can steht für Controller Area Network. Der CAN-Bus ist ein ursprünglich für die Verwendung in Automobilen entwickeltes Bus-System. Es kommt gegenwärtig in einer Vielzahl der entwickelten, produzierten und verkauften Fahrzeuge zum Einsatz. Jedoch findet man es heute auch immer häufiger im Einsatz in der Industrie, zum Beispiel in der Automatisierungstechnik von Produktionsanlagen. Das CAN-Protokoll wurde in der zweiten Hälfte der 1980er Jahre von der Firma Bosch entwickelt. Im CAN werden die Komponenten, die in diesem Kontext auch als Knoten bezeichnet werden, über einen 2-Draht Bus miteinander verbunden. Die beiden Leitungen werden als Can-High (CAN-H) und CAN-Low (CAN-L) bezeichnet. Dies ist schematisch in der Abbildung schematischer Aufbau des CAN-Bus zu sehen. Für die elektrische Verbindung wird außer in Fahrzeugen häufig der neunpolige Sub-D Stecker verwendet (vgl. Abbildung schematischer Aufbau des Sub-D Steckers). Die beiden Busleitungen müssen beidseitig mit einem 120 Ohm Widerstand abgeschlossen werden, um Störungen zu verhindern. Eine Nachricht wird in einer für den CAN-Bus charakteristischen Form aufgebaut, die als Botschaft oder Frame bezeichnet wird. Diese enthält im Wesentlichen sieben Kernfelder, die Anfang und Ende kennzeichnen, Information für den Empfänger zum Beispiel hinsichtlich der Priorität enthalten, Auskunft über die Identifizierung und Länge der Nachricht geben, den Datensatz darstellen und einige Prüfbits. Besonders wichtige Eigenschaften sind die Echtzeitfähigkeit, die Stabilität und Störsicherheit sowie die einfache und kostengünstige Umsetzung. [3] [4] [5]

Benötigte Hardware/Bauteile und Dateien/Software

Kombiinstrument von VW
ArduinoUNO

Nun werden in einer Übersicht die benötigten und verwendeten Komponenten zum Lösen der Aufgabe vorgestellt. Bei Bedarf wird eine kurze Erklärung hinzugefügt. Wenn nichts anderes angegeben ist, wurden die jeweiligen Komponenten im Rahmen des zur Verfügung gestellten Budgets beschafft.

USB-Seriell-Adapter der Vector Informatik GmbH
CAN-BUS shield von SparkFun Electronics®


Hardware-Komponenten und elektrische Bauteile

  • VW Passat Kombiinstrument mit Anschlüssen für Stromversorgung und Bus-Schnittstelle; wurde von betreuendem Professor gestellt
  • Labor-Netzteil für 12V DC; Inventar der HSHL
  • USB-Seriell-Adapter der Vector Informatik GmbH; wurde von betreuendem Professor gestellt
  • Bus-Kabel mit drei Knoten in Form von neunpoligen Sub-D Steckern und zwei Abschlusswiderständen von 120 Ohm; wurde von betreuendem Professor gestellt
  • Adapter zum Anschluss an die Buchse am Kombiinstrument; wurde von betreuendem Professor gestellt
  • Arduino UNO; Eigentum der Studenten, wurde später ersetzt
  • CAN-BUS Shield von SparkFun Electronics®; wurde von betreuendem Professor gestellt
  • Holzplatte für Pult; Reststücke aus dem Eigentum der Studenten
  • Flach-Senkkopf Holzschrauben, Kreuzschlitz PZD, 3.5 x 30 mm für das Pult
  • USB-Kabel 2.0, Hi-Speed A-St auf B-St, 3m zur Kommunikation zwischen Arduino und PC
  • Blitzkabelbinder, 120mm, KNø 3,5mm, natur zur Montage der Leitungen
  • Experimentier-Steckboard 640/200 Kontakte
  • Drehpotentiometer linear, 10 kOhm, 6 mm
  • Kippschalter
  • Rote 5mm-LED mit Vorwiderstand, 5 Volt
  • Leitungen 0.5 mm; Inventar der HSHL


Software-Komponenten und Dateien

  • Vector Informatik GmbH CANoe in der Version 7.6.84; wurde von betreuendem Professor gestellt
  • DBC-File für Kommunikation mit dem Kombiinstrument; die Datenbank enthält alle Botschaften mit den jeweiligen Signalen; wurde von betreuendem Professor gestellt
  • Can-Library für Arduino; Canbus_v4.zip
  • Software Arduino IDE in der Version 1.0.5; freier Download direkt auf der Arduino-Homepage


Konstruktion und Bau eines Pults

Um den Anschluss der Bauteile zu vereinfachen, die Leitungen besser zu ordnen und das Kombiinstrument besser einsehen zu können, wurde ein Holz-Pult gebaut. Die Maße der einzelnen Platten können der technischen Zeichnung entnommen werden. Bei dem Bau wurden die Maße jedoch nicht ganz eingehalten, da die verwendeten Holzplatten aus Reststücken stammen und somit den Gegebenheiten angepasst wurden. Nach der Bearbeitung mit einer Sticksäge musste der Ausschnitt an einigen Stellen noch mit einem Bohrer und einer Holz-Raspel nachbearbeitet werden, damit eine sichere Fixierung des Kombiinstruments realisiert werden konnte. Zusätzlich wurden einige Bohrungen erstellt, in denen die Fixierung der Leitungen mittels der Kabelbinder erfolgen kann. Auch das Steckboard, der Mikrokontroller und die Bus-Leitung mit den Knoten findet dort Platz. Diese Komponenten wurden bedarfsgerecht mit Schrauben befestigt.

Erläuterungen CANoe

Zu diesem Thema wurde ein separater Artikel CANoe erstellt, in dem die Grundlagen der Software erläutert werden.

Ansteuerung Kombiinstrument mit CANoe

Im folgenden Abschnitt geht es um die Ansteuerung des Kombiinstrumentes mit der Software CANoe. Dazu muss mittels des USB-Seriell-Adapters eine Verbindung des physikalischen CAN-Buses mit dem Computer hergestellt werden. Das Kombiinstrument ist auch mit dem Bus zu verbinden. Desweiteren ist ein Anschluss an eine 12 V-Gleichspannungsquelle erforderlich. Es sei darauf hingewiesen, dass beim Anschließen des Kombiinstruments an das Netzteil ersteres einige Störmeldungen anzeigt sowie einige Signaltöne zu hören sind. Da keine Komponenten angeschlossen sind, werden verschiedenartige Störungen angenommen. Im weiteren Verlauf der Ansteuerung können einige davon unterbunden werden.

In CANoe ist die Erstellung einer Konfiguration erforderlich. Es muss darauf geachtet werden, dass die Baudrate 500 Baud beträgt. Dazu ruft man das Kontextmenü des Netwerks im Simulationsaufbau auf und wählt Netzwerk-Hardware.... Dort lässt sich die Baudrate verändern. Desweiteren ist am virtuellen Bus im Simulationsaufbau ein Interaktiver Generator einzufügen. Dieser lässt sich über das Kontextmenü des angezeigten Bus (rote Linie) aufrufen. In diesem können aus der Datenbank einzelne Botschaften importiert werden. Zuvor müssen jedoch die Datenbasen des Netzwerkes hinzugefühgt werden. Dazu kann im Fenster Systemansicht (ist meist am Simulationsaufbau-Fenster angedockt) im Kontextmenü der Datenbasen den Befehl Hinzufügen aufrufen. Im Konfigurationsfenster des Interaktiven Generators kann durch Doppelklick auf eines leeres Feld in der Spalte Botschaftsname eine Botschaft eingefügt werden. Jede Botschaft enthält eine Reihe von Signalen. Der interaktive Generator ermöglicht die Simulation eines jeglichen Signals. So kann zum Beispiel das Drehzahl-Signal folgendermaßen stimuliert werden:

  1. Importieren der Botschaft mMotor_1 aus der Datenbank zb.
  2. Aufrufen des Fensters der Signal-Definition für das Signal MO1_Drehzahl (Schaltfläche Definieren am Ende der Zeile).
  3. Konfigurieren des Sinus-Signals (Signalgenerator Typ) mit einer Amplitude von 4000 und einer Verschiebung von 4000. Der Wert schwingt somit zwischen 0 und 8000.
  4. Auslösung der Botschaft aktivieren (Auswahlfeld in der Spalte Zykluszeit anwählen).
  5. Starten der Simulation (gelber Blitz in der Symbolleiste). Der Drehzahl-Zeiger des Instruments oszilliert zwischen 0 und 8000 Umdrehungen pro Minute.
  6. Das Verlauf der Werte und die hexadezimale Botschaft kann im Trace des Messaufbaus (Doppelklick auf das Symbol) eingesehen werden.

Damit im nächsten Schritt das Drehzahl-Signal mittels des Arduinos angesteuert werden kann, müssen für diese Botschaft die hexadezimalen Werte, die ID und die Länge notiert werden. Im Rahmen der Bearbeitung wurde folgende Tabelle aufgestellt, die sämtliche verwendeten Botschaften enthält.

Datenbank Botschaft Signal Beschreibung Wert min Data min Wert max Data max ID Länge
zb mMotor_1 MO1_Drehzahl Motordrehzahl 0 FA C0 00 00 00 00 00 00 8000 FA C0 7D 00 00 00 00 00 280 8
KOM_339_PQ46 mBSG_Kombi BSK_FT_geoeffnet Türsymbol Fahrertür Tür auf 00 0F 7F 7F 00 Tür zu 00 00 7F 7F 00 470 5
KOM_339_PQ46 mBSG_Kombi BSK_BT_geoeffnet Türsymbol Beifahrertür Tür auf 00 0F 7F 7F 00 Tür zu 00 00 7F 7F 00 470 5
KOM_339_PQ46 mBSG_Kombi BSK_HL_geoeffnet Türsymbol Tür hinten links Tür auf 00 0F 7F 7F 00 Tür zu 00 00 7F 7F 00 470 5
KOM_339_PQ46 mBSG_Kombi BSK_HR_geoeffnet Türsymbol Tür hinten rechts Tür auf 00 0F 7F 7F 00 Tür zu 00 00 7F 7F 00 470 5
zb mBremse_2 BR2_mi_Radgeschw mittlere Radgeschwindigkeit (erfordert mBremse_1) 0 00 00 00 00 00 00 00 28 (entspricht 200) 00 00 6C 00 00 00 00 00 5A0 8
zb mMotor_2 Mo2_Kuehlm_T Kühlmitteltemperatur 0 FA 00 0C FF 00 80 00 00 130 FA C5 0C FF 00 80 00 00 288 8
zb mBremse_1 erforderlich für BR2_mi_Radgeschw 10 F0 01 00 00 30 00 E1 statisch 1A0 8
zb mAirbag_1 Airbag Kontrollleuchte nicht ausgelöst E0 F0 00 FF statisch 50 4
zb mBremse_8 Bremse Kontrollleuchte und Signalton ohne Störung 00 80 7F 7F 69 A1 00 C2 statisch 1AC 8

CAN-BUS Shield von SparkFun Electronics®

Pin-Belegung am CAN-BUS shield
Schaltplan des CAN-BUS shields


An dieser Stelle wird das verwendete CAN-Shield des Herstellers SparkFun Electronics® vorgestellt. Die Arduino-Community beschreibt Arduino-Shields im Allgemeinen folgendermaßen:

Shields are boards that can be plugged on top of the Arduino PCB extending its capabilities. The different shields follow the same philosophy as the original toolkit: they are easy to mount, and cheap to produce. [6]

Die Shields sind also Platinen, die zur Erweiterung der Funktionen oder Möglichkeiten auf die Oberseite eines Arduino gesteckt werden können. Die unterschiedlichen Shields verfolgen dabei das gleiche Ziel: Einfach in der Anwendung und Verbindung sowie günstig in der Produktion. Es gibt auch viele solcher Shields, die von anderen Herstellen angeboten werden. So ist das CAN-Shield ein Produkt der Firma SparkFun Electronics®. Es wird in Zusammenarbeit mit SK Pang Electronics vertrieben. Dieses ermöglicht es, mit einem Arduino in einem CAN-Bus zu kommunizieren. Somit kann der Mikrokontroller sowohl als Sender als auch als Empfänger verwendet werden. Es kommt ein MCP2515 (Datenblatt) CAN-Kontroller mit einem kombinierten CAN-Sender-Empfänger (engl. transceiver) MCP2551 (Datenblatt) zum Einsatz. Es stehen ein neunpoliger SUB-D-Anschluss, ein microSD-Kartenslot und andere Peripherie zur Verfügung. Desweiteren können die Signale HIGH und LOW für den Can-Bus direkt auf der Platine abgegriffen werden. Dazu wurde ein Stück einer Buchsenleiste auf die Platine aufgelötet. Desweiteren müssen zur Verwendung mit einem Arduino einige Stiftleisten angelötet werden. Gelötet wurde mit circa 320°C, es handelt sich somit um einen Weichlot-Prozess. Um später am Arduino Sensoren und Aktuatoren anschließen zu können, sollten nur an den Pins Stifte angelötet werden, die für die Kommunikation zwischen Arduino und CAN-Shield notwendig sind. Die Kontakte Digital 3-6 und Analog 0-5 sind auf jeden Fall frei für andere Peripherie (vgl. Abbildung Pin-Belegung am CAN-BUS shield). An dieser Stelle sei ein Verweis auf den Artikel CAN-Kommunikation mit Arduino von Jens Henze gegeben.
Jedoch muss beachtet werden, dass die Pin-Belegung am Sub-D Stecker von Vector und die des CAN-Shields nicht übereinstimmen. Dies lässt sich durch den Vergleich des Schaltplans des CAN-Shields (Abbildung Schaltplan des CAN-BUS shields) mit der Konvention des Sub-D Steckers (Abbildung schematischer Aufbau des Sub-D Steckers im Abschnitt Grundlagen CAN-Bus) herausfinden.

Bezeichnung Vector-Pinning Sparkfun-Pinning
CAN-H Pin 7 Pin 3
CAN-L Pin 2 Pin 5

Eine Lösung des Problems kann dadurch erreicht werden, indem man selber ein Adapter-Kabel fertigt. Eine Seite des Kabels ist ein Sub-D Stecker mit der Pin-Belegung von Vector (siehe Tabelle oben). Die andere Seite ist ein 2-poliger Stecker, der zum Beispiel aus einem Stück Stiftleiste hergestellt werden kann. Es wird dringend empfohlen zwei verschiedene Leiterfarben zu verwenden, um CAN-HIGH und CAN-LOW unterscheiden zu können. Dieser Stecker kann dann in die vorher aufgelöteten Buchsen auf dem CAN-Shield eingesteckt werden.

Ansteuerung Kombiinstrument mit Arduino

Nachdem das Kombiinstrument mit CANoe angesteuert worden ist und für die zu sendenden Botschaften die Werte, die ID sowie die Länge herausgefunden wurden, können die Anzeigen nun mit dem Arduino Uno angesteuert werden. Dazu wird, wie bereits oben ersichtlich, das CAN-BUS Shield verwendet. Zur Ansteuerung ist das Einbinden der oben genannten Bibliothek (engl. Library) notwendig. Dieses kann auf zwei Arten geschehen. Erstens bietet die Arduino-IDE eine entsprechende Funktion, die über Sketch\Library importieren\Add Library aufgerufen werden kann. Dort wählt man einfach das Download-Verzeichnis als Quelle aus. Alternativ kann der Ordner direkt in den entsprechenden Pfad für die Arduino-Libraries kopiert werden.
Im Folgenden soll erläutert werden, wie eine konkrete Botschaft mit dem Arduino an das Kombiinstrument gesendet werden kann. Als Beispiel wird die Ansteuerung des Drehzahlmessers mit einem Potentiometer gezeigt. Für die Nutzung des CAN-BUS Shields müssen nun die entsprechenden header-Dateien eingebunden werden.

#include <Canbus.h>
#include <defaults.h>
#include <global.h>
#include <mcp2515.h>
#include <mcp2515_defs.h>

Desweiteren ist es erforderlich, dass für die zu sendenden Botschaften im Voraus Arrays deklariert werden. Dies kann zum Beispiel so aussehen:

unsigned char txBufferDrehzahl[8];

Außerdem müssen zum Einlesen von Senoren, wie zum Beispiel eines Potentiometers, Variablen für den Port und den einzulesenden Wert angelegt werden. Hier eine Möglichkeit:

// Arduino Pins
int PotiPin=0; // Poti connected to analog pin 0
int TastPin=5; // Taster connected to digital pin 5
[…]
// Variablen
int valPoti=0;

In der Funktion void setup() muss für jeden verwendeten digitalen Anschluss der Modus festgelegt werden, das heißt ob er als Eingang oder Ausgang verwendet wird.

void setup(){
[…]
  // Pin Modus: OUT or IN
  pinMode(ledPin,OUTPUT);
  pinMode(TastPin,INPUT);
}

Für das Senden von CAN-Botschaften ist in der Bibliothek die Funktion mcp2515_send_message(&message) definiert. Die zu sendende Botschaft (message) stellt eine Struktur-Variable dar, die aus der ID, dem Header mit der Länge und dem Array mit den Signalen besteht. Es empfiehlt sich zur einfacheren Programmierung eine Funktion zu schreiben, die als Parameter die ID, die Botschaftlänge und das Array mit den einzelnen Bytes übergeben bekommt. Das RTR-Bit kann als default-Wert eins gesetzt werden. Diese Funktion übernimmt das Erstellen der Struktur-Variable und sendet diese mit der oben genannten Funktion des CAN-BUS Shields. Eine mögliche Lösung sieht so aus:

// Sende Funktion
void CanBus_send(int ID, int laenge, unsigned char *Botschaft)
{
  tCAN message; //struct Variable anlegen
  message.id=ID; //ID
  message.header.rtr=0; 
  message.header.length=laenge; //Bit-Anzahl
  
  //Bits in Nachricht speichern
  for (int i=0;i<laenge;i++)
  {
     message.data[i]=Botschaft[i]; 
  }
  
  //Funktion aus Bibliothek zum Senden der struct-Variable mit der Botschaft
  mcp2515_send_message(&message);
}

In der Endlosschleife (void loop()) sind nun folgende Schritte notwendig:

1.Einlesen der Sensoren und speichern des Wertes in einer Variablen; ggf. Skalierung des Wertes
Void loop () {
// Potis einlesen
valPoti=analogRead(PotiPin)/8;
2.Erstellen des Daten-Arrays für die Botschaft, dabei muss jedes Byte separat gesetzt werden
// Botschaften erstellen
[…]
     // Drehzahl
    txBufferDrehzahl[0]=0xFA; 
    txBufferDrehzahl[1]=0xC0; 
    txBufferDrehzahl[2]=0x00; 	//LSB Drehzahl
    txBufferDrehzahl[3]=valPoti; 	//MSB Drehzahl
    txBufferDrehzahl[4]=0x00; 
    txBufferDrehzahl[5]=0x00; 
    txBufferDrehzahl[6]=0x00; 
    txBufferDrehzahl[7]=0x00; 
3.Senden der Botschaft mit der zuvor erstellten Funktion; ID und Botschaftlänge müssen bekannt sein
    CanBus_send(0x280,8, txBufferDrehzahl);

Verwendung eines PC-Pedal-Sets

Um der Anwendung im Fahrzeug möglichst nahe zu kommen, wurde ein altes PC-Pedal-Set an den Arduino angeschlossen. Dazu wurde das Gehäuse geöffnet und das Kabel mit der seriellen Schnittstelle entfernt. Da in dem Pedal nur ein Potentiometer verbaut ist, genügen drei Leitungen zur Ansteuerung desselben. Diese wurden direkt an das Potentiometer angelötet und das Gehäuse wurde wieder verschlossen. Die drei Leitungen lassen sich zum Beispiel mit kleinen Kabelbindern bündeln. Das Pedal wird wie jedes andere Potentiometer angeschlossen, die äußeren Kontakte auf VCC (+) und Ground (-) und der Mittelabgriff an einen Analog-Eingang des Arduino. Die Werte des Potentiometers wurden wie folgt ermittelt:

Mittelstellung Min Max
596
104
1023

Die Besonderheiten bei der Implementierung in der Software sollen nun kurz dargestellt werden. Das Einlesen geschieht analog zu dem oben beschriebenen Potentiometer, jedoch muss die Verschiebung der Ruhestellung berücksichtigt werden. Der konkrete Wert wurde experimentell ermittelt.

valPedal=(analogRead(PedalPin)-612)/3;//mal 1,85 ergibt Geschwindigkeit auf Tacho

Bevor der eingelesene Wert in die entsprechende Botschaft geschrieben wird, wird kontrolliert, ob der Wert nicht zu klein ist. In diesem Falle würde nämlich die Geschwindigkeitsanzeige eine sehr hohe Geschwindigkeit anzeigen, obwohl eigentlich „gebremst wird“. Die Implementierung dafür kann folgendermaßen aussehen.

  // Fehler ausschließen
    if (valPedal<-75)
    {
        valPedal=0; 
    }


Reflexion

Die Bearbeitung der Aufgabe im Rahmen des Elektrotechnik-Fachprakikums war vielseitig und interessant zugleich. Für Mechatronik-Studenten ist es gut, wenn eine Aufgabe mechanische, elektrotechnische und informationstechnische Aspekte hat. Genau dieses war hier der Fall. Interessant war die Aufgabe auch dahingehend, weil ein direkter Praxisbezug vorhanden war. Desweiteren hat die Beschäftigung mit Komponenten eines Automobils an für sich einen gewissen Reiz. Es war möglich gelernte Grundlagen, wie z.B. die Programmierung von Mikrokontrollern, in der Praxis umzusetzen.

Allerdings war es notwendig, den Umgang und die Bedienung der eingesetzten Software, in diesem Fall CANoe, zu erlernen. Daher erschienen die Lösungsansätze beim Einstieg etwas unklar, aber mit Hilfe der Dozenten und wissenschaftlichen Mitarbeitern der Hochschule konnten diese Probleme gelöst werden.

Gelernt wurde im Rahmen der Bearbeitung, wie man mit CANoe eine Simulation aufbauen kann. Diese enthält Konfigurationen von Botschaften und Signalen. Die Ansteuerung der Anzeigeelemente des Kombiinstruments erfolgt durch Sendung der Simulationsdaten über den USB-Seriell-Adapter der Firma Vector an das Kombiinstrument. Anderseits kann die Ansteuerung mit Arduino und CAN-Bus-Shield erfolgen.

Teilweise konnten geplante Vorhaben nicht realisiert werden. Zum Beispiel wollte man die Anzeige des Kilometerstands manipulieren, doch dies gelang nicht. Möglicherweise ist die Zugangsberechtigung gesperrt. Die Aufgabenstellung konnte aber im Ganzen erfüllt werden. In Zukunft könnte an der Ansteuerung weiterer Signale bis hin zur Simulation einer echten Fahrzeug-Umgebung weiter gearbeitet werden.

Weiterführende Weblinks

  • Artikel von Jens Henze CAN-Kommunikation mit Arduino (Abruf: 22.01.2014) Achtung: Zugangsberechtigung erforderlich! [4]
  • Bedienungsanleitung zu CANoe (Abruf: 19.11.2013) [5]
  • Beschreibung des CAN-BUS Shields (Homepage von SparkFun Electronics®)[6]
  • Homepage der Arduino-Community [7]
  • Homepage der Hochschule Hamm-Lippstadt [8]

Einzelnachweise

  1. [1] CANoe Erläuterungen (07.01.2014)
  2. [2] CANoe von der Vector Informatik GmbH (20.01.2014)
  3. Reif, Konrad (Hrsg.): Batterien, Bordnetze und Vernetzung. Vieweg+Teubner, Wiesbaden, 2010. S. 120ff. ISBN 978-3-8348-1310-7
  4. Zimmermann, Werner; Schmidgall: Bussysteme in der Fahrzeugtechnik. Friedr. Vieweg & Sohn Verlag, Wiesbaden, 2007. S. 32ff. ISBN 978-3-8348-0235-4
  5. Borgeest, Kai: Elektronik in der Fahrzeugtechnik. Vieweg+Teubner, Wiesbaden, 2010. S. 78ff. ISBN 978-3-8348-0548-5
  6. [3] Arduino: Shields. (Abruf: 22.01.2014)


Anlagen

Datei:Projekt 14 Sensor mit CAN.zip


Feedback und Verbesserungsvorschläge zum Artikel

Prof. Dr. Mirek Göbel am 31. Jan. 2014:

  • Thema CANOe bitte als separaten Artikel anlegen und dann darauf verweisen (für den allgemeinen Teil)

Daniel Block am 12.02.14

  • wurde umgesetzt