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

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
(Ansteuerung mit Arduino)
(Links)
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 [http://de.wikipedia.org/wiki/CANoe CANoe] der [https://vector.com/vi_canoe_de.html Firma Vector] 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|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 name="CANoe Wikipedia">{{Internetquelle | url=http://de.wikipedia.org/wiki/CANoe | titel=CANoe | zugriff=2014-01-22}}</ref>der [https://vector.com/vi_canoe_de.html Firma Vector] 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.  
<br>
<br>
== Aufgabenstellung ==
== Aufgabenstellung ==
Zeile 94: Zeile 94:


== Reflexion – Was haben wir gelernt ==
== Reflexion – Was haben wir gelernt ==
== Siehe auch ==
<!--* [[BeagleBoard]]
* [[Ethernut]]
* [[PandaBoard]]
* [[Raspberry Pi]]
* [[Tinkerforge]]
* [[Cubieboard]]-->
== 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).
* 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).-->
== Einzelnachweise ==
<!--
<references/>
[[Prix Ars Electronica]]<ref name="AECArchiv8052">{{Internetquelle | url=http://archive.aec.at/#8052 | titel=Ars Electronica Archiv | zugriff=2012-11-24}}</ref>
-->

Version vom 22. Januar 2014, 11:59 Uhr

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[1]der Firma Vector 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.


Aufgabenstellung

Grundlagen CAN-Bus

Benötigte Hardware/Bauteile und Dateien/Software

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.

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 Firma Vector; wurde von betreuendem Professor gestellt
  • Arduino UNO; Eigentum der Studenten
  • CAN-Shield der Firma sparcfun; wurde von betreuendem Professor gestellt
  • Holzplatte für 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
  • 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 CANoe in der Version 7.3; 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

Erläuterungen CANoe

Ansteuerung Kombiinstrument mit CANoe

CAN-Shield von SparcFun

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-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-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-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);

Reflexion – Was haben wir gelernt

Siehe auch

Weblinks

Literatur

Einzelnachweise