Diplomarbeit im Sommersemester 2003 - oth

Werbung
Diplomarbeit an der Fachhochschule Regensburg Fachbereich Informatik
Thema: Aufbau einer Rennstrecke zur Kontrolle eines Carrea Rennbahnfahrzeugs mit
Programmen der künstlichen Intelligenz
und Steuerlektronik zur Simulation eines
Mensch-Maschine Systems
Diplomandenbetreuer: Herr Professor Jürgen S A U E R
Diplomanden:
Dinauer Siegfried und Christian
1 Vorwort
Ausgangspunkt zu dieser Diplomarbeit war ein einfaches Simulationsprogramm 1 , das die
Bewegung eines schnellen Fahrzeuges auf einer Landstraße zeigt.
Gesteuert wurdes dieses Fahrzeug mit Hilfe von Fuzzy Logik. Es lag nahe das Simulationsprogramm in Hardware“ umzusetzen. In einem ersten Experiment wurde dies
”
im Heinz Nixdorf Museumsforum ausgeführt. Im Exponateverzeichnis des Museums ist
unter Werkzeuge der Intelligenz eine Autorennbahn mit Fuzzy Steuerung angegeben.
Dort wird ein Fahrzeug auf einer Carrera-Rennbahn nahezu optimal über die Piste 2
geführt. Unabhängig davon wurde in einer zweiten an der Fachhochschule Regensburg,
eine Carrera Rennbahn einschließlich Steuerelektronik für die Kontrolle eines Fahrzeugs
mit neuronalem Netz entworfen, programmiert, montiert und implementiert.
Realisiert wurde das Experiment im Rahmen einer Diplomarbeit.
Die Textstrecke mit der Carrera Rennbahn steht seit dem 1.September 2003 im Labor
für künstliche Intelligenz an der FH Regensburg bereit. Alle, die ein Mensch-MaschineSystem praktisch erleben möchten, sind zu einem Besuch mit praktischer Erprobung in
Regensburg eingeladen.
1
2
vgl. http://rfhs8012.fh-regensburg.de/ saj39122/NN/index.html
vgl. Begleitpublikation zur Sonderausstellung im Heinz Nixdorf Museumsforum, S.229
Inhalt
1 Vorwort
2
2 Einleitung
2.1 Problemstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Ziel der Diplomarbeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
7
8
3 XMOD Modul MCB-537
3.1 Beschreibung XMOD-Modul MCB-537 . . . . . . . . . .
3.1.1 Allgemeiner Aufbau . . . . . . . . . . . . . . . . .
3.1.2 Eingangsports . . . . . . . . . . . . . . . . . . . .
3.1.3 AD-Wandler . . . . . . . . . . . . . . . . . . . . .
3.1.4 Ausgangsports . . . . . . . . . . . . . . . . . . .
3.1.5 RS232-Schnittstelle . . . . . . . . . . . . . . . . .
3.1.6 Kommunikaton mit dem XMOD-Modul MCB-537
3.1.7 Grundsätzliche Festlegungen . . . . . . . . . . . .
3.1.8 Befehl für die digitalen Ausgabeports . . . . . . .
3.1.9 Lesen der digitalen Eingangsports . . . . . . . .
3.1.10 Lesen des analogen Eingangsports . . . . . . . . .
3.1.11 Fehlermeldungen . . . . . . . . . . . . . . . . . .
3.2 Fehlerbehebung . . . . . . . . . . . . . . . . . . . . . . .
3.2.1 Fehlermeldung *2222$ . . . . . . . . . . . . . . .
3.2.2 Fehlermeldung *3333$ . . . . . . . . . . . . . . .
3.2.3 Keine Antwort des MCB . . . . . . . . . . . . . .
3.3 Technische Daten MCB-537 . . . . . . . . . . . . . . . .
4 Elektronik
4.1 Spannungsversorgung . . . . . . . . . . . . . .
4.2 Steuerungsplatine . . . . . . . . . . . . . . . .
4.2.1 Aufbau Steuerungsplatine . . . . . . .
4.2.2 Beschreibung für die Steuerungsplatine
4.2.3 Pulsweitenmodulation PWM . . . . . .
4.2.4 Programmiertool AVRStudio 3.56 . . .
4.2.5 Aufbau Mikrocontroller AT90S1200 . .
4.2.6 Programmierung des Mikrocontrollers .
4.2.7 Aufbau Atmel-Programmer . . . . . .
4.2.8 Testprogramm für Atmelprogrammer .
4.3 Platine für die Eingangssignalerfassung . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11
11
11
15
15
15
16
16
17
17
18
18
19
21
21
21
21
22
.
.
.
.
.
.
.
.
.
.
.
23
23
27
27
32
35
38
39
41
45
47
50
4.4
4.3.1
Verwendete Sensoren . . . . . . . . . . . . . . . . . . . . . . . . .
50
4.3.2
Spannungsanpassung der vom Lichttaster gelieferten Spannung . .
50
4.3.3
Impulserfassung und Impulsverlängerung . . . . . . . . . . . . . .
50
4.3.4
Schaltung für die Impulserfassung und Impulsverlängerung . . . .
51
4.3.5
Verdrahtungsplan und IC 74LS221 . . . . . . . . . . . . . . . . .
52
Montage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
4.4.1
Befestigung der Platinen . . . . . . . . . . . . . . . . . . . . . . .
57
4.4.2
Befestigung der Lichtschranken . . . . . . . . . . . . . . . . . . .
57
4.4.3
Verdrahtung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
57
5 Programmierung
59
5.1
Übersicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
5.2
Klasse ABFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
5.3
Klasse AutoBahn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
5.4
Klasse Auto . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
62
5.5
Klasse Kommunikation . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
5.6
Klasse Lichtschranke . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
66
5.7
Klasse NeuronalesNetz . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
5.8
Klasse Netz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
67
5.9
Klasse NetzSchicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
5.10 Klasse Neuron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
69
6 Neuronales Netz
71
6.1
Allgemeine Beschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
6.2
Fehlerbestimmung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
75
6.3
Lernregel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
76
6.4
Trainingsalgorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
6.5
Auswahl Anzahl innerer Schichten . . . . . . . . . . . . . . . . . . . . . .
80
6.6
Probleme beim Backporpagation Netz . . . . . . . . . . . . . . . . . . . .
81
6.6.1
Minimum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
6.6.2
Plateau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
6.6.3
Schluchten und Oszillationen . . . . . . . . . . . . . . . . . . . . .
82
6.7
Wahl der Lernrate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
6.8
Momentum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
83
6.9
Bestimmung der Zieltabelle . . . . . . . . . . . . . . . . . . . . . . . . .
84
6.10 Auswahl Eingangsneuronen . . . . . . . . . . . . . . . . . . . . . . . . .
88
6.11 Das ausgewählte Backpropagation Netz . . . . . . . . . . . . . . . . . . .
94
7 Auftretende Probleme
7.1 Spannungsversorgung . . . . . . . . . .
7.2 Problem der Signalerfassung . . . . . .
7.3 Ansteuerung des Rennautos mittels PC
7.4 Signalerfassung mittels Lichttaster . . .
7.5 Schaltzeit der Lichttaster . . . . . . . .
7.6 Doublebuffering . . . . . . . . . . . . .
7.7 Zeichnen des Rennautos . . . . . . . .
7.8 Abfrage und Senden von Befehlen . . .
7.9 Stehenbleiben des Rennautos . . . . . .
7.10 Verlust gesendeter Zykluswerte . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
95
95
96
97
98
98
99
100
100
101
102
8 Bedienung
105
8.1 Bedienung der Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . 105
8.2 Test der Simulation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
9 Installation und Ausführung
111
9.1 Beschreibung der Installation . . . . . . . . . . . . . . . . . . . . . . . . 111
9.2 Systemanforderung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
10 Danksagung
113
Abbildungen
115
Tabellen
117
Literatur
119
Erklärung
121
2 Einleitung
2.1 Problemstellung
Jeder weiß, was eine Carrera Rennbahn darstellt, viele haben damit gespielt. Das Problem dabei ist, ein Rennfahrzeug in der Schiene der Rennbahn zu halten und mit
möglichst hoher Geschwindigkeit die Runden der Bahn zu durchlaufen. Besonders reizvoll ist es, wenn zwei Spielpartner die Fahrzeuge gegeneinander laufen lassen. Die Bahn
hat dafür zwei Spuren, auf denen sich die Fahrzeuge bewegen können.
Der Spielpartner, der die meisten Runden ohne Kollision und ohne aus der Bahn geschleudert zu werden, in einer vorgegebenen Zeit schafft, hat gewonnen. Der Reiz des
Spiels liegt natürlich darin, einen möglichst starken Spielpartner zu finden und zu besiegen. och reizvoller ist es, wenn der starke Spielpartner kein Mensch, sondern ein mit
künstlicher Itelligenz ausgestatteter C ist.
Künstliche Intelligenz“ bedeutet hier, der Rechner ist mit einem Programm ausgestat”
tet, das intelligentes menschliches Verhalten simulieren kann. Im vorliegenden Fall ist
das die Kontrolle über die Bewegung eines Rennautos auf den Spuren einer Carrera
Rennbahn.
Der ensch beobachtet bei dieser Steuerung die Bewegung des Fahrzeugs auf der Rennbahn, erfaßt die Position des Fahrzeugs (Gerade, Kurve), beschleunigt oder bremst das
Fahrzeug.
Auch das Rechnerprogramm müsse Postition und Geschwindigkeit des Fahrzeugs bekannt gemacht werden, und es muss daraus Schlußfolgerungen, wie Beschleunigen oder
Bremsen ziehen.
Dazu ist einerseits eine umfangreiche Elektronik auf der Rennstrecke nötig, auf der anderen Seite sind die darüber ermittelten Daten in einem Rechnerprogramm auszuwerten,
die Schlußfolgerungen (Resultate) daraus sind wiederum in Signalen an die Elektronik
zum Beschleunigen, Verzögern umzusetzen.
Hardware und Software müssen hier zusammenwirken.
Das ergibt nach der Realisierung folgende Teststrecke:
2 EINLEITUNG
2.2 Ziel der Diplomarbeit
Abbildung 1: Aufbau Carrera Rennbahn
Die Elektronik umfaßt nach der Realisierung:
• das XMOD-Modul MCB-537 für die Schnittstelle zwischen PC und die Steuerelektronik der Bahn.
• die Platine für die Spannungsversorgung
• die Platine für die Signalverfassung (also der Signale der Lichttaster)
• die Platine für die Steuerung des Rennautos
2.2 Ziel der Diplomarbeit
Ziel dieser Arbeit ist es, eines der beiden Fahrzeuge der Carrera Rennbahn mit Hilfe eines
neuronalen Netzes zu steuern. Das neuronale Netz soll dabei einen starken Spielpartner
8
2 EINLEITUNG
2.2 Ziel der Diplomarbeit
abgeben, den der Mensch mit Hilfe der manuellen Steuerung für das zweite Fahrzeug
auf der Rennbahn besiegen soll.
Inwieweit das gelingt, ist ein Maß für das im neuronalen Netz programmierte intelligente
menschliche Verhalten. Damit das Spiel Mensch gegen Rechner immer wiederholt werden
kann, wird im Labor der FH Regensburg für künstliche Intelligenz eine Versuchsstrecke
aufgebaut, in dem Hard- und Software komplett realisiert werden soll und ständig betriebsbereit für Experimente zur Verfügung steht. Abbildung 1 zeigt die Realisierung
der Teststrecke.
Das Ziel dieser Diplomarbeit ist somit:
Der Aufbau der Teststrecke, die Entwicklung und der Aufbau der Elektronikschaltungen,
Beschaffung der Elektronikbauteile, Entwicklung und Implementierung der Rechnerprogramme, die Planung und Organisation der Montage.
9
3 XMOD Modul MCB-537
subsectionEinsatz XMOD-Modul MCB-537 Das externe Erfassungsmodul XMOD MCB537 wurde von der Firma Messcomp GmbH aus Wasserburg zur Verfüng gestellt. Dieses
Modul ist die zentrale Kommunikationseinheit zwischen der Elektronik und der Software. Mit dem XMOD-Modul MCB-537 werden einerseits die benötigten Positionsrückmeldungen des Rennautos erfasst, andererseits das Ansteuersignal für das Rennauto von der
Software an die entsprechende Elektronik gesandt. Das XMOD-Modul MCB-537 wird
also über die serielle Schnittstelle des PC’s angesprochen und stellt die benötigten Einund Ausgabeeinheiten zur Verfügung.
3.1 Beschreibung XMOD-Modul MCB-537
3.1.1 Allgemeiner Aufbau
Das Herzstück des XMOD-Moduls MCB-537 ist ein Mikrocontroller vom Typ SAB80C537
mit dem XMOD-Betriebssystem BS537. Für das Zwischenspeichern von Meßwerten steht
dem Controller ein RAM mit 32K zur Verfügung. Die Hauptaufgaben des Mikrocontrollers des MCB-537 sind die Verwaltung der Zusatzmodule mit dem überwachenden Rechner. Der SAB80C537 nimmt die vom Rechner kommenden ASCII-Zeichenfolgen über die
RS232-Schnittstelle entgegen und überprüft, ob ein gültiger Befehlscode gesendet wurde.
Ist dies der Fall, so werden die Anweisungen ausgeführt und mit dem Rücksenden einer
Bestätigung quittiert. Dies wird softwaremässig überprüft und damit auf Korrektheit
geprüft.
Es stehen die Ports zur CN1 und CN3 zur Verfügung:
CN1:
3 XMOD MODUL MCB-537
3.1 Beschreibung XMOD-Modul MCB-537
Abbildung 2: Aufbau Wannenstecker CN1.
Der Port CN1 besteht aus den folgenden Ports:
Port A: wird als Eingangsport 3 verwendet
Port B: wird nicht verwendet
Port C: wird nicht verwendet
Port D: wird nicht benötigt, da aufgrund der später erwähnten PWM-Steuerung nur
mit digitalen Werten gearbeitet werden muss und somit keine analogen Werte benötigt
werden.
Da zur Codierung der Eingangsneuronen 8 Bits ausreichen, wird lediglich Port A als
Eingangsport benötigt. Bei einer höheren Anzahl an Eingangsneuronen müssten entsprechend der Anzahl zusätzlich die Ports B und wahlweise Port C verwendet werden.
CN2:
3
Siehe Abbildung 2
12
3 XMOD MODUL MCB-537
3.1 Beschreibung XMOD-Modul MCB-537
Abbildung 3: Aufbau Wannenstecker CN2.
Port E: wird als Ausgangsport 4 verwendet.
Port F: wird als Ausgangsport verwendet, wobei hier lediglich ein Pin benützt wird.
Die Ports G und H werden nicht verwendet. Diese könnten nur mit aufsteckbarem Zusatzmodul verwendet werden.
4
Siehe Abbildung 3
13
3 XMOD MODUL MCB-537
3.1 Beschreibung XMOD-Modul MCB-537
Abbildung 4: Aufbau des XMOD Moduls MCB-537.
An der Klemme KLP1 5 muss links die Spannung Vcc = +5V angeschlossen werden. An
der rechten Klemme von KLP1 wird die Masse angeschlossen.
Der auf der linken Seite liegende Port CN1 wird mittels eines Flachbandkabels mit dem
Wannenstecker der Steuerungsplatine verbunden.
Der auf der rechten Seit liegende Port CN2 wird ebenfalls mittels eines Flachbandkabels
mit dem Wannenstecker der Signalerfassungsplatine verbunden.
Bei F1 handelt es sich um eine Feinstsicherung, die das XMOD-Modul vor Überlastung
schützt.
5
Siehe Abbildung 4
14
3 XMOD MODUL MCB-537
3.1 Beschreibung XMOD-Modul MCB-537
3.1.2 Eingangsports
Die Ports A, B und C sind bidirektionale 8-Bit-Ports mit internen Pull-Up-Widerständen.
Ihre Ausgangspuffer können TTL-Lasten direkt betreiben. Um von einem der bidirketionalen Ports A, B oder C einlesen zu können, müssen deren Ausgangstreiber gesperrt
sein.
Dies wird durch das Setzen des betreffenden Ports auf High-Level erreicht. Die Portpins
liegen dann über interne Pull-up-Widerstände an Vcc, also +5V, und können durch
externe Spannungen auf Low-Level gezogen werden. Nach einem Reset sind die Ports A,
B und C als Eingänge konfiguriert.
CN1 muss mit der Signalerfassungsplatine verbunden werden. CN2 muss mit der Steuerungsplatine verbunden werden.
3.1.3 AD-Wandler
Port D ist ein unidirektionaler Eingangsport, der alternativ als digitaler oder als analoger Eingangsport verwendet werden kann. Hier wird er als AD-Port betrieben und hat
folgende Eigenschaften:
• 8 gemutiplexte Eingangskanäle
• 8 -Bit Auflösung
• d urch die Programmierbarkeit der internen Referenzspannungen lässt sich die
Auflösung auf ca. 10 Bit erhöhen.
• I ntegrierte Sample und Hold-Schaltung
• Linearität: +/- 1LSB
• E ingangskapazität: max. 60pF
• E ingangsspannungsbereich: 0-5V
• E xterne Referenzspannung: Varef =5V
3.1.4 Ausgangsports
Zusätzlich zu den Eingangsports und dem AD-Wandler verfügt das Modul MCB-537
über vier 8-Bit-Ausgangs-Ports, die mit Register-Bausteinen vom Typ 74HCT273 realisiert sind.
15
3 XMOD MODUL MCB-537
3.1 Beschreibung XMOD-Modul MCB-537
Die insgesamt 32 Ausgänge der Ports E, F, G und H sind auf den Pfostenstecker CN2
herausgeführt, der jedoch nur für mögliche Zusatzmodule reserviert ist. Die Ports E und
F sind zusätzlich auf den Pfostenstecker CN3 gelegt, der hier verwendet wird.
Nach dem Reset befinden sich sämtliche Ausgänge der Ports E, F, G und H auf LowLevel.
3.1.5 RS232-Schnittstelle
Standardmässig erfolgt die Schnittstellenkommunikation des Controllermoduls über die
auf der MCB-537-Platine integrierte RS-232-Schnittstelle, die mit Hilfe eines Bausteins
vom Typ MAX232 realisiert ist. Folgende Einstellungen sind hierzu erforderlich:
• Dip-Schalter SW1-1=OFF
• J umper JP2/1-2 und JP2/3-4 gesetzt
Das Schnittstellenkabel wird an der D-Sub-Buchse CN5 angeschlossen. Zur Datenübertragung werden vom MCB-527 ausschließlich die RS232-Leitungen TxD, RxD und GND
verwendet. Abhängig von der Stellung von Dip-Schalter SW1-2 arbeitet das RS-232Interface des MCB-537 nach dem Reset mit folgenden Schnittstellenparametern:
• B audrate: 4800 Baud ( SW1-2=Off) 9600 Baud ( SW1-2=On)
• Z eichenlänge: 7 Bit
• P arität: gerade
• Anzahl/Stopbits: 1 Stopbit
Diese Information ist für die im Programm zu initialisierende Schnittstelleneinstellung
erforderlich.
3.1.6 Kommunikaton mit dem XMOD-Modul MCB-537
Das Betriebssystem BS537 ermöglicht es dem Anwedner, das XMOD-Modul MCB-537
und, je nach Einsatz, seine Zusatzmodule ohne jegliche Kenntnis des verwendeten Mikrocontrollers SAB80C537 über eine Schnittstelle des Rechners zu betreiben. Die Programmierung und der Datenaustausch zwischen dem Rechner und dem MCB-537 Modul
erfolgt hierbei mit Hilfe einfacher Kommandos im ASCII-Format. Nach dem Reset befindet sich das Controllermodul in einem definierten Grundzustand und ist bereit Befehle
16
3 XMOD MODUL MCB-537
3.1 Beschreibung XMOD-Modul MCB-537
von der Schnittstelle entgegenzunehmen. Die Kommunikation Rechner MCB-537 wird
mit dem ausgewählten Schnittstellenmodus aufgenommen (siehe 2.1.4). Hat das MCB537 ein gültiges Kommando erkannt, so führt es die Anweisungen aus und es sendet
entweder eine Bestätigung oder eine definierte Anzahl von Meßwerten über die Schnittstelle an den Rechner zurück.
3.1.7 Grundsätzliche Festlegungen
• Die Datenübertragung erfolgt mit Zeichen im 7-Bit-ASCII-Code.
• S ämtliche Kommandos, die an das Controllermodul gesendet werden, müssen eines
der beiden Zeichen ! oder # vorangestellt haben. Hier wird ! verwendet.
• S ämtliche Kommando-Zeichenfolgen müssen vom ASCII-Zeichen $ (24hex) abgeschlossen sein und bestehen maximal aus 16 Zeichen (Grossbuchstaben bzw.
Ziffern).
Solange keines der Zeichen als Kennung für nachfolgenden Befehlscode empfangen wird,
ignoriert das BS537 die ankommenden Zeichen. Die Überprüfung des Befehlscodes erfolgt
erst nach dem Empfang der Endekennung .
3.1.8 Befehl für die digitalen Ausgabeports
Kommando: !OPpxx$
Bestätigung durch MCB-537: !OPpxx$
p: Portbezeichnung
p= A, B, C, E, F, G oder H
xx: Hexadezimalwert des ausgegebenen Bytes
x= 0..9, A, B, C, D, E oder F
Beschreibung:
An dem durch p spezifizierten Port wird der Hexadezimalwert xx ausgegeben. Alle zuvor
auf Hight-Level gesetzten und nun auf Low-Level gesetzten Ausgänge des entsprechenden Ports werden auf Low-Level gesetzt. Dies kann man sich hier wie eine eine UNDSchaltung vorstellen. Die Ausgänge des entsprechenden Ports werden also mit dem neuen
Wert, der über die serielle Schnittstelle an das XMOD-Modul MCB-537 gesendet wurde,
entsprechend einer UND-Verknüpfung berechnet.
Beispiel: !OPEC7$, also an Port E wird der Wert C7 hex ausgegeben
Ausgang: E7 E6 E5 E4 E3 E2 E1 E0
17
3 XMOD MODUL MCB-537
3.1 Beschreibung XMOD-Modul MCB-537
Binär: 1 1 0 0 0 1 1 1
Hex: C 7
Bestätigung: !OPEC7$
3.1.9 Lesen der digitalen Eingangsports
Kommando: !Ip$
Bestätigung druch MCB-537: %Ip:xx$
p: Portbezeichnung
p= A, B, C oder D
xx: Hexadezimalwert des ausgegebenen Bytes
x= 0..9, A, B, C, D, E oder F
Beschreibung:
Das ByteLeseKommando liefert den Signalpegel an den Pins des betreffenden Portes als
Hexadezimalwert zurück. Um von einem der bidirektionalen Ports A, B oder C einlesen
zu können, müssen deren Ausgangstreiber gesperrt sein. Dies erreicht man durch HighSetzen des betreffenden Ports mit dem !OSmn$-Kommando (portweises Setzen). Die
Portpins liegen dann über interne Pull-up Widerstände an Vcc und können durch externe
Spannungen auf Low gezogen werden. Nach einem Reset sind die Ports A, B und C
bereits als Eingänge konfiguriert.
Beispiel: !IC$ − > die Zustände der 8 Eingänge des Eingangsport C wird abgefragt
• % IC:07$ (Antwort des MCB-537)
• An Port C liegt der Wert 07 hex an − > die Eingänge C0, C1 und C2 liegen auf
High-Level, C3-C7 liegen auf Low-Level.
3.1.10 Lesen des analogen Eingangsports
Kommando: !An$
Bestätigung durch MCB-537:
n: AD-Kanalnummer
n=0..7
xx: Hexadezimalwert des 8-Bit-AD-Wandlers
x= 0..9, A, B, C, D, E oder F
Beschreibung:
Der AD-Wandler des Mikrocontrollers wandelt den an Kanal n (Port D / Eingang n)
anliegenden analogen Spannungswert und liefert in xx einen 8-Bit-Wert in hexadezimaler
Darstellung zurück.
Beispiel: !A1$
18
3 XMOD MODUL MCB-537
3.1 Beschreibung XMOD-Modul MCB-537
• % A1:CF$ (Antwort des MCB-537)
• An AD-Kanal 1 liegt eine Spannung an, die dem Wert CF hex entspricht.
• Diese Spannung errechnet sich zu AGND + n*LSB= =v + 10*19.5mV=0.195V
• M an beachte Linearitätsfehler: < +/- 1 LSB = +/- 19.4mV
3.1.11 Fehlermeldungen
Die Fehlermeldungen des BS537 haben folgendes Format:
*eeee$
eeee:Fehlercode
Liste der Fehlercodes:
• * 0001$ Syntaxfehler, erwartet: # oder !
• * 0002$ Syntaxfehler - Initialisierungskommando
• * 0008$ Syntaxfehler - Hardware-Initialisierung
• * 0020$ Syntaxfehler IO-Kommandos
• * 0039$ Syntaxfehler Ausgabe-Befehle
• * 0040$ Syntaxfehler Einlese-Befehle
• * 0050$ Syntaxfehler Synchkommando
• * 0060$ Syntaxfehler Readback
• * 0079$ Syntaxfehler AD-Kommandos
• * 0075$ unzulässige Anzahl Abtastungen
• * 0080$ Syntaxfehler Watchdog-Kommandos
• * 0090$ Syntaxfehler sonstige Befehle
• * 0105$ Kommandozeichenfolge zu lang
• * 0107$ unzulässige AD-Abtastrate
• * 1111$ RAM-Fehler bei Selbsttest - Bootvorgang
• * 1188$ Paritätsfehler bei Datenübertragung
19
3 XMOD MODUL MCB-537
3.1 Beschreibung XMOD-Modul MCB-537
• * 2222$ Oszillator-Watchdog-Reset
• * 3333$ Watchdog-Timer-Reset
20
3 XMOD MODUL MCB-537
3.2 Fehlerbehebung
3.2 Fehlerbehebung
Es kann aufgrund von Softwarefehlern des Betriebssystems des XMOD-Moduls MCB537 zu Fehlern kommen. Entsprechend von im Betrieb festgestellten Fehlern wird hier
eine Anleitung zur Fehlerbehebung gegeben.
3.2.1 Fehlermeldung *2222$
Dieser Fehler wird durch Rücksetzen der Oszillator-Watchdog-Sperre sowohl hardwaremässig, als auch softwaremässig mit folgenden Befehlen durchgeführt.
ROWDGBL$: Rücksetzen der durch einen fehlerhaften Oszillator-Watchdog-Reset ausgelösten Sperre des Betriebssystems.
RESSYS$: Befehl zur Herstellung des programmgesteuerten Reset-Zustandes des MCB537
3.2.2 Fehlermeldung *3333$
Dieser Fehler wird durch Rücksetzen der Watchdog-Sperre softwaremässig behoben.
RWDGTBL$: Rücksetzen der durch einen Watchdog-Reset ausgelösten Sperre des Betriebssystems.
3.2.3 Keine Antwort des MCB
Dieser Fehler tratt sporadisch auf. Hier können keinerlei Rücksetzbefehle gesendet werden. Durch Wegnahme der Spannung konnte hier der Fehler beseitigt werden. Anschließend war wieder eine Kommunikation mit dem XMOD-Modul MCB-537 möglich.
21
3 XMOD MODUL MCB-537
3.3 Technische Daten MCB-537
3.3 Technische Daten MCB-537
Prozessor: SAB80C537
Speicher:
• 3 2K EPROM
• 3 2K RAM
Schnittstellenbaustein: MAX232
Referenzspannungsquelle: AD584
Ein-/Ausgänge:
• 3 bidirektionale 8-Bit Ports
• 1 unidirektionaler 8-Bit-Eingangsport ( alternativ als digitaler oder als 8-KanalAD-Port verwendbar)
• 3 2 TTL-Ausgänge 74HCT273
Anschlußklemme: zweipolige Schraubklemme für externe Spannungsversorgung
Anschlußstecker:
• neunpolige D-Sub-Buchse für RS232 Schnittstelle
• 2 *40polige Pfostenstecker
• 2 *20polige Pfostenstecker
Stromverbrauch: max. 120mA / 5V (ohne Zusatzmodul)
Sicherung: 1A-Miniatursicherung
Anzeige: LED zur Spannungskontrolle
22
4 ELEKTRONIK
4 Elektronik
4.1 Spannungsversorgung
Es werden Spannungen von +12V und +5V benötigt. Damit diese Spannung möglich
ist, muss ein Transformator verwendet werden, der bis zu 9V Wechselspannung liefert.
Dies ergibt eine maximale Gleichspannung, aufgrund der Gleichrichtung, von Vcc =
√
9V ∗ 2 = 12.73V Gleichspannung.
Zuerst muss die zur Verfügung stehende Spannung von 9V Wechselspannung gleichgerichtet werden. Hierzu wurde ein Brückengleichrichter verwendet. Dieser Brückengleichrichter ist wie folgt aufgebaut:
Mittels zweier Festspannungsregler 6 vom Typ 7812 und 7805 wird die Spannung entsprechend stabilisiert zur Verfügung gestellt.
7812: Hierbei handelt es sich um einen positiven Festspannungsregler, der eine stabilisierte Spannung von +12V zur Verfügung stellt.
7805: Hierbei handelt es sich um einen positiven Festspannungsregler, der eine stabilisierte Spannung von +5V zur Verfügung stellt.
Unabhängig von der Höhe der angelegten Eingangsspannung werden am Ausgang lediglich die entsprechenden Spannungen geliefert.
Aufbau 78xx:
Abbildung 5: Aufbau Festspannungsregler.
6
Siehe Anhang 179256-da-01-en-Festspannungsregler 78XX.pdf
23
4 ELEKTRONIK
4.1 Spannungsversorgung
Damit Spannungsschwankungen ausgeglichen werden können, wird an jedem Eingang
der Festspannungsregler ein Kondensator der Grösse 2200µF arad geschaltet. Dieser lädt
sich auf den Scheitelwert der 9V Wechselspannung auf, wodurch der bereits oben berechnete Wert von 12.72V am Eingang zur Verfügung steht. Damit am Ausgang des Festspannungsreglers die Höhe der angegebenen Ausgangsspannung gewährleistet werden kann,
muss die Eingangsspannung um 3-5V höher liegen, als die Spannung, die am Ausgang
gefordert wird. Liegt die Eingangsspannung deutlich höher, so hat dies normalerweise
keinerlei negativen Auswirkungen 7 , was sich später jedoch als Fehleinschätzung erwies.
Abbildung 6: Aufbau Spannungsversorgung.
Die Platine wurde mit dem Programm Lochmaster2.0 gezeichnet. Hierbei handelt es
sich um ein Programm, mit dem der Aufbau der Platinen gezeichnet werden kann.
Es können alle verwendeten Bauteile, die verwendete Platine und die Unterbrechungen
eingezeichnet werden.
Die Möglichkeit der Rückansicht, also der Lötseite, hat sich ebenfalls als sehr hilfreich
erwiesen. Auch ein Verbindungstest ist in diesem Programm integriert, was sich bei der
Realisierung als sehr nützlich erwiesen hat.
7
Siehe Kapitel 6.1
24
4 ELEKTRONIK
4.1 Spannungsversorgung
Die folgende Abbildung zeigt den Aufbau der Spannungsversorgungsplatine:
Abbildung 7: Aufbau Spannungsversorgung.
Die folgende Abbildung zeigt die Lötseite der Spannungsversorgungsplatine:
Abbildung 8: Ansicht Spannungsversorgung Lötseite.
25
4 ELEKTRONIK
4.1 Spannungsversorgung
Stückliste für die Spannungsversorgungsplatine:
• 2 2200µF arad Kondensatoren
• 1 Festspannungsregler 7805
• 1 Festspannungsregler 7812
• 1 Kühlkörper
• 8 1kΩ Widerstände
• 5 Dioden 5448n
• 1 47Ohm Widerstand
• 1 Europlatine
• 1 Messer- und Federleiste
26
4 ELEKTRONIK
4.2 Steuerungsplatine
4.2 Steuerungsplatine
4.2.1 Aufbau Steuerungsplatine
Die Steuerungsplatine dient zur Steuerung des Carrera Rennautos. Das Rennauto wird
mittels Pulsweitenmodulation angesteuert. Dies wurde erst festgestellt, als versucht wurde das Auto mit veränderbarer Spannung anzusteuern. Hier wurde festgestellt, dass eine
Spannung unter ca.21V keine Bewegung des Rennautos zur Folge hatte. Wurde nun die
Spannung auf den bereits erwähnten Wert eingestellt, so fuhr das Rennauto sofort mit
Höchstgeschwindigkeit.
Eine Steuerung mittels DA-Wandler, der die Höhe der Spannung über das XMOD-Modul
erhält und nachgeschaltetem Leistungsverstärker ist somit nicht möglich, denn damit ist
keine Pulsweitenmodulation realisierbar.
Um eine Pulsweitenmodulation wie mittels des Handreglers der Steuerung der Carrera
Rennbahn zu realisieren, wurde der Mikrocontroller AT90S1200 verwendet.
Die Steuerungsplatine 8 wurde auf einer Europlatine aufgebaut. An den Leisten a und
c wurde eine Messerleiste angelötet. Diese wird später mit der Federleiste zusammengesteckt. An der Federleiste sind die entsprechenden Verbindungsdrähte zur externen
Elektronik, wie Spannungsversorgung des Transformators, angelötet.
Schaltplan der Steuerungsplatine:
Die Federleiste ist wie folgt belegt:
• Pin 2c: Ground für die Steuerelektronik von 5V und für die zu schaltende Leistung,
also des Transformators
• Pin 30a: Anschluß des Carrera Rennautos. Wird der Smart High Side Power
Drive 9 durch ein 1-Signal durchgeschaltet, so wird über Pin 5 der Steckerleiste die
Spannung des Transformators von 21V durchgeschaltet, die über Pin 30a an das
Auto rangeführt wird.
• Pin 32a: Anschluß der positiven Versorgungsspannung der Steuerelektronik von
+5V
8
9
Siehe Abbildung10
Siehe Abbildung 12
27
4 ELEKTRONIK
4.2 Steuerungsplatine
Abbildung 9: Schaltplan der Platine für die Steuerung des Rennautos.
• Pin 32c: Anschluß der positiven Versorgungsspannung für die zu schaltende Leistung des Transformators.
Die 6-reihige Steckerleiste dient zum Anschluß des Programmiergeräts für die Programmierung des Mikrocontrollers AT90S1200 10 über das am Programmiergerät angebrachte
Flachbandkabel.
Der 20-polige Wannenstecker dient zur Verbindung des Ausgangsports E, also E0-E7,
und des Ausgangspins F0 zum Mikrocontroller. Zur Verbindung kann ein konventionelles
Flachbandkabel verwendet werden. Es muss beachtet werden, dass der Wannenstecker
nur der Breite von zwei Lochrastern auf der Platine entspricht. Daher müssen die Verbindungen der auf jeder Zeile direkt nebeneinanderliegenden Löcher mittels eines Messers
aufgetrennt werden. Eine Unterbrechung einer Bohrung ist also nicht möglich, da hier
keine Lochreihe 11 zwischen den beiden Reihen liegt.
Damit die Eingangspins des Mikrocontrollers aufgrund der vom XMOD-Modul der Ports
10
11
Siehe Kapitel 3.2.1
Siehe Spalte 56-57 Abbildung11
28
4 ELEKTRONIK
4.2 Steuerungsplatine
E0-E7 gelieferten Stromstärke nicht zerstört werden können, wurde zur Strombegrenzung
jeweils ein Vorwiderstand zwischen dem Pin des Ports E und dem Pin des Mikrocontrollers gelötet. Diese Widerstände dienen ebenfalls zum Schutz des XMOD-Moduls, denn
nun kann schließlich der Ausgangspin des Ports E nicht überlastet werden.
Abbildung 10: Aufbau der Platine für die Steuerung des Rennautos.
Der Mikrocontroller AT90S1200 wird auf einem zuvor auf der Platine angelöteten 20poligen IC-Sockel befestigt. Der Sockel hat den Vorteil, dass der Mikrocontroller bei
defekt lediglich aus dem Sockel, ohne Lötarbeiten, entnommen werden kann.
Der Quarz und die beiden Kondensatoren dienen zur Erzeugung der Frequenz, die an
den Mikrocontroller angelegt werden muss.
Die 5-reihige Stiftleiste dient zum Anschluß an den Smart High Side Power Drive mittels
Flachbandkabel. Auch dieser wurde steckbar gemacht um die bereits oben erwähnten
Vorteile zu haben. Der Smart High Side Power Drive wird dazu verwendet, damit die
Steuerelektronik von der hohen zu schaltenden Last abgekoppelt werden kann. Dies wird
benötigt, weil der Mikrocontroller AT90S1200 nur einen geringen Ausgangsstrom liefern
kann. Diese lieferbare Ausgangsleistung reicht jedoch aus um den Smart High Side Power
29
4 ELEKTRONIK
4.2 Steuerungsplatine
Abbildung 11: Lötseite der Platine für die Steuerung des Rennautos.
Drive anzusteuern.
30
4 ELEKTRONIK
4.2 Steuerungsplatine
Mit der vom Smart High Side Power Drive gelieferten Ausgangsleistung kann nun der
besser kühlbare Leistungstreiber bzw. SpannungsreglerLT1083 12 angesteuert werden.
Die Verbindungen der einzelnen Pins wurden über konventionellen 0.2qmm starren Draht
realisiert. Diese mussten nur auf die jeweilige Länge gebogen werden. Die Unterbrechungen wurden mit einem Standardhandbohrer hergestellt.
Stückliste für die Steuerungsplatine:
• 2 Wannenstecker
• 1 6-reihige Steckerleiste
• 1 5-reihige Stiftleiste
• 2 20µF arad Kondensatoren
• 1 Quarz mit der Frequenz von 4Mhz
• 1 IC-Sockel 20-polig
• 1 Mikrocontroller AT90S1200
• 1 High Side Power Drive BTS428L2
• 1 Spannungsregler LT1083
• 1 Kühlkörper
• 8 1kΩ Widerstände
• 1 47Ω Widerstand
• 1 Europlatine
• 1 Messer- und Federleiste
12
Siehe Datenblatt lt1083
31
4 ELEKTRONIK
4.2 Steuerungsplatine
4.2.2 Beschreibung für die Steuerungsplatine
Die Platine wird an der a und c Reihe mit einer Messerleiste verlötet. Diese dient als
Kontakt zur Federleiste. An der Federleiste sind die Drähte angelötet, die an die externe
Elektronik verbunden werden. So muss die Spannungsversorgung an die Platine gelegt
werden. An Pin 32c wird die dem Carrera Rennauto zugeführte Spannung angeschlossen.
Diese stellt der Transformator zur Verfügung. An Pin 32a ist die Spannungsversorgung
von 5V für die eigentliche Elektronik angeschlossen. Die verwendete Elektronik arbeitet
mit einer Spannung von 5V.
Der Wannenstecker dient zum Anschluss des CN2 Wannensteckers 13 des XMOD-Moduls
MCB-537 mit der Platine mittels eines Flachbandkabels. Dies ist notwendig, damit ein
Anschluß des Ports E mit dem Mikrocontroller möglich ist. Die Pins E0 bis E7 des
Wannensteckers bzw. des CN2 Wannensteckers des XMOD Moduls MCB-537 werden
an die Pins 12 bis 19, also PB0 bis PB7 , angeschlossen. Es ist zu beachten, dass das
XMOD Modul MCB-537, über das Flachbandkabel, während der Programmierung nicht
mit der Platine verbunden sein darf, da es sonst zur Zerstörung des Mikrocontrollers
AT90S1200 kommen kann.
An Pin 1, also dem Reset Pin, wird der Pin 0 des Ports F des XMOD-Moduls MCB537 angeschlossen. Dieser muss auf 1-Signal gesetzt werden, damit der Mikrocontroller
funktioniert, d.h. mit seiner Frequenz von 4MHz arbeiten kann. Um dies zu gewährleisten, wird beim Aufruf des Java Programms, ein 1-Signal an den Port F mittels des
Sendebefehls !OPF01$ gesendet.
Durch Senden eines 0-Signals an den Port F und somit an den Reset Eingang des Mikrocontrollers AT90S1200 kann die am Leistungstreiber LT 1083 liegende Spannung wegschaltet werden und somit die Bewegung des Rennautos gestoppt werden.
Pin 2, welcher den Ausgangsport der Pulsweitenmodulation repräsentiert, wird mit Pin
2 des Smart High-Side Power Switch verbunden. Dieser Pin 2 des Smart High Side Power
Switch ist der Eingangspin. Ist dieser auf 1-Signal, so wird die Spannung, die am Eingang
Pin 3 des Smart High Side Power Switch liegt, durchgeschaltet. Dem nachgeschalteten
Spannungsregler LT1083 wird nun Spannung auf den Eingangspin geschaltet.
Der Smart High Side Power Switch 14 ist ein Hochleistungsschalter. Dieser ist für die
13
14
Siehe Abbildung3
Siehe Abbildung??
32
4 ELEKTRONIK
4.2 Steuerungsplatine
zu schaltende Leistung mehr als ausreichend. An Pin 1 wird Ground, also Masse angeschlossen. Der Pin 2 des Smart High Side Power Switch wird mit dem PWM 15 Ausgang
angeschlossen. Ist dieser Pin auf High-Level geschaltet, so wird Leistung geschaltet.
An Pin 3, der kürzer als alle anderen Pins ist, wird die Betriebsspannung von +21V
angeschlossen. Aus technischen Gründen wurde die Betriebsspannung an den oberen
Teil 16 angelötet, der ebenfalls Pin 3 repräsentiert. Pin 4 wurde nicht verwendet bzw.
angeschlossen. An Pin 5, welcher der Ausgangspin ist, wird der zusätzlich benötigte
Spannungsregler LT1083 selbst angeschlossen. Ist wie bereits erwähnt die Spannung an
Pin 1, also IN, auf High-Level, so wird die an Pin 3 angelegte Spannung an den Pin
5 durchgeschaltet und somit wird das Rennauto der Carrera Rennbahn mit Spannung
versorgt.
Es muss darauf geachtet werden, dass der Smart High Side Power Switch sehr empfindlich
gegenüber elektrostatischer Aufladung ist und sollte daher vorsichtig bzw. in entladenem
Zustand 17 angefaßt werden.
Abbildung 12: Aufbau Smart High Side Power Switch.
Zwischen Pin 4 und Pin 5, also XTAL1 und XTAL2, wird der Oszillator mit einer
Frequenz von 4Mhz geschaltet. Damit dieser Oszillator auch arbeitet, müssen die Enden
15
Siehe Erklärung zu Pulsweitenmodulation
Siehe Tab = Vbb Abbildung
17
Entladung durch Anfassen eines geerdeten Objektes
16
33
4 ELEKTRONIK
4.2 Steuerungsplatine
des Oszillators über jeweils einen Kondensator an Ground 18 angeschlossen werden.
Abbildung 13: Anschluß des Oszillators.
Um eine Stromverstärkung zu erreichen wird ein Spannungsregler vom Typ LT 1083
verwendet. Mit diesem ist es möglich Ausgangsströme von bis zu 7A zu erreichen. Da
es sich hierbei um sehr hohe Ströme handelt, ist eine gute Kühlung unabdingbar. Dafür
wird ein Kühlkörper verwendet. Zwischen Kühlkörper und dem LT 1083 ist zusätzlich
zur besseren Wärmeableitung eine Wärmeleitpaste zu verteilen.
Der Spannungsregler sieht wie folgt aus:
Abbildung 14: Aufbau LT1083.
18
Siehe Abbildung13
34
4 ELEKTRONIK
4.2 Steuerungsplatine
Pin 1 : Hierbei handelt es sich um den Adjust-Eingang. Dieser wird mit dem Ausgangspin 5 des High Side Power Drive verbunden. Wird nun also der High Side Power
Drive vom Mikrocontroller AT90S1200 angesteuert, so wird auf den Adjust-Eingang eine
Spannung von 21V, also der Spannung des Transformators, geschaltet.
Pin 2 : Hierbei handelt es sich um die gelieferte Ausgangsspannung. Die Ausgangsspannung ist gerade so groß, wie am Adjust-Eingang anliegt. Jedoch kann diese Spannung nun auch die tatsächliche benötigte Stromstärke liefern und somit die geforderte
Ausgangsleistung bzw. die erforderliche Leistung für den Motor des Carrera Rennautos
aufbringen.
Pin 3 : Hierbei handelt es sich um den Anschluß für die Versorgungsspannung des LT
1083. Diese ist mit der Ausgangsspannung des Transformators, der die geforderten 21V
liefert, verbunden.
4.2.3 Pulsweitenmodulation PWM
Bei der Pulsweitenmodulation PWM handelt es sich um eine intelligente Leistungsansteuerung von Motoren, wie sie in der Industrie mittels Frequenzumrichtern eingesetzt
werden. Es handelt sich also um eine Frequenzsteuerung, bei der starke Lastmototen
besonders effizient angesteuert werden knnen.
Im vorliegenden Fall handelt es sich um eine Technik, bei der je nach benötigter Leistung
mehr oder weniger Gleichspannung dem Rennauto zugeführt wird. Der Unterschied besteht jedoch nicht in der Höhe der Gleichspannung, sondern in der Periodendauer, also
der Zeit, wie lange die Spannung zugeführt wird.
Der Motor läuft erst ab der vollen Betriebsspannung, deswegen funktioniert eine Steuerung mit einer einfachen Erhöhung bzw. Erniedrigung der dem Carrera Rennauto zugeführten Spannung nicht.
Um das Auto mittels einer eigenen Elektronik gemäß der Pulsweiten-Modulations-Technik
ansteuern zu können muss zuvor die Frequenz der Ansteuerung bestimmt werden. Die
Frequenz wurde in diesem Fall mittels eines Oszilloskops gemessen. Diese wurde über
die Verwendung des Handreglers ermittelt. Anhand der eingestellten Zeiten am Oszilloskop konnte der Frequenzwert berechnet werden. Meßungenauigkeiten sind belanglos, da
35
4 ELEKTRONIK
4.2 Steuerungsplatine
die einzustellende Frequenz ebenfalls nur näherungsweise eingestellt werden kann. Die
nachfolgenden drei Bilder zeigen die Ausgangsspannung bei verschiedenen Belastungen.
Ein nach unten zeigender Impuls signalisiert am Ausgang volle Betriebsspannung.
Abbildung 15: Spannungsverlauf bei PWM mit niederiger Belastung.
Abbildung 16: Spannungsverlauf bei PWM mit mittlerer Belastung.
36
4 ELEKTRONIK
4.2 Steuerungsplatine
Abbildung 17: Spannungsverlauf bei PWM mit hoher Belastung.
Die erste Grafik 19 zeigt die Ausgangsspannung bei niedriger Belastung. Es ist zu erkennen, dass die Zeit, zu der Spannung zur Verfügung steht sehr kurz ist. Es ist nur als
ein kurzer Nadelimpuls erkennbar. Es ist zu beachten, dass ein Impuls nach unten eine
positive Ausgangsspannung bzw. der vollen Betriebsspannung am Ausgang entspricht.
Die zweite Grafik 20 zeigt die Ausgangsspannung bei mittlerer Belastung. Es ist zu erkennen, dass die Zeit, zu der die Spannung am Ausgang zur Verfügung steht höher ist
bzw. der Ausgangsimpuls deutlich länger vorhanden ist. Der Impuls nach unten zeigt
hier ebenfalls wieder das Vorliegen der vollen Betriebsspannung am Ausgang an.
Die dritte Grafik 21 zeigt die Ausgangsspannung bei hoher Belastung. Es ist zu erkennen,
dass der Ausgangsimpuls fast über die gesamte Periodendauer zur Verfügung steht.
Die Frequenz f beträgt 227Hz. Da ein Quarz mit 4MHz verwendet wird, eignet sich
ein Prescale Faktor von 64. Mit dem Prescale Faktor kann die Mikrocontroller interne
Taktung eingestellt werden. Dadurch ergibt sich insgesamt eine Frequenz f = (4∗106/64)
,
28
also f = 244.14Hz. Dieser Wert entspricht fast dem Originalwert. Bei zu hoher bzw. zu
19
Siehe Abbildung15
Siehe Abbildung16
21
Siehe Abbildung17
20
37
4 ELEKTRONIK
4.2 Steuerungsplatine
niedriger Frequenz kommt es zu Funktionsstörungen. Diese liegt daran, dass der Motor eine Induktivität ist. Eine Induktivität hat je nach Frequenz der angelegten Spannung einen unterschiedlichen Blindwiderstand. Bei zu hoher Frequenz wäre der Induktive
Blindwiderstand so groß, dass die Spannung nicht genügend Stromfluß verursacht und
somit das Auto nicht fahren würde. Bei zu niedriger Frequenz könnte der Motor zerstört
werden, da nun der resultierende Gesamtwiderstand so kleine wäre, dass die angelegte
Spannung einen zu großen Stromfluß verursachen würde und somit die Zerstörung des
angeschlossenen Motors des Carrera Rennautos bewirken würde.
Die resultierende mittlere Leistung bzw. mittlere Spannung berechnet sich durch das
Integral über die Zeit.
Rt
Rt
Die Formel lautet: P = U (t) ∗ I(t)
0
0
Die Variable U ist die maximale Spannung von ca. +21V. Bei der Variablen I handelt es
sich um den daraus resultierenden maximalen Strom von ca. 600mA. Bei der Variablen
t handelt es sich um die Pulszeit, also die Zeit, in der die Ausgangsspannung 1-Signal
hat.
4.2.4 Programmiertool AVRStudio 3.56
Mit dem AVRStudio 3.56 22 wurde das für den Atmel AT90S1200 erforderliche Assembler
Programm realisiert. Der Vorteil dieses Programms liegt in der Debugfähigkeit. Mittels
IO View kann simulationsmässig direkt Einblick in die einzelnen Register und Ports genommen werden.
Im Debugmodus kann direkt das Softwareprogramm simuliert werden.
22
Siehe Abbildung??
38
4 ELEKTRONIK
4.2 Steuerungsplatine
Abbildung 18: Screenshot AVRStudio 3.56.
4.2.5 Aufbau Mikrocontroller AT90S1200
Programmierbetrieb
Für die Programmierung sind die Pins 1, 17, 18 und 19 erforderlich. Der RESET Pin 1
muss für die Programmierung auf low-Level gelegt werden. Die Pins sind also RESET,
SCK, MISO und MOSI.
39
4 ELEKTRONIK
4.2 Steuerungsplatine
Abbildung 19: Aufbau Mikrocontroller AT90S1200.
Normaler Betrieb:
RESET: Dieser Pin wird benötigt, um den Mikrocontroller bei Betrieb zurückzusetzen,
falls es zu Programmabstürzen o.ä. im Mikrocontroller kommt. Wichtig ist, dass dieser
Pin auf 1-Signal bei Betrieb liegt. Im Programmiermodus muss dieser auf 0-Signal, also
Ground, gelegt werden.
PD0-PD6: Diese können als Ausgangssignal verwendet werden. Hier wird lediglich ein
Ausgangspin verwendet und zwar Pin PD0. Dieser wird als Ausgang der Pulsweitenmodulation verwendet. Dieser Pin PD0 steuert später den Leistungstreiber an, der das
Rennauto der Carrera Rennbahn ansteuert.
XTAL1: hier wird der Oszillator angeschlossen.
XTAL2: hier wird der Oszillator angeschlossen. Der Oszillator liefert eine Frequenz
von 4MHz an den Mikrocontroller. Dies ist also der Takt für den Mikorcontroller.
GND: Hier wird die Masse, also Ground Signal angeschlossen.
PB0-PB7: Diese Pins werden als Eingangssignal verwendet. Hier werden über den
Wannenstecker die Pins E0-E7 des Ports E des XMOD Moduls an den Mikrocontroller
angeschlossen. Hierbei handelt es sich um den Wert für die Zykluszeit der Pulsweiten-
40
4 ELEKTRONIK
4.2 Steuerungsplatine
modulation, die über das Programm an das Zusatzmodul XMOD MCB-537 an den
Mikrocontroller mittels serieller Schnittstelle RS232 gesendet wird.
Vcc : Hier wird die positive Spannungsversorgung von +5V an den Mikrocontroller angeschlossen.
4.2.6 Programmierung des Mikrocontrollers
Damit eine Programmierung des Mikrocontrollers möglich ist, müssen die bereits erwähnten Pins RESET, SCK, MISO und MOSI an die Stiftleiste angeschlossen werden.
Diese Stiftleiste muss zur erforderlichen Programmierung an das separate Programmiergerät angeschlossen werden.
Abbildung 20: Anschluß des Mikrocontroller AT90S1200 bei Programmierung.
Die Abbildung 20 zeigt den Anschluß bei Programmierung des Mikrocontrollers. Hierbei
ist zu sehen, dass der Pin RESET auf Ground gelegt werden muss. Dieser ist bei Betrieb
des Mikrocontrollers mit 1-Signal zu belegen. Dies erfolgt durch Senden eines 1-Signals
41
4 ELEKTRONIK
4.2 Steuerungsplatine
an den Pin F0 des Port F des XMOD Moduls durch das Programm.
Die alternative Pinverwendung bei Programmierung:
PB7:
• SCK: Serial Clock Input
PB6:
• MISO: Datenausgangspin für die Hochladung von Daten in den Speicher
PB5:
• MOSI: Dateneingangspin für das Runterladen von Daten vom Mikrocontroller
Der Mikrocontroller AT90S1200 wird ähnlich der bei Assembler bekannten Befehle programmiert. Jedoch bestehen hier Unterschiede, so dass auf die Befehlsliste des Herstellers
zurückgegriffen werden musste, die in der Datei InstrucitonSet.pdf 23 zu finden ist.
Die Programmierung wurde mittels der Entwicklungsumgebung AVRStudio3.56 von Atmel realisiert. Diese Entwicklungsumgebung steht kostenlos auf der Homepage von Atmel
zur Verfügung. Die URL lautet www.atmel.com.
Die Entscheidung für diesen Mikrocontroller fiel, da das Rennauto der Carrera Rennbahn
mittels der Technik Pulsweitenmodulation ( PWM ) erfolgt. Mit diesem Mikrocontroller
kann die Pulsweitenmodulation durch entsprechende Programmierung realisiert werden.
Der Port B wird hier als Eingang verwendet, denn dieser wird mit dem Ausgangsport E
des XMOD-Moduls MCB-537 verbunden. Damit Port B als Eingang verwendet werden
kann, müssen die anliegenden Zustände mittels des Befehls in r17, PINB“ ausgelesen
”
werden. R17 entspricht dem verwendeten Register und PINB der physikalischen Verbindung. PORT B muss programmässig als Eingang gesetzt werden und mit Pull-up
Widerständen beschaltet werden, was durch Setzen auf 1-Signal erfolgt. Damit PORT
23
Siehe hierzu im Anhang InstructionSet.pdf
42
4 ELEKTRONIK
4.2 Steuerungsplatine
B als Eingang verwendet wird, muss das Port B Data Direction Register DDRB auf
0-Signal gesetzt werden.
Timer Interrupt:
Damit der Timerinterrupt verwendet werden kann, muss er zuvor initialisiert werden.
Dazu muss das Flag Timer/Counter 0 Overflow Interrupt Enable (TOIE0 ) auf 1-Signal
gesetzt werden. Außerdem muss das I-Bit im Status Register Flag auf 1-Signal gesetzt
werden.
Takt des Prozessors ist 4Mhz.
Der Takt berechnet sich anschließend zu:
8Bit − > 256
(4M hz/8)
28
Ausgänge Port D:
Ein Ausgang des Ports D muss als Ausgang für die Puls-Weiten-Modulation verwendet werden. Damit ein Pin des Ports D als Ausgang verwendet werden kann, muss dieser
als 1-Signal belegt werden. Hier wurde Pin 0 von Port D verwendet.
Die Programmierung des Mikrocontrollers, also die Übertragung des Programms auf
den Mikrocontroller erfolgt mittels des Programms AVR-Programmer AT-Prog V2.8
von Johann Aichinger. Die URL lautet: jaicha.virtualave.net.
Zuerst muss im MenuItem Port der richtige Port und zwar der Parallel Port 0378 eingestellt werden.
Anschließend muss im MenuItem File durch Open das durch das AVR Studio 3.56 erstellte hex-File eingelesen werden. Wurde dieses eingelesen, so wird im Textfeld unten
links unter dem Label Current File“ der Name angezeigt. Anschließend muss der But”
ton Write“ angeklickt werden und somit wird das zuvor über das AVR Studio erzeugte
”
Programm auf den Mikrocontroller übertragen. Die Abbildung 21 zeigt den AVR Programmer. Wurde das Programm ordnungsgemäss übertragen, so wird im rechten unteren
Textfeld, unter dem Label Activity“ die Meldung OK ausgegeben.
”
43
4 ELEKTRONIK
4.2 Steuerungsplatine
Damit das Programm unter Windows XP läuft muss zuvor das Programm port95NT.exe 24
installiert werden. Wird dies nicht gemacht, so ist die Einstellung Port − > PP0378,
also die Umstellung auf den Parallelport, nicht möglich.
Abbildung 21: Programm AVR-Prog zur Programmierung des Mikrocontrollers mittels
paralleler Schnittstelle
Damit eine Programmierung möglich ist, muss das hex-File erzeugt werden. Das hexFile wird erzeugt, indem man im Dialog 25 die Einstellung Intel Intellec 8/MDS (Intel
Hex) vornimmt und anschließend das Projekt erneut kompiliert. Als Ergebnis wird ein
File geliefert, das denselben Namen wie das Assembler Programm hat, lediglich mit der
Extension *.hex. In diesem Fall heißt das File pwd.hex.
24
25
Siehe Inhalt CD
Siehe Abbildung22
44
4 ELEKTRONIK
4.2 Steuerungsplatine
Abbildung 22: Dialog zur Einstellung Erzeugung hex-File
4.2.7 Aufbau Atmel-Programmer
Für die Programmierung des Atmel Mikrocontrollers AT90S1200 ist ein separates Programmiergerät erforderlich.
Dieses Programmiergerät stellt die Schnittstelle zwischen dem Computer über paralle
Schnittstelle und dem Mikrocontroller AT90S1200 her.
Die Signale RESET, MOSI und SCK werden von der parallelen Schnittstelle des PC’s
angesprochen. Zur Leistungsverstärkung gehen alle drei erwähnten Signale auf separate Darlingtonschaltungen, deren Ausgänge auf die entsprechende Stiftleiste für den
Anschluß an den Mikrocontroller AT90S1200 gehen.
45
4 ELEKTRONIK
4.2 Steuerungsplatine
Abbildung 23: Aufbau Atmel Programmiergerät
Abbildung 24: Lötseite Atmel Programmiergerät
Stückliste für die Steuerungsplatine:
46
4 ELEKTRONIK
4.2 Steuerungsplatine
• 1 100nF arad Kondensator
• 2 470µF arad Kondensatoren
• 1 600Ω Widerstand
• 1 680Ω Widerstand
• 3 10kΩ Widerstände
• 3 3.3kΩ Widerstände
• 6 1kΩ Widerstände
• 6 Transistoren BC 547C
• 1 Stiftleiste 6-polig
• 1 Stiftleiste 8-polig
• 1 Europlatine
4.2.8 Testprogramm für Atmelprogrammer
Das Programm Adapter-test.exe 26“ dient zum Test des Atmel-Programmers. Dieser Test
”
ist sehr nützlich, da hiermit festgestellt werdem kann, ob das Atmel Programmiergerät
überhaupt funktioniert.
Zuerst muss im Menuitem Port“ der Parallelport Dialog 27 gestartet werden. Hier muss
”
der Radiobutton AVR direct“ angewählt werden.
”
26
27
Siehe Download
Siehe Abbildung 25
47
4 ELEKTRONIK
4.2 Steuerungsplatine
Abbildung 25: Porteinstellung Atmel Testprogramm
Anschließend muss im Hauptdialog des Testprogramms 28 der Radiobutton AVR“ ge”
setzt werden.
Abbildung 26: Hauptdialog Atmel Programmer Test
28
Siehe Abbildung ??
48
4 ELEKTRONIK
4.2 Steuerungsplatine
Zum Testen wird ein Meßgerät und ein Kabel benötigt, mit dem eine Spannung von
+5V angelegt wird.
Der Test des Programmiergeräts wird nun wie folgt vollzogen:
• RESET: Wird im Hauptdialog RESET-high“ angeklickt, so muss auf der Platine
”
des Programmiergeräts 29 in Bahn 4c Pin 3 des Parallelanschlusses ein 1-Signal
messbar sein. Wird anschließend der Radiobutton RESET-low“ angeklickt, so
”
muss das Signal wieder auf 0-Signal sinken.
• SCK: Wird im Hauptdialog SCK-high“ angeklickt, so muss auf der Platine des
”
Programmiergeräts 30 in Bahn 6a Pin 2 des Parallelanschlusses ein 1-Signal messbar
sein. Wird anschließend der Radiobutton SCK-low“ angeklickt, so muss das Signal
”
wieder auf 0-Signal sinken.
• MOSI: Wird im Hauptdialog MOSI-high“ angeklickt, so muss auf der Platine
”
des Programmiergeräts 31 in Bahn 4a Pin 4 des Parallelanschlusses ein 1-Signal
messbar sein. Wird anschließend der Radiobutton MOSI-low“ angeklickt, so muss
”
das Signal wieder auf 0-Signal sinken.
• MISO: Hier muss zum Test an den Pin 5 der Bahn 4c des Programmiergeräts 32
ein 1-Signal bzw. ein 0-Signal angebracht werden. Liegt zu Beginn ein 0-Signal an,
so muss nach Betätigung des Buttons Read MISO“ der Radiobutton MISO-low“
”
”
betätigt sein. Wird nun anschließend ein 1-Signal an den oben erwähnten Pin 5
der Bahn 4c angebracht, so muss nach Betätigung des Buttons Read MISO“ der
”
Radiobutton MISO-high“ betätigt sein.
”
29
Siehe
Siehe
31
Siehe
32
Siehe
30
Abbildung
Abbildung
Abbildung
Abbildung
23
23
23
23
49
4 ELEKTRONIK
4.3 Platine für die Eingangssignalerfassung
4.3 Platine für die Eingangssignalerfassung
4.3.1 Verwendete Sensoren
Diese Platine dient zur Erfassung der Lichttaster Signale. Die Lichttaster können nur
mit einer Gleichspannung von 10-30V versorgt werden. Das Problem ist, dass diese auf
5V für das Eingangssignal des XMOD Moduls MCB-537 entsprechend gewandelt werden
müssen.
Der Lichttaster wird beim Vorbeifahren des Rennautos aktiviert und schaltet die an
seinem Eingang liegende Spannung auf den Ausgang durch. Diese ist genauso groß, wie
die am Eingang liegende Spannung.
4.3.2 Spannungsanpassung der vom Lichttaster gelieferten Spannung
Die vom aktivierten Lichttaster gelieferte Spannung hat je nach Eingangsspannung
einen Wert von 10V-30V Gleichspannung, die Elektronik arbeitet jedoch mit 5V Gleichspannung. Damit dies funktioniert wurde für jeden Lichttaster ein Festspannungregler
7805 33 verwendet. Der Vorteil ist, dass die Verarbeitung des Signals unabhängig von
der Eingangsspannung bzw. gelieferten Ausgangsspannung des Lichttasters ist. Außerdem handelt es sich hierbei um eine sehr einfache Schaltung, denn wird nun über einen
aktivierten Lichttaster eine Spannung auf den Ausgang und somit auf den Eingang des
Festspannungsregler geschaltet, so wird am Ausgang automatisch eine Gleichspannung
von 5V geliefert, unabhängig von der Höhe der Eingangsspannung.
Die einzelnen Ausgänge der entsprechenden Festspannungsregler 34 werden mit dem Wannenstecker verbunden.
Der Festspannungsregler IC1 wird mit dem Pin A0 des Eingangsports A verbunden.
Die übrigen Festspannungsregler IC2 bis IC8 werden entsprechend mit den Pins A1-A7
verbunden. Dies wird über konventionellen Draht durchgeführt. Der Wannenstecker wird
nun über ein Flachbandkabel mit dem XMOD Modul MCB-537 verbunden. Nun können
die Signale der einzelnen Lichttaster softwaremässig abgefragt werden.
4.3.3 Impulserfassung und Impulsverlängerung
Der zuvor beschriebene Aufbau führt zu einem schwerwiegenden Problem. Da das Carrera Rennauto sehr schnell fährt, ist der Impuls des Lichttasters sehr kurz, d.h., dass der
33
34
Siehe 3.1 Spannungsversorgung
Siehe Abbildung ??
50
4 ELEKTRONIK
4.3 Platine für die Eingangssignalerfassung
Lichttaster nicht zu einem eindeutigen High-Level am entsprechenden Pin des Ports A
des XMOD Moduls MCB-537 führt.
Dieses Problem kann nur durch eine Impulsverlängerung des Lichttasterimpulses gelöst
werden.
Dazu wird der Baustein 74LS221 verwendet. Hierbei handelt es sich um eine monostabile
Kippstufe mit vorgeschaltetem Schmitt-Trigger.
Der davor geschaltete Schmitt-Trigger dient dazu, dass der kurze Impuls als deutlicher
Impuls erkannt werden kann. Der Eingang B des 74LS221 führt zum Schmitt-Trigger,
der tatsächlich nur die Flanke berücksichtigt. Die Steilheit der Flanke reicht bis zu einem
Wert von 1V/s aus um diese zu erkennen. Diese reicht deutlich aus um die Flanke zu
erkennen. Beim Eingang A würde diese nicht ausreichen, da hier eine Flankensteilheit
von 1V/us erforderlich wäre, die der Lichttaster nicht erbringen würde. Der SchmittTrigger sorgt also dafür, dass die Flanke und nicht der tatsächliche Wert für ein Schalten
verantwortlich ist.
Die folgende monostabile Kippstufe dient zur Impulsverlängerung. D.h., der kurze Schaltimpuls des Lichttasters, der von dem zuvor geschalteten Schmitt-Trigger aufbereitet
wurde, wird für eine bestimmte Zeit verlängert. Dies ist erforderlich, damit dieser Impuls auch garantiert vom XMOD Modul MCB-537 erfaßt werden kann.
4.3.4 Schaltung für die Impulserfassung und Impulsverlängerung
Die Länge des Impulses hängt von der äußeren Beschaltung, also von den Werten der
entsprechenden Widerstände und Kondensatoren ab. Laut Datenblatt 35 dürften die Werte für die Widerstände lediglich zwischen 2 kOhm und 70 kOhm variieren. Für die Low
Schottky (LS) Variante kann der Wert auf 100kOhm erhöht werden. Die Werte der
Kondensatoren dürften nur zwischen 10pFarad und 10uFarad variieren. Mit diesen Werten können allerdings die angegebenen Werte für die Impulszeit von 35ns bis 70s nicht
erreicht werden.
Aus Erfahrungswerten wurden die Werte für den Kondenstor und den Widerstand so
gewählt, dass der Wert für die Zeit ca. 1s beträgt. Wenn man berücksichtigt, dass das
Auto bei normaler Fahrt für eine Runde ca. 3-4s benötigt, so reicht die Zeit aus. Im
Gegenteil, es muss der von manchen Lichttastern verursachte Impuls der monostabilen
35
Siehe Anhang Datenblatt 74LS221
51
4 ELEKTRONIK
4.3 Platine für die Eingangssignalerfassung
Kippstufe durch den Clear-Eingang meist schon früher beendet werden.
Die Formel für die Berechnung der Zeit lautet: t = 0.7 ∗ R ∗ C
Dies geschieht durch den jeweils in der logischen Reihenfolge nächsten folgenden Lichttaster.
4.3.5 Verdrahtungsplan und IC 74LS221
Schaltplan der Platine für die Signalerfassung:
Abbildung 27: Schaltplan der Platine für die Signalerfassung
Aufbau des 74LS221:
52
4 ELEKTRONIK
4.3 Platine für die Eingangssignalerfassung
Abbildung 28: Aufbau monostabile Kippstufe mit Schmitt-Trigger
Dieser IC 74LS221 beinhaltet zwei Monovibratoren mit vorgeschaltetem Schmitt-Trigger.
Diese können mit der negativen oder positiven Flanke getriggert werden. Hier wird jedoch der Betrieb mit der positiven Flankentriggerung gewählt. Wird mit einer positiven
Flanke getriggert, so muss der Eingang von Pin 1, also 1A, mit Low-Level belegt werden. Da der Eingang von Pin 2, also 1B, zu einem Schmitt-Trigger führt, reicht hier
eine Flanke, deren Steilheit 1V/s betragen kann. Sobald die Schaltung getriggert ist, ist
sie unabhängig von weiteren Flanken an den Eingängen. Der Ausgangsimpuls läßt sich
verkürzen, indem der Clear-Eingang auf Low-Level gelegt wird.
Abbildung 29: Funktionstabelle IC 74LS221
Anhand der Funktionstabelle kann die Beschaltung leicht nachvollzogen werden. Bei
53
4 ELEKTRONIK
4.3 Platine für die Eingangssignalerfassung
der hier verwendeten Schaltung wurde die Schaltung entsprechend der vierten Zeile 36
verwendet.
Also um einen Ausgangsimpuls an Q bekommen zu können muss der Eingang A auf LowLevel und der Clear-Eingang auf High-Level liegen. Wird nun eine positive Flanke auf
den Eingang B gebracht, so ist für eine bestimmte Zeit 37 am Ausgang Q ein High-Level.
Die Beschaltung des 74LS221 38 wird wie folgt durchgeführt. Betrachtet wird die erste
monostabile Kippstufe. An Pin 16 wird die Versorgungsspannung von +5V und der
Widerstand angelötet. An Pin 15 wird die Kathode der Diode 1N4148 angebracht. An
Pin 14 wird der negative Anschluß des Elektrolytkondensators angelötet.
Pin 13 ist der Ausgangsimpuls, wenn an Pin 2 eine positive Flanke angelegt wurde.
Hierbei muss es sich lediglich um einen kurzen Impuls handeln. Der Clear-Eingang, also
Pin 3, muss standardmässig mit High-Level belegt sein. Muss der Ausgangsimpuls 1Q
des Pin 13 vor Ablauf der durch den Widerstand und Kondensator bestimmten Zeit
beendet werden, so muss der Clear-Eingang mit Low-Level belegt werden. Damit dies
geschieht, sobald der nächste Lichttaster einen Impuls liefert, wird der negierte Ausgang
des nächsten 74LS221 auf den Clear-Eingang gelegt. Damit wird der 1Q Ausgang auf
Low-Level gebracht, sobald der nächste Lichttaster betätigt wird.
Benötigt das Rennauto für einen Streckenabschnitt länger als die von der monostabilen Kippstufe eingestellte Zeit, so hat das keinerlei Auswirkungen, da der Zustand des
Lichttasters softwaremässig gespeichert wird.
Die zuvor beschriebene Schaltung ist nicht wegen der Speicherung des Schaltzustandes
des Lichttasters erforderlich, sondern wegen des zu kurzen Schaltimpulses des zu schnell
vorbeifahrenden Rennautos.
Die Federleiste ist wie folgt belegt:
• Pin 32c: Anschluß der positiven Versorgungsspannung der Steuerelektronik von
+5V.
• Pin 30a: Anschluß des Lichttasterausgangs 1 mit dem Eingang des ersten Festspannungsreglers.
• Pin 30c: Anschluß des Lichttasterausgangs 2 mit dem Eingang des zweiten Festspannungsreglers.
36
Siehe Abbildung 29
Siehe Formel für die Berechnung der Zeit vorherige Seite
38
Siehe Abbildung 28
37
54
4 ELEKTRONIK
4.3 Platine für die Eingangssignalerfassung
• Pin 28a: Anschluß des Lichttasterausgangs 3 mit dem Eingang des dritten Festspannungsreglers.
• Pin 28c: Anschluß des Lichttasterausgangs 4 mit dem Eingang des vierten Festspannungsreglers.
• Pin 26a: Anschluß des Lichttasterausgangs 5 mit dem Eingang des fünften Festspannungsreglers.
• Pin 26c: Anschluß des Lichttasterausgangs 6 mit dem Eingang des sechsten Festspannungsreglers.
• Pin 24a: Anschluß des Lichttasterausgangs 7 mit dem Eingang des siebten Festspannungsreglers.
• Pin 24c: Anschluß des Lichttasterausgangs 8 mit dem Eingang des achten Festspannungsreglers.
• Pin 2c: Ground für die Steuerlektronik von 5V.
Stückliste für die Steuerungsplatine:
• 1 Wannenstecker
• 8 Festspannungsregler 7805
• 4 IC-Sockel 16-polig
• 4 IC 74LS221
• 8 100kΩ Widerstände
• 8 8kΩ Widerstände
• 8 15µF arad Elektrolytkondensatoren
• 8 Dioden 1N4148
• 1 Europlatine
• 1 Messer- und Federleiste
55
4 ELEKTRONIK
4.3 Platine für die Eingangssignalerfassung
Abbildung 30: Platinenaufbau für die Erfassung der Lichttaster Signale.
Abbildung 31: Loetansicht des Platinenaufbaus für die Erfassung der Lichttaster Signale.
56
4 ELEKTRONIK
4.4 Montage
4.4 Montage
4.4.1 Befestigung der Platinen
Die Führungsschienen der Platinen werden durch die entsprechenden Winkel auf dem
Holzbrett befestigt. Diese Winkel sind handelsübliche Standardwinkel und wurden zusätzlich bearbeitet um die Befestigung korrekt anbringen zu können. Die Führungsschienen
sind mit der dazugehörigen Federleiste verschraubt, damit die Platine steckbar gemacht
werden konnte. An der Federleiste sind entsprechend zu jeder Platine die Drähte angeschlossen, wie Versorgungsspannung, Lichtschrankeneingänge oder Ausgang der Leistung
für das Carrera Rennauto.
Als Gegenstück wurde an der Platine die Messerleiste angelötet. Die Platine kann nun
mittels der Führungsschiene über die Messerleiste mit der Federleiste verbunden werden.
4.4.2 Befestigung der Lichtschranken
Die Lichtschranken werden über 10mm dicke Abstandhalter mit dem Brett, durch konventionelle Holzschrauben, verbunden. Auf einer Seite des Bretts, auf dem sich nicht
die Klemmreihe für die Verdrahtung befindet, wurden der Anschluß der Drähte steckbar
gemacht, damit das Holzbrett, welches aus zwei Hälften besteht, auch wirklich getrennt
werden kann. Sonst würde die Gefahr bestehen, dass die Drähte bzw. die Kontakte
rausgerissen werden.
4.4.3 Verdrahtung
Für die Verdrahtung wurden separate Klemmen verwendet, die mittels einer Hutschiene befestigt wurden. Das XMOD Modul MCB-537 wurde ebenfalls an der Hutschiene
befestigt. Hierbei handelt es sich um einen einfachen Schnappkontakt, also Befestigung
mittels Schrauben.
Die Lichtschrankenanschlüsse wurden alle an solche Klemmen angeschlossen und von
hier an die Federleiste der Platine, die für die Erfassung der Eingangssignale notwendig
ist, angelötet. Von dieser Platine wird über ein Flachbandkabel der Eingangsport A des
XMOD Moduls MCB-537 mit den Signalen der Lichtschranke verbunden.
57
5 Programmierung
5.1 Übersicht
Die auf dem Rechner implementierte Software teilt sich auf in
• Anzeige einer grafischen Benutzeroberfläche auf dem Bildschirm
Abbildung 32: Applet Carrera Rennbahn.
Die grafische Benutzeroberfläche wurde über die Klassen ABFrame, AutoBahn,
Auto und Lichtschranken implementiert.
5 PROGRAMMIERUNG
5.1 Übersicht
• Kommunikation das XMOD-Modul MCB-537 mit dem Rechner
Die Implementierung erfolgte über die Klasse Kommunikation 39 mit Hilfe des Pakets javax.comm.
• Das neuronale Netz. Die Implementierung erfolgte über die Klassen 40 NeuronalesNetz, Netz, NetzSchicht, NetzMuster und Neuron.
Abbildung 33: Klassendiagramm
39
40
vgl. 4.5 Klasse Kommunikation
vgl. Klassen 4.7-4.10
60
5 PROGRAMMIERUNG
5.2 Klasse ABFrame
5.2 Klasse ABFrame
In dieser Klasse wird das erforderliche Applet eingebettet. Man benötigt diese Vorgehensweise, da man Zugriff auf die serielle Schnittstelle benötigt und da über ein Applet
kein Zugriff möglich ist, wird das Applet in einem Fenster eingebettet.
Das benötigte Applet wird in der Klasse ABFrame angelegt und gestartet. Zum Schluß
wird das Applet hier ebenfalls wieder beendet.
5.3 Klasse AutoBahn
Hier werden für das Zeichnen des Autos die Startposition und der Startwinkel entsprechend der geladenen Bahn gesetzt. Das Auto selbst wird als Bild mittels der Klasse
MediaTracker geladen. Die Klasse MediaTracker wird verwendet, um auf den Abschluss
des Ladevorgangs zu warten.
Die Funktion GetImage(String pictureName) geht davon aus, dass Bilder oftmals über
langsame Netzwerkverbindungen geladen werden müssen und führt das Laden daher
asynchron mit Hilfe eines eigenen Threads aus. Daher muss das Programm warten, bis
das Bild vollständig geladen ist.
Dazu wird ein Objekt der Klasse MediaTracker instanziert, das in der Lage ist, den
Ladevorgang eines oder mehrerer Bilder durch Aufruf von waitForAll() zu überwachen.
Anschließend wird das fertige Bild in der Instanzvariablen imgAuto abgelegt.
Etwas schwieriger gestaltet sich das Zeichnen des Autos. Es muss schließlich berücksichtigt werden, dass das Auto in der Kurve um seine eigene Achse richtig gedreht wird.
Dafür wird die Klasse AffineTransformation des Packages java.awt.geom.AffineTrans”
form“ verwendet.
Je nachdem, wo das Auto gerade in der Kurve steht, wird der Winkel entsprechend
berechnet. Mit der Funktion rotate( winkel) wird nun das Auto um seine Achse gedreht und somit kommt beim Fahren ein übergangsloser Bewegungsablauf zustande. Die
Berechnung des Winkels wird über sinus- und cosinus Funktionen berechnet.
Die am Scrollbutton eingestellte Geschwindigkeit beeinflusst die Änderung der Bogenlänge
und damit die Geschwindigkeit des Autos. Je höher die Geschwindigkeit ist, desto höher
61
5 PROGRAMMIERUNG
5.4 Klasse Auto
ist die Pixelzahl pro Zeiteinheit, die das Auto sich beweget. Während auf der Geraden einfach die y-Koordinate mit der Geschwindigkeit addiert wird, muss in der Kurve
dies über den Kreisbogen erfolgen und daraus entsprechend die neue Position über die
Winkelfunktionen berechnet werden.
Je nachdem, in welchem Sektor sich das Auto befindet, wird der Bogen beim Eintritt in
den Kreissektor vorbelegt und aufgrund der Geschwindigkeit geändert und anschliessend
die neue Position berechnet. Aufgrund der Synchronisation wird zu Beginn jeder Runde
der Defaultwert gesetzt.
5.4 Klasse Auto
Die Klasse AutoBahn wurde von Applet abgeleitet. Zusätzlich wurden die Schnittstellen
Runnable, ActionListener, AdjustmentListener, MouseListener, MouseMotionListener
implementiert.
Die Schnittstelle Runnable ist zwingend notwendig, damit für das Fahren des Autos ein
eigener Thread gestartet werden kann.
Damit eine Kommunikation mit dem XMOD-Modul MCB-537 möglich ist, wird eine
Instanz der Klasse Kommunikation angelegt, der das Objekt Auto als Parameter übergeben wird.
Das Auto wird mit dem Thread t auto repräsentiert. Der Thread wird mit dem Befehl
t auto.start() gestartet. Anschliessend wird in die Methode run() gesprungen, die nach
dem Setzen benötigter Hilfsvariablen bzw. Zählvariablen in eine while-Schleife verzweigt.
Falls der Start-Button betätigt und vom Scrollbalken eine bestimmte Geschwindigkeit
eingestellt wurde, wird in die Methode bewegen() der Klasse Auto gesprungen und zwar
durch den Aufruf myAuto.bewegen().
Zu Beginn kann noch kein Lichttaster durch das Rennauto betätigt werden, da das Rennauto noch nicht fährt. Somit ist ein manuelles Starten durch den Scrollbalken erforderlich
und es muss schließlich ein bestimmter Zykluswert vorgegeben werden.
Applet des Projekts:
62
5 PROGRAMMIERUNG
5.4 Klasse Auto
Abbildung 34: Applet Carrera Rennbahn.
63
5 PROGRAMMIERUNG
5.5 Klasse Kommunikation
5.5 Klasse Kommunikation
Die Klasse Kommunikation dient zur Realisierung der softwaremässigen Kommunikation des XMOD-Moduls MCB-537 mit dem Rechner. Dies erfolgt unter Verwendung des
Packets javax.comm von Sun. Dieses Packet kann von der Homepage von Sun runtergeladen und erst verwendet bzw. benutzt werden, wenn folgende Einstellungen vorgenommen
wurden.
• w in32com.dll muss in das Verzeichnis \jdk\jre\bin kopiert werden.
• comm.jar muss in das Verzeichnis \jdk\jre\lib ext kopiert werden.
• j avax.comm.properties muss in das Verzeichnis \jdk\jre\lib kopiert werden.
Es muss beachtet werden, dass diese Dateien ebenfalls in das Verzeichnis <jre> kopiert werden müssen, denn ansonsten funktioniert die Kommunikation mittels serieller
Schnittstelle nicht.
Mit der Anweisung import javax.comm.*; werden die Klassen geladen.
Zuerst muss eine Referenz auf den verwendeten COM1 Port, also die serielle Schnittstelle, erzeugt werden. Anschliessend wird mittels dieser Referenz ein Input- und ein
Outputstream erzeugt werden.
In der Klasse Kommunikation.class wurde eine Klasse commListener implementiert, die
den SerialPortEventListener implementiert. Hier wird die Funktion serialEvent(SerialPortEvent e) verwendet, die aufgerufen wird, sobald mittels der angelegten Input- bzw.
Outputstreams Daten gelesen bzw. geschrieben werden.
Zu Beginn muss die serielle Schnittstelle initialisiert werden. Hierbei wurde die Schnittstelle mit folgenden Parametern initialisiert:
• B audrate = 4800 (Bei höherer Baudrate muss im XMOD-Modul MCB-537 der
Dip-Schalter SW1-2 auf ON gestellt werden).
• d atabits = DATABITS 7
• stopBits = STOPBITS 1
• parity = PARITY EVEN
64
5 PROGRAMMIERUNG
5.5 Klasse Kommunikation
Bei falscher Initialisierung werden die Daten der seriellen Schnittstelle falsch eingelesen
bzw. falsch rausgeschrieben.
Die Eingangsports Port A und Port B haben keine Interruptfähigkeit, weshalb diese
Eingänge gepollt werden müssen.
Die Abfrage der Eingänge findet in der Funktion sersAbfragen( ) 41 statt, d.h. hier wird
der Befehl !IA$ bzw. !IB$ an das XMOD-Modul MCB-537 gesendet. Anschliessend wird
innerhalb der Klasse Kommunikation in die Funktion serialEvent(SerialPortEvent e)
gesprungen. Es wird nun der Zustand der Ports, der vom Betriebssystem des MCB-537
an die serielle Schnittstelle gesendet wurde, ausgelesen. Dieser liegt als Hexadezimalwert
vor. Daher muss dieser Wert mittels der Funktion dezimalWandeln( String hexWert,
String port) in den entsprechenden Dezimalwert gewandelt werden.
Der vom XMOD-Modul MCB-537 rausgelesene String kann mehrere Rückgaben enthalten, d.h. sowohl die Zustände der Eingangsports A und B, als auch die Rückmeldung der
dem Ausgangsport E gesendeten neuen Wertes. Daher muss dies vom gesamten String
entsprechend extrahiert werden.
Die Funktion rauslesen( String eingang) realisiert die geforderte Extraktion der vom
XMOD-Modul MCB-537 zurückgesendeten Werte.
Die Rückmeldung des Ausgangsports E wird zwar nicht benötigt, jedoch lässt sich diese
Funktion des Betriebssystems des XMOD-Moduls MCB-537 nicht deaktivieren. Um diese
Funktion dennoch positiv zu nutzen, kann der zurückgemeldete Wert mit dem gesendeten
Wert verglichen werden und somit können Fehler erkannt werden.
Es muss beachtet werden, dass eine häufige Änderung der Spannung und somit ein
häufiges Schreiben an den Ausgangsport zu Performanceproblemen führen kann. Dies
liegt daran, dass durch Schreiben an die serielle Schnittstelle dauernd die Funktion serialEvent( SerialPortEvent event) aufgerufen wird. Daher wird der Thread, der für die
Animation, also der Bewegung des Carrera Rennautos zuständig ist, unterbrochen wird
und somit bleibt das Auto stehen.
Dieses Problem ergibt sich für die Polling Funktion der Eingangsports A und B nicht,
41
Funktion sersAbfragen( ) in der Klasse Kommunikation der Datei Kommunikation.java
65
5 PROGRAMMIERUNG
5.6 Klasse Lichtschranke
da hier nach jedem Aufruf eine gewisse Zeit gewartet wird, bevor erneut die Eingänge
abgefragt werden.
Damit jedoch keine Änderung des Zustandes der Eingangsports A und B aufgrund zu
langer Wartezeit verloren geht, wird der Faktor in der Funktion Thread.sleep( faktor )
mit höherer Geschwindigkeit des Autos ebenfalls kleiner. Ein zu kleiner Faktor, also eine
zu häufige Abfrage der Eingangsports A und B führen jedoch ebenfalls zu dem bereits
erwähnten Performanceproblem.
In der Funktion neuronalesNetzReaktion() wird die Funktion myNeuronalesNetz.reaktion(
int wertLichtschranke, int myAuto.kontrollGeschwindigkeit) aufgerufen. Die Funktion
neuronalesNetzReaktion() wird in der Funktion run der Klasse Kommunikation aufgerufen. Diese Funktion ruft, wie bereits erwähnt, die Funktion reaktion( int, int) der
Klasse NeuronalesNetz auf. Dies ist hier erforderlich, da je nach Änderung der Eingabe
an das neuronale Netz, die erforderliche Reaktion geholt bzw. angefordert werden muss.
Da die Klasse Kommunikation die Änderung bzw. das Schalten der Lichttaster einliest,
muss hier nach erneuter Positionserfassungsänderung die neue Position an das neuronale
Netz gesendet werden, damit das neuronale Netz nun entsprechend reagieren kann.
5.6 Klasse Lichtschranke
Die Klasse Lichtschranke wird für das Zeichnen der an der Rennbahn angebrachten
Lichttaster benötigt. Damit eine schnelle Änderung der Position der Lichttaster sowohl
Visualisierungtechnisch, als auch hardwaremässig schnell möglich ist, werden die Lichttaster ausserhalb der Bahn angebracht, also nicht in der Bahn eingebettet.
Eine Positionsänderung der Lichttaster kann deshalb erforderlich sein, um Einfluß auf
Streuungen aufgrund des Praxiseinsatzes zu haben, sprich die Änderung z.B. des übergangs von der Geraden auf die 180 Grad Kurve kann schon zu einem früheren Zeitpunkt
erforderlich werden.
Ein Objekt der Klasse Lichtschranke wird in der Klasse AutoBahn angelegt. Dem Konstruktor der Klasse Lichtschranke wird das zuvor in der Klasse AutoBahn geladene
Lichtschranken Image übergeben. Dies wurde deshalbe gemacht um nicht nochmals einen
Image-Ladevorgang vornehmen zu müssen.
In der Klasse Lichtschranke werden alle Werte, wie die Positionen der Lichtschranken
und der Drehwinkel hardgecodet.
66
5 PROGRAMMIERUNG
5.7 Klasse NeuronalesNetz
In der Funktion drawLichtschranken( Graphics g, java.awt.image.ImageObserver observer)
werden die einzelnen Lichtschranken gezeichnet.
Damit ein Drehen der Lichtschranken möglich ist, muss ein Objekt der Klasse AffineTransform angelegt werden. Mittels der Funktion AffineTransform.rotate( winkel, posX,
posY) werden die Lichtschranken letztendlich gezeichnet. Damit die nachfolgenden Lichtschranken ebenfalls gezeichnet werden können, muss nach dem Zeichnen der vorherigen
Lichtschranke die Funktion AffineTransform.rotate( -winkel, posX, posY) aufgerufen
werden. Wird dies nicht gemacht, so werden die Lichtschranken an nicht definierbaren
Stellen gezeichnet.
5.7 Klasse NeuronalesNetz
Die Klasse NeuronalesNetz ist die Hauptklasse des Backpropagation Netzes. Hierin ist
festgelegt wieviele Eingabeneuronen und Ausgabeneuronen das Netz hat. Außerdem ist
die Anzahl der inneren Schichten angegeben. Im Konstruktor NeuronalesNetz( AutoBahn) wird eine Instanz der Klasse Netz aufgerufen, die als Parameter die Neuronenanzahl und Schichtenanzahl übergeben bekommt.
Die Funktion lernen( int) ist für den Aufruf des Lernvorgangs des eigentlichen Netzes
verantwortlich.
Diese Klasse gibt das entsprechende Eingabemuster an das neuronale Netz weiter. Hierin
wird das jeweilige Eingabemuster per Zufallswert bestimmt und anschlieend der eigentlichen lernen-Methode übergeben.
Die Funktion reaktion( int, double) leitet die Eingabe an das neuronale Netz weiter und
nimmt die Reaktion des Netzes auf. Es findet damit die Auswertung des neuronalen
Netzes statt.
5.8 Klasse Netz
In dieser Klasse werden die Neuronen der entsprechenden Schichten angelegt, initialisiert
und verbunden. Außerdem sind hier die Werte für das Momentum, also alpha, und der
Lernrate angegeben.
Im Konstruktor Netz( int, int) werden die Schichten angelegt und die Funktion initiali-
67
5 PROGRAMMIERUNG
5.9 Klasse NetzSchicht
sierungSchicht() und anschließend die Funktion verbindungNeuronen() aufgerufen.
In der Funktion initialisierungSchicht() werden je nach Schichttyp, also Eingabeschicht,
Ausgabeschicht oder innere Schicht die entsprechenden Instanzen der Klasse NetzSchicht(
int schichtTyp, int neuronenAnzahl, int neuronenAnzahlVorgaenger, int neuronenAnzahlNachfolger) angelegt. Beim Typ Eingabeschicht sind keine Vorgängerneuronen vorhanden. Dies ist hier bei der Initialisierung zu beachten.
In der Funktion verbindungNeuronen() werden die einzelnen Neuronen der jeweiligen
Schichten mit den darüberliegenden bzw. darunterliegenden Neuronen der entsprechenden Schichten verbunden.
Die Funktion feedForward() ruft entsprechend der Anzahl der Schichten des Netzes ihre
eigene Funktion feedForward() auf.
Die Funktion feedBackward( int MusterNummer) propagiert nun den berechneten Fehler Schicht für Schicht wieder zurück. Dazu wird in dieser Funktion die entsprechende
feedBackward() Funktion der Klasse NetzSchicht aufgerufen. Es ist zu beachten, dass
der Ausgabewert nur bei der letzten Schicht, also der entsprechenden Ausgabeschicht,
gesetzt wird. Dieser ist schließlich zu optimieren.
5.9 Klasse NetzSchicht
Diese Klasse repräsentiert nun die entsprechende Schicht. Es wird also für jeden Schichttyp bzw. für jede vorhandene Schicht eine Instanz der Klasse Netzschicht angelegt. Diese
Klasse beinhaltet Variablen wie den Schichttyp, die Anzahl der Neuronen dieser Schicht,
die Anzahl der Neuronen der Vorgängerschicht, die Anzahl der Neuronen der Nachfolgerschicht und ein Array mit der Anzahl der Neuronen der aktuellen Schicht.
In der Funktion feedForward() wird nun für jedes Neuron der Schicht explizit die Funktion feedForward bezüglich des Neurons aufgerufen.
In der Funktion feedBackward( double eingabeMuster[], double epsilon, double momentum) werden je nach Schichttyp folgende Funktionen aufgerufen:
innere Schicht: Zuerst wird für jedes Neuron der aktuellen Schicht die Funktion fehlerberechnungInneresNeuron( int i) und anschließend die Funktion berechnungGewichte(
epsilon, momentum) aufgerufen.
68
5 PROGRAMMIERUNG
5.10 Klasse Neuron
Ausgabeschicht: Zuerst wird für jedes Neuron der Ausgabeschicht die Funktion berechnungAusgabeFehler( eingabeMuster[i]) und danach ebenfalls die Funktion berechnungGewichte( epsilon, momentum) aufgerufen.
Für die Eingabeschicht ist keine Aktion erforderlich, da hier die Propagierung abgeschlossen ist.
5.10 Klasse Neuron
Die Klasse Neuron repräsentiert jedes einzelne Neuron selbst. D.h., es wird für jedes
Neuron einer Schicht eine Instanz der Klasse Neuron angelegt.
Dabei hat jedes Neuron folgende Variablen:
• V ector neuronenVorgaenger: Verbindung mit Vorgängerneuronen
• V ector neuronenNachfolger: Verbindung mit Nachfolgerneuronen
• d ouble gewicht[]: Array mit den Gewichten vom Neuron zu allen Neuronen der
darunterliegenden Schicht.
• d ouble deltaw[]: Array mit der Gewichtsänderung vom Neuron zu allen Neuronen
der darunterliegenden Schicht
• d ouble ausgabewert: Ausgabewert des aktuellen Neurons
• d ouble delta: Fehler der Neuronenausgabe
• int neuronenAnzahlVorgaenger: Anzahl der Neuronen der darüberliegenden Schicht
• int neuronenAnzahlNachfolger: Anzahl der Neuronen der darunterliegenden Schicht
Im Konstruktor Netz( int neuronenAnzahlVorgaenger,int neuronenAnzahlNachfolger)
werden die entsprechenden Werte gesetzt. Anschließend wird die Funktion ruecksetzen
aufgerufen.
In dieser Funktion werden allen Gewichten zufällige Gewichtswerte von -1 bis +1 zugewiesen. Aufgrund dieser Aktion wird kein Biaswert benötigt.
69
5 PROGRAMMIERUNG
5.10 Klasse Neuron
In der Funktion feedForward() wird der Aktivierungswert für das jeweilige Neuron berechnet.
Die Funktion sigmoideFunktion( double param) wird zur Bestimmung des Extremwertes
nach dem Gradientenverfahren benötigt.
Die Funktion berechnungFehler( int schichtTyp, double ziel, int pos) berechnet den Fehler
entsprechend des Schichttyps.
Berechnung innere Schicht:
δj = oj ∗ (1 − oj ) ∗
X
(δk ∗ wj,k )
k
Berechnung Ausgabeschicht:
δj = (tj − oj ) ∗ oj ∗ (1 − oj )
Die Funktion berechnungGewichte( double epsilon, double momentum) dient zur Berechnung der Gewichtsänderung und der Gewichte zwischen dem aktuellen Neuron und dem
verbundenen Neuron. Die Formel für die Gewichtsänderung lautet:
∆wi,j (t + 1) = α ∗ ∆wi,j (t) + ² ∗ δj ∗ oi
Die Formel für die Gewichtsberechnung lautet:
gewicht(t) = gewichti + ∆wi,j (t)
70
6 Neuronales Netz
6.1 Allgemeine Beschreibung
Künstliche Neuronale Netze auf der Basis von Backpropagation 4243 sind die zur Zeit
für praktische Anwendungen am häufigsten eingesetzten Netze. Das BackpropagationVerfahren wurde in den 70er Jahren von mehreren Autoren unabhängig voneinander
vorgeschlagen, so z.B. von Paul Werbos 1974. Danach gelangte es für über 10 Jahre
in Vergessenheit, bis es - wiederum unabhängig voneinander - von mehreren Autoren
wiederentdeckt wurde. Am bekanntesten wurde die Veröffentlichung von Rumelhart,
Hinton und Williams in dem 1986 erschienenen Buch Parallel Distributed Processing:
Explorations in the Microstructure of Cognition, Volume 1: Foundations.
Wie bei vielen anderen Arten von Künstlichen Neuronalen Netzen, gibt es nicht das
Backpropagation-Netz, sondern eine Menge von unterschiedlichen Netzen, die die im
folgenden beschriebenen Gemeinsamkeiten aufweisen. Anstelle des Begriffes Backpropagation-Netz werden auch die Begriffe multilayer perceptron (MLP) oder multilayer
MADALINE verwendet, obwohl diese beiden Begriffe nicht ganz korrekt sind.
Die Basis für Backpropagation-Netze 44 bildet ein mehrschichtiges feedforward-Netz, bestehend aus einer Eingabeschicht, einer Ausgabeschicht und mindestens einer inneren bzw. verborgenen Schicht (Hidden-Layer). Backpropagation-Netze können sich also
in der Topologie unterscheiden. Die folgenden Eigenschaften treffen jedoch für jedes
Backpropagation-Netz zu. Backpropagation-Netze 45 bestehen aus einer Eingabeschicht,
einer Ausgabeschicht und mindestens einer verborgenen Schicht.
Weitere Eigenschaften sind:
• Die Neuronen sind in H Schichten angeordnet mit H >= 3.
• Die erste Schicht U0 besteht aus n Eingabe- oder auch Verteilerneuronen. Diese Neuronen besitzen keine Eingangs-Gewichte und sie reichen die Eingabe unverändert an die zweite Schicht weiter.
• Die folgenden H-2 Schichten U1 bis UH−2 sind verborgene Schichten.
42
Siehe
Siehe
44
Siehe
45
Siehe
43
Dokumentation Uni-Münster
Skript Neuronale Netze 2003 von Herrn Professor Jürgen Sauer
Abbildung 35
Abbildung Topologie eines Backpropagation Netzes
6 NEURONALES NETZ
6.1 Allgemeine Beschreibung
• Die H-1-te Schicht UH−1 besitzt m Ausgabeneuronen.
• Die ersten Schichten können zusätzlich ein konstantes Bias-Neuron besitzen.
• Als Aktivierungsfunktion dient in allen nicht-konstanten Neuronen ausserhalb der
Eingabeschicht im Regelfall die gewichtete Summe der Eingaben.
Abbildung 35: Topologie eines Backpropagation Netzes.
Die Verbindungsstruktur (Topologie) wird in Form einer Matrix beschrieben. Zeilen
und Spalten identifizieren die Neuronen (Units, Zellen), in den Kreuzungspunkt wird
das Gewicht der Verbindung geschrieben.
Für die Matrix gilt dann:
• wij = 0 : Keine Verbindung von Neuron i zu Neuron j
• wij < 0 : hemmende Verbindung der Stärke wij
• wij > 0 : anregende Verbindung der Stärke wij
Für die meisten Backpropagation-Netze gilt ferner:
• Als Ausgabefunktion wird in allen nicht-konstanten Neuronen der verborgenen
Schichten eine sigmoide Funktion benutzt.
• Die Neuronen der Eingabeschicht und der Ausgabeschicht besitzen die Identitätsfunktion als Ausgabefunktion.
72
6 NEURONALES NETZ
6.1 Allgemeine Beschreibung
Ferner sei #(Ui ) die Anzahl der nicht-konstanten Neuronen in Ui . Bei den weiteren
Ausführungen wird meistens aus Gründen der Übersichtlichkeit auf die Verwendung von
konstanten Neuronen weitgehend verzichtet. Bei vollständig vernetzten BackpropagationNetzen steht oft die Bezeichnung: #(U0 ) − #(U1 ) − ... − #(UH−2 ) − #(UH ) − N etz für ein
Netz mit #(U0 ) Neuronen in der Eingabeschicht,#(U1 ) Neuronen in der 1. verborgenen
Schicht usw. und #(UH−2 ) Neuronen in der letzten verborgenen Schicht und #(UH−1 )
Neuronen in der Ausgabeschicht.
Nh,i bezeichnet das i-te Neuron der h-ten Schicht; die konstanten Neuronen besitzen den
Index i=0. Die Ausgabe von Nh,i wird entsprechend als oh,i gekennzeichnet. Das Gewicht
für eine Verbindung zwischen Nh−1,j und Nh,i wird mit wh,i,j gekennzeichnet.
Das Lernen erfolgt bei den Backpropagation-Netzen durch überwachtes Lernen.
Im Prinzip laufen alternierend die folgenden Schritte ab:
1. Feedforward
In diesem Schritt wird dem Netz ein beliebiger Eingabevektor aus der Trainigungsmenge
→
eingegeben (präsentiert). Ist #U0 = n so ist −
x = (x1 , ..., xn ).
In der Schicht U1 wird bei jedem Neuron zunächst die Aktivierung über die Aktivierungsfunktion (i. allg. gewichtete Summe der Eingaben) berechnet und danach mittels
der Ausgabefunktion die Ausgabe ermittelt. Die Ausgaben der Schicht bilden die Eingabe für die Schicht U2 usw. Die Daten durchlaufen somit schichtweise das Netz (von oben
→
nach unten) bis die Ausgabeschicht einen Vektor −
o = (o1 , ..., om )T mit m = #(UH−1 )
liefert.
2. Bestimmung des Fehlers
−
→
→
Die vom Netz gelieferte Ausgabe −
o wird mit der korrekten Ausgabe 46 t verglichen.
Liegt der Fehler unterhalb einer vorgegebenen Güteschwelle, so wird das Training abgebrochen und gegebenfalls eine spezielle Testphase eingeleitet, andernfalls erfolgt die
Selbstmodifikation durch Schritt 3.
3. Feedbackward
46
−
→
−
Da →
x aus der Trainingsmenge ist, ist t bekannt
73
6 NEURONALES NETZ
6.1 Allgemeine Beschreibung
Der Feedbackward erfolgt in umgekehrter Richtung wie der Feedforward. In ihm werden
sukzessive die Gewichte, beginnend mit den Gewichten der Ausgabeschicht UH−1 , d.h.
die Gewichte an den Kanten von den Neuronen der Schicht UH−2 nach UH−1 , nach einer
vorgegebenen Lernregel verändert.
−
→
−
→
−
Zunächst wird die erwartete (korrekte) Ausgabe t (bzw. die Differenz |→
o − t | ) benutzt, um die Gewichte von UH−1 zu ändern. Die neuen Gewichte von UH−1 (bzw. deren
Änderungen) dienen als Basis für die Änderung der Gewichte der Schicht UH−2 usw.
Die Fehlerkorrektur (Änderung der Gewichte) erfolgt also schichtenweise von oben nach
unten, bis zum Schluss die Gewichte der Schicht U1 verändert sind.
Wie bereits erwähnt, stellen die Trainingsdaten Stützstellen dar, über die das Backpropagationnetz eine Funktion approximiert (interpoliert). Um zu garantieren, dass das Netz
auch außerhalb dieser Stützstellen, für die im 2. Schritt der Fehler bestimmt wird, eine
genügende Genauigkeit besitzt, muss das Netz durch spezielle Testdaten, die disjunkt
zu den Trainigungsdaten sind, getestet werden. Dies geschieht im Regelfall dann, wenn
für alle Trainingsdaten im 2. Schritt die gewünschte Genauigkeit erreicht wurde. Liefern hierbei die Testdaten noch keine gewünschte Genauigkeit, so muss weiter trainiert
werden.
Hinsichtlich des Zeitpunktes der Anpassung der Gewichte (Einleitung des 3. Schrittes)
sind zwei Variationen möglich
• E rfolgt die Anpassung der Gewichte (Feedbackward) nach jeder Präsentation eines
Beispiels, so wird von online-Training gesprochen.
• W ird die Anpassung erst nach der Präsentation mehrerer Beispiele, z.B. auf der
Basis des durchschnittlichen Fehlers, vorgenommen, so wird von offline- oder batchTraining gesprochen.
Unter einem Trainingszyklus (Epoche, sweep) wird die vollständige Präsentation aller
Trainigungsbeispiele (jedes genau einmal) verstanden. Üblicherweise werden Netze in
mehreren Zyklen trainiert. Da die Gefahr besteht, dass das Backpropagationnetz die
Reihenfolge der Trainingsdaten lernt (ein Effekt, der z.B. auch beim Vokabellernen auftritt), sollte die Reihenfolge der präsentierten Beispiele in jedem Zyklus unterschiedlich
sein.
Dies wird dadurch erreicht, dass das Eingabemuster zufällig vorgegeben wird.
74
6 NEURONALES NETZ
6.2 Fehlerbestimmung
6.2 Fehlerbestimmung
Für das Trainieren eines Netzes bzw. um Aussagen über seine Güte machen zu können,
ist die Bestimmung des Netzfehlers von besonderer Bedeutung. Da ein Backpropagation→
netz für einen Eingabevektor −
x und eine fest vorgegebene Belegung aller Gewichte im
Netz stets die gleiche Ausgabe liefert, lässt sich das Ein/Ausgabeverhalten des Netzes
als Funktion oN etz darstellen. Sei q die Gesamtanzahl der Gewichte im Netz und Für
→
−
→
ein gegebenes Trainings- oder Testdatum (−
x , t ) ist die Güte (Fehler) der Netzausgabe
→
− −
zunächst gegeben durch t − →
o . Wird f als die zu lernende Funktion bezeichnet, so gilt
−
→
−
→
→
→
→
t = f ( x ) und für die Güte gilt zunächst f (−
x ) − oN etz (−
x ,−
w ).
Da es jedoch nicht sinnvoll ist, zwischen positiven und negativen Fehlern zu unterscheiden, wird üblicherweise der sogenannte quadratischen Fehler verwendet:
→
→
Der quadratische Fehler F eines Backpropagationnetzes ist für gegebenes −
x und −
w
definiert durch:
→
→
→
→
−
F (−
x ,−
w ) = |f (−
x)−o
(−
x ,→
w )|2
N etz
Durch die obige Definition kann jedoch nur eine Aussage über die Güte des Netzes hin→
sichtlich der konkreten Eingabe −
x gemacht werden. Gewünscht ist jedoch eine Güteaussage hinsichtlich aller möglichen Eingabevektoren. Hierzu muss der quadratische Fehler
→
für möglichst viele Eingabevektoren −
xk , k = 1, 2, ... bestimmt und danach gemittelt werden. Somit lässt sich die mittlere quadratische Fehlerfunktion bestimmen, die wie folgt
definiert ist:
N
1 X −
→
−
−
F ( w ) = lim
F (→
xk , →
w)
n→∞ N
k=1
Der mittlere quadratische Fehler ist das am häufigsten verwendete Fehlermass. Es gibt
jedoch auch eine Reihe von Anwendungen, z.B. bei der Bildverarbeitung, bei denen
andere Fehlermasse sinnvoll sind.
Die quadratische Fehlerfunktion besitzt eine Reihe von Eigenschaften, von denen für
Backpropagation-Netze insbesondere die folgenden relevant sind:
→
• F (−
w ) existiert, da die Reihe konvergiert
→
−
• F (−
w ) ist stetig und differenzierbar in →
w
→
• F (−
w ) >= 0
75
6 NEURONALES NETZ
6.3 Lernregel
→
→
→
Wird nun −
w Variiert, so lässt sich F (−
w ) für jedes −
w bestimmen. Wird nun für alle
−
→
→
möglichen Gewichtskombinationen w , die quadratische Fehlerfunktion F (−
w ) ermittelt
−
→
und wird mit W der Vektorraum aller w ermittelt, so ergeben, grob gesprochen, alle
Werte zusammen die Fehlerverlaufskurve bezüglich W.
→
Ziel der Gewichtsveränderungen ist es nun, eine Belegung −
w−
min aller Gewichte des Netzes
derart zu finden, so dass F ein absolutes Minimum Fmin > 0 ist.
→
Bei der folgenden Darstellung ist zu beachten, dass die einzelnen −
w auf der W-Achse 47
selbst mehrdimensional sind. Die folgende Abbildung ist daher aus Darstellungsgründen
nur zweidimensional dargestellt und entsprechend vereinfacht. Genauer wird also durch F
eine Oberfläche über dem Raum der möglichen Gewichtsvektoren des Backpropagation→
−
Netzes definiert. F (−
w ) gibt die Höhe dieser Fehleroberfläche in →
w an.
6.3 Lernregel
Es wird noch einmal die Fehlerverlaufskurve betrachtet. Zu einem gegebenen Gewichts→
−
−
→
→
vektor −
w des Backpropagation-Netzes gehört ein bestimmter Punkt (w0 , F (w0 )) auf der
−
→
−
→
quadratischen Fehlerverlaufskurve. Gesucht ist ein Verfahren, das w0 auf der W -Achse
−
→
→
−
so verschiebt, dass (w0 , F (w0 )) in ein globales Minimum bewegt wird.
Abbildung 36: Fehlerverlaufskurve.
47
Siehe Abbildung Fehlerfunktion
76
6 NEURONALES NETZ
6.3 Lernregel
Das Backpropagation-Verfahren beruht nun auf einem Gradientenabstiegsverfahren:
−
→
Im Punkt w0 wird die Tangente an der Oberfläche der quadratischen Fehlerfunktion 48
bestimmt und auf der Tangente um eine gewisse vorgegebene Länge abgestiegen. Da−
→
durch lässt sich der Gewichtsvektor w00 bestimmen, zeichnet erneut die Tangente und
wiederholt das Verfahren.
Abbildung 37: Gradientenverfahren in der Fehlerverlaufskurve.
Ist nun das Minimum erreicht, so ist das Gradientenverfahren 49 beendet. Es kann allerdings nicht unterschieden werden, ob es sich um das lokale oder globale Minimum
handelt. Gesucht ist immer das globale Minimum.
48
49
Siehe Abbildung 37
Siehe Abbildung Fehlerverlaufskurve Minimum
77
6 NEURONALES NETZ
6.4 Trainingsalgorithmus
Abbildung 38: Fehlerverlaufskurve.
6.4 Trainingsalgorithmus
Das Training mit der erweiterten Delta-Regel besteht aus zwei Teilen. Zuerst wird ein
zufällig von den Netzmustern ausgewähltes Eingabemuster an die Eingangsneuronen
geschaltet, womit durch Berechnung mittels der Aktivierungs- und Ausgabefunktionen
Schicht für Schicht die jeweilige Ausgabe berechnet wird. Diese sind die Eingaben für
die nächste Schicht, bis die letzte Schicht, also die Ausgabeschicht erreicht wird.
Anschließend im zweiten Teil, wird nun dieser Wert der Ausgabeschicht mit dem gewünschten Ausgabewert verglichen. Aufgrund des Fehlers δ der sich aus durch Subtraktion von
Zielausgabe und tatsächlicher Ausgabe ergibt, wird mittels der Formel der Fehler jedes
einzelnen Neurons bezüglich des Gesamtfehlers berechnet.
Zuerst wird für die Neuronen der Ausgabeschicht mit der Formel δj = (tj −oj )∗oj ∗(1−oj )
eine entsprechende Berechnung durchgeführt.
Sind alle Fehler δ für die Ausgabeschicht berechnet, so kann nun dieselbe Berechnung
für die Vorgängerschicht stattfinden. Hierbei handelt es sich allerdings um eine innere
P
Schicht, für die der Fehler δ mit der Formel δj = oj ∗ (1 − oj ) ∗ k (δk ∗ wj,k ) berechnet
werden muss. Dies wird nun solange von unten nach oben fortgesetzt, also propagiert,
bis die Eingabeschicht erreicht ist.
78
6 NEURONALES NETZ
6.4 Trainingsalgorithmus
Algorithmus für das Backpropagation Netz:
1.
a) Zufälliges Initialisieren der Anfangsgewichte mit Werten von -1 bis +1
b) Festlegung der Lernschrittanzahl
2. Lernschritt inkrementieren und jeden Schritt für jedes Trainingsmuster wiederholen
a) Anlegen eines zufällig gewählten Eingangsvektors aus der Menge der Eingangsvektroen. Ermittlung tatsächliche Ausgabe und Berechnung der Fehlerausgabe δi zwischen Zielausgabe und tatsächlicher Ausgabe. Dabei werden
ebenfalls die Ausgaben aller anderen Neuronen der Neuronenschichten des
Netzes bestimmt, die nicht zur Ausgabeschicht gehören. Hierbei handelt es
sich um den Feedforward-Schritt.
b)
i. Bestimmen des Fehlers δi der Neuronen in der Ausgabeschicht mittels
der Formel
δj = (tj − oj ) ∗ oj ∗ (1 − oj )
ii. Rekursive Berechnung der Fehler für die Elemente der Vorgängerschicht,
also der inneren Schichten mittels der Formel
X
(δk ∗ wj,k )
δj = oj ∗ (1 − oj ) ∗
k
c) Berechnung des Fehlers EM für das Muster M und Addition
N
EM
1 X
= ∗
∗(ti − oi )2
2 i=1
E := E + EM
d) Berechnung der neuen Gewichtswerte:
wij (t + 1) = wij (t) + ² ∗ δi ∗ α
3. Solange ab Schritt 2 wiederholen, bis Lernschrittanzahl erreicht
Der Trainingsvorgang eines Backpropagation Netzes ist also ein Optimierungsvorgang.
Die Optimierungsproblematik besteht darin, die Trainingsmenge mit minimalem Fehler
zu reproduzieren. Die zu optimierenden Parameter sind die Gewichte wij des Netzes, die
entsprechend ermittelt werden müssen. Der resultierende Gesamtfehler E ist ausschlaggebend für das Training des Netzes.
79
6 NEURONALES NETZ
6.5 Auswahl Anzahl innerer Schichten
6.5 Auswahl Anzahl innerer Schichten
Im Allgemeinen steigert die Anzahl innerer Schichten die Mächtigkeit des Netzes. Allerdings gibt es keine Möglichkeit die optimale Anzahl innerer Schichten für ein spezielles
Problem zu bestimmen. Die Praxis hat gezeigt, dass häufig eine innere Schicht ausreicht.
Aber auch die optimale Anzahl der Neuronen in einer verborgenen Schicht wird durch
das Problem bestimmt. Generell kann Folgendes über die Anzahl der inneren Einheiten
in einem Backpropagation-Netz festgehalten werden:
Anzahl innerer Schichten zu klein:
• Das Backpropagation-Netz kann das Problem nicht lösen.
Anzahl innerer Schichten zu gross:
• E s besteht die Gefahr des Overtrainings.
• Das Problem wird nur Teilweise durch Generalisierung erkannt.
• Die überflüssigen Einheiten sind ausschließlich zur Erkennung der restlichen.
• T rainingsmuster bestimmt (quasi lokale Speicherung).
• E s wird keine grundlegende Abbildungsvorschrift gefunden.
Zur Festlegung der für diese Diplomarbeit benötigte Anzahl an inneren Schichten wurde
mit jeweils geänderter Anzahl an inneren Schichten gelernt und das Ergebnis ausgewertet.
Es wurde festgestellt, dass bereits bei einer vorhandenen inneren Schicht das Problem
gelöst werden konnte.
Wurde die Schichtenanzahl sukzessive erhöht, so führte dies zu keinem erkennbaren besseren Ergebnis. Im Gegenteil, je höher die Schichtenanzahl wurde, desto länger dauerte
der Lenrvorgang und die oben beschriebenen Probleme traten vermehrt auf.
Dass hier bereits eine einzige innere Schicht zur Lösung des Problems genügt liegt wahrscheinlich an der geringen Anzahl an Eingangsneuronen.
80
6 NEURONALES NETZ
6.6 Probleme beim Backporpagation Netz
6.6 Probleme beim Backporpagation Netz
Der Lernvorgang mittels Backpropagation Lernregel führt zu folgenden Problemen.
6.6.1 Minimum
Aufgrund des Gradientenverfahrens kann es passieren, dass keine globale Optimierung
stattfindet. Der Backpropagation Algorithmus kann in einem lokalen Minimum stecken
bleiben. Wird also der Algorithmus in einem solchen Fehlergebirge gestartet, so wird
lediglich ein lokales Minimum erreicht, was problematisch ist, wenn das Netz noch keine
ausreichende Reproduktionsleistung aufweist, also gelernt hat. Es empfiehlt sich daher
sporadisch eine stochastische Änderung der Gewichte vorzunehmen um ein noch tieferliegendes Minimum erreichen zu können.
Die Abbildung 39 zeigt die Problematik. Es wird das bei w6 erreichte lokale Minimum
als globales Minimum ausgegeben. Es wird nicht erkannt, dass das gesuchte absolute
Minimum noch nicht erreicht ist und daher bei diesem Minimum verharrt wird.
Abbildung 39: lokales Minimum
6.6.2 Plateau
Während des Trainierens werden die Gewichte eines Netzes kaum noch verändert, falls
es auf ein Plateau trifft, auf dem es keinerlei Unterschiede gibt. Bei kleineren Niveauunterschieden werden noch kleine Modifikationen durchgeführt. Das Verfahren kann aber
nur noch sehr langsam über das Plateau hinweggehen. Ein Plateau kann ebenfalls durch
stochastische Änderung der Gewichte überwunden werden.
Die Abbildung 40 zeigt, dass das globale Minimum nicht erreicht werden kann, weil
81
6 NEURONALES NETZ
6.6 Probleme beim Backporpagation Netz
während des Gradientenabstiegverfahrens eine Horizontale erreicht wird. Daher wird
das Verfahren beendet.
Abbildung 40: Plateau
6.6.3 Schluchten und Oszillationen
Es kann passieren, dass Schluchten im Fehlergebirge zu Oszillationen führen. Der Backpropagation Algorithmus sucht den tiefsten Punkt des Tales. Ist das Tal nicht breit
genug, so kann die Gewichtsmodifikation dazu führen, dass das Tal nie erreicht wird
sondern immer von einem Anstieg zum gegenüberliegenden Anstieg springt.
Die Abbildungen 41 und 42 zeigen wie sich der geschilderte Vorgang auswirkt. Es wird
dauernd zwischen den beiden Punkten w1 und w2 gesprungen und daher das gesuchte
globale Minimum nicht erreicht werden.
Abbildung 41: Oszillation
82
6 NEURONALES NETZ
6.7 Wahl der Lernrate
Abbildung 42: Oszillation
6.7 Wahl der Lernrate
Die Wahl der Lernrate hat einen besonders starken Einfluß auf das Lernverhalten des
Backpropagation Netzes. Bei zu großer Lernrate kann ein bereits gefundenes Minimum
wieder verlassen werden oder ein enges Tal nicht berücksichtigt werden. Oszillationen
können durch eine zu große Lernrate ebenfalls vermehrt auftreten.
Zu kleine Lernraten führen dazu, dass die Konvergenzgeschwindigkeit erheblich verringert wird und somit das Lernen erheblich verlängert wird.
6.8 Momentum
Um dem oben erwähnten Oszillationsproblem entgegenzuwirken, wurde die erweiterte
Delta-Regel eingeführt. Durch den Momentum Term kann festgelegt werden wie stark
die erneute Gewichtsänderung Einfluß nimmt.:
∆wi,j (t + 1) = ² ∗ δj ∗ oj + α ∗ ∆wi,j (t)
Die Variable α repräsentiert hier die Größe, die den Einfluß der Gewichtsänderung angibt. α hat einen Wert im Intervall [0,1] und beeinflußt also die Gewichtsänderung des
Lernschritts t auf den Lernschritt t + 1. In Schluchten mit geringem Gefälle und starker
Krümmung wirkt sich das Momentum nun sehr vorteilhaft aus. Dadurch wird die Oszillation in Schluchten mit steilen Wänden gedämpft. Auch bei vorhandenen Plateaus
wirkt sich der Momentum Term positiv aus, indem er eine schnellere Abarbeitung des
Plateaus ermöglicht.
83
6 NEURONALES NETZ
6.9 Bestimmung der Zieltabelle
6.9 Bestimmung der Zieltabelle
Wie bereits erwähnt, arbeitet das Backpropagation Netz mittels Lernen mit Lehrer, d.h.
es muss eine Zieltabelle erstellt werden.
Diese Zieltabelle muss aus einem Praxistest ermittelt werden.
Das Problem liegt an der nachlassenden Leistung des Motors des Carrera Rennautos
während des laufenden Betriebes. Dies macht eine Ermittlung eines bestimmten Zykluswertes, der ein Rausschleudern verursacht überflüssig, da dieser bei längerem Betrieb
bereits wesentlich höher liegen würde.
Daher wurde jedem Lichttasterabschnitt 50 ein Zeitintervall zugeordnet, bei dem das Auto
gerade noch nicht aus der Bahn geschleudert wird.
Es stehen zwei Möglichkeiten zur Wahl.
Die erste Möglichkeit ist, entsprechend der Position das Rennauto, sehr stark zu beschleunigen oder zu bremsen, sprich, den Zykluswert stark zu verringern. Diese Variante
ist insofern problematisch, denn wird nun ein verringerter Zykluswert nicht gesendet
bzw. ein neu gesendeter Wert aufgrund eines gleichzeitig stattfindenden Pollingvorgangs
überlesen, so wird das Rennauto aufgrund der viel zu hohen Geschwindigkeit mit enormer Wucht aus der Bahn geschleudert.
Die Tabelle wird nun so aufgestellt, dass der Abbremsvorgang durch die enorme Beschleunigung an den entsprechenden Lichtschranken zuvor nun so stark ist, dass das
Auto an den kritischen Stellen nicht aus der Bahn geschleudert wird.
Das Rennauto wird z.B. beim Betätigen von Lichttaster 2 sehr stark beschleunigt. Es
muss der bei Betätigung des Lichttasters 3 an das XMOD-Modul MCB-537 gesendete
Zykluswert nun soweit reduziert werden, dass das Rennauto in der folgenden 30 Grad
Kurve nicht aus der Bahn geschleudert wird.
50
Erklärung vgl. Abbildung 34 (LT-Abschnitt1 liegt zwischen LT1 und LT2)
84
6 NEURONALES NETZ
6.9 Bestimmung der Zieltabelle
Die zugehörige Ausgangstabelle Tabelle 1 auf Seite 85 sieht wie folgt aus:
A0
1
0
1
0
1
0
1
A1 A2
0
0
1
0
1
0
0
1
0
1
1
1
1
1
A3
0
1
0
1
0
1
1
A4 A5
0
0
0
1
1
1
0
1
1
1
0
1
0
1
A6 A7
0
1
0
0
1
0
0
0
0
0
0
0
0
0
Status
LT1 − >
LT2 − >
LT3 − >
LT4 − >
LT5 − >
LT6 − >
LT7 − >
v
v
v
v
v
v
v
= v ∗ (1 − 0.8)
= v + v ∗ 0.2
= v ∗ (1 − 0.7)
= v + v ∗ 0.2
= v ∗ (1 − 0.7)
= v + v ∗ 0.2
= v + v ∗ 0.2
Tabelle 1: Codierung Ausgangstabelle erste Möglichkeit
Die Lerntabelle, welche durch Praxistest ermittelt wurde, wurde so codiert, dass bei
bestimmten Lichttastern der Zykluswert gegenüber dem Standardzykluswert stark verringert wird. Dies ist beim Lichttaster 1 51 , Lichttaster 3 und Lichttaster 5 der Fall. Dies
wird durch das Neuron A3 angegeben, das das Vorzeichen repräsentiert. Die ersten drei
Neuronen, also A0, A1 und A2 sind für die Positionscodierung. Die letzten vier Neuronen, also A4, A5, A6 und A7 sind für die Angabe der prozentualen Verringerung des
Zykluswertes gegenüber dem Standardzykluswert verantwortlich.
Die Spalte Status“ gibt den prozentualen Anteil der Geschwindigkeit im jeweiligen
”
Lichttasterabschnitt gegenüber dem Standardwert an.
Damit der Problematik der nachlassenden Motorleistung Rechnung getragen wird, wird
der Standardzyklus bei sinkender Rundenzeit erhöht. Somit erhöht sich auch der prozentuelle Anteil der Geschwindigkeiten der einzelnen Lichttasterabschnitte und damit
wieder die resultierende Geschwindigkeit des Rennautos.
Eine bessere Lösung liegt darin, dass abhänging von den einzelnen Lichttasterabschnitten
spezifische Zeiten vorgegeben werden, die im Praxistest ermittelt wurden und entsprechend auch eingehalten werden müssen.
51
vgl. Position der Lichttaster in Abbildung 34 (LT1=Lichttasterabschnitt 1)
85
6 NEURONALES NETZ
6.9 Bestimmung der Zieltabelle
Die zweite Möglichkeit ist, jeden Lichttasterabschnitt so schnell wie möglich zu durchqueren, d.h. es wird auf starkes Bremsen und Beschleunigen verzichtet.
Hier wird der Standardzykluswert abhängig von der Rundenzeit erhöht, da hier ebenfalls
das Problem der nachlassenden Motorleistung präsent ist. Die mögliche Rundenzeit, d.h.
die Rundenzeit, bei der das Rennauto nicht aus der Rennbahn geschleudert wird, wurde
ebenfalls durch Praxistest ermittelt.
Damit die einzelnen Lichttasterabschnitte entsprechend schnell bzw. langsam durchlaufen werden, wird jedem Lichttasterabschnitt ein entsprechender Zykluswert zugeordnet,
der erhöht wird, falls die Zeit, die bei einem Lichttasterabschnitt erreicht werden soll,
unterschritten wird.
Die einzelnen Zeiten der Lichttasterabschnitte werden ebenfalls durch Praxistests ermittelt.
Bei dieser Möglichkeit fährt das Rennauto harmonischer, da hier auf das starke Bremsen
und Beschleunigen verzichtet wird.
Außerdem wirkt sich hier ein Überlesen bzw. ein vom XMOD-Modul MCB-537 nicht
empfangener Zykluswert nicht so extrem auf das Fahrverhalten des Rennautos aus. Der
Praxistest hat gezeigt, dass hier das Rennauto nicht so leicht aus der Rennbahn geschleudert wird.
Vor allem zwischen zwei Lichttasterabschnitten, bei denen die entsprechenden zugehörigen Zykluswerte nachzu identisch sind, führt dies zu keinen negativen Auswirkungen.
Die Ausgangstabelle enthält fünf Neuronen. Diese sind unterteilt in zwei Gruppen. Die
ersten drei Neuronen repräsentieren, wie bereits bei den Eingangsneuronen, die entsprechende Lichttasterposition. Die letzten drei Neuronen repräsentieren die Angabe
darüber, ob der Zykluswert, der an das XMOD-Modul MCB-537 gesandt werden soll,
erhöht, erniedrigt oder unverändert bleiben soll. Dies ergibt insgesamt 21 verschiedene
Möglichkeiten.
Die Ausgangsneuronen A0, A1 und A2 repräsentieren die entsprechende Position auf der
Bahn, wobei die Codierung 100“ den Lichttasterabschnitt 1 angeben.
”
86
6 NEURONALES NETZ
6.9 Bestimmung der Zieltabelle
Die Ausgangsneuronen A3 und A4 geben an, ob der entsprechende Zykluswert inkrementiert oder dekrementiert werden soll. Das Ausgangsneuron A3 repräsentiert das Vorzeichen und das Ausgangsneuron A4, ob der Zykluswert geändert werden soll oder gleich
bleibt.
Die Codierung 01“ gibt an, dass das Vorzeichen negativ ist und der Zykluswert geändert
”
werden soll, was also dem Dekrementieren entspricht.
Die zugehörige Zieltabelle bei der zweiten Möglichkeit sieht wie folgt aus:
A0 entspricht Ausgangsneuron 0 und die anderen entsprechend der Nummer.
A0 A1
1
0
1
0
1
0
0
1
0
1
0
1
1
1
1
1
1
1
0
0
0
0
0
0
1
0
1
0
1
0
0
1
0
1
0
1
1
1
1
1
1
1
A2 A3
0
0
0
1
0
1
0
0
0
1
0
1
0
0
0
1
0
1
1
0
1
1
1
1
1
0
1
1
1
1
1
0
1
1
1
1
1
0
1
1
1
1
A4
1
0
1
1
0
1
1
0
1
1
0
1
1
0
1
1
0
1
1
0
1
Tabelle 2: Codierung Ausgangstabelle zweite Möglichkeit
87
6 NEURONALES NETZ
6.10 Auswahl Eingangsneuronen
6.10 Auswahl Eingangsneuronen
Die Codierung der Eingangsneuronen ist für das Netz besonders wichtig, denn eine
höhere Anzahl an Neuronen bedeutet insgesamt einen höheren Aufwand.
Zuerst hätten die Eingangsneuronen nach der Position des Rennautos auf der Carrerarennbahn und der Stärke der Zykluszeit codiert werden sollen. Danach hätte es für die
sieben verschiedenen Positionen jeweils ein Neuron gegeben. Für die Zykluszeit, die von
0-255 gändert werden kann, wären acht Neuronen notwendig gewesen.
Um die Anzahl der Neuronen zu minimieren, wurde die Position des Rennautos auf der
Carrerarennbahn ebenfalls minimiert, indem die sieben Positionen lediglich durch drei
Neuronen definiert wurden. Aufgrund der drei Neuronen sind AnzahlN euronenP osition =
23 was also für acht verschiedene Positionen reichen würde.
Zu Beginn hätte die Rennbahn bezüglich der verwendeten Bahnstücke verwendet werden
sollen. D.h., ein Übergang von der Geraden auf die 30 Grad Kurve hätte mittels Lichttaster registriert werden sollen und das neuronale Netz entsprechend reagieren müssen.
Im einzelnen wären dies folgende Abschnitte gewesen:
• Gerade
• K urve 30
• K urve 60
• K urve 180
Diese Einteilung hätte für die Erkennung des entsprechenden Streckenabschnitts lediglich
AnzahlN euronenStreckenabschnitt = 22 4 Neuronen benötigt.
Damit die Zykluszeit entsprechend geändert werden könnte, wären für die Zykluszeit, die
von 0-255 gändert werden kann, AnzahlN euronenZykluswert = 28 = 255 acht Neuronen
notwendig gewesen.
Diese Codierung musste allerdings später verworfen werden,
88
6 NEURONALES NETZ
6.10 Auswahl Eingangsneuronen
Bei der Codierung der Zykluszeit, die direkt die Geschwindigkeit des Rennautos repräsentiert ergaben sich erhebliche Schwierigkeiten.
Es wurde festgestellt, dass die Geschwindigkeit des Rennautos bei einem bestimmten
Zykluswert, der dem XMOD-Modul gesendet wurde, nicht konstant bleibt.
Zuerst sollte ein neuer, stärkerer Motor installiert werden. Würde nämlich ein eindeutig
überdimensionierter Motor verwendet, so würde das Rennauto vermutlich bei konstant
eingestellter Zykluszeit und somit PWM-Zeit immer dieselbe Geschwindigekeit haben.
Dieser Gedanke wurde jedoch verworfen, da nicht garantiert werden kann, dass die Geschwindigkeit auch bei solch einem stärkeren Motor bei konstanter Zykluszeit mit zunehmender Betriebsdauer konstant bleibt. Außerdem hätte diese Umrüstung zusätzliche
Mittel verbraucht.
Desweiteren bewirkt die dauernde Änderung der Zykluszeit, also das starke Beschleunigen ebenfalls eine starke Erhitzung des Motors, was das geschilderte Problem erhöht
hätte. In Praxistests wurde ermittelt, dass das Rennauto bei einer Kühlung des Motors
in etwa konstant gefahren wäre, jedoch durch die schnelle und häufige Veränderung der
Zykluszeit dasselbe Problem wieder bewirken würde.
Eine neue Möglichkeit der Codierung lag nun darin, nicht die vom Mikrocontroller
AT90S1200 gesendete Zykluszeit als Eingabecodierung zu verwenden, sondern die Zeit,
die das Rennauto auf einer Strecke minimal brauchen darf, um nicht aus der Rennbahn
geschleudert zu werden.
Die Zeit, die das Rennauto auf der jeweiligen Strecke benötigt, kann softwaremässig
errechnet bzw. erfaßt werden.
Wird nun z.B. der Abschnitt von Lichttaster 1 auf Lichttaster 2 betrachtet. So muss zu
Beginn beim Schalten von Lichttaster 1 die Zeit von Lichttasterabschnitt 1 auf 0 gesetzt
werden. Erreicht nun das Rennauto den Lichttaster 2, so muss die Zeit gemessen werden.
Diese Erfassung entspricht nun der tatsächlichen Geschwindigkeit des Rennautos, denn
die Streckenlänge bleibt immer gleich.
89
6 NEURONALES NETZ
6.10 Auswahl Eingangsneuronen
Die Geschwindigkeit v berechnet sich mittels der Formel:
v=
s
t
Die Variable s entspricht der Streckenlänge und die Variable t der gemessenen Zeit t.
Die Streckenlänge wurde direkt aus der realen Carrerarennbahn rausgemessen.
Damit nun auf eine geringere Zeit und somit auf ein Absinken der Geschwindigkeit
aufgrund zunehmender Erwärmung des Motors des Rennautos reagiert werden kann,
wird nun wie folgt vorgegangen.
Zu Beginn, wird eine bestimmte Grundgeschwindigkeit eingestellt, die für jede Strecke
gleich ist und so groß ist, dass das Auto gerade nicht aus der Bahn geschleudert wird.
Damit nun jeder Streckenabschnitt individuell behandelt werden kann, bekommt jeder
Streckenabschnitt eine zusätzliche Variable, die nun abhängig von der Reaktion des
neuronalen Netzes erhöht oder erniedrigt wird.
Die zu jeder Strecke möglichen Zeiten werden durch Praxistests ermittelt. Hierbei musste
beachtet werden, dass das Rennauto nicht direkt abgebremst werden kann. Eine Reduzierung der Geschwindigkeit ist durch Verringerung der Zykluszeit realisierbar. Es ist
also keine negative Spannung möglich, so dass ein Bremsen des Rennautos realisiert
werden könnte.
Damit das Rennauto nicht aus der Rennbahn geschleudert wird, ist eine frühzeitige
Reduzierung der Zykluszeit erforderlich.
So wird daher bereits beim Lichttaster 1 die Zykluszeit reduziert. Dies ist erforderlich, damit das Rennauto bereits mit einer langsameren Geschwindigkeit in die Kurve einfährt.
Würde die Zykluszeit erst beim Lichttaster 2 reduziert werden, so würde aufgrund der
Verzögerung des Bremsvorgangs das Auto aus der Rennbahn geschleudert werden. Bei
der Reduzierung der Zykluszeit beim Erreichen von Lichttaster 1 dauert es auch eine
bestimmte Zeit, bis das Auto langsamer wird.
Wird nun Lichttaster 2 erreicht, so kann hier bereits die Zykluszeit wieder erhöht werden.
Dies liegt daran, da es eine bestimmte, wenn auch minimale, Zeit dauert, bis dass das
Rennauto wieder beschleunigt wird. Nun fährt das Rennauto mit maximaler Geschwin-
90
6 NEURONALES NETZ
6.10 Auswahl Eingangsneuronen
digkeit aus der Kurve wieder heraus. Hier würde eine Beschleunigung erst am Ende der
Kurve ebenfalls zu spät kommen.
Für die Feststellung der entsprechenden Position der Lichttaster hat die flexible Gestaltung der Position aufgrund der externen Montage geholfen. Würden die Lichttaster bzw.
Lichtschranken direkt an der Rennbahn angebracht, so hätte dies zu Problemen geführt,
da zuerst die Lichttaster an den Positionsübergängen, also von Gerade zu Kurve und
Kurve zu Gerade, angebracht wurden. Dies erwies sich, wie bereits oben erwähnt, als
nachteilig.
Die Eingangsneuronen für die zweite Möglichkeit bestehen also aus den drei Neuronen
der Positionsangabe und den vier Neuronen für die Codierung der Zeit pro Lichttasterabschnitt.
Da für die Reaktion des Netzes interessant ist, ob die benötigte Zeit unterschritten,
überschritten wurde oder konstant blieb, ergibt dies pro Positionsangabe für die Lichttasterabschnitte drei verschiedene Kombinationsmöglichkeiten, wodurch es insgesamt 21
verschiedene Kombinationen gibt.
Die Eingangsneuronen E0, E1 und E2 repräsentieren die Position auf der Carrera Rennbahn.
Die Eingangsneuronen E3, E4, E5 und E6 geben die Zeit an, die das Rennauto auf dem
entsprechenden Lichttasterabschnitt benötigen darf bzw. brauchen kann, so dass das
Rennauto gerade nicht aus der Bahn geschleudert wird.
Die Spalte Status“ gibt die Position an, so bedeutet LT1 − > LT2“ dass es sich um
”
”
den Lichttasterabschnitt 1 handelt, also um den Bereich zwischen Lichttaster 1 (LT1)
und Lichttaster 2 (LT2) 52 .
Die zugehörige Eingangstabelle der ersten Möglichkeit Tabelle 3 auf Seite 92 sieht wie
folgt aus:
52
vgl. Position Abbildung 34
91
6 NEURONALES NETZ
E0 E1
1
0
0
1
1
1
0
0
1
0
0
1
1
1
6.10 Auswahl Eingangsneuronen
E2 E3
0
0
0
0
0
1
1
0
1
1
1
0
1
0
E4 E5
0
1
1
0
0
1
1
0
1
1
0
1
0
1
E6
0
1
0
0
0
0
0
Status
LT1 − >
LT2 − >
LT3 − >
LT4 − >
LT5 − >
LT6 − >
LT7 − >
LT2
LT3
LT4
LT5
LT6
LT7
LT1
Tabelle 3: Codierung Eingangstabelle erste Möglichkeit
Die Eingangsneuronen E0, E1 und E2 sind wie bei der ersten Möglichkeit codiert.
Die Eingangsneuronen E3, E4, E5 und E6 geben hier ebenfalls die Zeiten auf den Lichttasterabschnitten an. Hier wurden jedoch auch die Zeiten angegeben, die ein Inkrementieren bzw. ein Dekrementieren des Zykluswertes zur Folge haben.
So geben die ersten drei Zeilen die Codierung für den ersten Lichttasterabschnitt an. Die
erste Zeile zeigt ein Unterschreiten der erforderlichen Zeit auf dem ersten Lichttasterabschnitt an, so dass die zugehörige Zieltabelle 53 ein Dekrementieren des Zykluswertes zur
Fole hat, denn sonst besteht erhöhte Gefahr, dass das Rennauto aus der Bahn geschleudert wird.
Die zweite Zeile gibt an, dass die geforderte Zeit entsprechend erreicht wurde und daher
wird die zweite Zeile der zugehörigen Zieltabelle 54 aktiviert, die kein Handeln bewirkt.
Die dritte Zeile gibt an, dass die geforderte Zeit auf dem Lichttasterabschnitt 1 überschritten wurde, so dass die zugehörige dritte Zeilte der Zieltabelle 55 aktiviert wird, was
ein Inkrementieren des Zykluswertes bewirkt.
Die zugehörige Eingangstabelle der zweiten Möglichkeit Tabelle 4 auf Seite 93 sieht wie
folgt aus:
E0 entspricht Eingangsneuron 0 und die anderen entsprechend der Nummer.
53
vgl. erste Zeile Tabelle 2
vgl. zweite Zeile Tabelle 2
55
vgl. dritte Zeile Tabelle 2
54
92
6 NEURONALES NETZ
E0 E1
1
0
1
0
1
0
0
1
0
1
0
1
1
1
1
1
1
1
0
0
0
0
0
0
1
0
1
0
1
0
0
1
0
1
0
1
1
1
1
1
1
1
6.10 Auswahl Eingangsneuronen
E2 E3
0
1
0
0
0
1
0
1
0
0
0
1
0
0
0
0
0
0
1
1
1
0
1
1
1
0
1
1
1
0
1
1
1
0
1
1
1
1
1
0
1
1
E4 E5
0
1
1
1
1
1
0
0
1
0
1
0
0
1
0
1
0
1
1
0
0
1
0
1
1
1
1
1
0
0
1
0
0
1
0
1
1
0
0
1
0
1
E6
0
0
0
1
1
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
Status
LT1− >LT2
LT1− >LT2
LT1− >LT2
LT2− >LT3
LT2− >LT3
LT2− >LT3
LT3− >LT4
LT3− >LT4
LT3− >LT4
LT4− >LT5
LT4− >LT5
LT4− >LT5
LT5− >LT6
LT5− >LT6
LT5− >LT6
LT6− >LT7
LT6− >LT7
LT6− >LT7
LT7− >LT1
LT7− >LT1
LT7− >LT1
Tabelle 4: Codierung Eingangstabelle zweite Möglichkeit
93
6 NEURONALES NETZ
6.11 Das ausgewählte Backpropagation Netz
6.11 Das ausgewählte Backpropagation Netz
Abbildung 43: Backpropagation Netz
Abbildung 43 zeigt das verwendete neuronale Netz. Es besteht aus der Eingangsschicht,
einer Zwischenschicht und der Ausgangsschicht.
Die Eingangsschicht besteht aus sieben Neuronen, die zu Beginn mit zufälligen Gewichten belegt werden, deren Werte zwischen −1 und +1 variieren.
Die folgende Schicht ist die Zwischenschicht, die aus fünf Neuronen besteht. Diese Neuronen sind jeweils mit den jeweiligen Neuronen der Eingangsschicht verbunden.
Die letzte Schicht ist die Ausgangsschicht. Diese besteht ebenfalls aus fünf Neuronen
und sind jeweils mit den Neuronen der Zwischenschicht verbunden.
94
7 Auftretende Probleme
7.1 Spannungsversorgung
Beim Betrieb der kompletten Anlage mit der gebauten Spannungsversorgung traten
nach einiger Zeit Probleme auf. Das Problem war, dass der Festspannungsregler 7805
sehr heiß wurde und somit nicht mehr die entsprechenden benötigten 5V Gleichspannung
am Ausgang und somit der Steuerelektronik zur Verfügung stellen konnte. Das Rennauto
der Carrera-Rennbahn wurde immer langsamer und blieb schließlich stehen.
Eine zu starke Erwärmung resultiert normalerweise aus zu hohem Stromfluß. Da aber der
Festspannungsregler 7805 56 eine Stromstärke von 1A ermöglicht, konnte dies kaum der
Fall sein. Eine überprüfung, also Messung, der Stromstärke bestätigte diesen Verdacht.
Die Stromstärke lag um den Bereich von ca. 260mA. Diese resultiert aus dem Strombedarf für die Steuerelektronik der Platine der Signalerfassung, der Platine der Steuerung
für das Auto und für das XMOD Modul MCB-537. Das Rennauto der Carrera-Rennbahn
wird über einen eigenen Transformator versorgt.
Dieses Ergebnis zeigte, dass die hohe Erwärmung nicht aus dem Stromfluß resultieren
kann. Die Wärmeentwicklung ist nämlich nicht nur von der StromhÖhe, sondern auch
von der anliegenden Spannung am Eingang abhängig. Hier liegt nun das Problem.
Der Transformator liefert eine Wechselspannung von 12V, was nach erfolgter Gleichrichtung mittels Brückengleichrichter und Stabilisierung mittels Kondensator eine Gleichspannung von 16.97V bewirkt. Nun liegen also am Eingang des Festspannungsreglers
insgesamt 16.97V an. Der Festspannungsregler 7805 liefert zwar unabhängig von der Eingangsspannung lediglich die benötigten 5V Gleichspannung, jedoch wird die Leistung,
die am Eingang verbraucht wird durch eine zu hohe Spannung ebenfalls entsprechend
hÖher, was zu den oben erwähnten Problemen führt.
Die Lösung liegt nun darin, die Eingangsspannung entsprechend auf ca. 6-7V zu reduzieren. Damit der Festspannungsregler einwandfrei funktioniert muss allerdings die
Eingangsspannung um 1-2V höher liegen, als die erforderliche Ausgangsspannung.
Damit eine Reduktion der Eingangsspannung erzielt wird, wurden Dioden in Reihe zur
56
Siehe Datenblatt
7 AUFTRETENDE PROBLEME
7.2 Problem der Signalerfassung
Eingangsspannung geschaltet, damit an diesen die entsprechende Spannung abfällt und
somit am Eingang des Festspannungsreglers 7805 nur noch eine geringere Spannung
abfällt. Außerdem wurde zusätzlich der Transformator, der eine Wechselspannung von
12V liefert gegen einen Transformator ausgetauscht, der eine Wechselspannung von 9V
liefert. Damit wurde die Anzahl der benötigten in Reihe zu schaltenden Dioden reduziert.
7.2 Problem der Signalerfassung
Nachdem die Signalerfassungsplatine gelötet war und nun in der Praxis angewandt werden soll, wurde festgestellt, dass das Schalten der Lichttaster nicht zu der folgenden
angegebenen gewünschten Ausgabe führte:
•
•
•
•
•
•
•
”
”
”
”
”
”
”
01“ bei Betätigung von Lichttaster 1
02“ bei Betätigung von Lichttaster 2
04“ bei Betätigung von Lichttaster 3
08“ bei Betätigung von Lichttaster 4
10“ bei Betätigung von Lichttaster 5
20“ bei Betätigung von Lichttaster 6
40“ bei Betätigung von Lichttaster 7
Messungen ergaben, dass bei manchen Betätigungen, z.B. bei Betätigung von Lichttaster
6 auch die Signale von Lichttaster 2 oder Lichttaster 4 sporadisch auftraten. Am Eingang
der zu diesen Lichttastern gehörenden entsprechenden IC’s wurde allerdings keine bzw.
nur sporadisch eine Spannungsänderung festgestellt.
Es wurde zuerst angenommen, dass die Eingänge bzw. Ausgänge der entsprechenden
Festspannungsregler 7805 über Kondensatoren auf Masse gelegt werden müssen. Diese
Modifikation der Schaltung brachte allerdings keine Besserung.
Anschließend wurde geprüft, ob alle Eingänge der IC’s 74LS221 verschaltet bzw. angeschlossen sind. Ein freier Pin kann z.B. zu solchen unerwünschten Reaktionen führen.
Diese waren allerdings alle verschaltet.
Der Gedanke war nun, ob nicht ein Pin durch einen Pull-Up oder Pull-Down Widerstand
standardmässig auf Vcc bzw. GND gebracht werden musste. Hier waren allerdings die
Clear-Eingänge und alle anderen Eingänge bereits entsprechend verschaltet.
96
7 AUFTRETENDE PROBLEME
7.3 Ansteuerung des Rennautos mittels PC
Die Messung hatte zu guterletzt ergeben, dass die Einänge der IC’s an Pin 2 bzw. Pin
10 jeweils ohne Betätigung der entsprechenden Lichttaster und somit ohne Signal an
den Eingängen der Festspannungsregler 7805 eine Spannung von 0.51V-0.75V hatten.
Dies führte zu der Annahme, dass die Ausgänge der Festspannungsregler und somit die
Eingänge der IC’s in der Luft“ hingen bzw. keinen definierten Signalpegel hatten.
”
Um dies abzuschaffen wurde zu Testzwecken ein Pull-Down Widerstand, also ein Widerstand vom Ausgang des Festspannungsregler auf Masse gelegt.
Eine erneute Testphase führte nun zu einer richtigen Messung bzw. Erfassung der Lichttasterimpulse und somit zu der oben erwähnten gewünschten codierten Ausgabe der
Signale.
7.3 Ansteuerung des Rennautos mittels PC
Es wurde angenommen, dass die Geschwindigkeit mittels der Höhe der zur Verfügung
gestellten Spannung geregelt wird, sprich dem Absolutwert der Spannung. Die Vermutung war, dass eben eine geringere Gleichspannung einen geringeren Strom und somit
eine dem Auto zur Verfügung stehende geringere Leistung zur Folge hätte.
Nachdem der vom XMOD Modul MCB-537 von der Software gelieferte digitale Wert
mittels einer Digital-Analog-Wandler Schaltung in ein analoges Signal gewandelt wurde
und nun das Rennauto angesteuert werden sollte, wurde festgestellt, dass das Auto
entweder gar nicht fuhr oder nur bei Maximalwert der Ausgangsspannung fuhr.
Dies liegt daran, dass der Gleichstrommotor des Rennautos immer die Spitzenspannung
von ca.21V Gleichspannung benötigt um ein Laufen des Motors gewährleisten zu können.
Wenn nun also die Spannung unter diesem Wert liegt, so kann der Motor nicht laufen.
Es wurde also festgestellt, dass die Leistung des Motors des Rennautos nicht durch
Erhöhung bzw. Erniedrigung der Gleichspannung geregelt werden kann. Die Leistung
des Autos wird mittels Pulsweitenmodulation gesteuert. Hierbei handelt es sich um eine
Technik, bei der immer die volle Gleichspannung, also der Amplitudenwert zur Verfügung
steht, wie es für das Auto auch erforderlich ist.
Die Steuerung wird dadurch realisiert, indem die Zeitdauer, in der die Gleichspannung
zur Verfügung gestellt wird geregelt bzw. geändert wird. Diese Technik ist die sogenannte
97
7 AUFTRETENDE PROBLEME
7.4 Signalerfassung mittels Lichttaster
Pulsweitenmodulation 57 .
7.4 Signalerfassung mittels Lichttaster
Die Signalerfassung war wie folgt vorhergesehen. Die an der Rennbahn angebrachten
Lichttaster werden beim Durchqueren des Rennautos geschaltet. Wird der Lichttaster
aktiviert, so wird die Eingangsspannung auf den Ausgang des Lichttasters geschaltet. Die
Lichttaster sind für eine Spannung von 10V-30V vorhergesehen. Dadurch ergab sich das
Problem, dass eine Spannungsanpassung für die anzusteuernde Elektronik erforderlich
ist, denn diese arbeitet standardmässig mit 5V Gleichspannung.
Um eine schnelle und preiswerte Lösung gewährleisten zu können wurden Festspannungsregler verwendet, deren Eingänge mit den Ausgängen der Lichttaster verbunden
wurden. Die Festspannungsregler 7805 liefern genau dann die 5V Ausgangsspannung,
wenn am Eingang eine Spannung liegt, die etwas höher als 5V ist. Der Vorteil liegt nun
darin, dass die Ausgangsspannung immer 5V ist unabhängig von der von den Lichttastern gelieferten Spannung.
Befürchtungen, dass diese Lösung zu langen Schaltzeiten führen, bewahrheiteten sich
nicht.
7.5 Schaltzeit der Lichttaster
Die Schaltzeit der Lichttaster führte zu einem weiteren Problem. Die Schwierigkeit war,
dass die Lichttaster beim Schalten keinen deutlichen Schaltimpuls von 0V auf 5V aufgrund der kurzen Schaltzeit verursachen. Dies liegt daran, weil das Rennauto sehr schnell
fährt und somit der Lichttaster nur sehr kurz schaltet. Es wurde festgestellt, dass aufgrund des kurzen Schaltimpulses die Spannung von 0V auf lediglich 0.8V stieg.
Dies hat zur Folge, dass keine eindeutig Unterscheidung zwischen Low-Level und HighLevel möglich ist und somit das Schalten nicht erkannt werden kann. Außerdem ist zu
berücksichtigen, dass diese kurze Zeit des Signalsprungs dazu führt, dass das Signal
durch das Programm mittels XMOD Modul MCB-537 nicht eingelesen werden kann.
Eine Umstellung auf mechanische Elektronikschalter bringt keine Besserung, da hier
nicht einmal eine Erhöhung der Spannung erkannt werden kann, was am sogenannten
Kontaktprellen des mechanischen Kontakts liegt.
57
Siehe Kapitel 3.2.2 Pulsweitenmodulation PWM
98
7 AUFTRETENDE PROBLEME
7.6 Doublebuffering
Die Lösung muss dadurch erreicht werden, indem jeder noch so geringe Spannungsimpuls erkannt wird und dieser Impuls verlängert wird. Dies wird durch die Auswahl des
74LS221 erreicht. Hierbei handelt es sich um eine monostabile Kippstufe mit vorgeschaltetem Schmitt-Trigger.
Der Schmitt-Trigger hat den Vorteil, dass jede Flanke mit einer Steilheit von 1V/s
erkannt werden kann. Dieser Wert reicht vollkommen aus, auch noch jeden noch so
schnell schaltenden Lichttasterimpuls erkennen zu können.
Es werden also keinen absoluten Low-Pegel und High-Pegel erkannt, sondern positive
Flanken mit der bereits erwähnten geringen erforderlichen Steigung.
Damit nun der entsprechende Impuls nicht nur klar erkannt wird, sondern auch sicher
durch das Softwareprogramm mittels XMOD Modul MCB-537 eingelesen werden kann,
muss das Signal durch die monostabile Kippstufe verlängert werden. Der Wert hängt von
der äußeren Beschaltung des Widerstandes und des Kondensators ab. Damit ein zu langes
Zeitintervall nicht zu einem High-Level von zwei Lichttastern führt, wird der negierte
Eingang des jeweiligen vorherigen 74LS221 auf den Clear-Eingang des nachfolgenden
74LS221 gelegt, damit der Ausgang dadurch zurückgesetzt wird.
Ein längeres verharren auf einem Lichttasterabschnitt und somit ein Ablaufen des Zeitintervalls hat keine Auswirkung, da der Zustand eines gesetzten Lichttasters softwaremässig gespeichert wird.
7.6 Doublebuffering
Bei der Realisierung der Visualisierung trat folgendes Problem auf. Das zu zeichnende
Rennauto flackerte beim Zeichnen sehr stark. Die Einführung von zusätzlichen Threads
führte zu keinem zufriedenstellenden Ergebnis. Durch gründliches Recherchieren wurde
die Lösung mittels Doublebuffering gefunden.
Hierbei handelt es sich um eine weit verbreitete Möglichkeit das zuvor erwähnte Problem
zu umgehen. Man muss den alten Grafikzustand sichern und das Auto entsprechend neu
zeichnen. Das Auto wird also nicht direkt neu gezeichnet, sondern in einen Speicher geschrieben und anschließend wird der gesamte neu zu zeichnende Grafikzustand komplett
in den Videospeicher geschrieben.
99
7 AUFTRETENDE PROBLEME
7.7 Zeichnen des Rennautos
Mit dieser Maßnahme konnte das Flackern der Grafik leicht behoben werden.
7.7 Zeichnen des Rennautos
Beim Zeichnen des Rennautos auf der Geraden gab es keinerlei Problem, jedoch traten
beim Zeichnen des Autos in Kurven Probleme auf. Da das gezeichnete Rennauto als
Image geladen wird und anschließend auf das Applet gezeichnet wird, konnte nicht mittels anderer verwendeter Koordinaten eine Drehung erreicht werden, wie es z.B. beim
Zeichnen eines Rechtecks mittels der Funktion drawRoundRecht() der Klasse Graphics
möglich wäre.
Um dieses Problem zu lösen wurde die Klasse AffineTransform verwendet. Hierzu wurde
zu Beginn eine Instanz der Klasse Graphics2D angelegt um ein neues Graphic Objekt
wegen der erforderlichen Drehung zur Verfügung zu haben. Anschließend wurde von der
bereits erwähnten Klasse AffineTransform eine Instanz angelegt. Diese Instanz dient zur
Sicherung des alten Bildes, damit lediglich das Rennauto um den benötigten Winkel
gedreht wird.
Anschließend wird nochmals eine Instanz der Klasse AffineTransform angelegt, welches
nun dem Rennauto selbst zugeordnet wird. Damit das Auto auch tatsächlich gedreht
wird, wird von der zuletzt angelegten AffineTransform Instanz die Funktion rotate()
aufgerufen, der als Parameter der Winkel übergeben wird, um den das Rennauto gedreht
werden muss.
Zum Schluß wird nun das Rennauto durch Aufruf der Funktion g2d.drawImage(imgAuto,
(int)x, (int)y, observer) gezeichnet und zuletzt mit der Funktion g2d.setTransform(saveAT)
das zu Beginn gesicherte Bild wieder geholt.
7.8 Abfrage und Senden von Befehlen
Beim Testen der Lichttasterabfrage bzw. beim Senden von Signalen an das XMOD
Modul MCB-537 wurde festgestellt, dass zwar die Abfrage der Lichttastersignale ohne
Zeitverzögerung stattfindet, jedoch das Senden der neuen Werte an den Port E zu Problemen führte. Nicht alle gesendeten neuen Werte, die über die Funktion sersSenden(
String wSpannung) 58 gesendet wurden, wurden vom XMOD Modul MCB-537 empfangen.
58
Siehe Klasse Kommunikation
100
7 AUFTRETENDE PROBLEME
7.9 Stehenbleiben des Rennautos
Die Funktion für die Abfrage der Eingangssignale der Lichttaster int sersAbfrage() 59
wird mittels eigenem Thread in der Methode run() abgefragt. Diese Funktion wurde
bisher ohne einer sleep() Funktion ausgeführt.
Da die Abfrage der Lichttastersignale sehr hohe Priorität hat, wurde darauf verzichtet,
denn die Lichttastersignale müssen ohne Verzögerung an das XMOD Modul MCB-537
und somit an das Programm weitergeleitet werden.
Dies führte jedoch zu dem oben erwähnten Problem, dass nicht jede Änderung der
Signalimpulsdauer über den Port E des XMOD Moduls MCB-537 vom Programm erfaßt
wurde, da häufig just zu diesem Moment, bei dem ein neuer Wert gesendet wird eine
Abfrage des Ports A, also der Lichttastersignale stattfindet.
Damit dies nicht mehr stattfindet, wurde nun in die Funktion run() des entsprechenden Threads eine sleep() Funktion aufgerufen. Der Wert des Parameters für die sleep()
Funktion wurde mittels Test bestimmt.
Bei einem Wert von 120, was 120ms entspricht, wurde jede Änderung des Signalimpulses
durch den Port E des XMOD Moduls MCB-537 registriert, ohne eine Einbuße bei der
Signalerfaßung zu bekommen.
7.9 Stehenbleiben des Rennautos
Dieser Fehler fiel beim Praxistest auf. Aufgrund der andauernden Spannungsspitzen und
den daraus resultierenden Stromspitzen kam es zu dem Fall, dass das Auto einfach stehen
blieb. Der erste Gedanke war, dass entweder der Reset Eingang des Mikrocontrollers
AT90S1200 nicht mehr auf 1-Signal liegt oder die Zykluszeit auf 0 gesetzt wurde.
Nachmessen ergab jedoch, dass die entsprechenden Eingänge auf 1-Signal lagen.
Es wurde ausserdem festgestellt, dass der PWM-Ausgang des Mikrocontrollers 1-Signal
führte. Der Fehler lag also am Smart High Side Power Switch.
Der Smart High Side Power Switch besitzt nämlich eine interne Temperaturüberwachung, d.h. bei zu groer Temperatur regelt dieser selbstständig zurück, so daß eine
59
Siehe Funktion in der Klasse Kommunikation
101
7 AUFTRETENDE PROBLEME
7.10 Verlust gesendeter Zykluswerte
Überhitzung nicht statt finden kann. In diesem Fall war die Temperatur eben so gro
geworden, dass das Runterregeln zum Stillstand des Rennautos führte.
Ein angebrachter Kühlkörper schaffte hier nicht zur Abhilfe. Die Wärmeentwicklung
aufgrund der Spannungsspitzen bzw. Stromspitzen war so groß, dass der Smart High
Side Power Switch nach einer bestimmten Zeit noch immer runterregelte.
Damit diese Problem endgültig gelöst werden konnte, wurde nun die Leistung anstatt
über den Smart High Side Power Switch über den Leistungstreiber LT1083 geführt. Dieser hatte nicht nur eine höhere mögliche Ausgangsleistung zur Verfügung, sondern auch
eine größere vorhandene Kühlfläche, was zu einer besseren und schnelleren Wärmeabfuhr
beiträgt. Außerdem konnte der Kühlkörper leichter angebracht werden.
7.10 Verlust gesendeter Zykluswerte
Es kam sporadisch zum Überlesen bzw. nicht empfangenen Signalen durch das XMODModul MCB-537. Dies führte dazu, dass das Rennauto trotz Sendung des entsprechenden Zykluswertes diesen nicht bekam und daher zu schnell bzw. zu langsam auf einem
Lichttasterabschnitt fuhr.
Das Problem war nun beim Übergang von einer schnellen auf eine langsame Passage,
denn nun fuhr das Rennauto viel zu schnell und wurde daher aus der Rennbahn geschleudert.
Das Problem liegt daran, dass die Eingangssignale der Lichttaster über das XMODModul nur per Polling eingelesen werden können. Daher kann es vorkommen, dass gesendete Ausgangssignale, die von Port E des XMOD-Moduls empfangen werden müssen,
nicht empfangen werden können, da eben gerade noch die serielle Schnittstelle die Eingangssignale abfragt.
Um dieses Problem weitgehen zu eliminieren wurde nun nicht nur die Funktion sersAbfrage() 60 regelmässig in der run() 61 Funktion ausgeführt sondern auch die Funktion
sersSenden( int Zykluswert) 62 aufgerufen.
60
Siehe Klasse Kommunikation
Siehe Klasse Kommunikation
62
Siehe Klasse Kommunikation
61
102
7 AUFTRETENDE PROBLEME
7.10 Verlust gesendeter Zykluswerte
Diese führte allerdings zu einem weiteren Problem, dass nun sporadisch nicht nur Ausgangssignale nicht verabeitet wurden, sondern auch Eingangssignale nicht abgefragt wurden.
Nun wurde die Software so geändert, dass zwar in die Funktion sersSenden( int Zykluswert) gesprungen wird, es wird jedoch geprüft, ob sich der zu sendende Zykluswert
geändert hat und nur bei einem neuen Wert wird dieser endgültig durch den Befehl
aus.println(portE) an das XMOD-Modul gesendet.
Damit der Vergleich nur stattfindet, sobald es sich um einen Ausgangswert handelt, wird
in der Funktion rauslesen(String einlesen) der zu vergleichende String aktualisiert, wenn
es sich um einen Befehle wie !OPExx$“ handelt.
”
Diese Maßnahmen führten insgesamt zu einem besseren Fahrergebnis.
103
8 Bedienung
8.1 Bedienung der Simulation
Aufbau des Hauptapplets: Links befinden sich ein Scrollbalken und Steuerbuttons.
Rechts befinden sich Textfelder für die Ausgabe. In der Mitte befindet sich die Autorennbahn.
Button Start: Das Rennauto wird in den Startzustand versetzt. Standardmässig ist
der Scrollbutton ganz links, was der Geschwindigkeit 0 entspricht. Daher fährt das Auto
noch nicht.
Button Stop: Wird der Stop-Button betätigt bleibt das Rennauto stehen. Nach neuerlichem Betätigten des Start-Button fährt das Rennauto wieder weiter.
Button Ruecksetzen: Der Ruecksetzen-Button bewirkt, dass das Auto wieder in den
Ausgangszustand zurückversetzt wird. Dies ist vorallem notwendig, wenn das Auto zu
schnell fuhr und daher aus der Bahn schleuderte.
Wichtig: Die Schleuderfunktion wurde nur für Bahn 1 implementiert, da Bahn 2 real
aufgebaut wird und hier anhand von Fuzzy-Logik die Steuerung des Autos so stattfindet,
dass kein Schleudern möglich ist.
Button Bahn laden: Damit wird der Dialog geoeffnet, mit dem verschiedene Bahnen
geladen werden können. Momentan sind es zwei Bahnen. Die letztere ist die Bahn, die
später real angesteuert werden soll.
Scrollbutton Geschwindigkeit: Wird der Scrollbutton nach rechts gescrollt, so steigt
die dem Auto zugeführte mittlere Spannung durch Änderung der Zykluszeit des Mikrocontrollers AT90S1200 und damit deren Geschwindigkeit. Vor allem für den Startvorgang ist es häufig erforderlich, dass dem Auto durch manuelle Vorgabe eine bestimmte
Spannung zugeführt wird, denn erst beim Erreichen eines Lichttasters wird die Reaktion des neuronalen Netzes abgefragt und somit über das XMDO-Modul MCB-537 dem
Mikrocontroller ein Zykluswert übergeben und damit dem Rennauto eine bestimmte
Spannung, sprich Geschwindigkeit, zugeführt.
Textfeld X-Position: Hier wird die aktuelle x-Koordinate des Rennautos auf der Visualisierung angegeben.
8 BEDIENUNG
8.1 Bedienung der Simulation
Textfeld Y-Position: Hier wird die aktuelle y-Koordinate des Rennautos auf der Visualisierung angegeben.
Textfeld Rundenzahl: Hier wird die Anzahl der gefahrenen Runden angegeben. Diese
bezieht sich auf die tatsächlich mit der realen Bahn gefahrenen Runden. Das Hochzählen
wird also durch den Lichttaster 1 angestoßen.
Textfeld Zeit pro Runde: Hier wird die Zeit pro Runde angegeben. Zusätzlich wird
der Standardzykluswert angegeben.
Textfeld Zeit LT-Abschnitt 1: Hier wird die Zeitdauer angegeben, die das Rennauto
benötigt, bis es die Distanz zwischen dem Lichttaster 1 und Lichttaster 2 zurückgelegt
hat. Außerdem wird der Wert der zu jedem Lichttasterabschnitt gehörigen Zyklusvariablen angegeben. Dieser Wert addiert mit dem Standardzykluswert ist der Wert, der dem
XMOD-Modul MCB-537 gesendet wird, wenn der Lichttaster 1 aktiviert wird.
Textfeld Zeit LT-Abschnitt 2: Hier wird die Zeitdauer angegeben, die das Rennauto
benötigt, bis es die Distanz zwischen dem Lichttaster 2 und Lichttaster 3 zurückgelegt
hat. Außerdem wird der Wert der zu jedem Lichttasterabschnitt gehörigen Zyklusvariablen angegeben. Dieser Wert addiert mit dem Standardzykluswert ist der Wert, der dem
XMOD-Modul MCB-537 gesendet wird, wenn der Lichttaster 2 aktiviert wird.
Textfeld Zeit LT-Abschnitt 3: Hier wird die Zeitdauer angegeben, die das Rennauto
benötigt, bis es die Distanz zwischen dem Lichttaster 3 und Lichttaster 4 zurückgelegt
hat. Außerdem wird der Wert der zu jedem Lichttasterabschnitt gehörigen Zyklusvariablen angegeben. Dieser Wert addiert mit dem Standardzykluswert ist der Wert, der dem
XMOD-Modul MCB-537 gesendet wird, wenn der Lichttaster 3 aktiviert wird.
Textfeld Zeit LT-Abschnitt 4: Hier wird die Zeitdauer angegeben, die das Rennauto
benötigt, bis es die Distanz zwischen dem Lichttaster 4 und Lichttaster 5 zurückgelegt
hat. Außerdem wird der Wert der zu jedem Lichttasterabschnitt gehörigen Zyklusvariablen angegeben. Dieser Wert addiert mit dem Standardzykluswert ist der Wert, der dem
XMOD-Modul MCB-537 gesendet wird, wenn der Lichttaster 4 aktiviert wird.
Textfeld Zeit LT-Abschnitt 5: Hier wird die Zeitdauer angegeben, die das Rennauto
benötigt, bis es die Distanz zwischen dem Lichttaster 5 und Lichttaster 6 zurückgelegt
106
8 BEDIENUNG
8.1 Bedienung der Simulation
hat. Außerdem wird der Wert der zu jedem Lichttasterabschnitt gehörigen Zyklusvariablen angegeben. Dieser Wert addiert mit dem Standardzykluswert ist der Wert, der dem
XMOD-Modul MCB-537 gesendet wird, wenn der Lichttaster 5 aktiviert wird.
Textfeld Zeit LT-Abschnitt 6: Hier wird die Zeitdauer angegeben, die das Rennauto
benötigt, bis es die Distanz zwischen dem Lichttaster 6 und Lichttaster 7 zurückgelegt
hat. Außerdem wird der Wert der zu jedem Lichttasterabschnitt gehörigen Zyklusvariablen angegeben. Dieser Wert addiert mit dem Standardzykluswert ist der Wert, der dem
XMOD-Modul MCB-537 gesendet wird, wenn der Lichttaster 6 aktiviert wird.
Textfeld Zeit LT-Abschnitt 7: Hier wird die Zeitdauer angegeben, die das Rennauto
benötigt, bis es die Distanz zwischen dem Lichttaster 7 und Lichttaster 1 zurückgelegt
hat. Außerdem wird der Wert der zu jedem Lichttasterabschnitt gehörigen Zyklusvariablen angegeben. Dieser Wert addiert mit dem Standardzykluswert ist der Wert, der dem
XMOD-Modul MCB-537 gesendet wird, wenn der Lichttaster 7 aktiviert wird.
Lernen: Mit diesem Button wird der Lernvorgang des neuronalen Netzes gestartet. Der
Lernvorgang kann nur gestartet werden, solange das Rennauto nicht fhrt. Wird also der
Start-Button betätigt, so wird der Lernen-Button deaktiviert und somit ist der Start
des Lernvorgangs nicht möglich. Erst beim Drücken des Stop-Button wird der LernenButton wieder aktiviert und somit ist ein erneuter Lernvorgang des Neuronalen Netzes
möglich.
Lernschrittauswahl: Mit dieser Auswahl kann die Anzahl der Lernschritte festgelegt
werden. Es ist zu beachten, dass eine zu kleine Lernrate ein schlechtes Ergebnis bewirkt.
Allerdings kann auch eine zu groe Lernrate zu Problemen führen, da damit das Neuronale
Netz überlernt wird.
Lernfortschritt: Hier wird der Lernfortschritt des Neuronalen Netzes angezeigt.
Fehler: Hier wird der Fehler des neuronalen Netzes angezeigt. Die Fehlerrate sollte
mindestens kleiner als 0.5 sein, damit das neuronale Netz ein gutes Ergebnis bewirkt.
Aufbau des Lade Bahn Dialogs: Hier befinden sich links untereinander zwei Checkboxes und zwei Buttons. Im Zentrum wird die jeweilige ausgewählte Bahn dargestellt.
CheckBox Bahn 1: Bahn 1 wird als Vorschau angezeigt
107
8 BEDIENUNG
8.2 Test der Simulation
CheckBox Bahn 2: Bahn 2 wird als Vorschau angezeigt
Button Laden: Die im Zentrum dargestellte Bahn wird im Hauptapplet geladen und
der Dialog wird geschlossen.
Button Abbrechen: Der Dialog wird ohne jegliche ausgeführte Aktionen geschlossen.
8.2 Test der Simulation
Zum Testen der Simulation wird ohne der Verwendung der realen Bahn durchgefhrt. Das
Problem ist nun, dass die Rückmeldung durch die Lichttaster fehlt. Daher werden diese
durch die Software simuliert bzw. manuell durch den Anwender geschaltet übersicht
Dialog in der Testphase
Abbildung 44: Dialog für die Testphase
108
8 BEDIENUNG
8.2 Test der Simulation
Dazu gibt es die Checkboxes 63 , mit denen die entsprechenden Lichttaster simuliert werden
können.
Damit eine Synchronisation des Programms, also der Visualisierung, mit der realen Carrera Rennbahn möglich ist, wurde die Visualisierung so realisiert, dass zwei Fälle berücksichtigt werden können.
Beim ersten Fall wird berücksichtigt, dass das reale Fahrzeug noch nicht an den Lichttaster erreicht hat, der jedoch von der Visualisierung bereits erreicht wurde. Nun muss
das Rennauto solange stehen bleiben, bis auch das reale Rennauto die entsprechende
Position erreicht wird. Damit findet also die Synchronisation statt.
Beim zweiten Fall wird berücksichtigt, dass das reale Fahrzeug schneller ist, als das
Rennauto der Visualisierung. Wurde z.B. der in der Reihenfolge logisch folgende reale
Lichttaster 2 bereits erreicht, jedoch in der Visualisierung sich das Rennauto noch weiter zurck befindet, so wird das Rennauto der Visualisierung automatisch an die Stelle
gesetzt, an der sich der aktuell betätigte Lichttaster befindet.
Mit diesen beiden Fällen wird also eine Synchronisation zwischen der Visualisierung und
dem realen Fall erreicht.
63
Siehe Abbildung 44 rechte Seite Mitte
109
9 Installation und Ausführung
9.1 Beschreibung der Installation
Aufgrund von benötigter Zugriffe auf die serielle Schnittstelle, konnte keine Applet Applikation realisiert werden. Daher wurde eine Funktionsanwendung geschrieben. Damit
dieses Projekt betreibbar ist, muss also Java JDK 1.4 installiert sein.
Bei der Installation und Ausführung des Programms muss wie folgt vorgegangen werden.
• Die heruntergeladenen Dateien mssen in ein Verzeichnis entpackt werden.
• Dos-Box öffnen und in das anglegte Verzeichnis wechseln.
• M it dem Befehl java AutoBahn“ das Projekt starten.
”
9.2 Systemanforderung
• J ava JSDK 1.4 installiert
• S erielle Schnittstelle
• M indestens Pentium II Prozessor oder Prozessor verlgeichbarer Leistung eines anderen Herstellers
• Das Packet javax.comm 64 installiert
64
Packet kann unter Download runtergeladen werden
10 Danksagung
Besonderer Dank gilt Herrn Professor Jürgen Sauer. Herr Sauer hat uns diese Diplomarbeit überhaupt erst ermöglicht und uns dazu animiert dieses Projekt zu realisieren.
Herr Professor Jürgen Sauer stand uns jederzeit mit Rat und Tat zur Seite. Herr Sauer hatte immer ein offenes Ohr für unsere Probleme und versuchte uns immer so gut
wie nur möglich weiterzuhelfen. Für diese Unterstützung möchten wir uns recht herzlich
bedanken.
Erwähnen möchten wir auch Herrn Professor Doktor Kopp. Herr Kopp stand uns während
des Studiums bei Fragen und Problemen jederzeit zur Verfügung. Für diesen unermüdlichen Einsatz möchten wir uns bei Herrn Professor Doktor Kopp recht herzlich bedanken.
Ein besonderer Dank gilt auch der Firma Messcomp GmbH aus Wasserburg, die uns
das XMOD-Modul MCB-537 kostenlos zur Verfügung stellte. Hier möchten wir Frau
Senft und Herrn Stadler explizit erwähnen, die unsere Ansprechpartner bei der Firma
Messcomp waren. Vor allem Herr Anton Stadler hatte uns bei technischen Problemen
stets schnellstmöglich weitergeholfen.
Bei den Labormitarbeitern der Fachhochschule Regensburg wollen wir uns ebenfalls sehr
bedanken. Vor allem Herr Wilhelm Schwindl stand uns jederzeit bei organisatorischen
Problemen hilfreich zur Verfügung.
Zum Schluß wollen wir uns natürlich bei unseren Eltern herzlich bedanken, die uns das
Studium erst ermöglichten. Sie unterstützten uns in allen Phasen des Studiums und
haben damit wesentlich am erfolgreichen Abschluß unseres Studiums beigetragen.
Abbildungen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
Aufbau Carrera Rennbahn . . . . . . . . . . . . . . . . . . . . . . . . . .
Aufbau Wannenstecker CN1. . . . . . . . . . . . . . . . . . . . . . . . . .
Aufbau Wannenstecker CN2. . . . . . . . . . . . . . . . . . . . . . . . . .
Aufbau des XMOD Moduls MCB-537. . . . . . . . . . . . . . . . . . . .
Aufbau Festspannungsregler. . . . . . . . . . . . . . . . . . . . . . . . . .
Aufbau Spannungsversorgung. . . . . . . . . . . . . . . . . . . . . . . . .
Aufbau Spannungsversorgung. . . . . . . . . . . . . . . . . . . . . . . . .
Ansicht Spannungsversorgung Lötseite. . . . . . . . . . . . . . . . . . . .
Schaltplan der Platine für die Steuerung des Rennautos. . . . . . . . . .
Aufbau der Platine für die Steuerung des Rennautos. . . . . . . . . . . .
Lötseite der Platine für die Steuerung des Rennautos. . . . . . . . . . . .
Aufbau Smart High Side Power Switch. . . . . . . . . . . . . . . . . . . .
Anschluß des Oszillators. . . . . . . . . . . . . . . . . . . . . . . . . . . .
Aufbau LT1083. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Spannungsverlauf bei PWM mit niederiger Belastung. . . . . . . . . . . .
Spannungsverlauf bei PWM mit mittlerer Belastung. . . . . . . . . . . .
Spannungsverlauf bei PWM mit hoher Belastung. . . . . . . . . . . . . .
Screenshot AVRStudio 3.56. . . . . . . . . . . . . . . . . . . . . . . . . .
Aufbau Mikrocontroller AT90S1200. . . . . . . . . . . . . . . . . . . . . .
Anschluß des Mikrocontroller AT90S1200 bei Programmierung. . . . . . .
Programm AVR-Prog zur Programmierung des Mikrocontrollers mittels
paralleler Schnittstelle . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Dialog zur Einstellung Erzeugung hex-File . . . . . . . . . . . . . . . . .
Aufbau Atmel Programmiergerät . . . . . . . . . . . . . . . . . . . . . .
Lötseite Atmel Programmiergerät . . . . . . . . . . . . . . . . . . . . . .
Porteinstellung Atmel Testprogramm . . . . . . . . . . . . . . . . . . . .
Hauptdialog Atmel Programmer Test . . . . . . . . . . . . . . . . . . . .
Schaltplan der Platine für die Signalerfassung . . . . . . . . . . . . . . .
Aufbau monostabile Kippstufe mit Schmitt-Trigger . . . . . . . . . . . .
Funktionstabelle IC 74LS221 . . . . . . . . . . . . . . . . . . . . . . . . .
Platinenaufbau für die Erfassung der Lichttaster Signale. . . . . . . . . .
Loetansicht des Platinenaufbaus für die Erfassung der Lichttaster Signale.
Applet Carrera Rennbahn. . . . . . . . . . . . . . . . . . . . . . . . . . .
Klassendiagramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Applet Carrera Rennbahn. . . . . . . . . . . . . . . . . . . . . . . . . . .
Topologie eines Backpropagation Netzes. . . . . . . . . . . . . . . . . . .
8
12
13
14
23
24
25
25
28
29
30
33
34
34
36
36
37
39
40
41
44
45
46
46
48
48
52
53
53
56
56
59
60
63
72
36
37
38
39
40
41
42
43
44
Fehlerverlaufskurve. . . . .
Gradientenverfahren in der
Fehlerverlaufskurve. . . . .
lokales Minimum . . . . .
Plateau . . . . . . . . . .
Oszillation . . . . . . . . .
Oszillation . . . . . . . . .
Backpropagation Netz . .
Dialog für die Testphase .
. . . . . . . . . . . .
Fehlerverlaufskurve.
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. 76
. 77
. 78
. 81
. 82
. 82
. 83
. 94
. 108
Tabellen
1
2
3
4
Codierung
Codierung
Codierung
Codierung
Ausgangstabelle erste Möglichkeit .
Ausgangstabelle zweite Möglichkeit
Eingangstabelle erste Möglichkeit .
Eingangstabelle zweite Möglichkeit
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
85
87
92
93
Literatur
[Sauer, 2003] Sauer, J. (2003). Neuronale Netze, Fuzzy Control-Systeme und Genetische
Algorithmen. Skriptum zur Vorlesung Neuronale Netze.
[Scherer, 1997] Scherer, A. (1997). Neuronale Netze, Grundlagen und Anwendungen.
Verlag Vieweg.
Erklärung
Erklärung von Dinauer Siegfried
1. Mir ist bekannt, dass die Diplomarbeit als Prüfungsleistung in das Eigentum des
Freistaats Bayern übergeht. Hiermit erkläre ich mein Einverständnis, dass die Fachhochschule Regensburg diese Prüfungsleistung die Studenten der Fachhochschule
Regensburg einsehen lassen darf, und daß sie die Abschlußarbeit unter Nennung
meines Namens als Urheber veröffentlichen darf.
2. Ich erkläre hiermit, dass ich diese Diplomarbeit selbständig verfasst, noch nicht
anderweitig für andere Prüfungszwecke vorgelegt, keine anderen als die angegebenen Quellen und Hilfsmittel benützt sowie wörtliche und sinngemäße Zitate als
solche gekennzeichnet habe.
Regensburg, den 29.08.2003
.................................................
Unterschrift
Erklärung von Dinauer Christian
1. Mir ist bekannt, dass die Diplomarbeit als Prüfungsleistung in das Eigentum des
Freistaats Bayern übergeht. Hiermit erkläre ich mein Einverständnis, dass die Fachhochschule Regensburg diese Prüfungsleistung die Studenten der Fachhochschule
Regensburg einsehen lassen darf, und daß sie die Abschlußarbeit unter Nennung
meines Namens als Urheber veröffentlichen darf.
2. Ich erkläre hiermit, dass ich diese Diplomarbeit selbständig verfasst, noch nicht
anderweitig für andere Prüfungszwecke vorgelegt, keine anderen als die angegebenen Quellen und Hilfsmittel benützt sowie wörtliche und sinngemäße Zitate als
solche gekennzeichnet habe.
Regensburg, den 29.08.2003
.................................................
Unterschrift
Herunterladen