SlideShare ist ein Scribd-Unternehmen logo
1 von 52
Downloaden Sie, um offline zu lesen
BACHELORARBEIT
       AM LEHRSTUHL FÜR INTEGRIERTE SYSTEME




   An Embedded System for
    Adaptive Cruise Control


             Technische Universität München

             Lehrstuhl für Integrierte Systeme

     Univ.-Prof. Dr. sc.techn. Andreas Herkersdorf




Diplomand:         Benjamin Gatscher

Fachbereich:       Elektrotechnik und Informationstechnik

Fachrichtung:      Integrierte Systeme

Betreuer:          M.Sc. Zhonglei Wang

Abgabedatum:       11.04.2008
Erklärung




Erklärung


Hiermit versichere ich, dass die vorliegende Bachelorarbeit mit dem Thema „An
Embedded System for Adaptive Cruise Control“ selbständig und ohne fremde
Hilfe verfasst wurde und keine anderen als die angegeben Hilfsmittel verwendet
wurden.




München, im April 2008




Benjamin Gatscher




                                                                         -2-
Danksagung




Danksagung


Ich danke Herrn Prof. Herkersdorf, dass ich diese Arbeit an seinem Lehrstuhl
anfertigen durfte und dabei die vom Lehrstuhl bereitgestellten Materialien und
Geräte benutzen konnte. Ebenfalls möchte ich mich bei meinem Betreuer
Zhonglei Wang für die äußerst nette und fachlich sehr kompetente Betreuung
bedanken. Außerdem geht mein Dank an Jörg Wunsch, der mir neben der
Möglichkeit der professionellen Platinenfertigung auch zahlreichen Tipps und
Tricks zur Bearbeitung der Platine gegeben hat. Mein ganz besonderer Dank geht
an meine ganze Familie, speziell an meine größten Vorbilder, meine lieben
Eltern, die mich auf meinem Weg immer vorbehaltlos unterstützt und mir dieses
Studium erst ermöglicht haben.




                                                                         -3-
Inhalt




Inhalt


ERKLÄRUNG                                                               2


DANKSAGUNG                                                              3


INHALT                                                                  4


KAPITEL I       EINFÜHRUNG                                              7


I.1      MOTIVATION UND ZIELE DER ARBEIT                                7
I.2      AUFBAU DER ARBEIT                                              8


KAPITEL II          HARDWARE                                            9


II.1      GUMSTIX-MODULE                                                9
II.2      GESCHWINDIGKEITSSENSOR                                       10
II.2.1     AUSWAHL DER MESSMETHODE                                     10
II.2.2     GESCHWINDIGKEITSMESSUNG MITTELS GABELLICHTSCHRANKE UND
IMPULSGEBERSCHEIBE                                                     10
II.3      ABSTANDSSENSOR                                               13
II.4      MIKROCONTROLLER                                              13
II.5      PLATINE                                                      14


KAPITEL III         SOFTWARE                                           16


III.1     ALLGEMEINE ERLÄUTERUNGEN                                     16
III.2     SOFTWARE DES SENSORSYSTEMS                                   16
III.2.1    PROGRAMMSTRUKTUR DER SENSORERFASSUNG                        16
III.2.2    GESCHWINDIGKEITSMESSUNG                                     19
III.2.3    ABSTANDSMESSUNG                                             24
III.2.4    KOMMUNIKATION MIT DEM MASTERSYSTEM                          26
III.3     SOFTWARE DES MASTERSYSTEMS                                   28


                                                                     -4-
Inhalt



III.3.1    BERECHNUNG DER SENSORDATEN                                        29
III.3.2    ACC                                                               31


KAPITEL IV       COLA – THE COMPONENT LANGUAGE                               37


IV.1      BESCHREIBUNG DER SPRACHE COLA                                      37
IV.2      MODELLIERUNG DES ACC-SYSTEMS IN COLA                               38
IV.2.1     DIE UNIT „DISTANCE“                                               39
IV.2.2     DIE UNIT „ACC“                                                    42


KAPITEL V        ERGEBNISSE                                                  46


V.1       GESCHWINDIGKEITSMESSUNG                                            46
V.2       DISTANZMESSUNG                                                     47
V.3       TESTUMGEBUNG                                                       47
V.4       AUTOMATISCH GENERIERTER QUELLCODE                                  48


KAPITEL VI       ZUSAMMENFASSUNG UND AUSBLICK                                49


ABBILDUNGSVERZEICHNIS                                                        50


LITERATURVERZEICHNIS                                                         52


ANHANG 1 SCHALTPLÄNE UND LAYOUTDATEIEN DER
MIKROCONTROLLER-PLATINE                 FEHLER! TEXTMARKE NICHT DEFINIERT.


A1.I SCHALTPLÄNE                              FEHLER! TEXTMARKE NICHT DEFINIERT.
A1.II LAYOUTDATEIEN                           FEHLER! TEXTMARKE NICHT DEFINIERT.
A1.III STÜCKLISTE                             FEHLER! TEXTMARKE NICHT DEFINIERT.


ANHANG 2 QUELLCODE DES MIKROCONTROLLER-PROGRAMMS (SENSOR-
SYSTEM)                                 FEHLER! TEXTMARKE NICHT DEFINIERT.


A2.I ROUTINEN ZUR GESCHWINDIGKEITSMESSUNG              FEHLER! TEXTMARKE NICHT
DEFINIERT.



                                                                           -5-
Inhalt



A2.II ROUTINEN ZUR DISTANZ-ERFASSUNG    FEHLER! TEXTMARKE NICHT DEFINIERT.
A2.III ÜBERTRAGUNGS-ROUTINE             FEHLER! TEXTMARKE NICHT DEFINIERT.
A2.IV HAUPTPROGRAMM                     FEHLER! TEXTMARKE NICHT DEFINIERT.


ANHANG 3 COLA-GENERIERTER QUELLCODE DES ACC-SYSTEMS
(MASTER-SYSTEM)                    FEHLER! TEXTMARKE NICHT DEFINIERT.


A3.I ACC_SYSTEM.H                       FEHLER! TEXTMARKE NICHT DEFINIERT.
A3.II ACC_SYSTEM.C                      FEHLER! TEXTMARKE NICHT DEFINIERT.


ANHANG 4 QUELLCODE DER TESTUMGEBUNG UND DER MIDDLEWARE-
ROUTINE                            FEHLER! TEXTMARKE NICHT DEFINIERT.




                                                                     -6-
Einführung



Kapitel I             Einführung


I.1 Motivation und Ziele der Arbeit

Im Rahmen eines Fahrerassistenzsystems soll in dieser Arbeit ein System für
eine automatische Geschwindigkeits- und Abstandsregelung (Adaptive Cruise
Control - ACC) entwickelt werden. Befindet sich kein Objekt im Bereich vor dem
Fahrzeug, auch Fahrschlauch des Fahrzeugs genannt, wird eine einfache
Geschwindigkeitsregelung ausgeführt, d.h. eine vom Benutzer vorgegebene
Geschwindigkeit wird automatisch gehalten (Tempomatenfunktion). Befindet sich
jedoch ein Objekt im Fahrschlauch des Fahrzeugs, hat natürlich die Vermeidung
einer Gefahrensituation Priorität und es erfolgt dann eine Abstandsregelung, der
die Geschwindigkeitsregelung untergeordnet ist. Die Spezifikationen des ACC-
Systems sind in Abschnitt III.3.2.1 aufgeführt.

Das ACC-System soll als Teil einer Fallstudie in ein Modellauto integriert werden.
Mit dieser Fallstudie soll die Anwendbarkeit und der Nutzen der Sprache COLA
(The    Component     Language)   demonstriert    werden,   mit   der    komplexe
Softwaresysteme modelliert werden können. Nach einer kurzen Einführung und
Erläuterung der Vorteile der Sprache COLA wird das ACC-System mit ihrer Hilfe
modelliert.

Das    bisher   bestehende   Fahrerassistenzsystem,   dessen   Blockschaltbild   in
Abbildung 1 dargestellt ist, verfügt noch über keine Geschwindigkeitsmessung.




              Abbildung 1: Blockschaltbild des bestehenden Systems




                                                                             -7-
Einführung



Die Hardware des Fahrerassistenzsystem ist jedoch bereits stark ausgelastet, so
dass   für   eine   Implementierung   der   Geschwindigkeitsmessung   neben   der
Sensorik auch noch zusätzliche Hardware zur Sensorauswertung hinzugefügt
werden muss. Diese zusätzliche Hardware soll im Vergleich zu den relativ teuren
Gumstix-Modulen möglichst kostengünstig sein. Im Vergleich zu den recht
teuren Gumstix-Modulen ist der verwendete Mikrocontroller vom Typ ATMega der
Firma Atmel sehr preiswert und deshalb für diese Anwendung ideal geeignet.
Das um die Geschwindigkeitssensorik erweiterte Gesamtsystems zeigt Abbildung
2:




             Abbildung 2: Blockschaltbild des erweiterten Systems




I.2 Aufbau der Arbeit

Diese Arbeit gliedert sich im wesentlichen in vier Teile. Zuerst soll der
hardwareseitige Aufbau des Systems beschrieben werden, im zweiten Teil wird
dann auf die Implementierung der Software eingegangen. Anschließend wird die
Sprache COLA zur Modellierung komplexer Softwaresysteme kurz vorgestellt und
das ACC-System mit ihrer Hilfe modelliert. Im abschließenden vierten Teil
werden Ergebnisse und aufgetretene Probleme erläutert.




                                                                              -8-
Hardware




Kapitel II           Hardware


II.1 Gumstix-Module

Bei den Gumstix-Modulen handelt es sich um leistungsstarke Mini-Computer. Die
Größe des Motherboards eines Gumstix-Moduls beträgt 80mm x 20mm x 6.3mm
und ist damit von der Größe her mit einem Streifen Kaugummi vergleichbar.
Daher   auch   der   Name      Gumstix.   Über   Erweiterungsmodule   wird    die
Kommunikation mit Peripheriegeräten       ermöglicht. Angeboten werden u.a.
Erweiterungsmodule für die Kommunikation via Bluetooth, Ethernet und USB.
Die Gumstix-Boards sind mit XScale-Prozessorkernen ausgerüstet, die auf der
ARM-Architektur basieren. Erhältlich sind Module mit Taktfrequenz zwischen 200
MHz und 600 MHz und einer SD-RAM-Speichergröße bis zu 128 MB. Die
Versorgungsspannung beträgt 5V. Sie werden standardmäßig mit einem Linux-
Betriebssystem ausgeliefert.




           Abbildung 3: Gumstix-Modul mit Erweiterungsboard



Das in Abbildung 3 dargestellte Modul hat inklusive Erweiterungsboard eine
Größe von 10cm x 5cm x 3cm.

Weitere Informationen zu den Gumstix-Modulen finden sich unter [1].




                                                                             -9-
Hardware



II.2 Geschwindigkeitssensor

II.2.1 Auswahl der Messmethode

Eine    Möglichkeit   der   Geschwindigkeitsmessung   wäre   die   Ausnutzung   der
elektromagnetischen Induktion, wie sie auch beim Fahrradtacho verwendet wird.
Da mit dieser Methode allerdings keine Drehrichtungserkennung möglich ist und
damit ein Rückwärtsfahren nicht detektiert werden kann, scheidet diese Methode
jedoch aus. Außerdem sollen für eine höhere Auflösung mehrere Impulse pro
Radumdrehung aufgenommen werden, was mehrere induktive Signalgeber
erfordern würde. Eine Montage mehrerer Magnete auf eine nur wenige Millimeter
dicke Achse ist jedoch nicht zweckmäßig. Deshalb wurde ein optisches
Verfahren, eine Gabellichtschranke, verwendet.


II.2.2 Geschwindigkeitsmessung mittels Gabellichtschranke und
        Impulsgeberscheibe

Die Geschwindigkeit wird mittels eines Fotointerrupters (GP1A038RBK) der Firma
Sharp     mit   Taktscheibe    gemessen,   auch   Gabellichtschranke,    optischer
Inkrementalgeber oder optischer Drehgeber genannt.




 Abbildung 4: Gabellichtschranke GP1A038RBK mit Impulsgeberscheibe



Hierbei handelt es sich um einen Sensor bestehend aus einer LED und einem
Phototransistor. Zwischen der emittierenden LED und dem detektierenden
Phototransistor befindet sich ein Schlitz im Sensorgehäuse, durch den die
Geberscheibe läuft, die auf der Achse des Fahrzeugs montiert ist. Auf dieser
lichtdurchlässigen Geberscheibe befinden sich lichtundurchlässige Sektoren, mit
denen der Lichtstrahl zwischen Sende-LED und detektierendem Fototransistor
zyklisch unterbrochen wird, sobald die Scheibe rotiert. Je nach Geschwindigkeit


                                                                            - 10 -
Hardware



des Fahrzeugs werden so Rechteck-Impulsfolgen unterschiedlicher Frequenz
generiert. Die Abstände zwischen den Impulsen werden mit Hilfe eines Timers
eines Mikrocontrollers gemessen und daraus die Geschwindigkeit berechnet. Die
hier verwendete Scheibe hat 120 Schlitze pro Umdrehung, der Raddurchmesser
d beträgt 6.5cm und damit der Radumfang u = π d = 20.27cm .

Damit berechnet sich die Geschwindigkeit, unter der Annahme, dass pro
Inkrement genau ein gültiger Impuls erzeugt wird, folgendermaßen:

                                       u
                                    x 120
                                  v= =
                                    t  t
Um außer der Drehgeschwindigkeit auch noch die Drehrichtung bestimmen zu
können, wird hier ein sog. zweispuriger Inkrementalgeber verwendet. Dieser gibt
über einen zweiten Ausgang eine um 90 Grad verschobene Impulsfolge aus, die
von einer zweiten Fotodiode-Fototransistor-Kombination erzeugt wird. Je nach
Phasenlage der Impulsfolge der Spur B gegenüber der Impulsfolge der Spur A
kann so die Drehrichtung detektiert werden. Eine mögliche Impulsfolge der
beiden Ausgänge mit Drehrichtungsumkehr ist in Abbildung 5 dargestellt.




           Abbildung 5: Impulsfolgen der beiden Ausgänge der
               Gabellichtschranke mit Drehrichtungsumkehr



Die Decodierung dieser beiden Impulsfolgen erfolgt über eine Finite State
Machine, die im Softwareteil beschrieben wird.




                                                                          - 11 -
Hardware




Schaltplan und Anschlussbelegung des Fotointerrupters:




                 Abbildung 6: Schaltplan der Gabellichtschranke



Anschlussbelegung:

1: Anode der LED

2: Kathode der LED

3: GND

4: Ausgangspin B

5: Ausgangspin A

6: VCC



Über den Widerstand R kann der Strom durch die Fotodiode begrenzt werden.
Der Spannungsabfall der Fotodiode in Vorwärtsrichtung beträgt laut Datenblatt
typischerweise 1.2V. Die meisten Kenndaten des Sensors werden im Datenblatt
bei einem Fotostrom von IF = 11mA angegeben. Um diesen Strom durch die
Fotodiode zu erzeugen wird bei einer Versorgung mit 5V ein Vorwiderstand

     5V − 1.2V
R=             = 345 Ω
      11 mA

benötigt. Der nächste Wert der E24-Reihe beträgt 330 Ohm, damit ergibt sich
ein Fotostrom von 11.5mA. Der Kondensator C1 = 10nF wird zur Stabilisierung
der Spannungsversorgung eingefügt. Zusätzlich wird C2 = 10uF hinzugefügt, um
Spannungsschwankungen aufgrund langer Zuleitungen zu kompensieren.


                                                                           - 12 -
Hardware



II.3 Abstandssensor

Im Modellauto kommen für die Distanzmessungen sowohl Infrarotsensoren als
auch Ultraschallsensoren zum Einsatz. Der Vorteil der Ultraschallsensoren
gegenüber den Infrarotsensoren ist v.a. ihre größere Reichweite bis hin zu
einigen Metern. Die verwendeten Infrarotsensoren haben nur eine Reichweite bis
ca. 30cm. Da es für das ACC-System jedoch ausreichend ist, Distanzen zwischen
4cm und 30cm zu erfassen und die Infrarotsensoren kostengünstiger sind,
wurden Infrarotsensoren verwendet.

Der Abstandssensor besteht aus einem Infrarotsensor vom Typ GP2D120 der
Firma Sharp, der abhängig von der gemessenen Distanz einen analogen
Spannungspegel an seinem Ausgang ausgibt.




                   Abbildung 7: Infrarotsensor GP2D120



Dieser analoge Spannungswert wird mittels eines AD-Wandlers digitalisiert und
mit Hilfe der im Datenblatt gegebenen Kennlinie in einen Abstand umgerechnet.
Die Kennlinie ist in Abbildung 20 im Softwareabschnitt III.3.1.1 abgebildet, wo
auch die Linearisierung und Umrechnung des digitalisierten Wertes in einen
Abstand beschrieben wird.


II.4 Mikrocontroller

Zur Auswertung der Sensorsignale kommt ein 8bit-Mikrocontroller vom Typ
ATMega32 [4] der Firma Atmel zum Einsatz. Der RISC-Prozessorkern basiert auf
der Harvard-Architektur. Der ATMega32 verfügt über folgende Speicherarten-
und größen: 32Kbyte Programmspeicher, 1Kbyte EEPROM und 2Kbyte SRAM.
Außerdem besitzt dieser Mikrocontroller noch eine Reihe nützlicher Hardware-
Peripherie, wie z.B. mehrere Timer, eine I2C-Schnittstelle, einen mehrkanaligen
10-bit-AD-Wandler sowie eine Hardware-USART-Schnittstelle, mit deren Hilfe die
Kommunikation    mit   dem   PC   über   die   RS232-Schnittstelle   möglich   ist.


                                                                           - 13 -
Hardware



Programmierbar ist der Controller neben der SPI-Schnittstelle auch über das
JTAG-Interface, das neben der Programmierung außerdem noch das On-Chip-
Debugging ermöglicht. Über beide Programmierschnittstellen ist „In-System-
Programming“ möglich, d.h. der Controller muss nicht aus der Zielhardware
entfernt   werden,   sondern    kann   direkt    in   der   verwendeten   Schaltung
programmiert   werden.   Laut   Datenblatt      werden   10000   Schreibzyklen   des
Programmspeichers garantiert.

Mit Hilfe der kostenfreien Entwicklungsumgebung AVR Studio der Firma ATMEL
können die Controller sowohl in Assembler als auch in C programmiert werden.
Diese Entwicklungsumgebung enthält außerdem einen Simulator, mit dem die
Programme getestet werden können.


II.5 Platine

Da das gesamte Fahrerassistenzsystem aus den drei schon erwähnten Gumstix-
Modulen besteht, ist das Raumangebot für die Platine zur Auswertung des
Geschwindigkeitssensors im Modellfahrzeug sehr begrenzt. Aus diesem Grund
konnte keines der standardmäßig angebotenen Evaluation-Boards für den
Controller genutzt werden, sondern es musste eine maßgeschneiderte Platine in
Auftrag gegeben werden. Ein Bild der Vorder- und Rückseite der fertig gelöteten
Platine zeigen die Abbildungen 8 und 9.




             Abbildung 8: Mikrocontroller-Platine: Vorderseite



Die Schaltplan- und Layoutdateien sowie eine Stückliste der verwendeten
Bauelemente befinden sich in Anhang A.




                                                                             - 14 -
