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