Projekt 76b: LIN Demonstrator: Unterschied zwischen den Versionen

Aus HSHL Mechatronik
Zur Navigation springen Zur Suche springen
 
(83 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 4: Zeile 4:
'''Autoren:''' [[Benutzerin:Nadine_Schwenke| Nadine Schwenke]] und [[Benutzer:Marcel_Broeckelmann| Marcel Bröckelmann]]<br/>
'''Autoren:''' [[Benutzerin:Nadine_Schwenke| Nadine Schwenke]] und [[Benutzer:Marcel_Broeckelmann| Marcel Bröckelmann]]<br/>
'''Betreuer:''' [[Benutzer:Ulrich_Schneider| Prof. Schneider]]<br/>
'''Betreuer:''' [[Benutzer:Ulrich_Schneider| Prof. Schneider]]<br/>
[[Datei:LIN_BUS.PNG|thumb |rechts|300px|Abb.1: LIN BUS]]




Zeile 23: Zeile 27:
* Dieses Projekt wurde zweifach vergeben. Stimmen Sie sich mit dem anderen Team ab, damit zwei unterschiedliche Demonstratoren entstehen.
* Dieses Projekt wurde zweifach vergeben. Stimmen Sie sich mit dem anderen Team ab, damit zwei unterschiedliche Demonstratoren entstehen.


== Einleitung ==
Im Rahmen des Elektronik-Fachpraktikum im 5.Semester, im Bereich Mechatronik wurde uns die Aufgabe gestellt, ein Projekt mit einem Arduino Uno zu gestalten.
<br/>
Das Projekt 76b soll eine LIN-Bus Verbindung demonstrieren. Hierzu sollen Fahrzeugsensoren und Aktoren über einen Arduino miteinander gekoppelt werden, sodass diese gesteuert werden können. Dies wird hier durch die Inbetriebnahme der Heizung eines Wohnmobilseitenspiegels demonstriert, welcher über einen Taster angesteuert wird. 
=== LIN-Bus ===
Der Lin Bus (Lokal Interconnect Network) ist ein einfaches und kostengünstiges Bussystem, dass in den 90er Jahren entwickelt wurde. Über dem Systembus werden einfache Sensoren und Aktoren angesteuert, die eine relativ geringe Echtzeitanforderung haben. Ein paar Anwendungsbeispiele hierfür sind im Automobilbereich der Regensensor, Lichtsysteme, Spiegelverstellung, Fensterheber, Klimaanlage sowie die Sitzverstellung. In den Bereichen wo der CAN-Bus nicht benötigt wird findet die Kostengünstige „Ein-Draht-Leitung“ immer mehr Anwendungsgebiete. <br/>
An einem LIN-Bus können bis 16 Teilnehmer angeschlossen sein, dieses besteht aus einem Master-Knoten, der gleichzeitig das Gatway zu einem übergeordneten Netzwerk (z.B. CAN) ist. Die restlichen Teilnehmer sind Slave-Knoten, die ihr Datenpacket nach Anforderung vom Master über die Busleitung senden. Dabei darf die maximale Leiterlänge von 40m nicht überschritten werden. Bei der Kommunikation zwischen den Teilnehmern kommt eine UART-Übertragung (8 Datenbit, 1Startbit, 1Stopbit) zum Einsatz, die mögliche Bitrate beträgt 20 kbit/s.
''' Header-Massage '''
Die Header-Massage besteht aus den Kommunikationsteilen die als „synchbreak“, „synchfield“ und „identifier“ bezeichnet werden. Die Übertragung des Nachricht beginnt mit dem Synchronisation-Break (synchbreak), ein Masse dominierende Pegel von 13 Bitzeiten, sowie einen rezessiven Pegel von bis zu 4 Bitzeiten.
Das darauf folgende Synchronisationsfeld (synchfield) wird mit einem Startbit (Wert 0x55) sowie einen Stoppbit eingeleitet, damit wird dem Slave ermöglicht, die Übertragungsrate des Masters zu ermittelt.
Die Header-Massage wird mit dem Identifizierfeld (identifier) beendet. Dieser Teil bestimmt den weiteren Ablauf der Nachricht, der mit Datenbytes und zwei Paritätsbits gefüllt ist.


== Einleitung ==
''' Response-Feld '''
 
Das Response-Feld wird generell als Antwort bezeichnet, hierbei werden zwei, vier oder acht Datenbytes versendet. Die Anzahl der Datenbytes ermittelt der empfangene Slave Knoten aus zwei Bytes vom Identifiers vom der Master Botschaft. Als letzen Byte der Antwort wird ein "Checkbyte" versendet.
 
[[Datei:Lin_Frame.JPG|1200px| Abb.2: Lin Frame ]]<br>
Abb.2: Lin Frame<br>


Im Rahmen des Elektronik-Fachpraktikum im 5.Semester, im Bereich Mechatronik wurde uns die Aufgabe gestellt, ein Projekt mit einem Arduino Uno zu gestalten.\n
=== LIN-Transceiver ===


{| class="wikitable"
|-
! style="width:50%"| Funktion      !!  style="width:40%"| Pin
|-
| Datenempfang (OUTPUT)            ||style="text-align:right"| 1
|-
| Chip auswählen                    ||style="text-align:right"| 2
|-
| Fehler- Berichterstattung        ||style="text-align:right"| 3
|-
| Dateneingabe überragen            ||style="text-align:right"| 4
|-
| Masse                            ||style="text-align:right"| 5
|-
| LIN BUS                          ||style="text-align:right"| 6
|-
| Batterie Plus                    ||style="text-align:right"| 7
|-
| Spannungsregler Ausgabe          ||style="text-align:right"| 8
|}


=== LIN-Bus ===
<br/>


== Projekt ==
== Projekt ==


=== Projektplan ===
=== Projektplan ===
''' Morphologischer Kasten '''
[[ Datei: Morphologischer_Kasten LIN.JPG| 500px| thumb | Abb.3: Morpohologischer Kasten ]]<br>
Abb.3: Morphologischer Kasten <br>
Mit Hilfe des Morphologischen Kasten (Abb.3) haben wir die Möglichkeiten aufgeschrieben die uns eingefallen sind um einen LIN Bus zu Demonstrieren. Die Felder die grün hinterlegt sind, zeigen unsere Entscheidung. Zum einen haben wir recherchiert welche Bauteile in einem Kraftfahrzeug überhaupt LIN Bus fähig sind und haben einige davon aufgezählt sowie überlegt wo wir diese von einem Sponsor erwerben können. Als nächsten Schritt musste überlegt werden wie die Bauteile mit 12 Volt versorgt werden können. Dort haben wir uns für ein 12 Volt Netzteil einscheiden. Ebenfalls haben wir überlegt mit welcher Steuerung wir arbeiten und wie mit Hilfe dieser der Lin Bus ermöglicht werden kann. Da der Arduino sich schon um Besitzt befand haben wir angefangen und darüber zu Informieren wie sich der Lin Bus umsetzten lässt. Hierbei haben wir den LIN Transceiver MCP2004 endeckt und haben uns für diese Methode entschieden. Da der Arduino sein Signal mit 5 Volt arbeitet muss das Signal noch auf 12 Volt erhöht werden. Dafür haben wir es mit einem MOSFET und einem 5Volt Relais ermöglicht. Das Porblem bei dem MOSFET war das dieser sich sehr schnell ermöglicht. <br><br> 
'''Projektplanung mit Kanban'''<br>
Die Projektplanung wurde über die Website "Trello" im Stil eines Kanban angefertigt und war wie in Abb.4 aufgebaut.Die farbigen Markierungen dienten zur Aufgabenzuweisung. Rot markierte Aufgaben wurden durch Frau Schwenke bearbeitet, blau markierte durch Herrn Bröckelmann. Aufgaben, die keine oder beide farbigen Markierungen besaßen, wurden gemeinsam bearbeitet.<br>
[[ Datei: Kanban_Plan.png| 700px| Abb.4: Kanban_Plan ]]<br>
Abb.4:Kanban_Plan <br>


''' Benötigte Bauteile'''  
''' Benötigte Bauteile'''  
{| class="wikitable"
{| class="wikitable"
|-
|-
! style="width:50%"| Bauteile      !!  style="width:40%"| Anzahl
! style="width:30%"| Bauteile      !!  style="width:40%"| Bezeichnung / Informationen  !!style = "width:30%"| Anzahl
|-
|-
| 12/24 DC Netzteil                ||style="text-align:right"| 1
| 12V DC Netzteil                ||style="text-align:right"|  ||style="text-align:right"| 1
|-
|-
| Arduino Uno                      ||style="text-align:right"| 2
| Arduino Uno                      ||style="text-align:right"|    ||style="text-align:right"|2
|-
|-
| LIN- Transceiver                  ||style="text-align:right"| 2
| LIN- Transceiver                  ||style="text-align:right"| MCP 2004 ||style="text-align:right"|2
|-  
|-  
| Steckbrett                        ||style="text-align:right"| 1
| Steckbrett                        ||style="text-align:right"|    ||style="text-align:right"| 1
|-
|-
| Wohnmobilspiegel                  ||style="text-align:right"| 1
| Wohnmobilspiegel                  ||style="text-align:right"|Hersteller: Ficosa ||style="text-align:right"| 1
|-
|-
| Taster Heizung                    ||style="text-align:right"| 1
| Taster Heizung                    ||style="text-align:right"| Produktnummer unbekannt ||style="text-align:right"| 1
|-
|-
| 220 kOhm Widerstände             ||style="text-align:right"| 2
| Schalter Spiegelmotor             ||style="text-align:right"| Produktnummer: 5010271228 ||style="text-align:right"|1
|-
|-
| 4,7 kOhm Widerstände              ||style="text-align:right"| 2
| 1 kOhm Widerstand                ||style="text-align:right"| K-O RD14JN102T52  ||style="text-align:right"|2
|-  
| 1 kOhm Widerstände                ||style="text-align:right"| 2
|-
|-
| 50 Ohm Widerstände                ||style="text-align:right"| 2
| 220 pF Kondensator              ||style="text-align:right"| C3X7R 220P 200  ||style="text-align:right"|2
|-
|-
| 100 nF Kondensatoren              ||style="text-align:right"| 2
| 1 µF Kondensator                ||style="text-align:right"| T350 1,0U 35  ||style="text-align:right" | 2
|-
| Gleichrichterdiode              ||style="text-align:right"| 1N 4148  ||style="text-align:right" | 4
|-
|-
| 220 nF Kondensatoren              ||style="text-align:right"| 2
| 5 Volt Relais                    ||style ="text-align:right"| aus Arduino Starter-Kit|| style = "text-align:right"|1
|-
| 1 F Kondensatoren                ||style="text-align:right"| 2
|-
| Standarddioden                    ||style="text-align:right"| 4
|}
|}


<br/>
<br/>
''' Schaltpläne '''
[[Datei:Heiztaster.jpg|1200px| Abb.5: Schaltplan Heiztaster]]<br>
Abb.5: Schaltplan Heiztaster <br>
Dieser Schaltplan zeigt die Belegung des Heiztaster im Bezug zu den einzelnen Spiegel. Da wir in unserer Demonstration nur ein Spiegel ansteuern ist für uns auch nur ein Schaltkreis relevant. Wenn wir uns an die Spiegelheizung mit der Bezeichnung 32R01, muss dieser an einem der Ausgänge mit der Masse verbunden werden. Dafür steht die Bezeichnung W0901. Des weitern muss eine Verbindung zum Slave Steuergerät hergestellt werden, dieses hat auf dem Schaltplan die Bezeichnung 04A02. In unserm Fall wird an diesem Ausgang der Arduino angeschlossen. Der Taster 32S01 ist am Pin 7 mit den 5 Volt vom Arduino verbunden und stellt bei geschlossener Schalterstellung ein Schaltkreis über den Pin 3 zum Steuergerät 04A01 her. 
[[Datei: Steuerschalter.jpg | 1200px|Abb.6: Schaltplan Steuerschalter]]<br>
Abb.6: Schaltplan Steuerschalter<br>
Der Schaltplan zeigt, dass die Masse und Versorgung der Motoren des Spiegels durch den Aufbau des Steuerschalters eingestellt werden. Es ist zu beachten, dass durch eine Umpolung von Masse und Versorgung die Motoren in gegenteilige Richtung betrieben werden.<br><br>
[[Datei:LIN_BUS Schaltplan.JPG|1200px| Abb.7: LIN-Transceiver Schaltplan]]<br>
Abb.7: LIN-Transceiver Schaltplan <br>
Der Schaltplan zeigt den standartisierten Schaltungsaufbau einer LIN-Bus-Verbindung mittels des verwendeten LIN-Transceivers.<br><br>
''' Steuerstrecken '''
[[Datei: Steuerstrecke_Spiegelheizung.JPG| 1200px|Abb.8: Steuerstrecke Spiegelheizung ]]<br>
Abb.8: Steuerstrecke Spiegelheizung<br>
Zu Beginn der Steuerstrecke wird der Heiztaster gedrückt. Dieser sendet ein 5V Signal an den Arduino, welcher daraus ein Datenpaket erstellt und über den LIN-Bus an den Slave versendet. Der Slave-Arduino wertet das Datenpaket aus uns schaltet durch ein 5V Signal ein Relais/MOSFET. Durch das Durchschalten des Relais' wird die Heizung des aktiviert.<br>
[[Datei: Steuerstrecke_Spiegelverstellung.JPG | 1200px|Abb.9: Steuerstrecke Spiegelverstellung ]]<br>
Abb.9: Steuerstrecke Spiegelverstellung<br>
Zu Beginn der Steuerstrecke wird der Steuerschalter in eine Richtung gedrückt. Dieser sendet ein entsprechendes 5V Signal über den korrekten Pin an den Arduino, welcher daraus ein Datenpaket erstellt und über den LIN-Bus an den Slave versendet. Der Slave-Arduino wertet das Datenpaket aus uns schaltet durch ein 5V Signal ein die entsprechenden Relais. Durch das Durchschalten der Relais steuert der Motor in die entsprechende Richtung.<br>


=== Projektdurchführung ===
=== Projektdurchführung ===
'''Programmablaufdiagramm'''
'''Schaltungsaufbau'''<br>
[[file:Aufbau_Gesamt_76b.JPG|thumb|right|500px|Abb.10: Gesamter Aufbau]]
Der Heiztaster wird mit 5 Volt versorgt und wird mit dem Ausgang an den analogen Pin 3 des Master-Arduinos angeschlossen. Die Leuchtdiode des Tasters wird an Masse und Pin 9 des Master-Arduinos angeschlossen.<br>
Der Lin-Transceiver wird wie in Abb. 7, allerdings ohne den optionalen Aufbau,versorgt. Der Wake-Pin der Lin-Transceiver wird anders als im oben angegebenen Schaltplan mit 5 Volt versorgt, damit dieser dauerhaft aktiv ist, sofern der entsprechende Arduino versorgt ist.<br> Auf die Verbindung mit dem FAULT-Pin sowie die Verbindung zwischen Vren und Vdd und der Anschluss an die 12 Volt Versorgung und der Masse wird verzichtet. Die Versorungsverbindung wird wie zuvor beschrieben durch eine Verbindung mit den Arduinos gelöst, weshalb keine Schaltung gegen Masse von Nöten ist. Der Aufbau am Übertragungspin des Tranceivers wurde übernommen, wobei auf die Zener-Dioden verzichtet wurde, da diese lediglich als ESD-Schutz dienen.<br>
Bei der Verbindung des Slaves zum Transceiver, wird auf die Verbindung zum Pin Rx verzichtet, da in unserer Programmierung auf das Senden von Informationen durch den Slave-Arduino verzichtet wird. ein digitaler Output des Slaves wird direkt mit dem SignalPin des Relais verbunden. zwischen den beiden anderen Pins des Relais wird ein Kreislauf zwischen Masse und 5 Volt-Versorgung und 20kOhm Widerstand hergestellt. der Widerstand verhindert einen Kurzschluss des Systems. <br>
An den Schaltenden Anschlüssen des Relais wird die Versorgung eingespeist. Am anderen Anschluss wird die Versorgungsleitung des Spiegels angeschlossen. Die Masseleitung des Heizspiegels wird mit der generellen Masse verbunden. Der gesamte Aufbau ist in Abb. 10 zu sehen.<br> <br>
<br> <br>
''' Aufbau Demonstrator'''<br>
Die Schaltung wird auf einer 15mm dicken Grobspanplatte mittels doppelseitigem Klebestreifen fixiert und in mit einem entsprechenden Gehäuse aus Dachlatten und Hartfaserplatte versehen, in welchen der Heiztaster zur Benutzung eingelassen wird. Ein Kantholz wird auf durch Holzbohrschrauben auf der Grobspanplatte befestigt, an welchem anschließend mittels Außensechskantschrauben und Gewindemuttern der Spiegel in angemessener Höhe positioniert wird. Die Versorgungsleitung des Außenspiegels wird mittels eines angebrachten Kabelkanals über das Kantholz in das Gehäuseinnere geführt, um dort zur Ansteuerung genutzt zu werden. Abschließend werden alle sichtbaren hölzernen Oberflächen in der Farbe des Außenspiegels überlackiert. Der LIN-Demonstrator ist vollständig gefertigt, wie in Abb. 11 zu sehen.<br>
[[file:LIN_Demonstrator.png|600px|Abb.11: Aufbau LIN Demonstrator]]<br>
Abb.11: Aufbau mit Gehäuse<br>
<br>
'''Programmierung'''<br>
''Programmablaufdiagramme''<br>
Die folgenden Diagramme beschreiben den grundlegenden Ablauf der Programme, welche für den Master und den Slave programmiert wurden.  <br>
<gallery class="center" widths="600" heights="500">
File:Ablaufplan_Master_Projekt_76b.JPG|Abb.12: Programmablaufplan Master
File:Ablaufplan_Slave_Projekt_76b.JPG|Abb.13: Programmablaufplan Slave
</gallery>
<br>
<br>
''Programmierung Master''<br>
Zu Beginn des Programms werden die analogen Pins des Master-Arduinos ausgelesen. Anschließend wird zuerst das Signal des Heiztasters ausgewertet. Hierzu wird der Wert mit vordefinierten Werten verglichen und ein Zustandsautomat mit vier Zuständen durchlaufen. Diese Zustände beschreiben die folgenden Situation:<br>
*Heizung aus,Taster nicht gedrückt
*Heizung an, Taster gedrückt
*Heizung an, Taster nicht gedrückt
*Heizung aus, Taster gedrückt <br>
Die Zustände können nur der Reihe nach durchlaufen werden und sorgen dafür, dass das Signal des Tasters korrekt gespeichert wird und jede Betätigung lediglich den Sprung um 1 Zustand ermöglicht. Um ein Prellen des Tasters zu verhindern, wird bei den Sprüngen in Zuständen mit nicht gedrückten Taster eine Variable hochgezählt, in der kein neues Schaltsignal des Tasters auftreten darf. Sollte ein Schaltsignal auftreten, resettet die Variable und sie muss erneut zum gewählten Wert hochzählen muss.
Neben dem Zustandsautomaten wird der Steuerschalter durch einen analogen Eingang ausgelesen und das Signal verarbeitet. Hierzu wird der Analogwert mit Referenzwerten verglichen, um die am Schalter eingestellte Richtung zu ermitteln.
Anschließend wird ein Datenpaket erstellt, welches die Signale des Heiztasters und des Steuerschalters beinhaltet.
Dieses Datenpaket wird an den Lin-Transceiver gesendet, sodass dieses an den Slave-Arduino weitergeleitet wird.
<br>
<br>
''Programmierung Slave'' <br/>
Der Arduino prüft das Eingangssignal des Lin-Transceivers. Sofern die Länge des Eingangs korrekt ist, wird das Signal ausgelesen. Anschließend wird die Checksumme errechnet und mit der gegebenen Checksumme verglichen. Entsprechen die Checksummen einander, so werden die weiterführenden Schritte ausgführt, andernfalls wird auf das nächste Datenpaket gewartet. Die korrekten Daten werden verarbeitet und die entsprechenden Ausgänge angesteuert, um die Heizung bzw. den Motor des Spiegels zu steuern.


== Ergebnis ==
== Ergebnis ==
Durch das Projekt wurde der LIN-Bus Aufbau demonstriert und  einKfz-Aktuator angeschlossen. Des Weiteren wurden reale Peripheriegeräte eines Linienbusses verwendet, um dem realen Einsatz dieser Technologie möglichst zu entsprechen. Da die Datenübertragung zwischen Master-Arduino und Slave-Arduino nicht erfolgreich umgesetzt werden konnte, wurde auch der Kfz-Aktuator nicht über den LIN-Bus angesteuert werden.<br> Eine Fehlerdetektion ergab, das die Ausgabe der Datenpakete über den Master-Arduino erfolgte, jedoch keine Daten den Slave-Arduino erreichten. Daraus kann gefolgert werden, dass einzelne Bauteile oder Teile der Schaltung zwischen den LIN-Transceivern nicht korrekt sind. Diese sollten bei Fortführung des Projektes näher betrachtet werden und mit dem Einsatz eines Oszilloskopen überprüft werden.


== Zusammenfassung ==
== Zusammenfassung ==
=== Lessons Learned ===
=== Lessons Learned ===
Durch das Projekt konnten wir unser Verständnis im Bereich der Bussysteme, der Programmierung und dem Aufbau von elektrischen Schaltkreisen erweitern. Insbesondere das Programmieren der Schnittstelle zwischen den Arduinos war eine besondere Herausforderung.
Durch das Projekt konnten wir unser Verständnis im Bereich der Bussysteme und der Programmierung erweitern. Insbesondere das Programmieren der Schnittstelle zwischen den Arduinos war eine besondere Herausforderung, da dieses Themenfeld uns gänzlich unbekannt war.<br/>
Darüber hinaus lernten wir, auf unvorhergesehene Probleme entsprechend zu reagieren. Eine neue Herausforderung war außerdem die Aquirierung gesponsorter Bauteile. Auch das Verständnis von Schaltplänen und deren Adaption für die gegebenen Anforderungen wurde durch das Projekt verbessert.
Darüber hinaus lernten wir, auf unvorhergesehene Probleme entsprechend zu reagieren. Eine neue Herausforderung war außerdem die Aquirierung gesponsorter Bauteile. Dies lief im Projekt nicht einwandfrei und sorgte so für große Zeitprobleme. <br/>
Auch das Verständnis von Schaltplänen und deren Adaption für die gegebenen Anforderungen wurde durch das Projekt verbessert. Hierzu wurde ebenfalls das Vertiefen des Verständnisses von Schaltplänen erforderlich.
Als besondere Herausforderung stellte sich die Beschaffung von Schaltplänen für die bereitgestellten Schalter heraus, da diese online nicht frei zugänglich sind.<br/>
Da durch fehlerhafte Zeiteinteilung das Projekt letztendlich nicht zum Erfolg gebracht werden konnte, wird auch dieses Thema in Zukunft besser von uns behandelt. Darüber hinaus war der Schwierigkeitsgrad des Projektes für uns zu hoch.
 
=== Ausblick ===
Um den Fehler in der Übertragung der Datenpakete zu finden, können die Signale per Oszilloskop betrachtet werden und so der Fehlerursprung ermittelt werden. Da die Software beider Arduinos bereits für die Inbetriebnahme ausgelegt ist, kann nach Behebung des Übertragungsproblems diese Funktion zusätzlich hinzugefügt werden, wofür lediglich weitere Relais und Widerstände benötigt werden. Da die Heizung nicht im Dauerbetrieb genutzt werden sollte, kann ein Timer zur automatischen Abschaltung in die Software des Master Arduinos eingefügt werden. Hinzukommend kann der im Video zu sehende Präsentationsaufbau verbessert werden, um eine Knickung von Leitungen zu vermeiden und so mögliche Fehlerquellen auszuschließen.


== Projektunterlagen ==
== Projektunterlagen ==
sämtliche Projektunterlagen sind in SVN hinterlegt und können über den folgenden Link abgerufen werden.
https://svn.hshl.de/svn/Elektrotechnik_Fachpraktikum/trunk/Projekte/76b_LIN_Demonstrator


== YouTube Video ==
== YouTube Video ==
Hier gehts zum Präsentationsvideo: [https://www.youtube.com/watch?v=IG0Nf8MkF7A YouTube: Präsentation eines LIN-Demonstators]


== Weblinks ==
== Weblinks ==
[[http://ww1.microchip.com/downloads/en/DeviceDoc/20002230G.pdf| Lin Transceiver]]<br/>
[[https://ess.cs.tu-dortmund.de/Teaching/PGs/autolab/seminarfolien/Meier-LIN.pdf| PowerPoint TU-Dortmund über Lin-Bus]]<br/>
[[https://www.cs-group.de/wp-content/uploads/2016/11/LIN_Specification_Package_2.2A.pdf| LIN Protokoll]]


== Literatur ==
== Literatur ==
Zeile 92: Zeile 213:


<!-- Fügen Sie diesen Footer hinzu.  -->
<!-- Fügen Sie diesen Footer hinzu.  -->
---
----
→ zurück zur Übersicht: [[:Kategorie:ProjekteET_MTR_BSE_WS2018|WS 18/19: Fachpraktikum Elektrotechnik (MTR)]]
→ zurück zur Übersicht: [[:Kategorie:ProjekteET_MTR_BSE_WS2018|WS 18/19: Fachpraktikum Elektrotechnik (MTR)]]

Aktuelle Version vom 21. Februar 2019, 22:00 Uhr

Autoren: Nadine Schwenke und Marcel Bröckelmann
Betreuer: Prof. Schneider

Abb.1: LIN BUS



→ zurück zur Übersicht: WS 18/19: Fachpraktikum Elektrotechnik (MTR)

Aufgabe

Sensoren und Aktoren eines Kfz sollen über einen LIN BUS angesteuert werden. Visualisieren Sie die Daten mit CANoe.


Erwartungen an die Projektlösung

  • Recherche zum LIN BUS
  • Beschaffen Sie kostenlos LIN fähige Sensoren und Aktoren aus dem Kraftfahrzeug (Sponsoring, Schrottplatz)
  • Ein Arduino mit LIN Shield soll einen Sensor auslesen und einen Aktor ansteuern.
  • Überwachen Sie den Datenverkehr mit CANoe.
  • Test und wiss. Dokumentation
  • Live Vorführung der Kommunikation

Hinweise:

  • Dieses Projekt ist nur mit viel Kreativität und Eigeninitiative zu lösen. Sie sollten Spaß an Bussystemen im Kraftfahrzeug haben.
  • Dieses Projekt wurde zweifach vergeben. Stimmen Sie sich mit dem anderen Team ab, damit zwei unterschiedliche Demonstratoren entstehen.

Einleitung

Im Rahmen des Elektronik-Fachpraktikum im 5.Semester, im Bereich Mechatronik wurde uns die Aufgabe gestellt, ein Projekt mit einem Arduino Uno zu gestalten.
Das Projekt 76b soll eine LIN-Bus Verbindung demonstrieren. Hierzu sollen Fahrzeugsensoren und Aktoren über einen Arduino miteinander gekoppelt werden, sodass diese gesteuert werden können. Dies wird hier durch die Inbetriebnahme der Heizung eines Wohnmobilseitenspiegels demonstriert, welcher über einen Taster angesteuert wird.

LIN-Bus

Der Lin Bus (Lokal Interconnect Network) ist ein einfaches und kostengünstiges Bussystem, dass in den 90er Jahren entwickelt wurde. Über dem Systembus werden einfache Sensoren und Aktoren angesteuert, die eine relativ geringe Echtzeitanforderung haben. Ein paar Anwendungsbeispiele hierfür sind im Automobilbereich der Regensensor, Lichtsysteme, Spiegelverstellung, Fensterheber, Klimaanlage sowie die Sitzverstellung. In den Bereichen wo der CAN-Bus nicht benötigt wird findet die Kostengünstige „Ein-Draht-Leitung“ immer mehr Anwendungsgebiete.
An einem LIN-Bus können bis 16 Teilnehmer angeschlossen sein, dieses besteht aus einem Master-Knoten, der gleichzeitig das Gatway zu einem übergeordneten Netzwerk (z.B. CAN) ist. Die restlichen Teilnehmer sind Slave-Knoten, die ihr Datenpacket nach Anforderung vom Master über die Busleitung senden. Dabei darf die maximale Leiterlänge von 40m nicht überschritten werden. Bei der Kommunikation zwischen den Teilnehmern kommt eine UART-Übertragung (8 Datenbit, 1Startbit, 1Stopbit) zum Einsatz, die mögliche Bitrate beträgt 20 kbit/s.

Header-Massage

Die Header-Massage besteht aus den Kommunikationsteilen die als „synchbreak“, „synchfield“ und „identifier“ bezeichnet werden. Die Übertragung des Nachricht beginnt mit dem Synchronisation-Break (synchbreak), ein Masse dominierende Pegel von 13 Bitzeiten, sowie einen rezessiven Pegel von bis zu 4 Bitzeiten. Das darauf folgende Synchronisationsfeld (synchfield) wird mit einem Startbit (Wert 0x55) sowie einen Stoppbit eingeleitet, damit wird dem Slave ermöglicht, die Übertragungsrate des Masters zu ermittelt. Die Header-Massage wird mit dem Identifizierfeld (identifier) beendet. Dieser Teil bestimmt den weiteren Ablauf der Nachricht, der mit Datenbytes und zwei Paritätsbits gefüllt ist.

Response-Feld

Das Response-Feld wird generell als Antwort bezeichnet, hierbei werden zwei, vier oder acht Datenbytes versendet. Die Anzahl der Datenbytes ermittelt der empfangene Slave Knoten aus zwei Bytes vom Identifiers vom der Master Botschaft. Als letzen Byte der Antwort wird ein "Checkbyte" versendet.

Abb.2: Lin Frame
Abb.2: Lin Frame

LIN-Transceiver

Funktion Pin
Datenempfang (OUTPUT) 1
Chip auswählen 2
Fehler- Berichterstattung 3
Dateneingabe überragen 4
Masse 5
LIN BUS 6
Batterie Plus 7
Spannungsregler Ausgabe 8


Projekt

Projektplan

Morphologischer Kasten

Abb.3: Morpohologischer Kasten


Abb.3: Morphologischer Kasten
Mit Hilfe des Morphologischen Kasten (Abb.3) haben wir die Möglichkeiten aufgeschrieben die uns eingefallen sind um einen LIN Bus zu Demonstrieren. Die Felder die grün hinterlegt sind, zeigen unsere Entscheidung. Zum einen haben wir recherchiert welche Bauteile in einem Kraftfahrzeug überhaupt LIN Bus fähig sind und haben einige davon aufgezählt sowie überlegt wo wir diese von einem Sponsor erwerben können. Als nächsten Schritt musste überlegt werden wie die Bauteile mit 12 Volt versorgt werden können. Dort haben wir uns für ein 12 Volt Netzteil einscheiden. Ebenfalls haben wir überlegt mit welcher Steuerung wir arbeiten und wie mit Hilfe dieser der Lin Bus ermöglicht werden kann. Da der Arduino sich schon um Besitzt befand haben wir angefangen und darüber zu Informieren wie sich der Lin Bus umsetzten lässt. Hierbei haben wir den LIN Transceiver MCP2004 endeckt und haben uns für diese Methode entschieden. Da der Arduino sein Signal mit 5 Volt arbeitet muss das Signal noch auf 12 Volt erhöht werden. Dafür haben wir es mit einem MOSFET und einem 5Volt Relais ermöglicht. Das Porblem bei dem MOSFET war das dieser sich sehr schnell ermöglicht.

Projektplanung mit Kanban
Die Projektplanung wurde über die Website "Trello" im Stil eines Kanban angefertigt und war wie in Abb.4 aufgebaut.Die farbigen Markierungen dienten zur Aufgabenzuweisung. Rot markierte Aufgaben wurden durch Frau Schwenke bearbeitet, blau markierte durch Herrn Bröckelmann. Aufgaben, die keine oder beide farbigen Markierungen besaßen, wurden gemeinsam bearbeitet.
Abb.4: Kanban_Plan
Abb.4:Kanban_Plan


Benötigte Bauteile

Bauteile Bezeichnung / Informationen Anzahl
12V DC Netzteil 1
Arduino Uno 2
LIN- Transceiver MCP 2004 2
Steckbrett 1
Wohnmobilspiegel Hersteller: Ficosa 1
Taster Heizung Produktnummer unbekannt 1
Schalter Spiegelmotor Produktnummer: 5010271228 1
1 kOhm Widerstand K-O RD14JN102T52 2
220 pF Kondensator C3X7R 220P 200 2
1 µF Kondensator T350 1,0U 35 2
Gleichrichterdiode 1N 4148 4
5 Volt Relais aus Arduino Starter-Kit 1


Schaltpläne

Abb.5: Schaltplan Heiztaster
Abb.5: Schaltplan Heiztaster
Dieser Schaltplan zeigt die Belegung des Heiztaster im Bezug zu den einzelnen Spiegel. Da wir in unserer Demonstration nur ein Spiegel ansteuern ist für uns auch nur ein Schaltkreis relevant. Wenn wir uns an die Spiegelheizung mit der Bezeichnung 32R01, muss dieser an einem der Ausgänge mit der Masse verbunden werden. Dafür steht die Bezeichnung W0901. Des weitern muss eine Verbindung zum Slave Steuergerät hergestellt werden, dieses hat auf dem Schaltplan die Bezeichnung 04A02. In unserm Fall wird an diesem Ausgang der Arduino angeschlossen. Der Taster 32S01 ist am Pin 7 mit den 5 Volt vom Arduino verbunden und stellt bei geschlossener Schalterstellung ein Schaltkreis über den Pin 3 zum Steuergerät 04A01 her.

Abb.6: Schaltplan Steuerschalter
Abb.6: Schaltplan Steuerschalter
Der Schaltplan zeigt, dass die Masse und Versorgung der Motoren des Spiegels durch den Aufbau des Steuerschalters eingestellt werden. Es ist zu beachten, dass durch eine Umpolung von Masse und Versorgung die Motoren in gegenteilige Richtung betrieben werden.

Abb.7: LIN-Transceiver Schaltplan
Abb.7: LIN-Transceiver Schaltplan
Der Schaltplan zeigt den standartisierten Schaltungsaufbau einer LIN-Bus-Verbindung mittels des verwendeten LIN-Transceivers.

Steuerstrecken

Abb.8: Steuerstrecke Spiegelheizung
Abb.8: Steuerstrecke Spiegelheizung
Zu Beginn der Steuerstrecke wird der Heiztaster gedrückt. Dieser sendet ein 5V Signal an den Arduino, welcher daraus ein Datenpaket erstellt und über den LIN-Bus an den Slave versendet. Der Slave-Arduino wertet das Datenpaket aus uns schaltet durch ein 5V Signal ein Relais/MOSFET. Durch das Durchschalten des Relais' wird die Heizung des aktiviert.

Abb.9: Steuerstrecke Spiegelverstellung
Abb.9: Steuerstrecke Spiegelverstellung
Zu Beginn der Steuerstrecke wird der Steuerschalter in eine Richtung gedrückt. Dieser sendet ein entsprechendes 5V Signal über den korrekten Pin an den Arduino, welcher daraus ein Datenpaket erstellt und über den LIN-Bus an den Slave versendet. Der Slave-Arduino wertet das Datenpaket aus uns schaltet durch ein 5V Signal ein die entsprechenden Relais. Durch das Durchschalten der Relais steuert der Motor in die entsprechende Richtung.

Projektdurchführung

Schaltungsaufbau

Abb.10: Gesamter Aufbau

Der Heiztaster wird mit 5 Volt versorgt und wird mit dem Ausgang an den analogen Pin 3 des Master-Arduinos angeschlossen. Die Leuchtdiode des Tasters wird an Masse und Pin 9 des Master-Arduinos angeschlossen.
Der Lin-Transceiver wird wie in Abb. 7, allerdings ohne den optionalen Aufbau,versorgt. Der Wake-Pin der Lin-Transceiver wird anders als im oben angegebenen Schaltplan mit 5 Volt versorgt, damit dieser dauerhaft aktiv ist, sofern der entsprechende Arduino versorgt ist.
Auf die Verbindung mit dem FAULT-Pin sowie die Verbindung zwischen Vren und Vdd und der Anschluss an die 12 Volt Versorgung und der Masse wird verzichtet. Die Versorungsverbindung wird wie zuvor beschrieben durch eine Verbindung mit den Arduinos gelöst, weshalb keine Schaltung gegen Masse von Nöten ist. Der Aufbau am Übertragungspin des Tranceivers wurde übernommen, wobei auf die Zener-Dioden verzichtet wurde, da diese lediglich als ESD-Schutz dienen.
Bei der Verbindung des Slaves zum Transceiver, wird auf die Verbindung zum Pin Rx verzichtet, da in unserer Programmierung auf das Senden von Informationen durch den Slave-Arduino verzichtet wird. ein digitaler Output des Slaves wird direkt mit dem SignalPin des Relais verbunden. zwischen den beiden anderen Pins des Relais wird ein Kreislauf zwischen Masse und 5 Volt-Versorgung und 20kOhm Widerstand hergestellt. der Widerstand verhindert einen Kurzschluss des Systems.
An den Schaltenden Anschlüssen des Relais wird die Versorgung eingespeist. Am anderen Anschluss wird die Versorgungsleitung des Spiegels angeschlossen. Die Masseleitung des Heizspiegels wird mit der generellen Masse verbunden. Der gesamte Aufbau ist in Abb. 10 zu sehen.



Aufbau Demonstrator
Die Schaltung wird auf einer 15mm dicken Grobspanplatte mittels doppelseitigem Klebestreifen fixiert und in mit einem entsprechenden Gehäuse aus Dachlatten und Hartfaserplatte versehen, in welchen der Heiztaster zur Benutzung eingelassen wird. Ein Kantholz wird auf durch Holzbohrschrauben auf der Grobspanplatte befestigt, an welchem anschließend mittels Außensechskantschrauben und Gewindemuttern der Spiegel in angemessener Höhe positioniert wird. Die Versorgungsleitung des Außenspiegels wird mittels eines angebrachten Kabelkanals über das Kantholz in das Gehäuseinnere geführt, um dort zur Ansteuerung genutzt zu werden. Abschließend werden alle sichtbaren hölzernen Oberflächen in der Farbe des Außenspiegels überlackiert. Der LIN-Demonstrator ist vollständig gefertigt, wie in Abb. 11 zu sehen.
Abb.11: Aufbau LIN Demonstrator
Abb.11: Aufbau mit Gehäuse

Programmierung
Programmablaufdiagramme
Die folgenden Diagramme beschreiben den grundlegenden Ablauf der Programme, welche für den Master und den Slave programmiert wurden.



Programmierung Master
Zu Beginn des Programms werden die analogen Pins des Master-Arduinos ausgelesen. Anschließend wird zuerst das Signal des Heiztasters ausgewertet. Hierzu wird der Wert mit vordefinierten Werten verglichen und ein Zustandsautomat mit vier Zuständen durchlaufen. Diese Zustände beschreiben die folgenden Situation:

  • Heizung aus,Taster nicht gedrückt
  • Heizung an, Taster gedrückt
  • Heizung an, Taster nicht gedrückt
  • Heizung aus, Taster gedrückt

Die Zustände können nur der Reihe nach durchlaufen werden und sorgen dafür, dass das Signal des Tasters korrekt gespeichert wird und jede Betätigung lediglich den Sprung um 1 Zustand ermöglicht. Um ein Prellen des Tasters zu verhindern, wird bei den Sprüngen in Zuständen mit nicht gedrückten Taster eine Variable hochgezählt, in der kein neues Schaltsignal des Tasters auftreten darf. Sollte ein Schaltsignal auftreten, resettet die Variable und sie muss erneut zum gewählten Wert hochzählen muss. Neben dem Zustandsautomaten wird der Steuerschalter durch einen analogen Eingang ausgelesen und das Signal verarbeitet. Hierzu wird der Analogwert mit Referenzwerten verglichen, um die am Schalter eingestellte Richtung zu ermitteln. Anschließend wird ein Datenpaket erstellt, welches die Signale des Heiztasters und des Steuerschalters beinhaltet. Dieses Datenpaket wird an den Lin-Transceiver gesendet, sodass dieses an den Slave-Arduino weitergeleitet wird.

Programmierung Slave
Der Arduino prüft das Eingangssignal des Lin-Transceivers. Sofern die Länge des Eingangs korrekt ist, wird das Signal ausgelesen. Anschließend wird die Checksumme errechnet und mit der gegebenen Checksumme verglichen. Entsprechen die Checksummen einander, so werden die weiterführenden Schritte ausgführt, andernfalls wird auf das nächste Datenpaket gewartet. Die korrekten Daten werden verarbeitet und die entsprechenden Ausgänge angesteuert, um die Heizung bzw. den Motor des Spiegels zu steuern.

Ergebnis

Durch das Projekt wurde der LIN-Bus Aufbau demonstriert und einKfz-Aktuator angeschlossen. Des Weiteren wurden reale Peripheriegeräte eines Linienbusses verwendet, um dem realen Einsatz dieser Technologie möglichst zu entsprechen. Da die Datenübertragung zwischen Master-Arduino und Slave-Arduino nicht erfolgreich umgesetzt werden konnte, wurde auch der Kfz-Aktuator nicht über den LIN-Bus angesteuert werden.
Eine Fehlerdetektion ergab, das die Ausgabe der Datenpakete über den Master-Arduino erfolgte, jedoch keine Daten den Slave-Arduino erreichten. Daraus kann gefolgert werden, dass einzelne Bauteile oder Teile der Schaltung zwischen den LIN-Transceivern nicht korrekt sind. Diese sollten bei Fortführung des Projektes näher betrachtet werden und mit dem Einsatz eines Oszilloskopen überprüft werden.

Zusammenfassung

Lessons Learned

Durch das Projekt konnten wir unser Verständnis im Bereich der Bussysteme und der Programmierung erweitern. Insbesondere das Programmieren der Schnittstelle zwischen den Arduinos war eine besondere Herausforderung, da dieses Themenfeld uns gänzlich unbekannt war.
Darüber hinaus lernten wir, auf unvorhergesehene Probleme entsprechend zu reagieren. Eine neue Herausforderung war außerdem die Aquirierung gesponsorter Bauteile. Dies lief im Projekt nicht einwandfrei und sorgte so für große Zeitprobleme.
Auch das Verständnis von Schaltplänen und deren Adaption für die gegebenen Anforderungen wurde durch das Projekt verbessert. Hierzu wurde ebenfalls das Vertiefen des Verständnisses von Schaltplänen erforderlich. Als besondere Herausforderung stellte sich die Beschaffung von Schaltplänen für die bereitgestellten Schalter heraus, da diese online nicht frei zugänglich sind.
Da durch fehlerhafte Zeiteinteilung das Projekt letztendlich nicht zum Erfolg gebracht werden konnte, wird auch dieses Thema in Zukunft besser von uns behandelt. Darüber hinaus war der Schwierigkeitsgrad des Projektes für uns zu hoch.

Ausblick

Um den Fehler in der Übertragung der Datenpakete zu finden, können die Signale per Oszilloskop betrachtet werden und so der Fehlerursprung ermittelt werden. Da die Software beider Arduinos bereits für die Inbetriebnahme ausgelegt ist, kann nach Behebung des Übertragungsproblems diese Funktion zusätzlich hinzugefügt werden, wofür lediglich weitere Relais und Widerstände benötigt werden. Da die Heizung nicht im Dauerbetrieb genutzt werden sollte, kann ein Timer zur automatischen Abschaltung in die Software des Master Arduinos eingefügt werden. Hinzukommend kann der im Video zu sehende Präsentationsaufbau verbessert werden, um eine Knickung von Leitungen zu vermeiden und so mögliche Fehlerquellen auszuschließen.

Projektunterlagen

sämtliche Projektunterlagen sind in SVN hinterlegt und können über den folgenden Link abgerufen werden. https://svn.hshl.de/svn/Elektrotechnik_Fachpraktikum/trunk/Projekte/76b_LIN_Demonstrator

YouTube Video

Hier gehts zum Präsentationsvideo: YouTube: Präsentation eines LIN-Demonstators

Weblinks

[Lin Transceiver]
[PowerPoint TU-Dortmund über Lin-Bus]
[LIN Protokoll]

Literatur


→ zurück zur Übersicht: WS 18/19: Fachpraktikum Elektrotechnik (MTR)