Hardware




              Abbildung 9: Mikrocontroller-Platine: Rückseite



Alle Widerstände und Kondensatoren, außer dem Elektrolytkondensator C301 in
Bauform B, haben die Baugröße 0805 und sind damit wie der Pegelshifter im
SOT-Gehäuse (Pinabstand 1,27mm) noch gut von Hand lötbar. Der Controller ist
neben dem hier unzweckmäßig großen DIP-Package nur in einem TQFP-Gehäuse
mit 0.8mm Pinabstand erhältlich. Mit Verwendung eines Flussmittelstiftes und
Lötsauglitze kann aber auch dieser gut gelötet werden. Um Korrosion der
Leiterbahnen zu verhindern wurde die Platine abschließend mit Aceton gereinigt
und mit klarem Wasser abgespült. Die Platine ist 5cm x 2cm groß und damit
klein genug um problemlos im Modellauto integriert werden zu können. Auf ihr
befinden sich neben dem Controller selbst noch Pfostenstecker, über die die
benötigten Ein- und Ausgänge des Controllers nach außen geführt sind, sowie die
für den Betrieb des Controllers benötigte Peripherie wie der Quarz, der den
16MHz-Systemtakt      erzeugt   und     diverse   Kondensatoren,     die     die
Betriebsspannung stabilisieren und Störungen eliminieren. Außerdem befinden
sich, neben einem Spannungsregler, der eine stabile 5V-Spannungsversorgung
des Controllers gewährleistet, ein Pegelwandler auf der Platine der die
Anpassung der 5V-Logikpegel des Controllers an die +-12V-Pegel der RS232-
Schnittstelle bewerkstelligt, sowie ein Filternetzwerk für den AD-Wandler. Der
Controller kann über die JTAG-Schnittstelle direkt auf der Platine, d.h. „in-
system“ programmiert und debugged werden.




                                                                           - 15 -
Software




Kapitel III           Software


III.1 Allgemeine Erläuterungen

Alle   Software-Routinen       sind   in   C   implementiert,   da   hiermit   sowohl   die
Programmierung der Regelungsalgorithmen auf den Gumstix-Modulen sowie die
hardwarenahe Programmierung des Mikrocontrollers möglich ist. Das ACC-
System wird außerdem in einem späteren Abschnitt zusätzlich mit Hilfe der
später erläuterten Sprache COLA modelliert. COLA ermöglicht die für den
Benutzer sehr angenehme graphische Modellierung komplexer Softwaresysteme
und bietet die Möglichkeit aus diesem Modell automatisch Code zu generieren.
Eine manuelle Programmierung ist damit nicht mehr notwendig und eine Vielzahl
dadurch begründeter Fehler können so vermieden werden, was gerade bei
komplexen sicherheitsrelevanten Anwendungen, wie sie im Automobil- oder
Flugtechnikbereich häufig auftreten, wichtig ist.

In Abschnitt III.2 werden die Routinen des Sensorsystems beschrieben, in
Abschnitt III.3 folgt dann eine Beschreibung der Software des Mastersystems.




III.2 Software des Sensorsystems

III.2.1 Programmstruktur der Sensorerfassung

Die    Auswertung   aller   Sensoren       erfolgt   komplett   interrupt-gesteuert.    Im
Gegensatz zum in Abbildung 10 dargestellten sequentiellen Programmablauf ist
hier eine Unterbrechung der Codeausführung des Hauptprogrammes möglich. Zu
Beginn werden die Interruptquellen aktiviert und anschließend wird, wie beim
sequentiellen Programmablauf, eine Endlosschleife gestartet [6]. Innerhalb
dieser Endlosschleife können die nicht-zeitkritischen Programmteile ausgeführt
werden.    Die   aktivierten     Interruptquellen    können     verschiedene    Interrupts
auslösen wodurch das aktuell ausgeführte Hauptprogramm unterbrochen wird
und die jeweiligen Interrupt-Serviceroutinen ausgeführt werden. Nach der
Abarbeitung der entsprechenden Interrupt-Serviceroutine wird die Ausführung
des Hauptprogramms an dem Punkt fortgesetzt, an dem sie unterbrochen wurde.



                                                                                    - 16 -
Software




              Abbildung 10: Sequentieller Programmablauf




      Abbildung 11: Interruptgesteuerte Programmausführung mit
                   zugehöriger Interrupt-Serviceroutine



Abbildung 12 zeigt den Programmablaufplan des Hauptprogrammes. In diesem
werden nur die erfassten Sensorwerte in das für die Übertragung besser
geeignete ASCII-Format gewandelt, sowie die Übertragung der Sensorwerte an
das Mastersystem, sofern eine Anfrage von diesem vorliegt, ausgeführt. Die
Routine   „send_check“,   die   die   Übertragung   der    Sensorwerte    an     das
Mastersystem ausführt ist in Abschnitt III.2.4 näher beschrieben.

Um Rechenzeit zu sparen, wird eine Umwandlung in das ASCII-Format nur
ausgeführt, wenn sich der Wert geändert hat.

Die   Sensorauswertung      erfolgt   dann     innerhalb   mehrerer      Interrupt-
Serviceroutinen. Der Geschwindigkeitssensor wird mittels zweier Interrupt-
Serviceroutinen ausgewertet, die in Abschnitt III.2.2.3 beschrieben sind, die

                                                                               - 17 -
Software



beiden Distanzsensoren werden durch zwei weitere Interrupt-Serviceroutinen
ausgewertet, die in Abschnitt III.2.3 näher beschrieben wird.




        Abbildung 12: Programmablaufplan des Hauptprogramms



Der dem Programmablaufplan in Abbildung 12 entsprechende Quellcode befindet
sich in Anhang A2.IV unter „Main-Routine“.




                                                                     - 18 -
Software



III.2.2 Geschwindigkeitsmessung

III.2.2.1 Einführung

Zur      Berechnung      der      Geschwindigkeit        sind      Multiplikations-        sowie
Divisionsoperationen notwendig. Die ALU des Mikrocontrollers ist jedoch nicht
auf   diese    Operationen       optimiert,     so     dass     diese   nur      durch     einen
zeitaufwändigeren Umweg implementiert werden können.

Das      Ergebnis     der      Berechnung       wäre      außerdem        eine       Zahl      in
Fließkommadarstellung. Das UART-Datenregister des Controllers ist jedoch nur
8bit breit und eine sinnvolle Speicherung von Fließkommazahlen somit nicht
möglich, d.h. zu übertragende Werte müssen vorher in das ASCII-Format
umgewandelt werden. Diese Umwandlung dauert für Float-Werte wesentlich
länger als für Integer-Werte.

Diese beiden Umstände führen zusammen mit der benötigten Rechenzeit zur
Auswertung der Abstandssensoren zu einer zu hohen Rechenzeitanforderung.
Würde man nun die Geschwindigkeitsberechnung direkt im Mikrocontroller
ausführen, könnten die Sensoren nicht mehr oft genug abgefragt werden, und so
eine Kollision mit einem Objekt im Fahrschlauch des Fahrzeugs nicht mehr
rechtzeitig vermieden werden.

Die Geschwindigkeitsmessung wird deshalb in zwei Teilabschnitte zerlegt. Der
Mikrocontroller misst nur mit Hilfe eines Counters die Zeit zwischen zwei
nacheinander auftretenden Impulsen der Gabellichtschranke und übermittelt
diesen    Zählerwert     per    RS232-Schnittstelle       an     das    Mastersystem.        Das
Mastersystem        berechnet      aus        diesem     Zählerstand          und     weiteren
Randbedingungen, wie Zählerfrequenz des Mikrocontrollers und Raddurchmesser
des Fahrzeuges, dann die aktuelle Geschwindigkeit.

Wie      bereits    im      Abschnitt    Hardware        näher      erläutert,      wird     zur
Geschwindigkeitsbestimmung eine Gabellichtschranke mit Impulsgeberscheibe
verwendet. Die Auswertung der beiden Spuren der Gabellichtschranke erfolgt mit
Hilfe einer Finite State Machine.


III.2.2.2 Finite State Machine

Wie in [6] beschrieben, gibt es mehrere Möglichkeiten, der Signalauswertung
zweispuriger Inkrementalgeber. Aufgrund ihrer Überlegenheit gegenüber allen


                                                                                           - 19 -
Software



anderen Methoden wird hier eine Auswertung beider Spuren mit fester
Abtastfrequenz durchgeführt. Hierbei werden die Logikpegel beider Spuren mit
einer festgelegten Frequenz abgetastet und mittels einer „Finite State Machine“
ausgewertet.

Die Finite State Machine (FSM) besteht aus vier Zuständen: „00“, „01“, „10“ und
„11“ (siehe Abbildung 13), die sich aus den Logikpegeln der beiden Signale A
und B des Fotointerrupters ergeben. Sind beide Signalleitungen auf logischem
„High“-Pegel, so ergibt sich der Zustand „11“ für die FSM, befindet sich nur die
Signalleitung A auf „High“, Signalleitung B jedoch auf „low“, so ist der Zustand
der FSM „10“. Der Fotointerrupter übermittelt seine Zustände mit einem Gray-
Code, d.h. direkt benachbarte Binärwerte (und damit direkt benachbarte
Zustände) unterscheiden sich nur in einer Ziffer. So ist z.B. ein Übergang vom
Zustand 00 nur zu den Zuständen 01 und 10 möglich, da sich beim Übergang
vom Zustand 00 in den Zustand 11 zwei benachbarte Ziffern gleichzeitig ändern
würden. Hiermit können fehlerhafte Zustandsübergänge detektiert werden.
Fehlerhafte Zustandswechsel sind also 00->11, 11->00 sowie 01->10, 10->01.
Diese fehlerhaften Zustandsübergänge sind in Abbildung 13 gepunktet in der
Mitte dargestellt. Werden solche fehlerhaften Zustandswechsel detektiert, gehen
bei der Abtastung Zustände verloren, da laut Abbildung 14 z.B. nach einem „01“-
Pegel je nach Fahrtrichtung immer entweder der Zustand „00“ oder „11“
auftreten muss. Dies bedeutet, dass die Drehgeschwindigkeit der Schiebe zu
groß für die gewählte Abtastrate ist und die Abtastfrequenz erhöht werden muss.




          Abbildung 13: Zustände und Zustandsübergänge der

                            Finite State Machine




                                                                          - 20 -
Software



Die Zustandswechsel erfolgen immer nach folgendem Schema: 00 -> 10 / 01 ->
11 -> 01 / 10 -> 00

Abbildung 14 zeigt die vom Distanzsensor erzeugten Impulsfolgen und die
entsprechenden Zustände der FSM.




             Abbildung 14: Ausgangssignale der Gabellichtschranke und
                  entsprechende Zustände der Finite State Machine


III.2.2.3 Geschwindigkeitsmessung

Die   höchste       messbare     Geschwindigkeit       ist   begrenzt   durch   die   maximal
auswertbare Frequenz des Fotointerrupters, die laut Datenblatt 20kHz beträgt.
Die hier verwendete Geberscheibe ist in 120 Segmente eingeteilt, d.h. es sind
maximal 20000/120 = 166 komplette Umdrehungen der Scheibe pro Sekunde
detektierbar. Bei einer Montage der Scheibe direkt auf der Welle und damit einer
Übersetzung von 1:1 ist die höchste messbare Geschwindigkeit, abhängig vom
                              166π d
Raddurchmesser d: v =                . Der Raddurchmesser des Modellautos beträgt 6.5
                                1s
cm,       womit       sich    eine     maximal     messbare         Geschwindigkeit        von
             cm       m      km
166π ⋅ 6.5      = 33.9 = 122    ergibt.
              s       s       h

Die Phasenverschiebung           der beiden      Ausgangssignale des Fotointerrupters
beträgt      im   Idealfall   90°.   Aufgrund    von     Abweichungen     der   Position   der
Geberscheibe von den Idealpositionen in allen drei Raumrichtungen innerhalb
des Fotointerrupters und aufgrund einer erhöhten Umgebungstemperatur,
verursacht durch die Verlustleistung des Fotointerrupters, kann es in der Praxis
zu einer höheren Phasenverschiebung kommen. Dies kann zusammen mit einer
niedrigen Duty Ration (Anteil des High-Pegels eines Impulses an der Gesamt-
Impulsdauer) der Ausgangssignale zu einer nur noch sehr kleinen „Überlappung“
der beiden Signale führen, was die Detektion der verschiedenen Zustände


                                                                                        - 21 -
Software



erschwert und damit die Abtastrate erhöht werden muss. Aufgrund dieser
Tatsache wird sicherheitshalber eine etwas höhere Abtastrate gewählt.

Die maximal auswertbare Frequenz des Fotointerrupters beträgt 20 kHz, jedem
Impuls entsprechen 4 Zustände der FSM wie Abbildung 14 zu entnehmen ist.
Nach dem Abtasttheorem ergibt sich damit eine untere Abtastfrequenz von
2 ⋅ 4 ⋅ 20 kHz = 160 kHz .

Aufgrund       der     oben        genannten    größeren     Phasenverschiebung     sollte   die
Abtastfrequenz jedoch höher gewählt werden. Für das Modellauto ist eine
maximale Geschwindigkeit von 5km/h ausreichend, was ungefähr einer Frequenz
von 1.2kHz entspricht und damit einer Abtastfrequenz von mindestens 9.6kHz.
Aufgrund der oben erwähnten Phasenverschiebung wird hier zur Sicherheit eine
Abtastfrequenz von 25kHz gewählt.

Die    Auswertung            der   FSM    erfolgt    durch   einen   Interrupt.   Während    der
Initialisierung wird ein Timer gestartet, der alle 40 s einen Interrupt auslöst. In
diesem Interrupt-Handler werden die Zustände der beiden Signalpegel des
Fotointerrupters abgetastet und so die Zustände der FSM bestimmt. Der
Programmablaufplan dieses Interrupt-Handlers ist in Abbildung 15 dargestellt.

Der Quellcode der FSM-Auswertung aus Abbildung 15 befindet sich in Anhang
A2.I unter „Auswertung der FSM“.

Aufgrund       der    später       im    Abschnitt   V.I   beschriebenen   Probleme   mit    der
Gabellichtschranke wurde versucht, den Code für die Auswertung möglichst
robust gegen Störungen zu gestalten. Neben der Überprüfung des aktuellen
Zustandsüberganges werden auch die vier vorherigen Zustandsübergänge auf
Gültigkeit überprüft. Eine Zeitmessung wird nur dann gestartet, wenn eine
gültige Folge von Zustandsübergängen 00 -> 01 -> 11 –> 10 -> 00 bzw. 00 ->
10 -> 11 –> 01 -> 00 vorliegt. Beim Auftreten eines oder mehrerer ungültiger
Zustandsübergänge wird die Zeitmessung abgebrochen und erst bei einem
neuen gültigen Impuls neu gestartet.




                                                                                         - 22 -
Software




         Abbildung 15: Programmablaufplan der FSM-Auswertung



Der zweite Interrupt für die Auswertung der Gabellichtschranke ist der Overflow-
Interrupt des Counters. Mit Hilfe dieses Counters wird die Zeit zwischen zwei
aufeinanderfolgenden Impulsen gemessen. Der Zählerstand des Counters wird
zurückgesetzt, sobald ein neuer gültiger Impuls der Gabellichtschranke auftritt.
Bewegt sich das Fahrzeug jedoch nicht mehr, so werden keine weiteren Impulse
generiert und der Zählerstand erreicht sein Maximum. Da es sich bei dem
Counter um einen 16Bit-Counter handelt, ist dieser Maximalwert bei 65535
erreicht. Beim Überlauf des Counters wird ein Overflow-Flag gesetzt und die
entsprechende   Interrupt-Service-Routine   gestartet.   In   dieser   wird     der
Zählerstand auf den Maximalwert 65535 gesetzt (siehe Abbildung 16).

Da der Counter des Mikrocontrollers in 4 s-Schritten zählt und sein Maximalwert
65535 beträgt, ergibt sich eine maximal messbare Zeitspanne von 0.26s.
Zwischen zwei Impulsen wird eine Strecke von 1.7mm zurückgelegt. Damit


                                                                              - 23 -
Software



ergibt sich eine minimale messbare Geschwindigkeit von 6.5mm/s. Jede
Geschwindigkeit kleiner 6.5 mm/s wird also als stehendes Fahrzeug interpretiert.




      Abbildung 16: Programmablaufplan der ISR „Timer1_Overflow“



Der zur Abbildung 16 gehörige Quellcode befindet sich in Anhang A2.I unter
„Erkennung stehendes Fahrzeug: ISR_Timer1_Overflow“.


III.2.3 Abstandsmessung

Die    Abstandsmessung        erfolgt   aufgrund       der    bereits      bei      der
Geschwindigkeitsmessung     genannten    Einschränkungen      des    Mikrocontrollers
ebenfalls in zwei Teilabschnitten. Die von den beiden Abstandssensoren
generierten Spannungspegel werden vom Mikrocontroller AD-gewandelt und auf
Anfrage des Mastersystems per RS232-Schnittstelle gesendet.

Dort werden die digitalisierten Spannungswerte dann anhand der in Abschnitt
III.3.1.1 beschriebenen Routine in einen Abstand umgerechnet.

Die   Auswertung   der    Infrarotsensoren   erfolgt   wie   die    Auswertung      des
Geschwindigkeitssensors    interruptgesteuert.   Durch   einen     Timer   wird    eine
Zeitbasis erzeugt, die alle 500 s einen Interrupt generiert. Innerhalb der in
Abbildung 17 dargestellten Interrupt-Serviceroutine wird dann eine neue AD-
Wandlung gestartet. Der Quellcode dieser ISR befindet sich in Anhang A2.II
unter „ISR AD-Wandlung“.




                                                                                  - 24 -
Software




            Abbildung 17: Programmablaufplan der AD-Wandlung



Das Ende eines AD-Wandlungszyklusses wird durch einen Interrupt signalisiert
und die in Abbildung 18 dargestellte Interrupt-Serviceroutine ausgeführt, deren
Quellcode in Anhang A2.II unter „ISR ADC_Interrupt“ zu sehen ist.                    Um
Schwankungen      abzuglätten   wird    eine   Mittelwertbildung   der   letzten     vier
gemessenen Distanzwerte durchgeführt. Der Mittelwert wird mit vier Werten
gebildet,   da   damit   einerseits    Schwankungen    der   Messung     ausreichend
ausgeglichen werden, andererseits kann bei einer Mittelwertbildung mit vier
Werten die Division durch den Faktor 4 durch eine einfache Schiebeoperation
ausgeführt werden und so eine rechenzeitintensive Division vermieden werden.
Abschließend wird der Kanal gewechselt, um den Spannungswert des anderen
Distanzsensors zu digitalisieren.




                                                                                   - 25 -
Software




         Abbildung 18: Programmablaufplan der ISR „ADC_Interrupt“



Bei den Mikrocontrollern der ATMega-Serie, die einen AD-Wandler beinhalten,
gibt es drei Möglichkeiten der Referenzspannungswahl. Der ATMega32 bietet
eine interne 2.54V-Spannungsreferenz. Da hier allerdings Spannungswerte bis
zu 3V auftreten können, kann diese nicht genutzt werden. Außerdem kann eine
externe Spannungsreferenz angeschlossen werden. Diese bietet oft die höchste
Genauigkeit, allerdings steigt damit die Größe und Komplexität der Schaltung.
Als letzte Möglichkeit kann als Referenz die Versorgungsspannung des analogen
Netzes verwendet werden. Die Spannung des analogen Netzes beträgt wie die
Spannung des digitalen Netzes 5V, ist jedoch durch einen Tiefpass von diesem
entkoppelt, um Spannungsschwankungen durch schnelle digitale Schaltvorgänge
auszufiltern. Diese Versorgungsspannung wurde als Referenzspannung für die
AD-Wandlungen verwendet.

Laut    Datenblatt      [4] ergibt   sich   folgendes Ergebnis in   Abhängigkeit   der
Referenzspannung:

        VIN ⋅ 1024
ADC =              = VIN ⋅ 204.8
          VREF




III.2.4 Kommunikation mit dem Mastersystem


Die Kommunikation mit dem Mastersystem erfolgt über die RS232-Schnittstelle.
Um hier das Rad nicht neu erfinden zu müssen, wird auf die bereits
vorhandenen, sehr guten und von einer großen Community getesteten Routinen



                                                                               - 26 -
Software



von Peter Fleury [8] zurückgegriffen. In diesen Routinen ist u.a. ein FIFO-
Ringbuffer implementiert, der sicherstellt, dass Zeichen, die noch nicht gesendet
werden können, da das USART-Interface noch mit der Übertragung vorheriger
Zeichen beschäftigt ist, zwischengespeichert werden und nicht verloren gehen.

Die Kommunikation erfolgt im Polling-Verfahren, d.h. das Mastersystem fragt die
Sensordaten zyklisch ab. Dies funktioniert im Falle der Geschwindigkeit indem
die Zeichenfolge „GESP“ gesendet wird, woraufhin der Controller den aktuellen
Zählerstand des Counters sendet. Analog funktioniert die Abfrage der Distanzen
mit den Befehlen „GEDF“ und „GEDR“ für die Abfrage des vorderen bzw. hinteren
Distanzsensors. Die Übertragung der Werte erfolgt im ASCII-Format.

Der Programmablaufplan ist in Abbildung 19 dargestellt und der Quellcode, der
diese Funktion implementiert in Anhang A2.III unter „Übertragungsroutine
Send_Check“.




                                                                           - 27 -
Software




      Abbildung 19: Programmablaufplan der Routine „Send_Checkquot;




III.3 Software des Mastersystems

Die Software des Mastersystems besteht neben dem ACC-Regelungsalgorithmus
noch aus den Routinen zur Geschwindigkeits- und Distanzberechnung aus den
Sensorrohdaten.


                                                                   - 28 -
Software



III.3.1 Berechnung der Sensordaten

III.3.1.1 Berechnung der Distanz

Abbildung 20 zeigt den Zusammenhang zwischen Ausgangsspannungswert des
Infrarotsensors und dem detektierten Abstand. Da diese Kennlinie stark nicht-
linear ist, muss diese für eine Umrechnung der Spannungswerte in Distanzwerte
linearisiert werden.




       Abbildung 20: Spannungs-Distanz-Kennlinie aus dem Datenblatt



Die Kennlinie wird innerhalb der in Tabelle 1 angegebenen Intervalle mit
Geradenstücken approximiert:




                        Tabelle 1: Intervall-Einteilung



Die Kennlinie gibt die Ausgangsspannung als Funktion des Abstandes an,
benötigt wird allerdings der Abstand als Funktion der Spannung. Deshalb werden
die beiden Achsen getauscht. Um außerdem einen gültigen funktionalen




                                                                        - 29 -
Software



Zusammenhang zu erhalten, wird der Kennlinienabschnitt zwischen 0 und 3cm
entfernt. Das Ergebnis zeigt Abbildung 21:




                             Abbildung 21: linearisierte Kennlinie



Der Achsenabschnitt sowie die Steigung der Geradenstücke können aus den
beiden Punkten, die durch die Intervallgrenzen gegeben sind, berechnet werden.

Gegeben sind die beiden Punkte P1(x1 | y1) und P2(x2 | y2) und gesucht ist die
Gerade y = m ⋅ x + t , die durch diese beiden Punkte verläuft.

Setzt man beide Punkte in die Geradengleichung ein, ergeben sich die beiden
Gleichungen

y1 = m ⋅ x1 + t

y2 = m ⋅ x2 + t

Ineinander          eingesetzt   und   nach   m   bzw.   t   aufgelöst   ergeben   sich   die
Bestimmungsgleichungen für die Steigung m bzw. den Achsenabschnitt t:

      y2 − y1
m=
      x2 − x1

     x2 ⋅ y1 − x1 ⋅ y2
t=
          x2 − x1




                                                                                      - 30 -
Software



III.3.1.2 Berechnung der Geschwindigkeit

Der Raddurchmesser des Modellautos beträgt 6.5cm und damit der Radumfang
u = π ⋅ d = 20.42cm . Die Impulsgeberscheibe ist in 120 Segmente eingeteilt. Damit
                                           u
ergibt sich ein zurückgelegter Weg von        = 1.7mm zwischen zwei detektierten
                                          120
Impulsen.   Der   Counter   des   Mikrocontrollers   zählt   in   4 s-Schritten     und
übermittelt seinen Zählerstand per RS232-Schnittstelle an das Mastersystem.
Damit ergibt sich eine Geschwindigkeit von

             u
  x         120
v= =
  t 4µs ⋅ countervalue




III.3.2 ACC

III.3.2.1 ACC – Spezifikationen

1. Allgemeines Verhalten

   1.1 Das ACC-System kann ein- und ausgeschaltet werden.

   1.2 Bei Inbetriebnahme des Systems ist das ACC ausgeschaltet und die
       Wunschgeschwindigkeit auf einen bestimmten Ausgangswert gesetzt,
       beispielsweise 0 km/h (stehendes Fahrzeug).

   1.3 Die Wunschgeschwindigkeit des Autos kann über die Steuerung in einem
       bestimmten Bereich (beispielsweise –2km/h bis 5 km/h) in festen
       Schritten (z.B. 0,5 km/h) erhöht und erniedrigt werden.

2. Fahrverhalten, falls kein Objekt im Fahrschlauch (Geschwindigkeitsregelung)

   2.1 Wenn das ACC eingeschaltet wird, beschleunigt (bremst) das Auto
       solange, bis die Wunschgeschwindigkeit erreicht ist.

   2.2 Solange das ACC eingeschaltet ist, soll die Wunschgeschwindigkeit
       gehalten werden.

   2.3 Wird    die   Wunschgeschwindigkeit      geändert,     während     das      ACC
       eingeschaltet ist, muss die neue Wunschgeschwindigkeit eingenommen
       werden.

3. Fahrverhalten, falls Objekt im Fahrschlauch (Abstandsregelung)



                                                                                  - 31 -
Software



   3.1 Wurde ein Objekt erkannt, muss mindestens ein vorgegebener Abstand
       zum vorausfahrenden Objekt gehalten werden.

   3.2 Die        Abstandsregelung           hat         höhere          Priorität        als     die
       Geschwindigkeitsregelung,             d.h.        ggf.     wird       die      eingegebene
       Wunschgeschwindigkeit unterschritten, falls der Mindestabstand sonst
       nicht gewährleistet wäre.

   3.3 Sobald das Objekt den Fahrschlauch verlassen hat, wird wieder gemäß
       der Geschwindigkeitsregelung (ACC Funktionalität) gefahren.



4. Rückwärtsfahren

   4.1 Das     Fahrzeug         kann    rückwärts        fahren,     indem         eine     negative
       Wunschgeschwindigkeit eingegeben wird.

   4.2 Das Rückwärtsfahren kann erst aktiviert werden, wenn das Fahrzeug
       vollständig steht, d.h. die Ist-Geschwindigkeit 0 ist. (z.B. nach „Nothalt“
       oder durch Einstellen von Wunschgeschwindigkeit = 0.




III.3.2.2 ACC - Regelungsalgorithmus

Abbildung 22 zeigt den Programmablaufplan des ACC-Systems.

Standardmäßig      ist    das     ACC-System        deaktiviert      und       die    gewünschte
Geschwindigkeit wird ohne Regelung direkt an den Motor weitergegeben. Bei
aktiviertem ACC werden die benötigten Sensordaten „aktuelle Geschwindigkeit“
und   „aktuelle    Distanz“      eingelesen        und     der     ACC-Regelungsalgorithmus
ausgeführt. Je nach Bewegungsrichtung des Fahrzeuges wird entweder der
Abstand   zu   einem     Objekt    im      vorderen      oder hinteren        Fahrschlauch        des
Fahrzeuges eingelesen.

Ist der Abstand kleiner als ein minimal erlaubter Sicherheitsabstand wird sofort
ein „emergency brake“, ein Nothalt , ausgeführt, der das Fahrzeug zum
sofortigen Stillstand bringt. Ist der Abstand größer als dieser minimale
Sicherheitsabstand,      aber    kleiner    als   der    im     Normalbetrieb        einzuhaltende
Abstand, wird die Geschwindigkeit so lange heruntergeregelt, bis dieser
gewünschte Abstand eingehalten wird. In diesen beiden Fällen hat also die
Regelung der Distanz eine höhere Priorität als die Regelung der Geschwindigkeit,
es erfolgt eine Abstandsregelung.


                                                                                                - 32 -
Software




             Abbildung 22: Programmablaufplan des ACC-Systems



Ist der aktuell gemessene Abstand größer als der im Normalbetrieb geforderte
Sicherheitsabstand, erfolgt eine Geschwindigkeitsregelung. Ist die aktuelle
Geschwindigkeit des Fahrzeugs geringer als die vom Benutzer gewünschte
Geschwindigkeit, wird das Fahrzeug so lange beschleunigt, bis sich das Fahrzeug
mit der vom Benutzer gewünschten, vorgegeben Geschwindigkeit bewegt. Ist die
Geschwindigkeit größer als die vom Benutzer gewünschte Geschwindigkeit,
erfolgt   eine    Reduzierung    der     Geschwindigkeit   bis   die     gewünschte
Wunschgeschwindigkeit erreicht ist.

Um eine zu abrupte Beschleunigung bzw. Verzögerung zu vermeiden, erfolgt die
Geschwindigkeitsanpassung in 5%-Schritten. Eine Ausnahme bildet hier der sog.
„Emergency       Stop“,   der   bei    einer   Unterschreitung   einer    minimalen
Sicherheitsdistanz möglichst schnell ausgeführt werden soll.

Den Programmablaufplan des Regelungsalgorithmus zeigt Abbildung 23.




                                                                              - 33 -
Software




                   Abbildung 23: ACC-Regelungsalgorithmus



Der Regelungsalgorithmus ist universell für positive, wie auch für negative
Geschwindigkeiten anwendbar wie anhand der Unterscheidung folgender acht
Fälle deutlich gemacht werden soll.

Regelungsalgorithmus: new_speed = act_speed + 0.95 (desired_speed –
act_speed)



Fall 1: beide Geschwindigkeiten > 0

Fall 1a: act_speed < desired_speed (Die aktuelle Geschwindigkeit ist kleiner als
        die Wunschgeschwindigkeit)

        Der   Ausdruck    in   der   Klammer   ist   >   0   und   damit   die   neue
        Geschwindigkeit größer als die aktuelle Geschwindigkeit, das Fahrzeug
        wird beschleunigt.

Fall 1b: act_speed > desired_speed (Die aktuelle Geschwindigkeit ist größer als
        die Wunschgeschwindigkeit)

        Dann ist der Ausdruck in der Klammer < 0 und somit die neue
        Geschwindigkeit    kleiner als die aktuelle Geschwindigkeit, da            ein
        negativer Wert zur aktuellen Geschwindigkeit addiert wird, es kommt
        zur gewünschten Geschwindigkeitsreduzierung.



                                                                                 - 34 -
Software



Fall 2: beide Geschwindigkeiten < 0

Fall 2a: | act_speed | < | desired_speed |

        Ist   die   aktuelle   Geschwindigkeit     betragsmäßig   kleiner    als   die
        Wunschgeschwindigkeit, so bleibt der Ausdruck in der Klammer <0.
        Betragsmäßig     vergrößert   sich   die    Geschwindigkeit,   das   negative
        Vorzeichen jedoch bleibt erhalten.

Fall 2b: | act_speed | > | desired_speed |

        Ist   die   aktuelle   Geschwindigkeit     betragsmäßig    größer    als   die
        Wunschgeschwindigkeit, wird der Ausdruck in der Klammer positiv.
        Dieser positive Betrag verringert den Betrag, nicht aber das Vorzeichen
        der negativen Ausgangsgeschwindigkeit.

Fall 3: beide Geschwindigkeiten haben unterschiedliches Vorzeichen

Fall 3a: act_speed < 0 < desired_speed; | act_speed | < | desired_speed |

        Die aktuelle Geschwindigkeit ist < 0, das Fahrzeug fährt also noch
        rückwärts, die Wunschgeschwindigkeit ist jedoch > 0. Damit ist der
        Ausdruck in der Klammer ebenfalls          > 0 und damit wird die negative
        Ausgangsgeschwindigkeit betragsmäßig kleiner, bis sie irgendwann
        leicht positiv wird. Ab dort tritt Fall 1a) in Kraft und die Geschwindigkeit
        wird weiter erhöht, bis die Wunschgeschwindigkeit erreicht ist.

Fall 3b: act_speed > 0 > desired_speed; | act_speed | < | desired_speed |

        Dies entspricht genau dem Gegenteil von Fall 3a). Das Fahrzeug fährt
        noch vorwärts, die neue Wunschgeschwindigkeit jedoch ist < 0. Der
        Ausdruck in der Klammer ist < 0 und damit wird die aktuelle
        Geschwindigkeit reduziert bis diese schließlich negativ wird. Ab hier
        erfolgt eine Regelung nach Fall 1b), bis die Wunschgeschwindigkeit
        erreicht ist.

Fall 3c: act_speed < 0 < desired_speed; | act_speed | > | desired_speed |

        Der Ausdruck in der Klammer ist positiv, die Ausgangsgeschwindigkeit
        jedoch < 0. Dadurch erfolgt eine betragsmäßige Reduktion der
        negativen Geschwindigkeit, bis diese positiv wird und in eine Regelung
        nach Fall 1a) übergeht.

Fall 3d: act_speed > 0 > desired_speed; | act_speed | > | desired_speed |




                                                                               - 35 -
Software



Hier ist der Ausdruck in der Klammer negativ und somit erfolgt eine
Reduzierung der positiven Ausgangsgeschwindigkeit bis diese negativ
wird und in eine Regelung nach Fall 1b) übergeht.




                                                             - 36 -
COLA – The Component Language




Kapitel IV              COLA – The Component Language


IV.1 Beschreibung der Sprache COLA

Bei der Component Language COLA handelt es sich um eine Sprache für das
Design und die Entwicklung integrierter Systeme, die auf synchronem Datenfluss
basiert und mit der komplexe Softwaresysteme modelliert werden können. Diese
Modellierung    kann    sowohl   textbasiert   als    auch   graphisch     erfolgen.   Die
Möglichkeit    der    graphischen     Modellierung    und    der   damit    verbundenen
automatischen Code-Generierung ist nicht nur für den Benutzer wesentlich
komfortabler in der Anwendung und damit auch weniger zeitintensiv, sondern
bietet außerdem den Vorteil, dass Systeme mit automatischen „Model-Checkern“
direkt überprüft und verifiziert werden können. Neben der vollautomatischen
Generierung von C-Code ist natürlich auch die automatische Generierung von
Code in anderen Sprachen, wie z.B. VHDL denkbar. Die Modellierungskonzepte
ähneln      denen      anderer   bekannter        Modellierungssprachen       wie      z.B.
MATLAB/Simulink oder UML, kombinieren diese jedoch mit einer strikten
Semantik.     Im     Gegensatz   zu   ähnlichen    Projekten   unterstützt    COLA     die
Modellierung bis zur Implementierungsebene mit einem einzigen Formalismus,
was die funktionelle Verifikation eines Modells ermöglicht. Außerdem ist mit
COLA die Modellierung kompletter verteilter Systeme möglich, die Aufteilung der
Ressourcen, d.h. z.B. die Aufteilung der anfallenden Rechenprozesse auf die
verschiedenen Prozessoren geschieht vollautomatisch.

Bei der Modellierung wird das System so lange hierarchisch in Untersysteme
zerlegt, bis das Gesamtsystem schließlich nur noch aus einigen wenige
Grundkomponenten wie z.B. Konstanten und arithmetischen Grundoperationen
zusammengesetzt werden kann.

Ein COLA-System besteht aus sog. „units“, Einheiten. Diese Einheiten stellen die
Basisblöcke eines COLA-Systems dar und bilden somit die atomaren Bausteine
eines COLA-Systems. Diese Einheiten können zu komplexeren Einheiten, sog.
„composed units“, zusammengesetzten Einheiten, kombiniert werden und damit
Netzwerke und Automaten erstellt werden. Jede Einheit hat eine gewisse Anzahl
an Ein- und Ausgängen und beschreibt die Anhängigkeit der Ausgangssignale




                                                                                    - 37 -
COLA – The Component Language



von den Eingangssignalen. Die Ein- und Ausgänge der verschiedenen Units sind
durch sog. „Channels“, Kanäle verbunden.

Das COLA-System auf der höchsten Ebene enthält alle im System auftretenden
Sensoren und Aktuatoren und hat weder Ein- noch Ausgänge.

COLA basiert auf synchronem Datenfluss und geht von perfekter Synchronität
aus, d.h. alle Berechnungen und die Kommunikation zwischen den Units geht
unendlich schnell, benötigt also keinerlei Zeit. Die einzelnen Elemente innerhalb
des   Datenflusses   arbeiten   parallel   und   die   Bearbeitung   der   Ein-     und
Ausgangssignale erfolgt zu diskreten Zeitpunkten. Diese diskreten Zeitpunkte,
„Ticks“ (Augenblicke) genannt, bilden eine diskrete, einheitliche Zeitbasis. Diese
Zeitbasis erlaubt eine deterministische Beschreibung nebenläufiger Prozesse.
Realzeitanforderungen werden bezogen auf diese diskrete, einheitliche Zeitbasis
ausgedrückt.


IV.2 Modellierung des ACC-Systems in COLA

Das ACC-System besteht auf der höchsten Ebene aus den Units „Speed“,
„Distance“, „User Interface“, „ACC“ und „Motor“ (Abbildung 24). In den Units
„Speed“ und „Distance“ befinden sich die entsprechenden Sensoren, sowie die
arithmetischen Blöcke zur Berechnung der für das ACC-System benötigten
Sensordaten „Abstand“ und „Geschwindigkeit“. Über das User-Interface kann das
ACC ein- und ausgeschaltet werden und die gewünschte Wunschgeschwindigkeit
vorgegeben werden. Die Geschwindigkeitsregelung erfolgt in der Unit „ACC“, die
die neue Geschwindigkeit an die Unit „Motor“ weitergibt, die den Motor als
Aktuator enthält.




                Abbildung 24: ACC-System auf höchster Ebene




                                                                                  - 38 -
COLA – The Component Language



Da eine vollständige Beschreibung aller Units den Rahmen sprengen würde,
werden im Folgenden nur die beiden Units „ACC“ und „Distance“ exemplarisch
beschrieben.


IV.2.1 Die Unit „Distance“


Die Unit „Distance“ ist in Abbildung 25 dargestellt.

Da eine Regelung durch das ACC-System auch bei rückwärts fahrendem
Fahrzeug möglich sein soll, hat die Unit „Distance“ die Geschwindigkeit als
Eingangsgröße.    Mittels   des   in   Abbildung   26   dargestellten   Automaten
„Distance_Automaton“ wird überprüft, ob die Geschwindigkeit größer oder
kleiner als Null ist. Ist die Geschwindigkeit größer Null, wird der Distanzwert des
Infrarotsensors an der Fahrzeugfront an die Unit „ACC“ weitergegeben, ist die
Geschwindigkeit kleiner Null wird die Distanz zu einem Objekt hinter dem
Fahrzeug übermittelt.




                        Abbildung 25: Die Unit „Distance“



Die Sources „ADC_Front_Value“ bzw. „ADC_Rear_Value“ enthalten die vom AD-
Wandler digitalisierten Spannungswerte. Diese Spannungswerte werden anhand
der in Abschnitt III.3.1.1 dargestellten Kennlinie in Distanzwerte umgerechnet.
Diese Umrechnung geschieht im Block „Calc_Distance“.




                                                                             - 39 -
COLA – The Component Language




                    Abbildung 26: Automat „Distance_Automaton“



Für die Linearisierung der Kennlinie aus Abschnitt III.3.1.1 gibt es verschiedene
Möglichkeiten:

      1. Verwendung eines (geschachtelten) Automaten

      2. Verwendung von if-Blöcken

      3. Kombination eines Automaten mit if-Blöcken

      4. Verwendung spezieller „Nirvana“-Transitionen



Methode 1 ist die am wenigsten elegante, da sehr viele Zustände gebraucht
werden und sie damit sehr unübersichtlich wird. Da jedoch für die if-Blöcke noch
kein Code-Generator existiert und für die Erzeugung der Nirvana-Transitionen
bisher noch die Löschung der Quelle erforderlich ist, was die momentan zur
Verfügung stehende Version des COLA-GUI noch nicht erlaubt, wird diese hier
trotzdem vorgestellt und auch für die Modellierung verwendet.

Der     für   die     Linearisierung   verwendete   Automat    besteht    aus   einem
geschachtelten Automaten, d.h. ein Zustand des Automaten ist wiederum ein
neuer Automat dessen Zustand wieder ein Automat ist usw. Es gibt so viele
Automaten, wie es Teilintervalle laut Tabelle 1 in Abschnitt III.3.1.1 gibt. Die
erste Stufe besteht aus einem Automaten der überprüft, ob der AD-gewandelte
Wert größer oder kleiner bzw. gleich der ersten Intervallgrenze (72) ist. Der
zweite Automat überprüft dann, ob der Wert innerhalb des Intervalls ] 72 ; 88 ]
liegt, der dritte Automat, ob der Wert im Intervall ] 88 ; 143 ] liegt usw. bis alle
Teilintervalle laut Tabelle 1 aus Abschnitt III.3.1.1 abgedeckt sind. Den
Automaten       der     ersten   Stufe   zeigt   Abbildung    27,   die   zugehörigen
Zustandsübergänge sind in Abbildung 28 dargestellt.


                                                                                - 40 -
COLA – The Component Language




                           Abbildung 27: Automat Stufe 1




 Abbildung 28: Zustandsübergänge der beiden Transitionen des Automaten
                                    der Stufe 1



Der Zustand „dist_gt_72“ des Automaten der Stufe 1 entspricht wiederum einem
Automaten, hier Automat der Stufe 2 genannt, der ebenfalls aus zwei Zuständen
besteht (Abbildung 29).




                           Abbildung 29: Automat Stufe 2



Dieser Automat überprüft, ob der AD-gewandelte Wert innerhalb des Intervalls
] 72 ; 88 ] liegt. Ist der Wert größer als 88, wird weiter verzweigt in den
Automaten der nächsten Stufe, der überprüft, ob der Wert innerhalb des
Intervalls   ] 88 ; 143 ] liegt.

Liegt der Wert jedoch innerhalb des Intervalls ] 72 ; 88 ], wird mit Hilfe der
beiden Parameter Steigung und Achsenabschnitt der AD-gewandelte Wert in




                                                                        - 41 -
COLA – The Component Language



einen Abstand (in cm) umgerechnet. Diese Berechnung ist in Abbildung 30
dargestellt.




   Abbildung 30: Berechnung der Steigung m und des Achsenabschnittes t
                                           der Teilgeraden




Die   eleganteste      Methode       ist   allerdings     die   Verwendung         spezieller,     sog.
„Nirvana“-Transitionen. Hierbei entspricht jedem Intervall ein Zustand, wie
bereits unter Punkt 1 gezeigt. Das Besondere hier ist jedoch, dass die Zustände
untereinander nicht verbunden sind. Jeder Zustand erhält eine eingehende
Transition, die jedoch keine Quelle hat. Daher auch der Name „Nirvana“-
Transition. Hierbei muss allerdings streng darauf geachtet werden, dass sich die
Bedingungen       der        Transitionen        nicht    überschneiden          und       so     nicht-
deterministisches Verhalten ausgeschlossen ist.




IV.2.2 Die Unit „ACC“

Das Herzstück des ACC-Systems bildet die Unit „ACC“. Sie besteht aus dem
Automaten „ACC_Automaton“, mit den beiden Zuständen „ACC_on“ bzw.
„ACC_off“ sowie den Konstanten „dist_emergency“ und „dist_safety“, in denen
die   beiden      sicherheitsrelevanten             Mindestabstände         „Notabstand“            und
„Sicherheitsabstand“ gespeichert sind. Diese betragen im konkreten Beispiel
15cm bzw. 30cm.

Die   Unit     „ACC“     ist    in   Abbildung       31     dargestellt     und        der      Automat
„ACC_Automaton“         in     Abbildung     32.    Standardmäßig         ist    das      ACC-System
deaktiviert,   der     Initialzustand      ist   also    „ACC_off“,   es        erfolgt    hier   keine




                                                                                                  - 42 -
COLA – The Component Language



automatische Regelung und der Geschwindigkeitswert wird direkt an die Unit
„Motor“ weitergegeben (Abbildung 32 rechts).




                         Abbildung 31: Die Unit „ACC“




     Abbildung 32: Automat „ACC_Automaton“ und Zustand „ACC_off“



Wird über das User-Interface das boolesche Signal „ACC_active“ gesetzt,
wechselt der Zustand von „ACC_off“ in den aktiven Zustand „ACC_on“.

Der Zustand „ACC_on“ besteht wieder aus einem Automaten mit den beiden
Zuständen „dist_leq_emergency“ und „dist_gt_emergency“ (Abbildung 33) Die
Abkürzungen stehen für „actual distance lower or equal emergency distance“
bzw. „actual distance greater emergency distance“.




                                                                       - 43 -
COLA – The Component Language



Ist der gemessene Abstand kleiner (oder gleich) dem vorgegebenen Notabstand
wird ein sofortiger Nothalt des Fahrzeugs initiiert, d.h. die neue Geschwindigkeit
wird auf 0 gesetzt (Abbildung 33 rechts).




            Abbildung 33: Zustand „ACC_on“ (links) und Nothalt (rechts)



Ist   der    Abstand   größer   als   dieser   Notabstand,   wird   in   den   Zustand
„dist_gt_emergency“ gewechselt, der wiederum aus einem Automaten mit den
beiden Zuständen „dist_leq_safety“ bzw. „dist_gt_safety“ besteht (Abbildung
34). Hier stehen die Abkürzungen analog zu den oben genannten Abkürzungen
für „actual distance lower or equal safety distance“ bzw. „actual distance greater
safety distance“.




                    Abbildung 34: Zustand „dist_gt_emergency“




                                                                                 - 44 -
COLA – The Component Language



Ist der aktuelle Abstand kleiner als der geforderte Sicherheitsabstand, wird die
Geschwindigkeit laut Abbildung 35 in 5%-Schritten verringert, bis der geforderte
Sicherheitsabstand wieder eingehalten wird.




                   Abbildung 35: Zustand „dist_leq_safety“:

                   Reduzierung der Geschwindigkeit um 5%



Ist der aktuelle Abstand größer als der geforderte Sicherheitsabstand erfolgt eine
automatische Regelung der Geschwindigkeit nach dem bereits in Abschnitt
III.3.2.2 vorgestellten Algorithmus, dessen Modellierung Abbildung 36 zeigt:




             Abbildung 36: Zustand „dist_gt_safety“: Regelung der
                             Wunschgeschwindigkeit



Der Regelungsalgorithmus entspricht exakt dem Algorithmus aus Abschnitt
III.3.2.2 und ist deshalb für positve und negative Geschwindigkeiten universell
anwendbar.




                                                                            - 45 -
Ergebnisse




Kapitel V           Ergebnisse


V.1 Geschwindigkeitsmessung

Als sehr problematisch erwies sich die Geschwindigkeitsmessung. Schon bei sehr
kleinen Abweichungen im Bereich von wenigen Zehntel Millimetern von der
Idealposition der Geberscheibe innerhalb der Gabellichtschranke kommt es zu
großen       Verfälschungen     der     Signale      aufgrund   der   zunehmenden
Phasenverschiebung und des kleiner werdenden Duty-Cycles (Anteil des High-
Pegels an der Gesamt-Periodendauer eines Impulses) der Rechtecksignale. Eine
korrekte Auswertung wird so unmöglich.

Eine direkte Montage der Geberscheibe auf der Antriebsachse des Fahrzeuges ist
auch   bei   theoretisch   perfekter   Positionierung   der Scheibe innerhalb   der
Gabellichtschranke zwecklos, da das Spiel der Antriebsachse schon einige
Millimeter beträgt und damit weit größer als die tolerierbare Abweichung ist.

Nachdem ein erster Test der Geschwindigkeitsmessung im Modellauto leider
komplett fehlschlug, wurden die Ausgangssignale der Gabellichtschranke mit
Hilfe eines Oszilloskopes analysiert. Ein Softwarefehler konnte ausgeschlossen
werden, da ein Test mit idealen Testsignalen, die mittels eines Pattern-
Generators     erzeugt wurden, erfolgreich war und korrekte Ergebnisse lieferte.
Durch die Betrachtung der Signalverläufe mit Hilfe des Oszilloskopes bestätigte
sich die enorme Empfindlichkeit des Sensors und die Notwendigkeit einer sehr
präzisen Ausrichtung der Geberscheibe innerhalb der Gabellichtschranke.

Deshalb wurde eine kleine Testanordnung aufgebaut, mit deren Hilfe die Scheibe
möglichst präzise innerhalb der Gabellichtschranke positioniert werden kann und
ohne auftretendes Achsialspiel durch diese rotieren kann. Hierbei ergab sich
jedoch ein weiteres Problem: Selbst bei weitestgehend idealer Positionierung der
Scheibe und damit idealen Impulsfolgen, werden statt einem Impuls pro
Inkrement mehrere Impulse erzeugt. Leider verändert sich die Anzahl der
erzeugten Impulse pro Inkrement mit der Drehgeschwindigkeit, so dass eine
sinnvolle Auswertung enorm schwierig wird. Die Ursache für dieses Verhalten
konnte bis zuletzt leider nicht ermittelt werden, liegt jedoch wohl an der immer
noch nicht präzise genug rotierenden Schiebe auch wenn optisch keine großen
Schwankungen        mehr      feststellbar   sind.    Die   Verwendung    mehrerer


                                                                             - 46 -
Ergebnisse



Gabellichtschranken           und         unterschiedlicher          Encoderscheiben             sowie
unterschiedlicher Widerstände und damit unterschiedlicher Fotoströme brachte
ebenso       wenig     eine         Verbesserung             wie    die         Stabilisierung     der
Versorgungsspannung des Sensors durch Kondensatoren.

Eine Verbesserung kann durch eine Mittelwertbildung der letzten gemessenen
Zeitwerte erreicht werden, eine perfekte Lösung stellt das allerdings immer noch
nicht dar, da der Sensor einfach ein fehlerhaftes Signal liefert. Durch die
Abhängigkeit    der        Impulsanzahl       von      der    Drehgeschwindigkeit          wird     die
Mittelwertbildung     außerdem            zusätzlich     erschwert.       Eine     Genauigkeit     der
Geschwindigkeitsmessung, deren Toleranz kleiner als 10% ist, ist auf diesem
Weg kaum zu erreichen, aufgrund praktischer Erfahrungen muss eher mit
Schwankungen bis zu 20% gerechnet werden.


V.2 Distanzmessung

Problemlos     funktioniert         die     Abstandsmessung.           Anfänglich        auftretende
Schwankungen         der     Sensorwerte        konnten        durch      die     Einführung      einer
Mittelwertbildung der vier letzten Sensorwerte gut ausgeglichen werden.


V.3 Testumgebung

Für Debugging-Zwecke wurde eine Testumgebung für das ACC-Programm unter
Microsoft Windows erstellt. Der Quellcode dieser Testumgebung befindet sich in
Anhang 4. In der Testumgebung wird nach der Initialisierung der RS232-
Schnittstelle das ACC-Programm initialisiert. Während dieser Initialisierung
werden sämtlichen Automaten ihre Anfangszustände zugewiesen. Anschließend
wird in einer Endlosschleife das ACC-Programm gestartet. Die Ausführung kann
durch Drücken der Taste „ESC“ beendet werden. Das ACC-System kann durch
Drücken der Taste „A“ aktiviert und durch erneutes Drücken der Taste „A“
wieder deaktiviert werden, die gewünschte Wunschgeschwindigkeit kann mit den
Tasten „+“ bzw. „-„ in 0.5cm/s-Schritten im Bereich –100 cm/s und + 200 cm/s
eingestellt werden.

Die Abfrage der Sensorwerte erfolgt durch eine Middleware-Routine. Die darin
verwendeten Zugriffe auf die serielle Schnittstelle verwenden die „ComTools“-
Kommunikationsroutinen          von        Anton       Zechner     [10].    Der      Quellcode     der
Middleware-Routine befindet sich ebenfalls in Anhang 4.

                                                                                                 - 47 -
Ergebnisse




V.4 Automatisch generierter Quellcode

Der gesamte vom automatischen Code-Generator erzeugte Quellcode befindet
sich in Anhang 3.

Die   Regelungsalgorithmen      sowie   die     Gleichung        zur   Berechnung      der
Geschwindigkeit wurden vom Code-Generator in exakt dieselben Gleichungen
überführt, wie sie auch manuell geschrieben wurden. Hier hat der Code-
Generator perfekte Arbeit geleistet.

Der restliche Code besteht im Wesentlichen aus Automaten, die mittels „switch“-
Anweisungen realisiert wurden. Besonders die Routinen zur Berechnung der
Distanz sind durch die Verwendung der vielen Automaten sehr lange. Das liegt
jedoch nicht am Code-Generator, sondern an der etwas ungünstigen Wahl der
Linearisierungsmethode. Eine Verwendung der bereits genannten „Nirvana“-
Transitionen   bzw.   einer   Kombination     mit   if-Blöcken    sollte   helfen,   etwas
knapperen Code zu generieren. Ein gewisser Overhead wird sich jedoch bei einer
automatischen Code-Generierung nie vollständig vermeiden lassen und ist in der
Regel auch nicht schlimm, wenn insgesamt die genannten Vorteile wie schneller
erzeugbarer, sicher nachvollziehbarer und leichter testbarer Code überwiegen.
Insgesamt arbeitet der automatische Code-Generator sehr gut und ist in der
Lage funktionierenden, eleganten und relativ knappen Code zu generieren.




                                                                                     - 48 -
Zusammenfassung und Ausblick




Kapitel VI             Zusammenfassung und Ausblick


In dieser Arbeit wurde ein System für eine automatische Geschwindigkeits- und
Abstandsregelung    (Adaptive     Cruise   Control   -   ACC)   entwickelt    und   mit
Einschränkungen    bei      der   Geschwindigkeitsmessung       erfolgreich   getestet.
Außerdem wurden einige Kernkonzepte und Vorteile der Sprache COLA erläutert
und das ACC-System mit Hilfe dieser Sprache modelliert und der vom
automatischen Code-Generator erzeugte Quellcode betrachtet. Als Ergebnis kann
hier festgehalten werden, dass der automatische Code-Generator von COLA in
der Lage ist eleganten, funktionierenden Code zu generieren, was jedoch
natürlich nicht ganz ohne Overhead möglich ist.

Aufgrund der Probleme mit der Gabellichtschranke sollte die Sensorik zur
Geschwindigkeitsmessung noch einmal von Grund auf neu überdacht werden.
Eine     alternative        und      wesentlich      genauere        Methode        der
Geschwindigkeitsbestimmung wäre wünschenswert, diese sollte jedoch die
Möglichkeit der Drehrichtungsbestimmung beinhalten. Eventuell könnte eine
mechanisch weniger anspruchsvolle Gabellichtschranke in Kombination mit einer
Geberscheibe mit weniger Inkrementen verwendet werden, da eine geringere
Auflösung akzeptabel ist.

Außerdem wäre es eine weitere Verbesserung, wenn das Sensorsystem die
Geschwindigkeit und die Distanzen direkt berechnet, so dass das Mastersystem
diese ohne weitere Berechnungen direkt nutzen kann. Möglichkeiten dies zu
bewerkstelligen wären entweder einfach einen schnelleren Prozessor oder einen
Prozessor der über Fließkommaoperationen verfügt, zu verwenden.




                                                                                 - 49 -
Abbildungsverzeichnis




Abbildungsverzeichnis


Abbildung 1: Blockschaltbild des bestehenden Systems .................................. 7

Abbildung 2: Blockschaltbild des erweiterten Systems .................................... 8

Abbildung 3: Gumstix-Modul mit Erweiterungsboard ...................................... 9

Abbildung 4: Gabellichtschranke GP1A038RBK mit Impulsgeberscheibe...........10

Abbildung 5: Impulsfolgen der beiden Ausgänge der Gabellichtschranke mit
     Drehrichtungsumkehr..........................................................................11

Abbildung 6: Schaltplan der Gabellichtschranke............................................12

Abbildung 7: Infrarotsensor GP2D120 .........................................................13

Abbildung 8: Mikrocontroller-Platine: Vorderseite .........................................14

Abbildung 9: Mikrocontroller-Platine: Rückseite ............................................15

Abbildung 10: Sequentieller Programmablauf ...............................................17

Abbildung 11: Interruptgesteuerte Programmausführung mit zugehöriger
     Interrupt-Serviceroutine ......................................................................17

Abbildung 12: Programmablaufplan des Hauptprogramms .............................18

Abbildung 13: Zustände und Zustandsübergänge der ....................................20

Abbildung 14: Ausgangssignale der Gabellichtschranke und entsprechende
     Zustände der Finite State Machine ........................................................21

Abbildung 15: Programmablaufplan der FSM-Auswertung ..............................23

Abbildung 16: Programmablaufplan der ISR „Timer1_Overflow“ .....................24

Abbildung 17: Programmablaufplan der AD-Wandlung...................................25

Abbildung 18: Programmablaufplan der ISR „ADC_Interrupt“ .........................26

Abbildung 19: Programmablaufplan der Routine „Send_Checkquot; ......................28

Abbildung 20: Spannungs-Distanz-Kennlinie aus dem Datenblatt....................29

Abbildung 21: linearisierte Kennlinie ...........................................................30

Abbildung 22: Programmablaufplan des ACC-Systems...................................33

Abbildung 23: ACC-Regelungsalgorithmus ...................................................34

Abbildung 24: ACC-System auf höchster Ebene ............................................38

Abbildung 25: Die Unit „Distance“...............................................................39

Abbildung 26: Automat „Distance_Automaton“ .............................................40
                                                                                              - 50 -
Abbildungsverzeichnis



Abbildung 27: Automat Stufe 1 ..................................................................41

Abbildung 28: Zustandsübergänge der beiden Transitionen des Automaten der
     Stufe 1 ..............................................................................................41

Abbildung 29: Automat Stufe 2 ..................................................................41

Abbildung 30: Berechnung der Steigung m und des Achsenabschnittes t der
     Teilgeraden........................................................................................42

Abbildung 31: Die Unit „ACC“ .....................................................................43

Abbildung 32: Automat „ACC_Automaton“ und Zustand „ACC_off“ ..................43

Abbildung 33: Zustand „ACC_on“ (links) und Nothalt (rechts) ........................44

Abbildung 34: Zustand „dist_gt_emergency“................................................44

Abbildung 35: Zustand „dist_leq_safety“: ....................................................45

Abbildung 36: Zustand „dist_gt_safety“: Regelung der Wunschgeschwindigkeit45




                                                                                                     - 51 -
Literaturverzeichnis




Literaturverzeichnis


[1]    http://www.gumstix.com/products.html

[2]    Sharp Corporation, Datasheet GP1A038RBK

[3]    Sharp Corporation, Datasheet GP2D120

[4]    Atmel Corporation, Datasheet ATMega32

[5]    http://193.196.117.23/projekte/rundheit/data/inkrementalgeber.pdf

[6]    http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial

[7]    http://www.mikrocontroller.net/articles/Drehgeber

[8]    http://homepage.hispeed.ch/peterfleury/group__pfleury__uart.html

[9]    S. Kugele, M. Tautschnig, A. Bauer, C. Schallhart, S. Merenda, W. Haberl,
       C. Kühnel, F. Müller, Z. Wang, D. Wild, S. Rittmann, and M. Wechs. COLA
       – The component language. Technical Report TUM-I0714, Technische
       Universität München, Sept. 2007

[10]   http://members.inode.at/anton.zechner/az/Seriell.htm




                                                                          - 52 -

Weitere ähnliche Inhalte

Empfohlen

Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTExpeed Software
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsPixeldarts
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthThinkNow
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfmarketingartwork
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 

Empfohlen (20)

Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 

Ba Acc Gatscher

  • 1. BACHELORARBEIT AM LEHRSTUHL FÜR INTEGRIERTE SYSTEME An Embedded System for Adaptive Cruise Control Technische Universität München Lehrstuhl für Integrierte Systeme Univ.-Prof. Dr. sc.techn. Andreas Herkersdorf Diplomand: Benjamin Gatscher Fachbereich: Elektrotechnik und Informationstechnik Fachrichtung: Integrierte Systeme Betreuer: M.Sc. Zhonglei Wang Abgabedatum: 11.04.2008
  • 2. Erklärung Erklärung Hiermit versichere ich, dass die vorliegende Bachelorarbeit mit dem Thema „An Embedded System for Adaptive Cruise Control“ selbständig und ohne fremde Hilfe verfasst wurde und keine anderen als die angegeben Hilfsmittel verwendet wurden. München, im April 2008 Benjamin Gatscher -2-
  • 3. Danksagung Danksagung Ich danke Herrn Prof. Herkersdorf, dass ich diese Arbeit an seinem Lehrstuhl anfertigen durfte und dabei die vom Lehrstuhl bereitgestellten Materialien und Geräte benutzen konnte. Ebenfalls möchte ich mich bei meinem Betreuer Zhonglei Wang für die äußerst nette und fachlich sehr kompetente Betreuung bedanken. Außerdem geht mein Dank an Jörg Wunsch, der mir neben der Möglichkeit der professionellen Platinenfertigung auch zahlreichen Tipps und Tricks zur Bearbeitung der Platine gegeben hat. Mein ganz besonderer Dank geht an meine ganze Familie, speziell an meine größten Vorbilder, meine lieben Eltern, die mich auf meinem Weg immer vorbehaltlos unterstützt und mir dieses Studium erst ermöglicht haben. -3-
  • 4. Inhalt Inhalt ERKLÄRUNG 2 DANKSAGUNG 3 INHALT 4 KAPITEL I EINFÜHRUNG 7 I.1 MOTIVATION UND ZIELE DER ARBEIT 7 I.2 AUFBAU DER ARBEIT 8 KAPITEL II HARDWARE 9 II.1 GUMSTIX-MODULE 9 II.2 GESCHWINDIGKEITSSENSOR 10 II.2.1 AUSWAHL DER MESSMETHODE 10 II.2.2 GESCHWINDIGKEITSMESSUNG MITTELS GABELLICHTSCHRANKE UND IMPULSGEBERSCHEIBE 10 II.3 ABSTANDSSENSOR 13 II.4 MIKROCONTROLLER 13 II.5 PLATINE 14 KAPITEL III SOFTWARE 16 III.1 ALLGEMEINE ERLÄUTERUNGEN 16 III.2 SOFTWARE DES SENSORSYSTEMS 16 III.2.1 PROGRAMMSTRUKTUR DER SENSORERFASSUNG 16 III.2.2 GESCHWINDIGKEITSMESSUNG 19 III.2.3 ABSTANDSMESSUNG 24 III.2.4 KOMMUNIKATION MIT DEM MASTERSYSTEM 26 III.3 SOFTWARE DES MASTERSYSTEMS 28 -4-
  • 5. Inhalt III.3.1 BERECHNUNG DER SENSORDATEN 29 III.3.2 ACC 31 KAPITEL IV COLA – THE COMPONENT LANGUAGE 37 IV.1 BESCHREIBUNG DER SPRACHE COLA 37 IV.2 MODELLIERUNG DES ACC-SYSTEMS IN COLA 38 IV.2.1 DIE UNIT „DISTANCE“ 39 IV.2.2 DIE UNIT „ACC“ 42 KAPITEL V ERGEBNISSE 46 V.1 GESCHWINDIGKEITSMESSUNG 46 V.2 DISTANZMESSUNG 47 V.3 TESTUMGEBUNG 47 V.4 AUTOMATISCH GENERIERTER QUELLCODE 48 KAPITEL VI ZUSAMMENFASSUNG UND AUSBLICK 49 ABBILDUNGSVERZEICHNIS 50 LITERATURVERZEICHNIS 52 ANHANG 1 SCHALTPLÄNE UND LAYOUTDATEIEN DER MIKROCONTROLLER-PLATINE FEHLER! TEXTMARKE NICHT DEFINIERT. A1.I SCHALTPLÄNE FEHLER! TEXTMARKE NICHT DEFINIERT. A1.II LAYOUTDATEIEN FEHLER! TEXTMARKE NICHT DEFINIERT. A1.III STÜCKLISTE FEHLER! TEXTMARKE NICHT DEFINIERT. ANHANG 2 QUELLCODE DES MIKROCONTROLLER-PROGRAMMS (SENSOR- SYSTEM) FEHLER! TEXTMARKE NICHT DEFINIERT. A2.I ROUTINEN ZUR GESCHWINDIGKEITSMESSUNG FEHLER! TEXTMARKE NICHT DEFINIERT. -5-
  • 6. Inhalt A2.II ROUTINEN ZUR DISTANZ-ERFASSUNG FEHLER! TEXTMARKE NICHT DEFINIERT. A2.III ÜBERTRAGUNGS-ROUTINE FEHLER! TEXTMARKE NICHT DEFINIERT. A2.IV HAUPTPROGRAMM FEHLER! TEXTMARKE NICHT DEFINIERT. ANHANG 3 COLA-GENERIERTER QUELLCODE DES ACC-SYSTEMS (MASTER-SYSTEM) FEHLER! TEXTMARKE NICHT DEFINIERT. A3.I ACC_SYSTEM.H FEHLER! TEXTMARKE NICHT DEFINIERT. A3.II ACC_SYSTEM.C FEHLER! TEXTMARKE NICHT DEFINIERT. ANHANG 4 QUELLCODE DER TESTUMGEBUNG UND DER MIDDLEWARE- ROUTINE FEHLER! TEXTMARKE NICHT DEFINIERT. -6-
  • 7. Einführung Kapitel I Einführung I.1 Motivation und Ziele der Arbeit Im Rahmen eines Fahrerassistenzsystems soll in dieser Arbeit ein System für eine automatische Geschwindigkeits- und Abstandsregelung (Adaptive Cruise Control - ACC) entwickelt werden. Befindet sich kein Objekt im Bereich vor dem Fahrzeug, auch Fahrschlauch des Fahrzeugs genannt, wird eine einfache Geschwindigkeitsregelung ausgeführt, d.h. eine vom Benutzer vorgegebene Geschwindigkeit wird automatisch gehalten (Tempomatenfunktion). Befindet sich jedoch ein Objekt im Fahrschlauch des Fahrzeugs, hat natürlich die Vermeidung einer Gefahrensituation Priorität und es erfolgt dann eine Abstandsregelung, der die Geschwindigkeitsregelung untergeordnet ist. Die Spezifikationen des ACC- Systems sind in Abschnitt III.3.2.1 aufgeführt. Das ACC-System soll als Teil einer Fallstudie in ein Modellauto integriert werden. Mit dieser Fallstudie soll die Anwendbarkeit und der Nutzen der Sprache COLA (The Component Language) demonstriert werden, mit der komplexe Softwaresysteme modelliert werden können. Nach einer kurzen Einführung und Erläuterung der Vorteile der Sprache COLA wird das ACC-System mit ihrer Hilfe modelliert. Das bisher bestehende Fahrerassistenzsystem, dessen Blockschaltbild in Abbildung 1 dargestellt ist, verfügt noch über keine Geschwindigkeitsmessung. Abbildung 1: Blockschaltbild des bestehenden Systems -7-
  • 8. Einführung Die Hardware des Fahrerassistenzsystem ist jedoch bereits stark ausgelastet, so dass für eine Implementierung der Geschwindigkeitsmessung neben der Sensorik auch noch zusätzliche Hardware zur Sensorauswertung hinzugefügt werden muss. Diese zusätzliche Hardware soll im Vergleich zu den relativ teuren Gumstix-Modulen möglichst kostengünstig sein. Im Vergleich zu den recht teuren Gumstix-Modulen ist der verwendete Mikrocontroller vom Typ ATMega der Firma Atmel sehr preiswert und deshalb für diese Anwendung ideal geeignet. Das um die Geschwindigkeitssensorik erweiterte Gesamtsystems zeigt Abbildung 2: Abbildung 2: Blockschaltbild des erweiterten Systems I.2 Aufbau der Arbeit Diese Arbeit gliedert sich im wesentlichen in vier Teile. Zuerst soll der hardwareseitige Aufbau des Systems beschrieben werden, im zweiten Teil wird dann auf die Implementierung der Software eingegangen. Anschließend wird die Sprache COLA zur Modellierung komplexer Softwaresysteme kurz vorgestellt und das ACC-System mit ihrer Hilfe modelliert. Im abschließenden vierten Teil werden Ergebnisse und aufgetretene Probleme erläutert. -8-
  • 9. Hardware Kapitel II Hardware II.1 Gumstix-Module Bei den Gumstix-Modulen handelt es sich um leistungsstarke Mini-Computer. Die Größe des Motherboards eines Gumstix-Moduls beträgt 80mm x 20mm x 6.3mm und ist damit von der Größe her mit einem Streifen Kaugummi vergleichbar. Daher auch der Name Gumstix. Über Erweiterungsmodule wird die Kommunikation mit Peripheriegeräten ermöglicht. Angeboten werden u.a. Erweiterungsmodule für die Kommunikation via Bluetooth, Ethernet und USB. Die Gumstix-Boards sind mit XScale-Prozessorkernen ausgerüstet, die auf der ARM-Architektur basieren. Erhältlich sind Module mit Taktfrequenz zwischen 200 MHz und 600 MHz und einer SD-RAM-Speichergröße bis zu 128 MB. Die Versorgungsspannung beträgt 5V. Sie werden standardmäßig mit einem Linux- Betriebssystem ausgeliefert. Abbildung 3: Gumstix-Modul mit Erweiterungsboard Das in Abbildung 3 dargestellte Modul hat inklusive Erweiterungsboard eine Größe von 10cm x 5cm x 3cm. Weitere Informationen zu den Gumstix-Modulen finden sich unter [1]. -9-
  • 10. Hardware II.2 Geschwindigkeitssensor II.2.1 Auswahl der Messmethode Eine Möglichkeit der Geschwindigkeitsmessung wäre die Ausnutzung der elektromagnetischen Induktion, wie sie auch beim Fahrradtacho verwendet wird. Da mit dieser Methode allerdings keine Drehrichtungserkennung möglich ist und damit ein Rückwärtsfahren nicht detektiert werden kann, scheidet diese Methode jedoch aus. Außerdem sollen für eine höhere Auflösung mehrere Impulse pro Radumdrehung aufgenommen werden, was mehrere induktive Signalgeber erfordern würde. Eine Montage mehrerer Magnete auf eine nur wenige Millimeter dicke Achse ist jedoch nicht zweckmäßig. Deshalb wurde ein optisches Verfahren, eine Gabellichtschranke, verwendet. II.2.2 Geschwindigkeitsmessung mittels Gabellichtschranke und Impulsgeberscheibe Die Geschwindigkeit wird mittels eines Fotointerrupters (GP1A038RBK) der Firma Sharp mit Taktscheibe gemessen, auch Gabellichtschranke, optischer Inkrementalgeber oder optischer Drehgeber genannt. Abbildung 4: Gabellichtschranke GP1A038RBK mit Impulsgeberscheibe Hierbei handelt es sich um einen Sensor bestehend aus einer LED und einem Phototransistor. Zwischen der emittierenden LED und dem detektierenden Phototransistor befindet sich ein Schlitz im Sensorgehäuse, durch den die Geberscheibe läuft, die auf der Achse des Fahrzeugs montiert ist. Auf dieser lichtdurchlässigen Geberscheibe befinden sich lichtundurchlässige Sektoren, mit denen der Lichtstrahl zwischen Sende-LED und detektierendem Fototransistor zyklisch unterbrochen wird, sobald die Scheibe rotiert. Je nach Geschwindigkeit - 10 -
  • 11. Hardware des Fahrzeugs werden so Rechteck-Impulsfolgen unterschiedlicher Frequenz generiert. Die Abstände zwischen den Impulsen werden mit Hilfe eines Timers eines Mikrocontrollers gemessen und daraus die Geschwindigkeit berechnet. Die hier verwendete Scheibe hat 120 Schlitze pro Umdrehung, der Raddurchmesser d beträgt 6.5cm und damit der Radumfang u = π d = 20.27cm . Damit berechnet sich die Geschwindigkeit, unter der Annahme, dass pro Inkrement genau ein gültiger Impuls erzeugt wird, folgendermaßen: u x 120 v= = t t Um außer der Drehgeschwindigkeit auch noch die Drehrichtung bestimmen zu können, wird hier ein sog. zweispuriger Inkrementalgeber verwendet. Dieser gibt über einen zweiten Ausgang eine um 90 Grad verschobene Impulsfolge aus, die von einer zweiten Fotodiode-Fototransistor-Kombination erzeugt wird. Je nach Phasenlage der Impulsfolge der Spur B gegenüber der Impulsfolge der Spur A kann so die Drehrichtung detektiert werden. Eine mögliche Impulsfolge der beiden Ausgänge mit Drehrichtungsumkehr ist in Abbildung 5 dargestellt. Abbildung 5: Impulsfolgen der beiden Ausgänge der Gabellichtschranke mit Drehrichtungsumkehr Die Decodierung dieser beiden Impulsfolgen erfolgt über eine Finite State Machine, die im Softwareteil beschrieben wird. - 11 -
  • 12. Hardware Schaltplan und Anschlussbelegung des Fotointerrupters: Abbildung 6: Schaltplan der Gabellichtschranke Anschlussbelegung: 1: Anode der LED 2: Kathode der LED 3: GND 4: Ausgangspin B 5: Ausgangspin A 6: VCC Über den Widerstand R kann der Strom durch die Fotodiode begrenzt werden. Der Spannungsabfall der Fotodiode in Vorwärtsrichtung beträgt laut Datenblatt typischerweise 1.2V. Die meisten Kenndaten des Sensors werden im Datenblatt bei einem Fotostrom von IF = 11mA angegeben. Um diesen Strom durch die Fotodiode zu erzeugen wird bei einer Versorgung mit 5V ein Vorwiderstand 5V − 1.2V R= = 345 Ω 11 mA benötigt. Der nächste Wert der E24-Reihe beträgt 330 Ohm, damit ergibt sich ein Fotostrom von 11.5mA. Der Kondensator C1 = 10nF wird zur Stabilisierung der Spannungsversorgung eingefügt. Zusätzlich wird C2 = 10uF hinzugefügt, um Spannungsschwankungen aufgrund langer Zuleitungen zu kompensieren. - 12 -
  • 13. Hardware II.3 Abstandssensor Im Modellauto kommen für die Distanzmessungen sowohl Infrarotsensoren als auch Ultraschallsensoren zum Einsatz. Der Vorteil der Ultraschallsensoren gegenüber den Infrarotsensoren ist v.a. ihre größere Reichweite bis hin zu einigen Metern. Die verwendeten Infrarotsensoren haben nur eine Reichweite bis ca. 30cm. Da es für das ACC-System jedoch ausreichend ist, Distanzen zwischen 4cm und 30cm zu erfassen und die Infrarotsensoren kostengünstiger sind, wurden Infrarotsensoren verwendet. Der Abstandssensor besteht aus einem Infrarotsensor vom Typ GP2D120 der Firma Sharp, der abhängig von der gemessenen Distanz einen analogen Spannungspegel an seinem Ausgang ausgibt. Abbildung 7: Infrarotsensor GP2D120 Dieser analoge Spannungswert wird mittels eines AD-Wandlers digitalisiert und mit Hilfe der im Datenblatt gegebenen Kennlinie in einen Abstand umgerechnet. Die Kennlinie ist in Abbildung 20 im Softwareabschnitt III.3.1.1 abgebildet, wo auch die Linearisierung und Umrechnung des digitalisierten Wertes in einen Abstand beschrieben wird. II.4 Mikrocontroller Zur Auswertung der Sensorsignale kommt ein 8bit-Mikrocontroller vom Typ ATMega32 [4] der Firma Atmel zum Einsatz. Der RISC-Prozessorkern basiert auf der Harvard-Architektur. Der ATMega32 verfügt über folgende Speicherarten- und größen: 32Kbyte Programmspeicher, 1Kbyte EEPROM und 2Kbyte SRAM. Außerdem besitzt dieser Mikrocontroller noch eine Reihe nützlicher Hardware- Peripherie, wie z.B. mehrere Timer, eine I2C-Schnittstelle, einen mehrkanaligen 10-bit-AD-Wandler sowie eine Hardware-USART-Schnittstelle, mit deren Hilfe die Kommunikation mit dem PC über die RS232-Schnittstelle möglich ist. - 13 -
  • 14. Hardware Programmierbar ist der Controller neben der SPI-Schnittstelle auch über das JTAG-Interface, das neben der Programmierung außerdem noch das On-Chip- Debugging ermöglicht. Über beide Programmierschnittstellen ist „In-System- Programming“ möglich, d.h. der Controller muss nicht aus der Zielhardware entfernt werden, sondern kann direkt in der verwendeten Schaltung programmiert werden. Laut Datenblatt werden 10000 Schreibzyklen des Programmspeichers garantiert. Mit Hilfe der kostenfreien Entwicklungsumgebung AVR Studio der Firma ATMEL können die Controller sowohl in Assembler als auch in C programmiert werden. Diese Entwicklungsumgebung enthält außerdem einen Simulator, mit dem die Programme getestet werden können. II.5 Platine Da das gesamte Fahrerassistenzsystem aus den drei schon erwähnten Gumstix- Modulen besteht, ist das Raumangebot für die Platine zur Auswertung des Geschwindigkeitssensors im Modellfahrzeug sehr begrenzt. Aus diesem Grund konnte keines der standardmäßig angebotenen Evaluation-Boards für den Controller genutzt werden, sondern es musste eine maßgeschneiderte Platine in Auftrag gegeben werden. Ein Bild der Vorder- und Rückseite der fertig gelöteten Platine zeigen die Abbildungen 8 und 9. Abbildung 8: Mikrocontroller-Platine: Vorderseite Die Schaltplan- und Layoutdateien sowie eine Stückliste der verwendeten Bauelemente befinden sich in Anhang A. - 14 -
  • 15. Hardware Abbildung 9: Mikrocontroller-Platine: Rückseite Alle Widerstände und Kondensatoren, außer dem Elektrolytkondensator C301 in Bauform B, haben die Baugröße 0805 und sind damit wie der Pegelshifter im SOT-Gehäuse (Pinabstand 1,27mm) noch gut von Hand lötbar. Der Controller ist neben dem hier unzweckmäßig großen DIP-Package nur in einem TQFP-Gehäuse mit 0.8mm Pinabstand erhältlich. Mit Verwendung eines Flussmittelstiftes und Lötsauglitze kann aber auch dieser gut gelötet werden. Um Korrosion der Leiterbahnen zu verhindern wurde die Platine abschließend mit Aceton gereinigt und mit klarem Wasser abgespült. Die Platine ist 5cm x 2cm groß und damit klein genug um problemlos im Modellauto integriert werden zu können. Auf ihr befinden sich neben dem Controller selbst noch Pfostenstecker, über die die benötigten Ein- und Ausgänge des Controllers nach außen geführt sind, sowie die für den Betrieb des Controllers benötigte Peripherie wie der Quarz, der den 16MHz-Systemtakt erzeugt und diverse Kondensatoren, die die Betriebsspannung stabilisieren und Störungen eliminieren. Außerdem befinden sich, neben einem Spannungsregler, der eine stabile 5V-Spannungsversorgung des Controllers gewährleistet, ein Pegelwandler auf der Platine der die Anpassung der 5V-Logikpegel des Controllers an die +-12V-Pegel der RS232- Schnittstelle bewerkstelligt, sowie ein Filternetzwerk für den AD-Wandler. Der Controller kann über die JTAG-Schnittstelle direkt auf der Platine, d.h. „in- system“ programmiert und debugged werden. - 15 -
  • 16. Software Kapitel III Software III.1 Allgemeine Erläuterungen Alle Software-Routinen sind in C implementiert, da hiermit sowohl die Programmierung der Regelungsalgorithmen auf den Gumstix-Modulen sowie die hardwarenahe Programmierung des Mikrocontrollers möglich ist. Das ACC- System wird außerdem in einem späteren Abschnitt zusätzlich mit Hilfe der später erläuterten Sprache COLA modelliert. COLA ermöglicht die für den Benutzer sehr angenehme graphische Modellierung komplexer Softwaresysteme und bietet die Möglichkeit aus diesem Modell automatisch Code zu generieren. Eine manuelle Programmierung ist damit nicht mehr notwendig und eine Vielzahl dadurch begründeter Fehler können so vermieden werden, was gerade bei komplexen sicherheitsrelevanten Anwendungen, wie sie im Automobil- oder Flugtechnikbereich häufig auftreten, wichtig ist. In Abschnitt III.2 werden die Routinen des Sensorsystems beschrieben, in Abschnitt III.3 folgt dann eine Beschreibung der Software des Mastersystems. III.2 Software des Sensorsystems III.2.1 Programmstruktur der Sensorerfassung Die Auswertung aller Sensoren erfolgt komplett interrupt-gesteuert. Im Gegensatz zum in Abbildung 10 dargestellten sequentiellen Programmablauf ist hier eine Unterbrechung der Codeausführung des Hauptprogrammes möglich. Zu Beginn werden die Interruptquellen aktiviert und anschließend wird, wie beim sequentiellen Programmablauf, eine Endlosschleife gestartet [6]. Innerhalb dieser Endlosschleife können die nicht-zeitkritischen Programmteile ausgeführt werden. Die aktivierten Interruptquellen können verschiedene Interrupts auslösen wodurch das aktuell ausgeführte Hauptprogramm unterbrochen wird und die jeweiligen Interrupt-Serviceroutinen ausgeführt werden. Nach der Abarbeitung der entsprechenden Interrupt-Serviceroutine wird die Ausführung des Hauptprogramms an dem Punkt fortgesetzt, an dem sie unterbrochen wurde. - 16 -
  • 17. Software Abbildung 10: Sequentieller Programmablauf Abbildung 11: Interruptgesteuerte Programmausführung mit zugehöriger Interrupt-Serviceroutine Abbildung 12 zeigt den Programmablaufplan des Hauptprogrammes. In diesem werden nur die erfassten Sensorwerte in das für die Übertragung besser geeignete ASCII-Format gewandelt, sowie die Übertragung der Sensorwerte an das Mastersystem, sofern eine Anfrage von diesem vorliegt, ausgeführt. Die Routine „send_check“, die die Übertragung der Sensorwerte an das Mastersystem ausführt ist in Abschnitt III.2.4 näher beschrieben. Um Rechenzeit zu sparen, wird eine Umwandlung in das ASCII-Format nur ausgeführt, wenn sich der Wert geändert hat. Die Sensorauswertung erfolgt dann innerhalb mehrerer Interrupt- Serviceroutinen. Der Geschwindigkeitssensor wird mittels zweier Interrupt- Serviceroutinen ausgewertet, die in Abschnitt III.2.2.3 beschrieben sind, die - 17 -
  • 18. Software beiden Distanzsensoren werden durch zwei weitere Interrupt-Serviceroutinen ausgewertet, die in Abschnitt III.2.3 näher beschrieben wird. Abbildung 12: Programmablaufplan des Hauptprogramms Der dem Programmablaufplan in Abbildung 12 entsprechende Quellcode befindet sich in Anhang A2.IV unter „Main-Routine“. - 18 -
  • 19. Software III.2.2 Geschwindigkeitsmessung III.2.2.1 Einführung Zur Berechnung der Geschwindigkeit sind Multiplikations- sowie Divisionsoperationen notwendig. Die ALU des Mikrocontrollers ist jedoch nicht auf diese Operationen optimiert, so dass diese nur durch einen zeitaufwändigeren Umweg implementiert werden können. Das Ergebnis der Berechnung wäre außerdem eine Zahl in Fließkommadarstellung. Das UART-Datenregister des Controllers ist jedoch nur 8bit breit und eine sinnvolle Speicherung von Fließkommazahlen somit nicht möglich, d.h. zu übertragende Werte müssen vorher in das ASCII-Format umgewandelt werden. Diese Umwandlung dauert für Float-Werte wesentlich länger als für Integer-Werte. Diese beiden Umstände führen zusammen mit der benötigten Rechenzeit zur Auswertung der Abstandssensoren zu einer zu hohen Rechenzeitanforderung. Würde man nun die Geschwindigkeitsberechnung direkt im Mikrocontroller ausführen, könnten die Sensoren nicht mehr oft genug abgefragt werden, und so eine Kollision mit einem Objekt im Fahrschlauch des Fahrzeugs nicht mehr rechtzeitig vermieden werden. Die Geschwindigkeitsmessung wird deshalb in zwei Teilabschnitte zerlegt. Der Mikrocontroller misst nur mit Hilfe eines Counters die Zeit zwischen zwei nacheinander auftretenden Impulsen der Gabellichtschranke und übermittelt diesen Zählerwert per RS232-Schnittstelle an das Mastersystem. Das Mastersystem berechnet aus diesem Zählerstand und weiteren Randbedingungen, wie Zählerfrequenz des Mikrocontrollers und Raddurchmesser des Fahrzeuges, dann die aktuelle Geschwindigkeit. Wie bereits im Abschnitt Hardware näher erläutert, wird zur Geschwindigkeitsbestimmung eine Gabellichtschranke mit Impulsgeberscheibe verwendet. Die Auswertung der beiden Spuren der Gabellichtschranke erfolgt mit Hilfe einer Finite State Machine. III.2.2.2 Finite State Machine Wie in [6] beschrieben, gibt es mehrere Möglichkeiten, der Signalauswertung zweispuriger Inkrementalgeber. Aufgrund ihrer Überlegenheit gegenüber allen - 19 -
  • 20. Software anderen Methoden wird hier eine Auswertung beider Spuren mit fester Abtastfrequenz durchgeführt. Hierbei werden die Logikpegel beider Spuren mit einer festgelegten Frequenz abgetastet und mittels einer „Finite State Machine“ ausgewertet. Die Finite State Machine (FSM) besteht aus vier Zuständen: „00“, „01“, „10“ und „11“ (siehe Abbildung 13), die sich aus den Logikpegeln der beiden Signale A und B des Fotointerrupters ergeben. Sind beide Signalleitungen auf logischem „High“-Pegel, so ergibt sich der Zustand „11“ für die FSM, befindet sich nur die Signalleitung A auf „High“, Signalleitung B jedoch auf „low“, so ist der Zustand der FSM „10“. Der Fotointerrupter übermittelt seine Zustände mit einem Gray- Code, d.h. direkt benachbarte Binärwerte (und damit direkt benachbarte Zustände) unterscheiden sich nur in einer Ziffer. So ist z.B. ein Übergang vom Zustand 00 nur zu den Zuständen 01 und 10 möglich, da sich beim Übergang vom Zustand 00 in den Zustand 11 zwei benachbarte Ziffern gleichzeitig ändern würden. Hiermit können fehlerhafte Zustandsübergänge detektiert werden. Fehlerhafte Zustandswechsel sind also 00->11, 11->00 sowie 01->10, 10->01. Diese fehlerhaften Zustandsübergänge sind in Abbildung 13 gepunktet in der Mitte dargestellt. Werden solche fehlerhaften Zustandswechsel detektiert, gehen bei der Abtastung Zustände verloren, da laut Abbildung 14 z.B. nach einem „01“- Pegel je nach Fahrtrichtung immer entweder der Zustand „00“ oder „11“ auftreten muss. Dies bedeutet, dass die Drehgeschwindigkeit der Schiebe zu groß für die gewählte Abtastrate ist und die Abtastfrequenz erhöht werden muss. Abbildung 13: Zustände und Zustandsübergänge der Finite State Machine - 20 -
  • 21. Software Die Zustandswechsel erfolgen immer nach folgendem Schema: 00 -> 10 / 01 -> 11 -> 01 / 10 -> 00 Abbildung 14 zeigt die vom Distanzsensor erzeugten Impulsfolgen und die entsprechenden Zustände der FSM. Abbildung 14: Ausgangssignale der Gabellichtschranke und entsprechende Zustände der Finite State Machine III.2.2.3 Geschwindigkeitsmessung Die höchste messbare Geschwindigkeit ist begrenzt durch die maximal auswertbare Frequenz des Fotointerrupters, die laut Datenblatt 20kHz beträgt. Die hier verwendete Geberscheibe ist in 120 Segmente eingeteilt, d.h. es sind maximal 20000/120 = 166 komplette Umdrehungen der Scheibe pro Sekunde detektierbar. Bei einer Montage der Scheibe direkt auf der Welle und damit einer Übersetzung von 1:1 ist die höchste messbare Geschwindigkeit, abhängig vom 166π d Raddurchmesser d: v = . Der Raddurchmesser des Modellautos beträgt 6.5 1s cm, womit sich eine maximal messbare Geschwindigkeit von cm m km 166π ⋅ 6.5 = 33.9 = 122 ergibt. s s h Die Phasenverschiebung der beiden Ausgangssignale des Fotointerrupters beträgt im Idealfall 90°. Aufgrund von Abweichungen der Position der Geberscheibe von den Idealpositionen in allen drei Raumrichtungen innerhalb des Fotointerrupters und aufgrund einer erhöhten Umgebungstemperatur, verursacht durch die Verlustleistung des Fotointerrupters, kann es in der Praxis zu einer höheren Phasenverschiebung kommen. Dies kann zusammen mit einer niedrigen Duty Ration (Anteil des High-Pegels eines Impulses an der Gesamt- Impulsdauer) der Ausgangssignale zu einer nur noch sehr kleinen „Überlappung“ der beiden Signale führen, was die Detektion der verschiedenen Zustände - 21 -
  • 22. Software erschwert und damit die Abtastrate erhöht werden muss. Aufgrund dieser Tatsache wird sicherheitshalber eine etwas höhere Abtastrate gewählt. Die maximal auswertbare Frequenz des Fotointerrupters beträgt 20 kHz, jedem Impuls entsprechen 4 Zustände der FSM wie Abbildung 14 zu entnehmen ist. Nach dem Abtasttheorem ergibt sich damit eine untere Abtastfrequenz von 2 ⋅ 4 ⋅ 20 kHz = 160 kHz . Aufgrund der oben genannten größeren Phasenverschiebung sollte die Abtastfrequenz jedoch höher gewählt werden. Für das Modellauto ist eine maximale Geschwindigkeit von 5km/h ausreichend, was ungefähr einer Frequenz von 1.2kHz entspricht und damit einer Abtastfrequenz von mindestens 9.6kHz. Aufgrund der oben erwähnten Phasenverschiebung wird hier zur Sicherheit eine Abtastfrequenz von 25kHz gewählt. Die Auswertung der FSM erfolgt durch einen Interrupt. Während der Initialisierung wird ein Timer gestartet, der alle 40 s einen Interrupt auslöst. In diesem Interrupt-Handler werden die Zustände der beiden Signalpegel des Fotointerrupters abgetastet und so die Zustände der FSM bestimmt. Der Programmablaufplan dieses Interrupt-Handlers ist in Abbildung 15 dargestellt. Der Quellcode der FSM-Auswertung aus Abbildung 15 befindet sich in Anhang A2.I unter „Auswertung der FSM“. Aufgrund der später im Abschnitt V.I beschriebenen Probleme mit der Gabellichtschranke wurde versucht, den Code für die Auswertung möglichst robust gegen Störungen zu gestalten. Neben der Überprüfung des aktuellen Zustandsüberganges werden auch die vier vorherigen Zustandsübergänge auf Gültigkeit überprüft. Eine Zeitmessung wird nur dann gestartet, wenn eine gültige Folge von Zustandsübergängen 00 -> 01 -> 11 –> 10 -> 00 bzw. 00 -> 10 -> 11 –> 01 -> 00 vorliegt. Beim Auftreten eines oder mehrerer ungültiger Zustandsübergänge wird die Zeitmessung abgebrochen und erst bei einem neuen gültigen Impuls neu gestartet. - 22 -
  • 23. Software Abbildung 15: Programmablaufplan der FSM-Auswertung Der zweite Interrupt für die Auswertung der Gabellichtschranke ist der Overflow- Interrupt des Counters. Mit Hilfe dieses Counters wird die Zeit zwischen zwei aufeinanderfolgenden Impulsen gemessen. Der Zählerstand des Counters wird zurückgesetzt, sobald ein neuer gültiger Impuls der Gabellichtschranke auftritt. Bewegt sich das Fahrzeug jedoch nicht mehr, so werden keine weiteren Impulse generiert und der Zählerstand erreicht sein Maximum. Da es sich bei dem Counter um einen 16Bit-Counter handelt, ist dieser Maximalwert bei 65535 erreicht. Beim Überlauf des Counters wird ein Overflow-Flag gesetzt und die entsprechende Interrupt-Service-Routine gestartet. In dieser wird der Zählerstand auf den Maximalwert 65535 gesetzt (siehe Abbildung 16). Da der Counter des Mikrocontrollers in 4 s-Schritten zählt und sein Maximalwert 65535 beträgt, ergibt sich eine maximal messbare Zeitspanne von 0.26s. Zwischen zwei Impulsen wird eine Strecke von 1.7mm zurückgelegt. Damit - 23 -
  • 24. Software ergibt sich eine minimale messbare Geschwindigkeit von 6.5mm/s. Jede Geschwindigkeit kleiner 6.5 mm/s wird also als stehendes Fahrzeug interpretiert. Abbildung 16: Programmablaufplan der ISR „Timer1_Overflow“ Der zur Abbildung 16 gehörige Quellcode befindet sich in Anhang A2.I unter „Erkennung stehendes Fahrzeug: ISR_Timer1_Overflow“. III.2.3 Abstandsmessung Die Abstandsmessung erfolgt aufgrund der bereits bei der Geschwindigkeitsmessung genannten Einschränkungen des Mikrocontrollers ebenfalls in zwei Teilabschnitten. Die von den beiden Abstandssensoren generierten Spannungspegel werden vom Mikrocontroller AD-gewandelt und auf Anfrage des Mastersystems per RS232-Schnittstelle gesendet. Dort werden die digitalisierten Spannungswerte dann anhand der in Abschnitt III.3.1.1 beschriebenen Routine in einen Abstand umgerechnet. Die Auswertung der Infrarotsensoren erfolgt wie die Auswertung des Geschwindigkeitssensors interruptgesteuert. Durch einen Timer wird eine Zeitbasis erzeugt, die alle 500 s einen Interrupt generiert. Innerhalb der in Abbildung 17 dargestellten Interrupt-Serviceroutine wird dann eine neue AD- Wandlung gestartet. Der Quellcode dieser ISR befindet sich in Anhang A2.II unter „ISR AD-Wandlung“. - 24 -
  • 25. Software Abbildung 17: Programmablaufplan der AD-Wandlung Das Ende eines AD-Wandlungszyklusses wird durch einen Interrupt signalisiert und die in Abbildung 18 dargestellte Interrupt-Serviceroutine ausgeführt, deren Quellcode in Anhang A2.II unter „ISR ADC_Interrupt“ zu sehen ist. Um Schwankungen abzuglätten wird eine Mittelwertbildung der letzten vier gemessenen Distanzwerte durchgeführt. Der Mittelwert wird mit vier Werten gebildet, da damit einerseits Schwankungen der Messung ausreichend ausgeglichen werden, andererseits kann bei einer Mittelwertbildung mit vier Werten die Division durch den Faktor 4 durch eine einfache Schiebeoperation ausgeführt werden und so eine rechenzeitintensive Division vermieden werden. Abschließend wird der Kanal gewechselt, um den Spannungswert des anderen Distanzsensors zu digitalisieren. - 25 -
  • 26. Software Abbildung 18: Programmablaufplan der ISR „ADC_Interrupt“ Bei den Mikrocontrollern der ATMega-Serie, die einen AD-Wandler beinhalten, gibt es drei Möglichkeiten der Referenzspannungswahl. Der ATMega32 bietet eine interne 2.54V-Spannungsreferenz. Da hier allerdings Spannungswerte bis zu 3V auftreten können, kann diese nicht genutzt werden. Außerdem kann eine externe Spannungsreferenz angeschlossen werden. Diese bietet oft die höchste Genauigkeit, allerdings steigt damit die Größe und Komplexität der Schaltung. Als letzte Möglichkeit kann als Referenz die Versorgungsspannung des analogen Netzes verwendet werden. Die Spannung des analogen Netzes beträgt wie die Spannung des digitalen Netzes 5V, ist jedoch durch einen Tiefpass von diesem entkoppelt, um Spannungsschwankungen durch schnelle digitale Schaltvorgänge auszufiltern. Diese Versorgungsspannung wurde als Referenzspannung für die AD-Wandlungen verwendet. Laut Datenblatt [4] ergibt sich folgendes Ergebnis in Abhängigkeit der Referenzspannung: VIN ⋅ 1024 ADC = = VIN ⋅ 204.8 VREF III.2.4 Kommunikation mit dem Mastersystem Die Kommunikation mit dem Mastersystem erfolgt über die RS232-Schnittstelle. Um hier das Rad nicht neu erfinden zu müssen, wird auf die bereits vorhandenen, sehr guten und von einer großen Community getesteten Routinen - 26 -
  • 27. Software von Peter Fleury [8] zurückgegriffen. In diesen Routinen ist u.a. ein FIFO- Ringbuffer implementiert, der sicherstellt, dass Zeichen, die noch nicht gesendet werden können, da das USART-Interface noch mit der Übertragung vorheriger Zeichen beschäftigt ist, zwischengespeichert werden und nicht verloren gehen. Die Kommunikation erfolgt im Polling-Verfahren, d.h. das Mastersystem fragt die Sensordaten zyklisch ab. Dies funktioniert im Falle der Geschwindigkeit indem die Zeichenfolge „GESP“ gesendet wird, woraufhin der Controller den aktuellen Zählerstand des Counters sendet. Analog funktioniert die Abfrage der Distanzen mit den Befehlen „GEDF“ und „GEDR“ für die Abfrage des vorderen bzw. hinteren Distanzsensors. Die Übertragung der Werte erfolgt im ASCII-Format. Der Programmablaufplan ist in Abbildung 19 dargestellt und der Quellcode, der diese Funktion implementiert in Anhang A2.III unter „Übertragungsroutine Send_Check“. - 27 -
  • 28. Software Abbildung 19: Programmablaufplan der Routine „Send_Checkquot; III.3 Software des Mastersystems Die Software des Mastersystems besteht neben dem ACC-Regelungsalgorithmus noch aus den Routinen zur Geschwindigkeits- und Distanzberechnung aus den Sensorrohdaten. - 28 -
  • 29. Software III.3.1 Berechnung der Sensordaten III.3.1.1 Berechnung der Distanz Abbildung 20 zeigt den Zusammenhang zwischen Ausgangsspannungswert des Infrarotsensors und dem detektierten Abstand. Da diese Kennlinie stark nicht- linear ist, muss diese für eine Umrechnung der Spannungswerte in Distanzwerte linearisiert werden. Abbildung 20: Spannungs-Distanz-Kennlinie aus dem Datenblatt Die Kennlinie wird innerhalb der in Tabelle 1 angegebenen Intervalle mit Geradenstücken approximiert: Tabelle 1: Intervall-Einteilung Die Kennlinie gibt die Ausgangsspannung als Funktion des Abstandes an, benötigt wird allerdings der Abstand als Funktion der Spannung. Deshalb werden die beiden Achsen getauscht. Um außerdem einen gültigen funktionalen - 29 -
  • 30. Software Zusammenhang zu erhalten, wird der Kennlinienabschnitt zwischen 0 und 3cm entfernt. Das Ergebnis zeigt Abbildung 21: Abbildung 21: linearisierte Kennlinie Der Achsenabschnitt sowie die Steigung der Geradenstücke können aus den beiden Punkten, die durch die Intervallgrenzen gegeben sind, berechnet werden. Gegeben sind die beiden Punkte P1(x1 | y1) und P2(x2 | y2) und gesucht ist die Gerade y = m ⋅ x + t , die durch diese beiden Punkte verläuft. Setzt man beide Punkte in die Geradengleichung ein, ergeben sich die beiden Gleichungen y1 = m ⋅ x1 + t y2 = m ⋅ x2 + t Ineinander eingesetzt und nach m bzw. t aufgelöst ergeben sich die Bestimmungsgleichungen für die Steigung m bzw. den Achsenabschnitt t: y2 − y1 m= x2 − x1 x2 ⋅ y1 − x1 ⋅ y2 t= x2 − x1 - 30 -
  • 31. Software III.3.1.2 Berechnung der Geschwindigkeit Der Raddurchmesser des Modellautos beträgt 6.5cm und damit der Radumfang u = π ⋅ d = 20.42cm . Die Impulsgeberscheibe ist in 120 Segmente eingeteilt. Damit u ergibt sich ein zurückgelegter Weg von = 1.7mm zwischen zwei detektierten 120 Impulsen. Der Counter des Mikrocontrollers zählt in 4 s-Schritten und übermittelt seinen Zählerstand per RS232-Schnittstelle an das Mastersystem. Damit ergibt sich eine Geschwindigkeit von u x 120 v= = t 4µs ⋅ countervalue III.3.2 ACC III.3.2.1 ACC – Spezifikationen 1. Allgemeines Verhalten 1.1 Das ACC-System kann ein- und ausgeschaltet werden. 1.2 Bei Inbetriebnahme des Systems ist das ACC ausgeschaltet und die Wunschgeschwindigkeit auf einen bestimmten Ausgangswert gesetzt, beispielsweise 0 km/h (stehendes Fahrzeug). 1.3 Die Wunschgeschwindigkeit des Autos kann über die Steuerung in einem bestimmten Bereich (beispielsweise –2km/h bis 5 km/h) in festen Schritten (z.B. 0,5 km/h) erhöht und erniedrigt werden. 2. Fahrverhalten, falls kein Objekt im Fahrschlauch (Geschwindigkeitsregelung) 2.1 Wenn das ACC eingeschaltet wird, beschleunigt (bremst) das Auto solange, bis die Wunschgeschwindigkeit erreicht ist. 2.2 Solange das ACC eingeschaltet ist, soll die Wunschgeschwindigkeit gehalten werden. 2.3 Wird die Wunschgeschwindigkeit geändert, während das ACC eingeschaltet ist, muss die neue Wunschgeschwindigkeit eingenommen werden. 3. Fahrverhalten, falls Objekt im Fahrschlauch (Abstandsregelung) - 31 -
  • 32. Software 3.1 Wurde ein Objekt erkannt, muss mindestens ein vorgegebener Abstand zum vorausfahrenden Objekt gehalten werden. 3.2 Die Abstandsregelung hat höhere Priorität als die Geschwindigkeitsregelung, d.h. ggf. wird die eingegebene Wunschgeschwindigkeit unterschritten, falls der Mindestabstand sonst nicht gewährleistet wäre. 3.3 Sobald das Objekt den Fahrschlauch verlassen hat, wird wieder gemäß der Geschwindigkeitsregelung (ACC Funktionalität) gefahren. 4. Rückwärtsfahren 4.1 Das Fahrzeug kann rückwärts fahren, indem eine negative Wunschgeschwindigkeit eingegeben wird. 4.2 Das Rückwärtsfahren kann erst aktiviert werden, wenn das Fahrzeug vollständig steht, d.h. die Ist-Geschwindigkeit 0 ist. (z.B. nach „Nothalt“ oder durch Einstellen von Wunschgeschwindigkeit = 0. III.3.2.2 ACC - Regelungsalgorithmus Abbildung 22 zeigt den Programmablaufplan des ACC-Systems. Standardmäßig ist das ACC-System deaktiviert und die gewünschte Geschwindigkeit wird ohne Regelung direkt an den Motor weitergegeben. Bei aktiviertem ACC werden die benötigten Sensordaten „aktuelle Geschwindigkeit“ und „aktuelle Distanz“ eingelesen und der ACC-Regelungsalgorithmus ausgeführt. Je nach Bewegungsrichtung des Fahrzeuges wird entweder der Abstand zu einem Objekt im vorderen oder hinteren Fahrschlauch des Fahrzeuges eingelesen. Ist der Abstand kleiner als ein minimal erlaubter Sicherheitsabstand wird sofort ein „emergency brake“, ein Nothalt , ausgeführt, der das Fahrzeug zum sofortigen Stillstand bringt. Ist der Abstand größer als dieser minimale Sicherheitsabstand, aber kleiner als der im Normalbetrieb einzuhaltende Abstand, wird die Geschwindigkeit so lange heruntergeregelt, bis dieser gewünschte Abstand eingehalten wird. In diesen beiden Fällen hat also die Regelung der Distanz eine höhere Priorität als die Regelung der Geschwindigkeit, es erfolgt eine Abstandsregelung. - 32 -
  • 33. Software Abbildung 22: Programmablaufplan des ACC-Systems Ist der aktuell gemessene Abstand größer als der im Normalbetrieb geforderte Sicherheitsabstand, erfolgt eine Geschwindigkeitsregelung. Ist die aktuelle Geschwindigkeit des Fahrzeugs geringer als die vom Benutzer gewünschte Geschwindigkeit, wird das Fahrzeug so lange beschleunigt, bis sich das Fahrzeug mit der vom Benutzer gewünschten, vorgegeben Geschwindigkeit bewegt. Ist die Geschwindigkeit größer als die vom Benutzer gewünschte Geschwindigkeit, erfolgt eine Reduzierung der Geschwindigkeit bis die gewünschte Wunschgeschwindigkeit erreicht ist. Um eine zu abrupte Beschleunigung bzw. Verzögerung zu vermeiden, erfolgt die Geschwindigkeitsanpassung in 5%-Schritten. Eine Ausnahme bildet hier der sog. „Emergency Stop“, der bei einer Unterschreitung einer minimalen Sicherheitsdistanz möglichst schnell ausgeführt werden soll. Den Programmablaufplan des Regelungsalgorithmus zeigt Abbildung 23. - 33 -
  • 34. Software Abbildung 23: ACC-Regelungsalgorithmus Der Regelungsalgorithmus ist universell für positive, wie auch für negative Geschwindigkeiten anwendbar wie anhand der Unterscheidung folgender acht Fälle deutlich gemacht werden soll. Regelungsalgorithmus: new_speed = act_speed + 0.95 (desired_speed – act_speed) Fall 1: beide Geschwindigkeiten > 0 Fall 1a: act_speed < desired_speed (Die aktuelle Geschwindigkeit ist kleiner als die Wunschgeschwindigkeit) Der Ausdruck in der Klammer ist > 0 und damit die neue Geschwindigkeit größer als die aktuelle Geschwindigkeit, das Fahrzeug wird beschleunigt. Fall 1b: act_speed > desired_speed (Die aktuelle Geschwindigkeit ist größer als die Wunschgeschwindigkeit) Dann ist der Ausdruck in der Klammer < 0 und somit die neue Geschwindigkeit kleiner als die aktuelle Geschwindigkeit, da ein negativer Wert zur aktuellen Geschwindigkeit addiert wird, es kommt zur gewünschten Geschwindigkeitsreduzierung. - 34 -
  • 35. Software Fall 2: beide Geschwindigkeiten < 0 Fall 2a: | act_speed | < | desired_speed | Ist die aktuelle Geschwindigkeit betragsmäßig kleiner als die Wunschgeschwindigkeit, so bleibt der Ausdruck in der Klammer <0. Betragsmäßig vergrößert sich die Geschwindigkeit, das negative Vorzeichen jedoch bleibt erhalten. Fall 2b: | act_speed | > | desired_speed | Ist die aktuelle Geschwindigkeit betragsmäßig größer als die Wunschgeschwindigkeit, wird der Ausdruck in der Klammer positiv. Dieser positive Betrag verringert den Betrag, nicht aber das Vorzeichen der negativen Ausgangsgeschwindigkeit. Fall 3: beide Geschwindigkeiten haben unterschiedliches Vorzeichen Fall 3a: act_speed < 0 < desired_speed; | act_speed | < | desired_speed | Die aktuelle Geschwindigkeit ist < 0, das Fahrzeug fährt also noch rückwärts, die Wunschgeschwindigkeit ist jedoch > 0. Damit ist der Ausdruck in der Klammer ebenfalls > 0 und damit wird die negative Ausgangsgeschwindigkeit betragsmäßig kleiner, bis sie irgendwann leicht positiv wird. Ab dort tritt Fall 1a) in Kraft und die Geschwindigkeit wird weiter erhöht, bis die Wunschgeschwindigkeit erreicht ist. Fall 3b: act_speed > 0 > desired_speed; | act_speed | < | desired_speed | Dies entspricht genau dem Gegenteil von Fall 3a). Das Fahrzeug fährt noch vorwärts, die neue Wunschgeschwindigkeit jedoch ist < 0. Der Ausdruck in der Klammer ist < 0 und damit wird die aktuelle Geschwindigkeit reduziert bis diese schließlich negativ wird. Ab hier erfolgt eine Regelung nach Fall 1b), bis die Wunschgeschwindigkeit erreicht ist. Fall 3c: act_speed < 0 < desired_speed; | act_speed | > | desired_speed | Der Ausdruck in der Klammer ist positiv, die Ausgangsgeschwindigkeit jedoch < 0. Dadurch erfolgt eine betragsmäßige Reduktion der negativen Geschwindigkeit, bis diese positiv wird und in eine Regelung nach Fall 1a) übergeht. Fall 3d: act_speed > 0 > desired_speed; | act_speed | > | desired_speed | - 35 -
  • 36. Software Hier ist der Ausdruck in der Klammer negativ und somit erfolgt eine Reduzierung der positiven Ausgangsgeschwindigkeit bis diese negativ wird und in eine Regelung nach Fall 1b) übergeht. - 36 -
  • 37. COLA – The Component Language Kapitel IV COLA – The Component Language IV.1 Beschreibung der Sprache COLA Bei der Component Language COLA handelt es sich um eine Sprache für das Design und die Entwicklung integrierter Systeme, die auf synchronem Datenfluss basiert und mit der komplexe Softwaresysteme modelliert werden können. Diese Modellierung kann sowohl textbasiert als auch graphisch erfolgen. Die Möglichkeit der graphischen Modellierung und der damit verbundenen automatischen Code-Generierung ist nicht nur für den Benutzer wesentlich komfortabler in der Anwendung und damit auch weniger zeitintensiv, sondern bietet außerdem den Vorteil, dass Systeme mit automatischen „Model-Checkern“ direkt überprüft und verifiziert werden können. Neben der vollautomatischen Generierung von C-Code ist natürlich auch die automatische Generierung von Code in anderen Sprachen, wie z.B. VHDL denkbar. Die Modellierungskonzepte ähneln denen anderer bekannter Modellierungssprachen wie z.B. MATLAB/Simulink oder UML, kombinieren diese jedoch mit einer strikten Semantik. Im Gegensatz zu ähnlichen Projekten unterstützt COLA die Modellierung bis zur Implementierungsebene mit einem einzigen Formalismus, was die funktionelle Verifikation eines Modells ermöglicht. Außerdem ist mit COLA die Modellierung kompletter verteilter Systeme möglich, die Aufteilung der Ressourcen, d.h. z.B. die Aufteilung der anfallenden Rechenprozesse auf die verschiedenen Prozessoren geschieht vollautomatisch. Bei der Modellierung wird das System so lange hierarchisch in Untersysteme zerlegt, bis das Gesamtsystem schließlich nur noch aus einigen wenige Grundkomponenten wie z.B. Konstanten und arithmetischen Grundoperationen zusammengesetzt werden kann. Ein COLA-System besteht aus sog. „units“, Einheiten. Diese Einheiten stellen die Basisblöcke eines COLA-Systems dar und bilden somit die atomaren Bausteine eines COLA-Systems. Diese Einheiten können zu komplexeren Einheiten, sog. „composed units“, zusammengesetzten Einheiten, kombiniert werden und damit Netzwerke und Automaten erstellt werden. Jede Einheit hat eine gewisse Anzahl an Ein- und Ausgängen und beschreibt die Anhängigkeit der Ausgangssignale - 37 -
  • 38. COLA – The Component Language von den Eingangssignalen. Die Ein- und Ausgänge der verschiedenen Units sind durch sog. „Channels“, Kanäle verbunden. Das COLA-System auf der höchsten Ebene enthält alle im System auftretenden Sensoren und Aktuatoren und hat weder Ein- noch Ausgänge. COLA basiert auf synchronem Datenfluss und geht von perfekter Synchronität aus, d.h. alle Berechnungen und die Kommunikation zwischen den Units geht unendlich schnell, benötigt also keinerlei Zeit. Die einzelnen Elemente innerhalb des Datenflusses arbeiten parallel und die Bearbeitung der Ein- und Ausgangssignale erfolgt zu diskreten Zeitpunkten. Diese diskreten Zeitpunkte, „Ticks“ (Augenblicke) genannt, bilden eine diskrete, einheitliche Zeitbasis. Diese Zeitbasis erlaubt eine deterministische Beschreibung nebenläufiger Prozesse. Realzeitanforderungen werden bezogen auf diese diskrete, einheitliche Zeitbasis ausgedrückt. IV.2 Modellierung des ACC-Systems in COLA Das ACC-System besteht auf der höchsten Ebene aus den Units „Speed“, „Distance“, „User Interface“, „ACC“ und „Motor“ (Abbildung 24). In den Units „Speed“ und „Distance“ befinden sich die entsprechenden Sensoren, sowie die arithmetischen Blöcke zur Berechnung der für das ACC-System benötigten Sensordaten „Abstand“ und „Geschwindigkeit“. Über das User-Interface kann das ACC ein- und ausgeschaltet werden und die gewünschte Wunschgeschwindigkeit vorgegeben werden. Die Geschwindigkeitsregelung erfolgt in der Unit „ACC“, die die neue Geschwindigkeit an die Unit „Motor“ weitergibt, die den Motor als Aktuator enthält. Abbildung 24: ACC-System auf höchster Ebene - 38 -
  • 39. COLA – The Component Language Da eine vollständige Beschreibung aller Units den Rahmen sprengen würde, werden im Folgenden nur die beiden Units „ACC“ und „Distance“ exemplarisch beschrieben. IV.2.1 Die Unit „Distance“ Die Unit „Distance“ ist in Abbildung 25 dargestellt. Da eine Regelung durch das ACC-System auch bei rückwärts fahrendem Fahrzeug möglich sein soll, hat die Unit „Distance“ die Geschwindigkeit als Eingangsgröße. Mittels des in Abbildung 26 dargestellten Automaten „Distance_Automaton“ wird überprüft, ob die Geschwindigkeit größer oder kleiner als Null ist. Ist die Geschwindigkeit größer Null, wird der Distanzwert des Infrarotsensors an der Fahrzeugfront an die Unit „ACC“ weitergegeben, ist die Geschwindigkeit kleiner Null wird die Distanz zu einem Objekt hinter dem Fahrzeug übermittelt. Abbildung 25: Die Unit „Distance“ Die Sources „ADC_Front_Value“ bzw. „ADC_Rear_Value“ enthalten die vom AD- Wandler digitalisierten Spannungswerte. Diese Spannungswerte werden anhand der in Abschnitt III.3.1.1 dargestellten Kennlinie in Distanzwerte umgerechnet. Diese Umrechnung geschieht im Block „Calc_Distance“. - 39 -
  • 40. COLA – The Component Language Abbildung 26: Automat „Distance_Automaton“ Für die Linearisierung der Kennlinie aus Abschnitt III.3.1.1 gibt es verschiedene Möglichkeiten: 1. Verwendung eines (geschachtelten) Automaten 2. Verwendung von if-Blöcken 3. Kombination eines Automaten mit if-Blöcken 4. Verwendung spezieller „Nirvana“-Transitionen Methode 1 ist die am wenigsten elegante, da sehr viele Zustände gebraucht werden und sie damit sehr unübersichtlich wird. Da jedoch für die if-Blöcke noch kein Code-Generator existiert und für die Erzeugung der Nirvana-Transitionen bisher noch die Löschung der Quelle erforderlich ist, was die momentan zur Verfügung stehende Version des COLA-GUI noch nicht erlaubt, wird diese hier trotzdem vorgestellt und auch für die Modellierung verwendet. Der für die Linearisierung verwendete Automat besteht aus einem geschachtelten Automaten, d.h. ein Zustand des Automaten ist wiederum ein neuer Automat dessen Zustand wieder ein Automat ist usw. Es gibt so viele Automaten, wie es Teilintervalle laut Tabelle 1 in Abschnitt III.3.1.1 gibt. Die erste Stufe besteht aus einem Automaten der überprüft, ob der AD-gewandelte Wert größer oder kleiner bzw. gleich der ersten Intervallgrenze (72) ist. Der zweite Automat überprüft dann, ob der Wert innerhalb des Intervalls ] 72 ; 88 ] liegt, der dritte Automat, ob der Wert im Intervall ] 88 ; 143 ] liegt usw. bis alle Teilintervalle laut Tabelle 1 aus Abschnitt III.3.1.1 abgedeckt sind. Den Automaten der ersten Stufe zeigt Abbildung 27, die zugehörigen Zustandsübergänge sind in Abbildung 28 dargestellt. - 40 -
  • 41. COLA – The Component Language Abbildung 27: Automat Stufe 1 Abbildung 28: Zustandsübergänge der beiden Transitionen des Automaten der Stufe 1 Der Zustand „dist_gt_72“ des Automaten der Stufe 1 entspricht wiederum einem Automaten, hier Automat der Stufe 2 genannt, der ebenfalls aus zwei Zuständen besteht (Abbildung 29). Abbildung 29: Automat Stufe 2 Dieser Automat überprüft, ob der AD-gewandelte Wert innerhalb des Intervalls ] 72 ; 88 ] liegt. Ist der Wert größer als 88, wird weiter verzweigt in den Automaten der nächsten Stufe, der überprüft, ob der Wert innerhalb des Intervalls ] 88 ; 143 ] liegt. Liegt der Wert jedoch innerhalb des Intervalls ] 72 ; 88 ], wird mit Hilfe der beiden Parameter Steigung und Achsenabschnitt der AD-gewandelte Wert in - 41 -
  • 42. COLA – The Component Language einen Abstand (in cm) umgerechnet. Diese Berechnung ist in Abbildung 30 dargestellt. Abbildung 30: Berechnung der Steigung m und des Achsenabschnittes t der Teilgeraden Die eleganteste Methode ist allerdings die Verwendung spezieller, sog. „Nirvana“-Transitionen. Hierbei entspricht jedem Intervall ein Zustand, wie bereits unter Punkt 1 gezeigt. Das Besondere hier ist jedoch, dass die Zustände untereinander nicht verbunden sind. Jeder Zustand erhält eine eingehende Transition, die jedoch keine Quelle hat. Daher auch der Name „Nirvana“- Transition. Hierbei muss allerdings streng darauf geachtet werden, dass sich die Bedingungen der Transitionen nicht überschneiden und so nicht- deterministisches Verhalten ausgeschlossen ist. IV.2.2 Die Unit „ACC“ Das Herzstück des ACC-Systems bildet die Unit „ACC“. Sie besteht aus dem Automaten „ACC_Automaton“, mit den beiden Zuständen „ACC_on“ bzw. „ACC_off“ sowie den Konstanten „dist_emergency“ und „dist_safety“, in denen die beiden sicherheitsrelevanten Mindestabstände „Notabstand“ und „Sicherheitsabstand“ gespeichert sind. Diese betragen im konkreten Beispiel 15cm bzw. 30cm. Die Unit „ACC“ ist in Abbildung 31 dargestellt und der Automat „ACC_Automaton“ in Abbildung 32. Standardmäßig ist das ACC-System deaktiviert, der Initialzustand ist also „ACC_off“, es erfolgt hier keine - 42 -
  • 43. COLA – The Component Language automatische Regelung und der Geschwindigkeitswert wird direkt an die Unit „Motor“ weitergegeben (Abbildung 32 rechts). Abbildung 31: Die Unit „ACC“ Abbildung 32: Automat „ACC_Automaton“ und Zustand „ACC_off“ Wird über das User-Interface das boolesche Signal „ACC_active“ gesetzt, wechselt der Zustand von „ACC_off“ in den aktiven Zustand „ACC_on“. Der Zustand „ACC_on“ besteht wieder aus einem Automaten mit den beiden Zuständen „dist_leq_emergency“ und „dist_gt_emergency“ (Abbildung 33) Die Abkürzungen stehen für „actual distance lower or equal emergency distance“ bzw. „actual distance greater emergency distance“. - 43 -
  • 44. COLA – The Component Language Ist der gemessene Abstand kleiner (oder gleich) dem vorgegebenen Notabstand wird ein sofortiger Nothalt des Fahrzeugs initiiert, d.h. die neue Geschwindigkeit wird auf 0 gesetzt (Abbildung 33 rechts). Abbildung 33: Zustand „ACC_on“ (links) und Nothalt (rechts) Ist der Abstand größer als dieser Notabstand, wird in den Zustand „dist_gt_emergency“ gewechselt, der wiederum aus einem Automaten mit den beiden Zuständen „dist_leq_safety“ bzw. „dist_gt_safety“ besteht (Abbildung 34). Hier stehen die Abkürzungen analog zu den oben genannten Abkürzungen für „actual distance lower or equal safety distance“ bzw. „actual distance greater safety distance“. Abbildung 34: Zustand „dist_gt_emergency“ - 44 -
  • 45. COLA – The Component Language Ist der aktuelle Abstand kleiner als der geforderte Sicherheitsabstand, wird die Geschwindigkeit laut Abbildung 35 in 5%-Schritten verringert, bis der geforderte Sicherheitsabstand wieder eingehalten wird. Abbildung 35: Zustand „dist_leq_safety“: Reduzierung der Geschwindigkeit um 5% Ist der aktuelle Abstand größer als der geforderte Sicherheitsabstand erfolgt eine automatische Regelung der Geschwindigkeit nach dem bereits in Abschnitt III.3.2.2 vorgestellten Algorithmus, dessen Modellierung Abbildung 36 zeigt: Abbildung 36: Zustand „dist_gt_safety“: Regelung der Wunschgeschwindigkeit Der Regelungsalgorithmus entspricht exakt dem Algorithmus aus Abschnitt III.3.2.2 und ist deshalb für positve und negative Geschwindigkeiten universell anwendbar. - 45 -
  • 46. Ergebnisse Kapitel V Ergebnisse V.1 Geschwindigkeitsmessung Als sehr problematisch erwies sich die Geschwindigkeitsmessung. Schon bei sehr kleinen Abweichungen im Bereich von wenigen Zehntel Millimetern von der Idealposition der Geberscheibe innerhalb der Gabellichtschranke kommt es zu großen Verfälschungen der Signale aufgrund der zunehmenden Phasenverschiebung und des kleiner werdenden Duty-Cycles (Anteil des High- Pegels an der Gesamt-Periodendauer eines Impulses) der Rechtecksignale. Eine korrekte Auswertung wird so unmöglich. Eine direkte Montage der Geberscheibe auf der Antriebsachse des Fahrzeuges ist auch bei theoretisch perfekter Positionierung der Scheibe innerhalb der Gabellichtschranke zwecklos, da das Spiel der Antriebsachse schon einige Millimeter beträgt und damit weit größer als die tolerierbare Abweichung ist. Nachdem ein erster Test der Geschwindigkeitsmessung im Modellauto leider komplett fehlschlug, wurden die Ausgangssignale der Gabellichtschranke mit Hilfe eines Oszilloskopes analysiert. Ein Softwarefehler konnte ausgeschlossen werden, da ein Test mit idealen Testsignalen, die mittels eines Pattern- Generators erzeugt wurden, erfolgreich war und korrekte Ergebnisse lieferte. Durch die Betrachtung der Signalverläufe mit Hilfe des Oszilloskopes bestätigte sich die enorme Empfindlichkeit des Sensors und die Notwendigkeit einer sehr präzisen Ausrichtung der Geberscheibe innerhalb der Gabellichtschranke. Deshalb wurde eine kleine Testanordnung aufgebaut, mit deren Hilfe die Scheibe möglichst präzise innerhalb der Gabellichtschranke positioniert werden kann und ohne auftretendes Achsialspiel durch diese rotieren kann. Hierbei ergab sich jedoch ein weiteres Problem: Selbst bei weitestgehend idealer Positionierung der Scheibe und damit idealen Impulsfolgen, werden statt einem Impuls pro Inkrement mehrere Impulse erzeugt. Leider verändert sich die Anzahl der erzeugten Impulse pro Inkrement mit der Drehgeschwindigkeit, so dass eine sinnvolle Auswertung enorm schwierig wird. Die Ursache für dieses Verhalten konnte bis zuletzt leider nicht ermittelt werden, liegt jedoch wohl an der immer noch nicht präzise genug rotierenden Schiebe auch wenn optisch keine großen Schwankungen mehr feststellbar sind. Die Verwendung mehrerer - 46 -
  • 47. Ergebnisse Gabellichtschranken und unterschiedlicher Encoderscheiben sowie unterschiedlicher Widerstände und damit unterschiedlicher Fotoströme brachte ebenso wenig eine Verbesserung wie die Stabilisierung der Versorgungsspannung des Sensors durch Kondensatoren. Eine Verbesserung kann durch eine Mittelwertbildung der letzten gemessenen Zeitwerte erreicht werden, eine perfekte Lösung stellt das allerdings immer noch nicht dar, da der Sensor einfach ein fehlerhaftes Signal liefert. Durch die Abhängigkeit der Impulsanzahl von der Drehgeschwindigkeit wird die Mittelwertbildung außerdem zusätzlich erschwert. Eine Genauigkeit der Geschwindigkeitsmessung, deren Toleranz kleiner als 10% ist, ist auf diesem Weg kaum zu erreichen, aufgrund praktischer Erfahrungen muss eher mit Schwankungen bis zu 20% gerechnet werden. V.2 Distanzmessung Problemlos funktioniert die Abstandsmessung. Anfänglich auftretende Schwankungen der Sensorwerte konnten durch die Einführung einer Mittelwertbildung der vier letzten Sensorwerte gut ausgeglichen werden. V.3 Testumgebung Für Debugging-Zwecke wurde eine Testumgebung für das ACC-Programm unter Microsoft Windows erstellt. Der Quellcode dieser Testumgebung befindet sich in Anhang 4. In der Testumgebung wird nach der Initialisierung der RS232- Schnittstelle das ACC-Programm initialisiert. Während dieser Initialisierung werden sämtlichen Automaten ihre Anfangszustände zugewiesen. Anschließend wird in einer Endlosschleife das ACC-Programm gestartet. Die Ausführung kann durch Drücken der Taste „ESC“ beendet werden. Das ACC-System kann durch Drücken der Taste „A“ aktiviert und durch erneutes Drücken der Taste „A“ wieder deaktiviert werden, die gewünschte Wunschgeschwindigkeit kann mit den Tasten „+“ bzw. „-„ in 0.5cm/s-Schritten im Bereich –100 cm/s und + 200 cm/s eingestellt werden. Die Abfrage der Sensorwerte erfolgt durch eine Middleware-Routine. Die darin verwendeten Zugriffe auf die serielle Schnittstelle verwenden die „ComTools“- Kommunikationsroutinen von Anton Zechner [10]. Der Quellcode der Middleware-Routine befindet sich ebenfalls in Anhang 4. - 47 -
  • 48. Ergebnisse V.4 Automatisch generierter Quellcode Der gesamte vom automatischen Code-Generator erzeugte Quellcode befindet sich in Anhang 3. Die Regelungsalgorithmen sowie die Gleichung zur Berechnung der Geschwindigkeit wurden vom Code-Generator in exakt dieselben Gleichungen überführt, wie sie auch manuell geschrieben wurden. Hier hat der Code- Generator perfekte Arbeit geleistet. Der restliche Code besteht im Wesentlichen aus Automaten, die mittels „switch“- Anweisungen realisiert wurden. Besonders die Routinen zur Berechnung der Distanz sind durch die Verwendung der vielen Automaten sehr lange. Das liegt jedoch nicht am Code-Generator, sondern an der etwas ungünstigen Wahl der Linearisierungsmethode. Eine Verwendung der bereits genannten „Nirvana“- Transitionen bzw. einer Kombination mit if-Blöcken sollte helfen, etwas knapperen Code zu generieren. Ein gewisser Overhead wird sich jedoch bei einer automatischen Code-Generierung nie vollständig vermeiden lassen und ist in der Regel auch nicht schlimm, wenn insgesamt die genannten Vorteile wie schneller erzeugbarer, sicher nachvollziehbarer und leichter testbarer Code überwiegen. Insgesamt arbeitet der automatische Code-Generator sehr gut und ist in der Lage funktionierenden, eleganten und relativ knappen Code zu generieren. - 48 -
  • 49. Zusammenfassung und Ausblick Kapitel VI Zusammenfassung und Ausblick In dieser Arbeit wurde ein System für eine automatische Geschwindigkeits- und Abstandsregelung (Adaptive Cruise Control - ACC) entwickelt und mit Einschränkungen bei der Geschwindigkeitsmessung erfolgreich getestet. Außerdem wurden einige Kernkonzepte und Vorteile der Sprache COLA erläutert und das ACC-System mit Hilfe dieser Sprache modelliert und der vom automatischen Code-Generator erzeugte Quellcode betrachtet. Als Ergebnis kann hier festgehalten werden, dass der automatische Code-Generator von COLA in der Lage ist eleganten, funktionierenden Code zu generieren, was jedoch natürlich nicht ganz ohne Overhead möglich ist. Aufgrund der Probleme mit der Gabellichtschranke sollte die Sensorik zur Geschwindigkeitsmessung noch einmal von Grund auf neu überdacht werden. Eine alternative und wesentlich genauere Methode der Geschwindigkeitsbestimmung wäre wünschenswert, diese sollte jedoch die Möglichkeit der Drehrichtungsbestimmung beinhalten. Eventuell könnte eine mechanisch weniger anspruchsvolle Gabellichtschranke in Kombination mit einer Geberscheibe mit weniger Inkrementen verwendet werden, da eine geringere Auflösung akzeptabel ist. Außerdem wäre es eine weitere Verbesserung, wenn das Sensorsystem die Geschwindigkeit und die Distanzen direkt berechnet, so dass das Mastersystem diese ohne weitere Berechnungen direkt nutzen kann. Möglichkeiten dies zu bewerkstelligen wären entweder einfach einen schnelleren Prozessor oder einen Prozessor der über Fließkommaoperationen verfügt, zu verwenden. - 49 -
  • 50. Abbildungsverzeichnis Abbildungsverzeichnis Abbildung 1: Blockschaltbild des bestehenden Systems .................................. 7 Abbildung 2: Blockschaltbild des erweiterten Systems .................................... 8 Abbildung 3: Gumstix-Modul mit Erweiterungsboard ...................................... 9 Abbildung 4: Gabellichtschranke GP1A038RBK mit Impulsgeberscheibe...........10 Abbildung 5: Impulsfolgen der beiden Ausgänge der Gabellichtschranke mit Drehrichtungsumkehr..........................................................................11 Abbildung 6: Schaltplan der Gabellichtschranke............................................12 Abbildung 7: Infrarotsensor GP2D120 .........................................................13 Abbildung 8: Mikrocontroller-Platine: Vorderseite .........................................14 Abbildung 9: Mikrocontroller-Platine: Rückseite ............................................15 Abbildung 10: Sequentieller Programmablauf ...............................................17 Abbildung 11: Interruptgesteuerte Programmausführung mit zugehöriger Interrupt-Serviceroutine ......................................................................17 Abbildung 12: Programmablaufplan des Hauptprogramms .............................18 Abbildung 13: Zustände und Zustandsübergänge der ....................................20 Abbildung 14: Ausgangssignale der Gabellichtschranke und entsprechende Zustände der Finite State Machine ........................................................21 Abbildung 15: Programmablaufplan der FSM-Auswertung ..............................23 Abbildung 16: Programmablaufplan der ISR „Timer1_Overflow“ .....................24 Abbildung 17: Programmablaufplan der AD-Wandlung...................................25 Abbildung 18: Programmablaufplan der ISR „ADC_Interrupt“ .........................26 Abbildung 19: Programmablaufplan der Routine „Send_Checkquot; ......................28 Abbildung 20: Spannungs-Distanz-Kennlinie aus dem Datenblatt....................29 Abbildung 21: linearisierte Kennlinie ...........................................................30 Abbildung 22: Programmablaufplan des ACC-Systems...................................33 Abbildung 23: ACC-Regelungsalgorithmus ...................................................34 Abbildung 24: ACC-System auf höchster Ebene ............................................38 Abbildung 25: Die Unit „Distance“...............................................................39 Abbildung 26: Automat „Distance_Automaton“ .............................................40 - 50 -
  • 51. Abbildungsverzeichnis Abbildung 27: Automat Stufe 1 ..................................................................41 Abbildung 28: Zustandsübergänge der beiden Transitionen des Automaten der Stufe 1 ..............................................................................................41 Abbildung 29: Automat Stufe 2 ..................................................................41 Abbildung 30: Berechnung der Steigung m und des Achsenabschnittes t der Teilgeraden........................................................................................42 Abbildung 31: Die Unit „ACC“ .....................................................................43 Abbildung 32: Automat „ACC_Automaton“ und Zustand „ACC_off“ ..................43 Abbildung 33: Zustand „ACC_on“ (links) und Nothalt (rechts) ........................44 Abbildung 34: Zustand „dist_gt_emergency“................................................44 Abbildung 35: Zustand „dist_leq_safety“: ....................................................45 Abbildung 36: Zustand „dist_gt_safety“: Regelung der Wunschgeschwindigkeit45 - 51 -
  • 52. Literaturverzeichnis Literaturverzeichnis [1] http://www.gumstix.com/products.html [2] Sharp Corporation, Datasheet GP1A038RBK [3] Sharp Corporation, Datasheet GP2D120 [4] Atmel Corporation, Datasheet ATMega32 [5] http://193.196.117.23/projekte/rundheit/data/inkrementalgeber.pdf [6] http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial [7] http://www.mikrocontroller.net/articles/Drehgeber [8] http://homepage.hispeed.ch/peterfleury/group__pfleury__uart.html [9] S. Kugele, M. Tautschnig, A. Bauer, C. Schallhart, S. Merenda, W. Haberl, C. Kühnel, F. Müller, Z. Wang, D. Wild, S. Rittmann, and M. Wechs. COLA – The component language. Technical Report TUM-I0714, Technische Universität München, Sept. 2007 [10] http://members.inode.at/anton.zechner/az/Seriell.htm - 52 -