„Winkelmessung mit Ultraschall“

Werbung
„Winkelmessung mit Ultraschall“
Sebastian Thiel
Koblenz, 19 April 2006
Inhaltsverzeichnis
1 Einleitung
1
1.1
Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
1.2
Zielsetzung und Aufgaben . . . . . . . . . . . . . . . . . . . . . . .
2
2 Hardware
2.1
2.2
2.3
3
Ultraschallsender und Empfänger . . . . . . . . . . . . . . . . . . .
3
2.1.1
Ultraschall . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.1.2
Sender und Empfänger . . . . . . . . . . . . . . . . . . . . .
4
Atmel Mikrocontroller AT90S2313 . . . . . . . . . . . . . . . . . . .
5
2.2.1
Grundlagen und Aufbau . . . . . . . . . . . . . . . . . . . .
5
2.2.2
Eigenschaften und Komponenten . . . . . . . . . . . . . . .
6
Schaltungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.1
Versuchsboard . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.3.2
Empfängerschaltung . . . . . . . . . . . . . . . . . . . . . . 12
3 Entfernungsmessung
15
3.1
Theorie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
3.2
Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.3
Durchführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
3.4
Steuerprogramm des Mikrocontrollers . . . . . . . . . . . . . . . . . 18
I
INHALTSVERZEICHNIS
3.5
3.4.1
Senderoutine . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.4.2
Externe Interrupt Routine . . . . . . . . . . . . . . . . . . . 19
3.4.3
Timer Überlauf Behandlung . . . . . . . . . . . . . . . . . . 21
3.4.4
Das vollständige Programm . . . . . . . . . . . . . . . . . . 22
Auswertung der Messwerte . . . . . . . . . . . . . . . . . . . . . . . 24
3.5.1
Berechnung der Entfernung . . . . . . . . . . . . . . . . . . 24
3.5.2
Beurteilung der Messwerte . . . . . . . . . . . . . . . . . . . 25
3.5.3
Ergebnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
4 Winkelmessung
4.1
30
Theorien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.1.1
Erste Methode . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.1.2
Zweite Methode . . . . . . . . . . . . . . . . . . . . . . . . . 32
4.2
Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.3
Durchführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.4
Steuerprogramm des Mikrocontrollers . . . . . . . . . . . . . . . . . 39
4.5
Auswertung der Messwerte . . . . . . . . . . . . . . . . . . . . . . . 47
4.5.1
Berechnung der Winkel . . . . . . . . . . . . . . . . . . . . . 47
4.5.2
Beurteilung der Messwerte . . . . . . . . . . . . . . . . . . . 48
4.5.3
Ergebnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5 Beurteilung
52
6 Anhang
54
6.1
Anhang A: Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.1.1
6.2
Schaltung Versuchsboard . . . . . . . . . . . . . . . . . . . . 55
Anhang B: Winkelmessung . . . . . . . . . . . . . . . . . . . . . . . 56
6.2.1
Tabellen Abweichungen . . . . . . . . . . . . . . . . . . . . . 56
6.2.2
3d Plot Abweichungen . . . . . . . . . . . . . . . . . . . . . 60
II
Abbildungsverzeichnis
2.1
Ultraschallsender inklusive und exklusive Gehäuse . . . . . . . . . .
5
2.2
Ausbreitung der Schallwellen . . . . . . . . . . . . . . . . . . . . . .
5
2.3
AT90S2313 Architektur, Block Diagramm . . . . . . . . . . . . . .
7
2.4
AT90S2313 Schaltbild . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.5
L 293 D Operationsverstärker . . . . . . . . . . . . . . . . . . . . . 11
2.6
Programmierstecker . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.7
Schaltplan Empfängerschaltung . . . . . . . . . . . . . . . . . . . . 14
3.1
Aufbau Entfernungsmessung . . . . . . . . . . . . . . . . . . . . . . 17
3.2
Reale und gemessene Entfernungen . . . . . . . . . . . . . . . . . . 27
3.3
Messwerte mit überdeckender Funktion . . . . . . . . . . . . . . . . 28
3.4
Abweichungen in Relation zu den Messwerten . . . . . . . . . . . . 29
4.1
Skizze Winkelmessung mit einem Sender . . . . . . . . . . . . . . . 31
4.2
Skizze der Winkelmessung mit zwei Sendern . . . . . . . . . . . . . 32
4.3
Verhalten der Entfernungsdifferenz Delta t bei verschiedenen Entfernungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.4
Verhältnis zwischen Entfernung, Winkel und der Entfernungsdifferenz Delta t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.5
Abbildung der Entfernungsdifferenz . . . . . . . . . . . . . . . . . . 35
4.6
Skizze zur Formelentwicklung . . . . . . . . . . . . . . . . . . . . . 36
III
ABBILDUNGSVERZEICHNIS
4.7
Verhältnis zwischen Entfernung, Winkel und der Entfernungsdifferenz Delta t . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.8
Schrittmotor zur Winkelmessung . . . . . . . . . . . . . . . . . . . 38
4.9
Gemessene und tatsächliche Winkel bei 20 cm Entfernung
. . . . . 48
4.10 Säulendiagramm der Abweichungen vom Sollwert bei 30 cm Entfernung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6.1
Schaltplan Versuchsboard . . . . . . . . . . . . . . . . . . . . . . . 55
6.2
Plot der Winkelabweichungen . . . . . . . . . . . . . . . . . . . . . 60
IV
Tabellenverzeichnis
2.1
Komponenten des AT90S2313 . . . . . . . . . . . . . . . . . . . . .
8
3.1
Schallgeschwindigkeit in Abhängigkeit der Temperatur in Luft . . . 15
3.2
Reale und gemessene Entfernungen . . . . . . . . . . . . . . . . . . 26
6.1
Abweichungen der gemessenen Winkel von den tatsächlichen Winkeln in Grad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.2
Korrigierte Abweichungen der gemessenen Winkel von den tatsächlichen Winkeln in Grad . . . . . . . . . . . . . . . . . . . . . . . . . 58
V
Kapitel 1
Einleitung
1.1
Vorwort
In vielen Bereichen des täglichen Lebens ist es notwendig die Länge einer Strecke
messen zu können. Wenn wir im Alltag eine Strecke messen wollen, so benutzen wir
meist ein Lineal, ein Bandmaß oder einen Zollstock. Es gibt jedoch Situationen, in
denen es nicht möglich ist die Länge einer Strecke auf diese Weise zu bestimmen.
So besitzen viele Automobile seit einiger Zeit Einparkhilfen bzw. Rückfahrassistenten, welche die Entfernung zu einem Hindernis beim Rückwärtsfahren messen
und bei einer kritischen Entfernung ein Warnsignal auslösen. Ein anderes Beispiel
für eine sogenannte berührungslose Entfernungsmessung findet sich im Bereich
der Architektur. Dort gibt es Entfernungsmesser, welche mit Hilfe von Lasern die
Entfernung messen. In der Industrie finden sich noch viele weitere Beispiele wie,
die Messung des Füllstandes einer Flasche oder eines Tankes. Alle diese Beispiele
haben die Gemeinsamkeit, dass die Entfernung berührungslos gemessen werden
muss.
Nicht nur die Entfernung spielt in vielen Anwendungsfällen eine Rolle, sondern
auch die Lage zwischen zwei oder mehreren Objekten. Ein Rückfahrassistent für
1
1.2. ZIELSETZUNG UND AUFGABEN
einen PKW mit Anhänger benötigt den Einknickwinkel des Anhängers, um den
Fahrer sinnvoll unterstützen zu können.
Doch ist eine Entfernungs- bzw. Winkelmessung aus der Sichtweise der Informatik
mit einfachen Hilfsmitteln zu realisieren?
1.2
Zielsetzung und Aufgaben
Die Studienarbeit hat zwei Ziele. Zunächst soll gezeigt werden, ob und wie es möglich ist mit Hilfe von Ultraschall eine Entfernungsmessung zu realisieren. Daraufhin
soll unter Zuhilfenahme der Entfernungsmessung eine Winkelmessung durchgeführt werden. Die Grundidee ist, mit Hilfe eines Mikrocontrollers die Laufzeit der
Ultraschallwelle vom Sender bis zum Empfänger zu messen und daraus die Entfernung zu berechnen. Für die Realisierung werden ein Ultraschallempfänger, zwei
Ultraschallsender und ein Mikrocontroller, für die Bestimmung der Signallaufzeit,
verwendet.
Die dazu benötigten Schaltungen sind zu entwerfen und aufzubauen, sowie die Programme für die Steuerung und Auswertung zu entwickeln und zu implementieren.
Abschließend sind die Ergebnisse auszuwerten und zu beurteilen.
2
Kapitel 2
Hardware
2.1
2.1.1
Ultraschallsender und Empfänger
Ultraschall
Mit Schall wird im alltäglichen Leben ein Geräusch, Klang oder ein Ton verbunden. Physikalisch gesehen ist der Schall eine Welle. Der Mensch kann Schallwellen
mit einer Frequenz im Bereich von 16 Hz bis 20.000 Hz wahrnehmen (Hörschall).
Bei Frequenzen von weniger als 16 Hz wird von Infraschall und ab 20.000 Hz von
Ultraschall gesprochen.
Schall breitet sich in Luft als Longitudinalwelle mit einer Geschwindigkeit von 343
m/s bei einer Temperatur von 20◦ C aus.
Die Schallgeschwindigkeit, die Frequenz f und die Wellenlänge λ stehen wie folgt
in Beziehung:
λ=
c
f
(2.1)
Für die Erzeugung von Ultraschall eignen sich Schwingquarze, welche durch Umkehr des Piezo-Effekts zu Schwingungen angeregt werden. An einen solchen Quarz
3
2.1. ULTRASCHALLSENDER UND EMPFÄNGER
wird eine Wechselspannung mit der gewünschten Frequenz des Ultraschallsignals
angelegt.
Für weitere Informationen zum Thema Schall wird auf die Internet Seite Wikipedia
[Wiki] und das Standardwerk von Paul A. Tipler [Tipl] verwiesen.
2.1.2
Sender und Empfänger
In den Versuchen werden Ultraschallsender und Empfänger aus dem Sortiment der
Firma Reichelt Elektronik1 verwendet. Der eigentliche Hersteller der Bauteile ist
unbekannt.
Der Sender erzeugt ein Ultraschallsignal mit einer Frequenz von 40 kHz und erreicht dabei eine Lautstärke von 120 dB. Laut Datenblatt soll der Sender nicht mit
einer Spannung von über 20 Volt permanent betrieben werden. Die Spannung wird
an zwei Pins auf der Rückseite des Senders angelegt. Die durch den Piezo-Effekt
erzeugte Spannung liegt beim Empfänger an zwei Pins auf der Rückseite an.
Abbildung 2.1 zeigt den Aufbau der Bauteile, wobei Sender und Empfänger optisch identisch aufgebaut sind. In der linken Bildhälfte ist ein Sender inklusive
Aluminiumgehäuse abgebildet, in der rechten Bildhälfte wurde das Gehäuse entfernt. Sender und Empfänger haben eine sehr starke Richtcharakteristik. Wie in
Abbildung 2.2 zu sehen ist, beträgt der Öffnungswinkel des Senders (bei -6dB) ca.
55◦ .
Die Richtcharakteristik ist für die Entfernungsmessung sehr gut geeignet. Für die
Winkelmessung wird das Aluminiumgehäuse entfernt, damit der Sender Ultraschallwellen in einem größeren Winkelbereich ausstrahlt.
Weitere Informationen zu Sender und Empfänger können dem Datenblatt auf der
Seite der Firma Reichelt1 entnommen werden.
1
http://www.reichelt.de, 10.04.2006
4
2.2. ATMEL MIKROCONTROLLER AT90S2313
Abbildung 2.1: Ultraschallsender inklusive und exklusive Gehäuse
Abbildung 2.2: Ausbreitung der Schallwellen
2.2
2.2.1
Atmel Mikrocontroller AT90S2313
Grundlagen und Aufbau
Zur Realisierung der Entfernungsmessung als auch zur Winkelmessung wurde der
Mikrocontroller AT90S2313 aus der AVR Familie der Firma Atmel verwendet. Der
5
2.2. ATMEL MIKROCONTROLLER AT90S2313
Controller ist ein in CMOS gefertigter 8 Bit Mikrocontroller der alle benötigten
Funktionen, die für die Realisierung der Entfernungs- und Winkelmessung benötigt werden, zur Verfügung stellt.
Der Atmel AT90S2313 ist ein RISC Controller. RISC ist eine Abkürzung für Reduced Instruction Set Computing, zu Deutsch Prozessor mit reduzierten Befehlssatz.
Ein RISC Prozessor verzichtet zugunsten einer höheren Ausführungsgeschwindigkeit auf komplexere Befehle. Es ist jedoch durch geschickte Programmierung möglich, alle komplexen Befehle des CISC (Complex Instruction Set Computing) Befehlssatzes zu erzeugen und zu verwenden.
Die Architektur des Mikrocontrollers ist in Form eines Block Diagramms in Abbildung 2.3 dargestellt. Auf die genaue Funktionsweise und den Aufbau des Controllers soll hier nicht näher eingegangen werden. Für ausführliche Informationen
wird an dieser Stelle auf das Datenblatt der Firma Atmel2 verwiesen.
2.2.2
Eigenschaften und Komponenten
Im Folgenden wird kurz auf die Grundelemente des Mikrocontrollers, wie Speicher,
Register, UART und Anschlüsse, eingegangen.
Die wichtigsten Zahlen und Fakten des Atmel sind in der Tabelle 2.1 dargestellt.
Der Mikrocontroller verfügt über einen 2k Byte großen Flash Speicher, der vom
Anwender frei programmiert und elektronisch gelöscht werden kann.
Der 128 Byte große Schreib-/Lesespeicher des Controllers wird als statisches RAM
(SRAM) bezeichnet. Nach Abschalten der Versorgungsspannung sind alle Daten
in diesem Speicher gelöscht.
Die 32 8 Bit großen Register des AT90S2313 sind direkt mit der Arithmetic Logic
Unit (ALU) verbunden. Als Programmierungsvereinfachung ist es möglich jedem
Register einen Namen zuzuordnen.
2
http://www.atmel.com, 10.04.2006
6
2.2. ATMEL MIKROCONTROLLER AT90S2313
Abbildung 2.3: AT90S2313 Architektur, Block Diagramm
Auf die weiteren Eigenschaften, wie die Aufteilung der Register in die Bereiche von
R0 bis R15, R16 bis R31 und auf die Registerpaare R26 - R27, R28 - R29 und R30
- R31, welche als Doppelregister benutzt werden können, wird hier nicht weiter
eingegangen. Für weitere Informationen verweise ich wieder auf das Datenblatt
der Firma Atmel3 .
Für die Datenübertragung verfügt der AT90S2313 über einen Hardware Universal Asynchronous Receiver/Transmitter (UART). Der UART ist voll duplex fähig,
so dass gleichzeitig Daten gesendet und empfangen werden können. Bei der Datenübertragung zwischen Mikrocontroller und PC, über die serielle Schnittstelle
(RS232), gibt es folgendes Problem:
3
http://www.atmel.com, 10.04.2006
7
2.2. ATMEL MIKROCONTROLLER AT90S2313
Komponente
Anzahl/Größe
Programmierbarer Flash Speicher
2k Byte
EEPROM
128 Byte
SRAM
128 Byte
Assembler Befehle
118
Register
32
I/O Ports
15
Power Save Modi
2
8 Bit Timer
1
16 Bit Timer
1
Voll Duplex UART
1
Serielles SPI Interface
1
Analog Comperator
1
Interner und externer Interrupt
n
Tabelle 2.1: Komponenten des AT90S2313
Der UART sendet bzw. erwartet TTL-Pegel (0 bis 5V), wohingegen auf Seite
des PC ein RS232-Pegel von -12V bis +12V benötigt wird. Zur Umwandlung der
Pegel wird ein MAX232 Baustein verwendet, der in der Lage ist mit einer Spannungsversorgung von 5V die angesprochene Pegel-Umwandlung vorzunehmen. Der
Anschluss des MAX IC an den Atmel und an die RS232 Schnittstelle wird in Abschnitt 2.3.1 beschrieben.
Bei der Beschreibung der Pin-Belegung des Mikrocontrollers musss zwischen den
fest definierten und den frei wählbaren Pins unterschieden werden. In Abbildung
2.4 sind alle Anschlüsse dargestellt.
8
2.2. ATMEL MIKROCONTROLLER AT90S2313
• Fest definierte Pins:
VCC 5V Versorgungsspannung
GND Masse
SCK, MISO, MOSI, RESET Pins für die Programmierung
RXD, TXD UART Ein-/Ausgangs-Pins
XTAL1, XTAL2 Anschlusspins für einen externen Quarz (hier ein 4 MHz
Quarz)
INT0, INT1 Externer Interrupt
• Frei wählbare Pins:
Port B, 0 bis 7 Ein- und/oder Ausgabe
Port D, 0 bis 6 Ein- und/oder Ausgabe
Abbildung 2.4: AT90S2313 Schaltbild
Port B und Port D sind bidirektionale Input/Output Ports. Port B hat eine Breite
von 8 Bits und Port D eine von 7 Bits. Jedes Bit kann einzeln gesetzt, abgefragt
und verändert werden. Zusätzlich ist jedes Bit mit einem optional zuschaltbaren
internen Pull Up Widerstand ausgestattet.
9
2.3. SCHALTUNGEN
2.3
2.3.1
Schaltungen
Versuchsboard
Für die Verwendung des Mikrocontrollers, die Datenübertragung zum PC, die Ansteuerung eines Schrittmotors, der für die Winkelmessung benötigt wird und für
die Ansteuerung der Sender war es notwendig eine Schaltung zu entwerfen, welche
all diese Aufgaben abdeckt. Für die Versuche habe ich diese Schaltung mit Hilfe von GRS-Boxen4 und einem bei Ebay5 erworbenen AVR Experimentierboard
aufgebaut. Der Hersteller des Boards ist unbekannt und es existieren keine Dokumentationen. Aus diesem Grund und aus Gründen der Übersichtlichkeit habe
ich die Schaltung mit einem Layout Tool auf einer Platine zusammengefasst. Der
Schaltplan ist in Abbildung 6.1 dargestellt.
Für die Schaltung werden ein Atmel AT90S2313, ein MAX232 Baustein, zwei
L293D Operationsverstärker, drei Festspannungsregler (+5V, +8V und +12V),
eine RS232 Buchse, ein 10 poliger Wannenstecker, ein 4 MHz Quarz und diverse
Kondensatoren verwendet.
Der MAX232 wird, wie in Abschnitt 2.2.2 beschrieben, für die Kommunikation
des Mikrocontrollers mit dem PC benötigt und ist am Atmel an den Pins RXD
und TXD angeschlossen. Der Anschluss an die RS232 Buchse kann dem Schaltplan
6.1 entnommen werden. Für den Betrieb benötigt das IC noch einen Masse- und
Spannungsanschluss, sowie vier Kondensatoren mit einer Kapazität von 100nF.
Die im Schaltplan als IC4 und IC5 bezeichneten Bausteine sind Operationsverstärker. Mit Hilfe des L293D ist es möglich, mit einem TTL Pegel von 5V, eine
Ausgangsspannung von bis zu 36V zu schalten. In einem IC sind je vier Operationsverstärker enthalten. Abbildung 2.5 zeigt den Aufbau des Bausteins. Als
4
5
http://www.grs-kg.de, 10.04.2006
http://www.ebay.de, 10.04.2006
10
2.3. SCHALTUNGEN
Versorgungsspannung muss an Pin 16 eine Spannung von +5V angelegt werden.
An die Pins 4, 5 und 12, 13 wird Masse angelegt.
Die Eingänge EN (enable) aktivieren bei Anschluss von 5V je zwei Operationsverstärker. Die Spannung, die geschaltet werden soll, wird an Pin 8 angelegt. Die
Eingänge Ai sind mit TTL Pegel anzusteueren und an den Ausgängen Yi wird die
an Pin 8 angelegte Spannung durchgeschaltet.
Der Einsatz der L293D Bausteine war notwendig, da die Ultraschallsender mit einer Spannung von 8V und die Spulen des Schrittmotors mit einer Spannung von
12V angesteuert werden müssen. Der Atmel liefert an den Ausgängen „nur“ TTLPegel.
Das Versuchsboard wird an eine 12V Gleichspannungsquelle angeschlossen. Die
Abbildung 2.5: L 293 D Operationsverstärker
benötigten Spannungen von 5V, 8V und 12V werden durch die drei Festspannungsregler bereitgestellt. Die Kondensatoren vor und nach den Festspannungsreglern
sind Glättungskondensatoren.
An die Eingänge XTAL1 und XTAL2 des Atmel ist ein externer Quarz mit einer
Frequenz von 4 MHz angeschlossen, so dass der Mikrocontroller 4 Millionen Eintaktoperationen pro Sekunde ausführt.
Der im Schaltplan als 057-010-1 bezeichnete 10 polige Wannenstecker dient der
Programmierung des Atmel. Der dazu benötigte Programmierstecker ist in Ab11
2.3. SCHALTUNGEN
bildung 2.6 dargestellt. Er besteht aus einer 10 poligen Pfostenbuchse mit Flachbandkabel, drei 220Ω Widerständen und einem 25 poligen SUB-D Stecker.
Abbildung 2.6: Programmierstecker
2.3.2
Empfängerschaltung
Für die Messungen ist der Aufbau der Empfängerschaltung von großer Bedeutung.
Selbst wenn der Sender keine Signale aussendet kann der Ultraschallempfänger
durch den Piezo-Effekt eine Spannung an seinen Pins erzeugen. Der Grund hierfür
sind die verschiedenen Schall- und elektromagnetischen Wellen in der Umgebung
des Empfängers. Eine zu geringe Verstärkung hätte zur Folge, dass nicht alle Signale erkannt werden, wogegen eine zu große Verstärkung, aufgrund der vielen
Störsignale, die Erkennung eines Signals fast unmöglich machen würde. Daher gilt
es einen Mittelweg in der Empfindlichkeit (Verstärkung) der Schaltung zu finden.
Für die Messungen verwende ich eine Verstärkung des Signals um den Faktor 1000.
Die wichtigsten Bauteile der Schaltung (Abb. 2.7) sind zwei Operationsverstärker
(LM385) und ein Komperator (LM311).
Der vordere Teil der Schaltung besteht aus einer zweistufigen Standard-Verstärkerschaltung, welche durch die beiden Operationsverstärker, inkl. der zugehörigen
Widerstände für die Gegenkopplung, realisiert ist.
Allgemein berechnet sich die Größe der Verstärkung bei einer derartigen Schaltung
12
2.3. SCHALTUNGEN
aus dem Verhältnis der Widerstände der Gegenkopplung.
In der ersten Stufe der Schaltung ist das Verhältnis von Widerstand R3 (100k)
und R2 (10k) gleich 10, was einer Verstärkung um den Faktor 10 entspricht. In
der zweiten Stufe ist das Verhältnis der Widerstände R5 (100k) und R4 (1k) gleich
100. Damit ergibt sich eine Gesamtverstärkung um den Faktor 1000.
Empfängt der Empfänger kein Signal und im Idealfall auch keine Störrungen, so
liegt nach der Verstärkerschaltung eine Spannung von 2,5V (U/2) an.
Der zweite Teil der Schaltung besteht aus einem Komparator. Dieser vergleicht
zwei Eingangsspannungen und erzeugt am Ausgang einen TTL Pegel. Empfängt
die Schaltung kein Signal liefert der Komparator +5V, wogegen nach einem empfangenen Signal am Ausgang 0V anliegen. Der Komparator ist einmal direkt mit
dem Ausgang der Verstärkerschaltung verbunden (+ve, Pin 2) und einmal über
den Widerstand R1 und R8 (-ve, Pin 3) mit diesem Ausgang. Durch die beiden
Widerstände R1 und R8 wird der Kondensator C3 langsam aufgeladen, so dass
sich über die Zeit an den Kondensatorplatten ein Mittelwert der Eingangsspannung bildet. Durch den Widerstand R9 (1M), der mit Masse verbunden ist, wird
diese Spannung um einen Wert verringert. Damit liegt am -ve Eingang eine
Spannung von etwas weniger als 2.5V an. Dies ist notwendig, da der oben beschriebene Idealfall ohne Störungen nie eintreten wird. Somit wird am Ende der
Verstärkerschaltung immer ein Signal anliegen, welches um den Mittelwert von
2,5V schwankt. Überschreitet das verstärkte Signal am +ve Eingang den Pegel
von 2,5V - , so schaltet der Komparator am Ausgang auf 5V. Unterschreitet das
Signal diesen Pegel wieder, so schaltet der Komparator auf 0V am Ausgang.
Für weitere Informationen zu Verstärkerschaltungen mit Operationsverstärkern
und Komparatoren wird das Buch von Nührmann empfohlen. [Nueh]
13
2.3. SCHALTUNGEN
Abbildung 2.7: Schaltplan Empfängerschaltung
14
Kapitel 3
Entfernungsmessung
3.1
Theorie
Die Idee ist, mit Hilfe des AT90S2313, die Signallaufzeit der Ultraschallwelle vom
Sender bis zum Empfänger zu messen und daraus die Entfernung zu berechnen.
Wie in Abschnitt 2.1.1 bereits erwähnt, ist die Ausbreitungsgeschwindigkeit von
Ultraschallwellen in 20◦ C warmer Luft 343 m/s.
In der Tabelle 3.1 sind die Ausbreitungsgeschwindigkeiten von Ultraschall in Abin ◦ C
0
10
15
20
30
c in m/s
331
337
340
343
349
Tabelle 3.1: Schallgeschwindigkeit in Abhängigkeit der Temperatur in Luft
hängigkeit der Umgebungstemperatur in Luft dargestellt. Allgemein berechnet sich
die Schallgeschwindigkeit in trockener Luft nach Formel 3.1, wobei T die Temperatur in ◦ C ist.
m
cT = 331 ∗
s
r
T
273K
(3.1)
Somit ist mit Kenntnis von der Temperatur und der Laufzeit eine Bestimmung der
Entfernung möglich. In Formel 3.2 ist dieser Zusammenhang dargestellt, wobei sU
15
3.2. AUFBAU
die Strecke in Metern und t die Zeit in Sekunden ist.
r
T
m
sU = (331 ∗
)∗t
s
273K
(3.2)
Da ich alle Versuche in beheizten Räumen durchgeführt habe, verwende ich in
allen folgenden Berechnungen eine Schallgeschwindigkeit von 343 m/s.
3.2
Aufbau
Für den Versuchsaufbau wurde die Versuchsschaltung je ein Ultraschallsender und
Empfänger sowie eine optische Bank aus dem Institut für Physik verwendet. Der
Vorteil der opt. Bank ist die Möglichkeit der zentimetergenauen Einstellung des
Abstandes zwischen Sender und Empfänger durch die aufgedruckte Skala. Sender
und Empfänger sind je auf einem, zur optischen Bank passenden, Fuß befestigt.
Abbildung 3.1 zeigt den Versuchsaufbau. Auf der linken Seite befindet sich der
Sender, auf der Rechten der Empfänger inkl. Empfängerschaltung. Die Skala ist in
weißer Schrift auf der optischen Bank zu erkennen.
3.3
Durchführung
Um die Entfernung mit Hilfe der Signallaufzeit der Ultraschallwelle vom Sender
zum Empfänger zu messen und daraus den zurückgelegten Weg zu berechnen, muss
der AT90S2313 den Sender ansteuern, die Zeit messen und auf ein Signal der Empfängerschaltung reagieren. Wie Sender und Empfänger mit dem Atmel verbunden
sind wird in Abschnitt 2.3.1 beschrieben.
Bevor im Folgenden das Assemblerprogramm für die Steuerung des Mikrocontrollers detailiert beschrieben wird, möchte ich die Funktionalität des Programms kurz
beschreiben.
Der Pin PD2 des Controllers wird als Eingang inkl. Pull Up Widerstand, Pin PB2
16
3.3. DURCHFÜHRUNG
Abbildung 3.1: Aufbau Entfernungsmessung
und PB3 werden als Ausgangsport definiert. Pin PD2 ist einer der beiden externen
Interrupt Ports des AT90S2313. Es wird ein Interrupt ausgelöst, sobald an diesem
Pin ein Wechsel der Eingangsspannung von 0V nach 5V erfolgt (steigende Flanke).
Für die Zeitmessung wird der 16Bit Timer des Controllers gestartet. Direkt im
Anschluß beginnt die Ansteuerung des Senders. An Pin PB2 wird 25µs lang eine
Spannung von 5V angelegt und an PB3 eine Spannung von 0V. Nach dieser Zeit
werden die beiden Spannungen vertauscht. Somit erhält man eine Sendefrequenz
von 40KHz. Im Ganzen werden neun solcher Impulse gesendet. Empfängt der Empfänger nun einen solchen Impuls, wird der Externe Interrupt ausgelöst, der 16 Bit
Timer gestoppt und der Wert des Timers mit Hilfe des UART zur Auswertung an
einen PC übertragen.
Damit nicht nur eine Messung erfolgt wird der 8 Bit Timer dazu verwendet alle
10ms eine neue Messung anzustoßen. Somit werden pro Sekunde 100 Messungen
durchgeführt.
17
3.4. STEUERPROGRAMM DES MIKROCONTROLLERS
Für die Entfernungsmessung habe ich mich auf einen Bereich von 10 bis 100 cm
festgelegt. Unterhalb von 10 cm ist eine Messung aufgrund der zu hohen Empfindlichkeit des Empfängers bei einer verwendeten Sendespannung von 8V nicht mehr
möglich.
Beginnend bei 10 cm habe ich alle 5cm 100 Messwerte aufgenommen.
3.4
Steuerprogramm des Mikrocontrollers
In diesem Abschnitt wird das Assemblerprogramm für den AT90S2313 erläutert. Zuerst werden die Senderoutine, die Externe-Interruptroutine und die TimerÜberlaufroutine erläutert, bevor der komplette Code vorgestellt und beschrieben
wird.
3.4.1
Senderoutine
In der Senderoutine wird der Ultraschallsender mit einer Frequenz von 40KHz
angesteuert. Der Quelltext sieht wie folgt aus:
;#### Senden ########
sender: dec warten
BRNE signal1
cbi PORTB,2 ;Port B2 0
cbi PORTB,3 ;Port B3 0
ldi warten,0b00001010 ;Anzahl der Perioden des Senders
ret
signal1:
sbi PORTB,3 ;Port B3 1
cbi PORTB,2 ;Port B2 0
signal: INC R1
CPSE Sendezeit,R1 ;Zeit die der Sender sendet (entspricht 40Khz)
rjmp signal
mov R1,null
cbi PORTB,3 ;Port B3 0
sbi PORTB,2 ;Port B2 1
18
3.4. STEUERPROGRAMM DES MIKROCONTROLLERS
sneu:
INC R1
CPSE Sendezeit,R1 ;Zeit die der Sender sendet (entspricht 40Khz)
rjmp sneu
mov R1,null
rjmp sender
Die Variable warten fungiert als Zähler und sendet bei Aufruf der Routine
neuen Ultraschall-Impulse. Dazu wird sie vor betreten der Routine auf den Wert
zehn gesetzt. Beim Betreten der Routine wird warten dekrementiert und solange
die Variable ungleich null ist zur Markierung signal1 gesprungen. Pin PB2 wird auf
Null und Pin PB3 wird auf Eins gesetzt, so dass am Ausgang an PB2 0V und an
PB3 5V anliegen. Die folgenden vier Zeilen Code sind eine Warteschleife. Register
R1 wird als Zählvariable genutzt und mit dem Wert von Sendezeit verglichen.
In der Variablen Sendezeit ist aus folgendem Grunde der Wert elf gespeichert.
Der Atmel ist mit 4MHz getaktet, das heißt er braucht für die Ausführung einer
einzelnen Operation 250ns. Somit benötigt der Controller für 50 Operationen eine
Zeit von 12, 5µs, was einer Frequenz von 80KHz entspricht. Der Befehl inc benötigt
einen Prozessortakt, CPSE ebenfalls und rjmp benötigt zwei Takte. Wird die
Schleife elf mal durchlaufen, entspricht dies 44 Operationen. Wenn der Inhalt des
Registers R1 gleich sendezeit ist braucht der Befehl CPSE zwei Takte und der
Befehl mov benötigt noch einmal einen Takt. Nach der Warteschleife invertieren
die beiden nächsten Zeilen Code (vier Takte) die Ausgänge PB2 und PB3. Es folgt
eine zweite Warteschleife mit einer erneuten Verzögerung von 12, 5µs. Somit wird
der Sender mit einer Frequenz von 40KHz angesteuert.
3.4.2
Externe Interrupt Routine
Sobald am Pin PD2 das Inputsignal von 0V auf 5V wechselt, wird ein Externer
Interrupt ausgelöst und die folgende Interrupt Service Routine betreten. Innerhalb
19
3.4. STEUERPROGRAMM DES MIKROCONTROLLERS
dieser Routine wird der 16Bit Timer gestoppt und die Werte des Timers über die
UART an den PC übertragen.
;#### Externe Interrupt 0 Behandlung #####
INT0_beh:
out TCCR1B,tstop
;16Bit Timer wird gestoppt
cbi PORTB,2
;Port B2 0
cbi PORTB,3
;Port B3 0 /Ultraschallsender deaktivieren
out GIMSK, null
;Externer Interrupt deaktivieren
cli
IN r25,TCNT1L
IN ausgabe,TCNT1H
;Unteren 8Bit des Timers in R25 laden
;Oberen 8Bit des Timers in ausgabe laden
;Werte werden ausgegeben
rcall serout
MOV ausgabe, R25
rcall serout
out TCNT1H,tstop
out TCNT1l,tstop
;Timer auf Null setzen
;Timer auf Null setzen
ldi temp,0b11000000 ;InterruptFlag rücksetzen
out GIFR, temp
reti
Der 16Bit Timer wird vor dem Starten der Senderoutine gestartet. Sobald
ein Signal vom Empfänger gemessen wurde, wird die Externe Interrupt Service
Routine aufgerufen. Der erste Befehl dort ist das Stoppen des 16Bit Timers. Bei
kurzen Entfernungen kann es vorkommen, dass der Sender noch immer sendet.
Die nächsten beiden Befehle deaktivieren den Sender. Der Befehl out GIMSK, null
deaktiviert den Externen Interrupt, so dass nach Verlassen der Routine erst wieder
gesendet werden muss, bevor die Interruptroutine wieder aufgerufen werden kann.
Im weiteren Verlauf werden die Registerwerte des 16 Bit Timers (erst die unteren
8 Bit und dann die oberen) über die UART ausgegeben und der Timer auf Null
zurückgesetzt. Die beiden vorletzten Befehle setzen die Externen Interruptflags
des Controllers zurück. reti springt an die Stelle zurück an welcher der Interrupt
aufgetreten ist.
20
3.4. STEUERPROGRAMM DES MIKROCONTROLLERS
3.4.3
Timer Überlauf Behandlung
Wie bereits beschrieben, wird der 8 Bit Timer des Atmel dazu verwendet 100
Messungen pro Sekunde durchzuführen. Der Timer ist so eingestellt, dass 1024
Takte des Controllers den Timer um eins inkrementieren. 1024 Takte entsprechen
einer Zeit von 256µs. Das Timerregister TCNTO wird auf den Wert 215 gesetzt.
Erreicht das Register den Wert 255, so wird der Timer Überlauf Interrupt ausgelöst
und die Interrupt-Routine betreten. Es vergehen 40 ∗ 1024 Takte, was einer Zeit
von 0,01024 Sekunden entspricht, bis das Timerregister den Wert 255 erreicht hat.
Somit werden ca. 100 Messungen pro Sekunde durchgeführt. In der eigentlichen
Timer-Überlauf-Routine geschieht folgendes:
;#### Timer Ueberlauf Interrupt Behandlung ####
senden: ldi temp,215
;TCNT0 auf 215 setzen damit alle 10 ms
out TCNT0,temp
;gesendet wird
out TCCR1B,tstart
;16 Bit Timer Start
ldi temp,0b11000000 ;InterruptFlag rücksetzen
out GIFR, temp
ldi temp, (1<<INT0)|(1<<INT1) ;Interrupt PortD2 und PortD3 aktivieren
out GIMSK, temp
;Externe Interrupts aktivieren
sei
;Interrupt Global aktivieren
Rcall sender
;Senderoutine aufrufen
reti
Das 8 Bit Timerregister wird wieder auf den Wert 215 gesetzt. Der 16 Bit
Timer für die Laufzeitmessung wird gestartet. Sollten aus irgendeinem Grund die
Externen Interruptflags gesetzt sein, so werden diese mit Hilfe des 4. und 5. Befehls
der Routine zurückgesetzt. Im Anschluss werden die Externen Interrupts aktiviert
und der Globale Interrupt des Atmel mit dem Befehl sei aktiviert. Rcall sender ruft
die Senderoutine auf, so dass wieder neun Ultraschallimpulse gesendet werden. Mit
reti wird an die Stelle zurück gesprungen, an welcher der Timer Überlauf Interrupt
ausgelöst wurde.
21
3.4. STEUERPROGRAMM DES MIKROCONTROLLERS
3.4.4
Das vollständige Programm
Das Programm zur Entfernungsmessung startet mit dem Einbinden der 2313 Definitionsdatei. In dieser Datei werden allen Registern Namen gegeben, so dass man
als Programmierer einfacher auf sie zugreifen kann. In den Zeilen 2 und 3 werden den Registern R16-R22 aus dem gleichen Grund natürlichsprachliche Namen
gegeben. In den nächsten sechs Zeilen wird vermerkt an welche Stelle der Controller springen soll, wenn ein Reset ausgelöst wird, ein Externer-Interrupt oder
ein Timer-Interrupt auftritt. Die Zeilen 12 bis 64 enthalten Initialisierungen und
Definitionen. So wird z.B. der Stack initialisiert, die Baudrate der UART eingestellt, 16 Bit und 8 Bit Timer initialisiert, das Register des 8 Bit Timers auf den
Wert 215 gesetzt und gestartet, PORTB als Ausgang und PORTD als Eingang
definiert, sowie die Interrupt Konfiguration vorgenommen. Nach diesem einmaligen Initialisierungsblock läuft der Controller in einer Endlosschleife (Zeile 66). Die
Funktionalität der Routinen Senden, Externer-Interrupt und Timer-Interrupt sind
in den vorherigen Abschnitten bereits beschrieben. Die Routine „Ausgabe UART“
gibt den Inhalt des Register mit dem Namen ausgabe mit Hilfe der UART an den
PC aus.
Der Controller befindet sich so lange in der Endlosschleife bis der 8Bit Timer den
Wert 255 enthält und um eins inkrementiert wird. Somit wird ein Timer-ÜberlaufInterrupt ausgelöst und die entsprechende Routine (Zeile 72) aufgerufen. Diese
Routine ruft wiederum die Senderoutine (Zeile 70) auf. Je nach Abstand des Empfängers zum Sender wird die Senderoutine schon während ihrer Ausführung durch
einen Externen-Interrupt unterbrochen und die Externe-Interrupt-Routine wird
aufgerufen (Zeile 71). In dieser Routine werden wie beschrieben die Registerwerte
des 16Bit Timers mit Hilfe der UART an den PC übertragen (Zeile 73). Da innerhalb der Externen-Interrupt-Behandlungsroutine alle Interrupts deaktiviert werden, kann die Senderoutine ohne Auswirkungen auf den Empfänger bis zum Ende
22
3.4. STEUERPROGRAMM DES MIKROCONTROLLERS
weiter laufen. Nach Abarbeitung aller Routinen springt das Programm wieder in
die Zeile 66 und der Controller ist bis zum nächsten Timer-Überlauf-Interrupt in
einer Endlosschleife.
000
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
.include "2313def.inc"
.def temp=r16 .def sendezeit=r17 .def null=r18 .def warten=r19
tstart=r20 .def tstop=r21 .def ausgabe=r22
.org 0x0000
rjmp main
.org INT0addr
rjmp INT0_beh
.org OVF0addr
rjmp senden
.def
;Reset Behandlung
;Interrupt Service Routine 1
;Timer Überlauf Service Routine
; ###### Hauptprogramm #############
main:
ldi temp,RAMEND
out SPL,temp
;##### UART
ldi
out
sbi
;Stack initialisieren
initialisieren ####
temp,25
;Baudrate 9600 einstellen
UBRR,temp
UCR,TXEN
;TX aktivieren
;#### 16 BitTimer initialisieren #####
ldi temp,0x00
;16 Bit Timer initialisieren Teil 1
out TCCR1A, temp
;#### Port B als Ausgang definieren ###
ldi temp,0xFF
;Port B als Ausgang definieren
out DDRB,temp
;#### Port D als Eingfang definieren ###
ldi temp, 0x00
out DDRD,temp
ldi temp,0xff
;Pull Ups setzen für den Empfaenger
out PortD,temp
;#### Externer Interrupt konfigurieren ######
ldi temp,(1<<isc01)|(1<<isc00)|(1<<isc10)|(1<<isc11)
out
;#### Timer
ldi
out
MCUCR,temp
Overflow Interrupt konfigurieren #####
temp,(1<<TOV0)
TIMSK,temp
23
;Beim wechsel von 0 nach 1
3.5. AUSWERTUNG DER MESSWERTE
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
sei ;Glogal Interrupt aktivieren
;#### Einstellung der Hertz Zahl des Senders ##########
ldi sendezeit,0b0001011
;#### Belegung von Hilfsregistern #####
ldi tstart, 0b00000001;Für den Start des Timers
ldi tstop, 0b00000000 ;Für den Stop des Timers
ldi null,0x00
; Zum Löschen von Registern
ldi warten,0b00001010 ;Anzahl der Perioden des Senders
;### 8 Bit Timer initialisieren #####
ldi
out
ldi
out
wait:
temp,215;
;### Auf 215 setzen damit alles 10 ms gesendet wird
TCNT0,temp
temp,(1<<CS02)|(0<<CS01)|(1<<CS00) ;## 1024 Takte pro Timerschritt
TCCR0,temp
rjmp wait
; #### Ende Hauptprogramm #########
;#### Senden ########
;#### Externe Interrupt 0 Behandlung #####
;#### Timer Ueberlauf Interrupt Behandlung ####
;#############Ausgabe an der UART######################
serout:
sbis USR,UDRE ;Warten, bis UDR für das nächste Byte bereit ist
rjmp serout
out UDR, ausgabe
ret
3.5
3.5.1
Auswertung der Messwerte
Berechnung der Entfernung
Die Auswertung der vom Mikrocontroller gemessenen Laufzeiten erfolgt auf einem
PC. Bei jeder Messung wird der Inhalt des 16 Bit Registers per UART an den PC
übertragen. Die von mir verwendeten Programme für die Auswertung werden im
24
3.5. AUSWERTUNG DER MESSWERTE
Weiteren nicht genauer beschrieben.
Der 16 Bit Timer des Atmel speichert die Anzahl der ausgeführten Takte des Controllers, vom Aussenden des Signals bis zum Empfang als Hex Wert. Somit ist es
notwendig, bevor eine Aussage über die Entfernung gemacht werden kann, die Hex
Werte in Dezimal Werte umzurechnen. So erhält man nach der Umrechnung die
Anzahl der vom Atmel ausgeführten Takte. Für einen Takt benötigt der Mikrocontroller eine Zeit von 2.5 ∗ 10−7 Sekunden.
Formel 3.3 gibt die benötigte Signallaufzeit der Ultraschallwelle in Sekunden an.
Lauf zeit = Registerwert(Dezimal) ∗ 2.5 ∗ 10−7
(3.3)
Wie in Abschnitt 3.1 beschrieben ergibt sich die Entfernung in Zentimeter nun aus
folgender Formel 3.4:
Entf ernung = Lauf zeit ∗ 343m/s ∗ 100
3.5.2
(3.4)
Beurteilung der Messwerte
Wie in Abschnitt 3.3 beschrieben beträgt der Messbereich für die Entfernungsmessung 90cm (10cm bis 100cm) groß, wobei alle 5cm 100 Messwerte aufgezeichnet
wurden. Die reale Entfernung und der Mittelwert der 100 Messwerte je Entfernung
ist in Tabelle 3.2 eingetragen. Alle 1900 Messwerte an dieser Stelle abzudrucken
wäre zu platzaufwendig und würde zum Verständnis nicht weiter beitragen.
Auf den ersten Blick fällt auf, dass die gemessenen Werte stets zu groß sind.
In der grafischen Darstellung ist dies auch sichtbar. Abbildung 3.2 zeigt die Werte
der Tabelle in grafischer Form. Die gemessene Entfernung ist auf der X - Achse
und die tatsächliche Entfernung auf der Y - Achse abgetragen. Die Messwerte sind
auf der Kurve mit einem Kreis markiert. Alle Werte zwischen diesen Punkten sind
linear interpoliert.
25
3.5. AUSWERTUNG DER MESSWERTE
Tatsächliche Entfernung (in cm) Gemessene Entfernung (in cm)
10
12.8215
15
17.8170
20
22.8668
25
27.7760
30
33.0950
35
38.2584
40
43.1597
45
48.2314
50
53.3502
55
58.2013
60
63.2994
65
68.6764
70
73.6742
75
78.7576
80
83.8123
85
88.9655
90
94.0243
95
99.0340
100
104.0437
Tabelle 3.2: Reale und gemessene Entfernungen
Der Anstieg der Entfernung ist fast linear. Somit war es recht einfach eine Funktion zu finden welche möglichst deckungsgleich mit der Kurve ist. Abbildung 3.3
zeigt diese Funktion (rot). Die zugehörige Funktionsgleichung ist in Formel 3.5
dargestellt:
26
3.5. AUSWERTUNG DER MESSWERTE
y = 0.9848 ∗ x − 2.5262
(3.5)
Da in dieser Abbildung die Abweichung der Funktion von den Messwerten nicht
eindeutig ablesbar ist, zeigt Abbildung 3.4 die Abweichungen als Balkendiagramm.
In diesem Diagramm sieht man, dass die größte Abweichung bei einer Entfernung
von ca. 60cm auftritt und „nur“ ca. 0,2 cm beträgt.
Abbildung 3.2: Reale und gemessene Entfernungen
27
3.5. AUSWERTUNG DER MESSWERTE
Abbildung 3.3: Messwerte mit überdeckender Funktion
3.5.3
Ergebnis
Für die Entfernungsmessung mit Hilfe von Ultraschall lässt sich abschließend sagen, dass es möglich ist die Entfernung auf weniger als 0,25 cm genau zu bestimmen. Der in dieser Arbeit vorgestellte Messbereich von 10 bis 100 cm lässt sich
nach oben unter Verwendung einer größeren Sendespannung erweitern. In weiteren
Versuchen konnte eine Entfernungsmessung mit ähnlich genauen Ergebnissen bei
gleicher Sendespannung über eine Strecke von 250 cm durchgeführt werden. Eine
höhere Sendespannung hat den Nachteil, dass die untere Grenze auf Grund der
Empfindlichkeit des Empfängers nach oben verschoben werden muss. So sind mit
einer Sendespannung von 15V nur Entfernungsmessungen über 30 cm möglich.
28
3.5. AUSWERTUNG DER MESSWERTE
Abbildung 3.4: Abweichungen in Relation zu den Messwerten
29
Kapitel 4
Winkelmessung
In diesem Kapitel soll die Messung eines Winkels mit Ultraschall näher betrachtet
werden. Bevor der eigentliche Versuchsaufbau und die Messergebnisse präsentiert
werden, wird eine theoretische Überlegung zur Winkelmessung vorangestellt.
4.1
4.1.1
Theorien
Erste Methode
Wie im vorherigen Kapitel gezeigt werden konnte ist es möglich, unter Verwendung
von Ultraschall, eine Entfernung relativ genau zu bestimmen. Ausgehend davon
war die Überlegung, eine Winkelmessung mit Ultraschall zu realisieren. Ein Sender wird in einer Entfernung x vom Empfänger angebracht, jedoch nicht wie bei
der Entfernungsmessung in einer Achse (b), sondern um eine bekannte Strecke (c)
nach links oder rechts verschoben. Bewegt man diesen Sender um den gedachten
Schnittpunkt der Achse (b) mit der Strecke (c) auf einer Kreisbahn mit dem Radius der Strecke c, so schließen die Strecken b und c den Winkel α ein, der berechnet
werden soll. Zum besseren Verständnis ist der Aufbau in einer Skizze in Abbildung
4.1 grafisch dargestellt. Sind die Längen der Strecken b und c bekannt und wird die
30
4.1. THEORIEN
Abbildung 4.1: Skizze Winkelmessung mit einem Sender
Streckenlänge von a1 durch die Ultraschallmessung bestimmt, so kann der Winkel
α durch den Kosinussatz berechnet werden.
Satz 4.1 (Kosinussatz) Für die drei Seiten a, b und c eines beliebigen Dreieck,
sowie für den der Seite c gegenüberliegenden Winkel γ gilt:
c2 = a2 + b2 − 2 ∗ a ∗ b − cosγ
(4.1)
Für die Berechnung des Winkels α ist es notwendig den Kosinussatz nach diesem
Winkel aufzulösen. Dies ist unter Verwendung der Bezeichner aus der Abbildung
4.1 in Formel 4.2 dargestellt:
α = acos(
c2 + b − a21
)
2∗b∗c
(4.2)
Diese Methode zur Berechnung des Winkels α hat den Nachteil, dass die Strecke
b, also die Entfernung vom Empfänger zum Schnittpunkt der Strecken b und c,
bekannt sein muss.
31
4.1. THEORIEN
In ersten Versuchen hat sich gezeigt, dass trotz der sehr genauen Entfernungsmessung bei einer direkten Ausrichtung von Empfänger und Sender zueinander (ohne
Winkel), eine „schräge“ Entfernungsmessung nicht so exakt ist. Die Abweichungen
der Winkel wird, auf Grund des verwendeten Kosinussatzes, somit schnell recht
groß.
4.1.2
Zweite Methode
Die Winkelmessung wird um einen zweiten Ultraschallsender erweitert. Die Anordnung der Sender und Empfänger ist als Skizze in Abbildung 4.2 dargestellt.
Die Entfernung der beiden Sender vom Drehpunkt ist gleich groß (jeweils die
Abbildung 4.2: Skizze der Winkelmessung mit zwei Sendern
Strecke c). Des Weiteren sind beide Sender in die selbe Richtung ausgerichtet.
Der Vorteil dieser Methode ist, dass zwei Strecken gemessen werden und somit die
Entfernung b nicht bekannt sein muss. Nun könnte natürlich wieder unter Verwendung des Kosinussatzes der Winkel α berechnet werden, was jedoch zu den
gleichen Abweichungen wie bei Methode 1 führen würde. Aus diesem Grund wird
32
4.1. THEORIEN
im Folgenden gezeigt, wie es möglich ist mit Hilfe der Differenz beider Messwerte
eine genauere Winkelmessung zu realisieren.
Es stellt sich die Frage, ob zwischen der Entfernung b, dem Winkel α und der
Differenz der beiden gemessenen Strecken a1 und a2 , ein für die Berechnung des
Winkels nützlicher Zusammenhang besteht. Im Folgenden wird diese Differenz mit
∆t bezeichnet.
Abbildung 4.3 zeigt die beiden Sender in verschiedenen Abständen vom Empfänger. Der Winkel α ist bei allen vier Entfernungen gleich groß. Nach betrachten der
Abbildung 4.3: Verhalten der Entfernungsdifferenz Delta t bei verschiedenen Entfernungen
Skizze liegt die Vermutung nahe, dass die Differenz der Strecke a1 und a2 unabhängig von der Entfernung und nur vom Winkel abhängig ist. Eine Berechnung
der Differenzwerte in Abhängigkeit des Winkels α und der Entfernung b brachte
das in der Abbildung 4.4 dargestellte Ergebnis. Die Grafik zeigt, dass ab einer
Entfernung von 20 cm die Entfernungsdifferenz ∆t fast nur noch vom Winkel abhängig ist. Die Figur steigt in Richtung der Entfernungsachse nur noch minimal
an. Unterhalb von 20 cm ist es jedoch nicht möglich nur mit Hilfe des Winkels ein
33
4.1. THEORIEN
Abbildung 4.4: Verhältnis zwischen Entfernung, Winkel und der Entfernungsdifferenz Delta t
∆t eindeutig zu bestimmen.
Aufgrund des soeben festgestellten Zusammenhangs zwischen dem Winkel und der
Entfernungsdifferenz ∆t der beiden Messwerte wird im Folgenden eine Formel entwickelt, welche diese Beziehung ausnutzt.
Wir betrachten dazu die Abbildung 4.5. In der Skizze ist die Strecke a1 kleiner
als die Strecke a2. In diesem Fall projizieren wir die Strecke a1 auf die Strecke a2
und erhalten so die Differenz ∆t auf der Strecke a2. Im Falle, dass die Strecke a1
größer ist als a2, wird a2 auf a1 projiziert. Ziel ist es eine Formel zu finden, die den
34
4.1. THEORIEN
Abbildung 4.5: Abbildung der Entfernungsdifferenz
Winkel α in Abhängigkeit von Delta t und b berechnet. Wobei sich die Strecke b
mit folgender Formel abschätzen lässt:
α=b=
a1 + a2
2
(4.3)
Da die Strecke c bzw. 2*c im Bezug zur Strecke b sehr klein ist, die Strecke 2*c
ist 16 cm und die Strecke c ist zwischen 20 und 70 cm lang, verlaufen die beiden
Strecken a1 und a2 annähernd parallel (Abb. 4.6). Somit verlaufen die beiden
Strecken a1 und a2 auch parallel zu der Strecke b, so dass der gesuchte Winkel α
auch zwischen der Strecke 2*c und ∆t liegt. Mit Hilfe des rechtwinkligen Dreiecks,
mit der Strecke 2*c als Hypotenuse und ∆t als Ankathete, ist es möglich den
Winkel α mit folgender Formel 4.4 annähernd zu berechnen:
α = acos(∆t/2 ∗ c)
(4.4)
In Abbildung 4.7 ist das Verhältnis zwischen der Entfernung b, dem Winkel α und
der Entfernungsdifferenz ∆t unter der soeben vorgestellen Näherung dargestellt.
35
4.2. AUFBAU
Abbildung 4.6: Skizze zur Formelentwicklung
Es ist zu erkennen, dass die Entfernungsdifferenz unabhängig von der Entfernung
ist. Vergleicht man die Abbildung 4.4 und die Abbildung 4.7 miteinander, so wird
deutlich, dass die beiden Figuren sich ab einer Entfernung von 20 cm sehr ähnlich
sind. Somit ist es möglich die Formel 4.4 ab einer Entfernung von 20 cm für die
Berechnung des Winkels α zu verwenden.
4.2
Aufbau
Wie in Abschnitt 4.1 gezeigt, werden für die Winkelmessungen mit Ultraschall
zwei Ultraschallsender und ein Empfänger benötigt. Die Anordnung der Bauteile
ist in Skizze 4.2 dargestellt. Damit nicht bei jeder Messung der Winkel von Hand
neu eingestellt werden muss, habe ich einen Schrittmotor benutzt auf welchem eine
Holzleiste montiert wurde. Wie in Abbildung 4.8 zu sehen ist, befinden sich auf
beiden Seiten der Leiste zwei runde Löcher, in denen die Sender befestigt werden.
Die Mittelpunkte der Löcher sind symmetrisch zum Drehpunkt des Motors und
haben einen Abstand von 16 cm zueinander. Somit ist die in der Skizze mit c
36
4.3. DURCHFÜHRUNG
Abbildung 4.7: Verhältnis zwischen Entfernung, Winkel und der Entfernungsdifferenz Delta t
bezeichnete Strecke 8 cm lang. Der Empfänger ist in einem variablen Abstand
zum Drehpunkt des Motors in gleicher Höhe wie die Sender auf einem Stativfuß
aufgebaut.
4.3
Durchführung
Der Ablauf einer jeden Messung sieht wie folgt aus. Der Schrittmotor, angesteuert
über den AT90S2313, stellt einen definierten Winkel ein. Der erste Sender sendet
neun Impulse und wartet zwanzig Millisekunden bis er erneut neun Impulse sendet.
Zehn Millisekunden nachdem der erste Sender begonnen hat seine Impulse zu
senden, sendet der zweite Sender alle zwanzig Millisekunden neun Impulse, so
37
4.3. DURCHFÜHRUNG
Abbildung 4.8: Schrittmotor zur Winkelmessung
dass beide Sender immer abwechselnd alle zehn Millisekunden senden.
Da eine größere Anzahl von Messungen für die Auswertung gemacht werden
mußte, wurde mit Hilfe des Schrittmotors ein Winkelbereich von -70.2 bis 86,4◦
abgefahren. Alle 5,4◦ wurde eine Messung gemacht, so dass insgesamt dreißig Winkelmessungen pro Versuchsdurchführung gemacht wurden. Jede Winkelmessung
enthält 200 Entfernungswerte, 100 für jeden Sender. Der Aufbau und die Funktionsweise des Schrittmotors wird an dieser Stelle nicht genauer beschrieben. Eine
ausführliche Beschreibung ist in der Studienarbeit von Alexander Werle [Werle] zu
finden.
Nach jeder Messung wird der Inhalt des 16 Bit Timer Registers per UART an
einen PC übertragen. Die eigentliche Auswertung der 5600 Werte erfolgte auf dem
PC.
Insgesamt wurden zwölf Messreihen durchgeführt. Die Entfernung des Empfängers
zum Drehmittelpunkt des Motors wurde nach jeder zweiten Messung um zehn Zentimeter vergrößert. Da, wie in Abschnitt 4.1 gezeigt, die Berechnung des Winkels
unterhalb 20 Zentimeter einige Probleme bereitet, wurde mit einer Entfernung von
38
4.4. STEUERPROGRAMM DES MIKROCONTROLLERS
20 Zentimeter begonnen. Die größte Messentfernung betrug somit 70 Zentimeter.
4.4
Steuerprogramm des Mikrocontrollers
In diesem Abschnitt wird das Steuerprogramm des Atmel vorgestellt. Die Ansteuerung des Schrittmotores wird an dieser Stelle nicht ausführlich beschrieben (siehe
[Werle]).
Als Grundlage des Steuerprogramms für die Winkelmessung dient das Steuerprogramm für die Entfernungsmessung. Es finden sich die im Abschnitt 3.4 vorgestellten Routinen in leicht modifizierter Form wieder. So wird z.B. in der Externen
Interrupt Routine nicht mehr die Werte an die UART ausgegeben, sondern dies
wird jetzt in der Timer-Überlauf-Routine durchgeführt. Da aber nur an einigen
wenigen Stellen Änderungen vorgenommen wurden, soll hier nicht noch einmal
auf alle Subroutinen gesondert eingegangen, sondern direkt das komplette Steuerprogramm vorgestellt werden.
Das Programm startet mit dem Einbinden der von der Firma Atmel zur Verfügung gestellten Definitionsdatei. Im Anschluss daran, werden den im Programm
benötigten Arbeitsregistern natürlichsprachliche Namen zugewiesen. In den Zeilen
18 bis 25 werden die Sprungadresse für das Auftreten eines Reset, eines Externen
Interrupts und eines Timer Interrupts definiert. Im Anschluss beginnt das eigentliche Hauptprogramm mit weiteren Initialisierungen und Konfigurationen, wie z.B.
die Initialisierung des Stacks oder die Konfiguration der Interrupts. In den Zeilen
63 bis 73 werden einigen Registern konstante Werte zugewiesen, so z.B. dem Register mit Namen „sendezeit“ der Wert 11 für die richtige Sendefrequenz. In der
Zeile 77 wird die Routine für die Initialisierung des Motors aufgerufen und in der
nächsten Zeile die Routine zur Einstellung des Startwinkels von -70.2◦ . Dazu fährt
der Motor erst gegen den Uhrzeigersinn bis zum Anschlag und der Taster wird
39
4.4. STEUERPROGRAMM DES MIKROCONTROLLERS
betätigt. Im Anschluss fährt der Motor im Uhrzeigersinn bis zu dem Startwinkel
(siehe [Werle]).
Nachdem der Motor die Startposition erreicht hat, befindet sich das Programm in
Zeile 80 und die erste Messung kann ausgeführt werden. Das Register laufvarible,
welches für die Anzahl der Messungen pro Winkel zuständig ist, wird auf den Wert
201 gesetzt. In den folgenden Zeilen wird der Globale Interrupt des Atmel aktiviert
und der 8 Bit Timer durch Aufruf der Routine timerinit gestartet. Der 8 Bit Timer
übernimmt hier die gleiche Funktion wie bei der Entfernungsmessung. Die Zeilen
85 bis 94 übernehmen die Steuerung der Messungen während eines Winkels. Hier
wird überprüft, ob noch weitere Messungen durchgeführt werden müssen (laufvariable ungleich null). Solange dies gilt wird in einer Endlosschleife immer wieder
diese Bedingung abgefragt. Die eigentliche Messung wird durch den Timerüberlauf
des 8 Bit Timers angestoßen, indem bei einem Timer-Überlauf in die entsprechende
Interrupt Routine gesprungen wird. In dieser wird das Register laufvariable dekrementiert, entschieden welcher Sender senden darf und die Messwerte per UART an
den PC übertragen. Wenn das Register laufvariable gleich 0 ist (Zeilen 85 und 86),
werden der 8 Bit Timer gestoppt, alle Interrupts deaktiviert und ein neuer Winkel
durch Aufruf von winkelset eingestellt. Nach dem Einstellen des neuen Winkels
erfolgt eine Zeitverzögerung, die aufgrund des starken Nachschwingens der Holzkonstruktion eingefügt werden musste, bevor wieder in die Zeile 80 gesprungen
wird und sich der ganze Ablauf wiederholt. Das Register savex wird während der
Initialisierungsphase des Hauptprogramms auf den Wert 28 gesetzt und bei jedem
Winkel auf den Wert eins dekrementiert. Dieses Register ist verantwortlich dafür,
dass nach 28 Winkeln der Mikrocontroller in eine Endlosschleife geht und die Messungen beendet werden (Zeilen 89 - 91). Somit werden bei jedem Versuch vom
Startwinkel -70.2◦ bis zum Endwinkel 75.6◦ 28 mal 200 Messungen durchgeführt.
000 .include "2313def.inc"
001
40
4.4. STEUERPROGRAMM DES MIKROCONTROLLERS
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
.def
nextstepp=r0; für die Motoransteuerung
sync=r7 ;Register zum Speichern des SYNC-Bytes
steppx=r8 ;aktuell empfangener X-Wert
laufvariable=r9 ;Anzahl der Messungen pro Winkel
temp=r16 ;Temp Register
sendezeit=r17 ;Sendefrequenz der Sender
savex=r18 ;gespeicherter X-Wert
delcount2=r19;Warteschleifenzaehler
null=r20;Loeschen von Registern
warten=r21 ;Warteschleifenzaehler
delcount1=r22 ;Warteschleifenzaehler
aus2=r23 ;Für das abwechselnde Senden
ausgabe=r24 ;Register für die Ausgabe per UART
countergx=r25 ;aktuelle Tabellenposition X-Achse
steppgonex=r26 ;aktuell gegangene Schritte X-Achse
.org 0x0000
rjmp main
;Reset Behandlung
.org INT0addr
rjmp INT0_beh
;Sprung zu Interrupt Service Routine 1
.org OVF0addr
rjmp senden
;Timer Ueberlauf Service Routine
; ###### Hauptprogramm #############
main:
ldi temp,RAMEND
out SPL,temp
;Stack initialisieren
;##### UART initialisieren ####
ldi temp,25
;Baudrate 9600 einstellen
out UBRR,temp
sbi UCR,TXEN
;TX aktivieren
;#### 16 BitTimer initialisieren #####
ldi temp,0x00
;16 Bit Timer initialisieren Teil 1
out TCCR1A, temp
ldi temp,0b00000001 ;Für den Start des Timers
out TCCR1B,temp
;16 Bit Timer Start
;#### Port B als Ausgang definieren ###
ldi temp,0xFF
;Port B als Ausgang definieren
out DDRB,temp
;#### Port D als Eingang definieren ###
ldi temp, 0x00
out DDRD,temp
ldi temp,0xff
;Pull Ups setzen für den Empfaenger
41
4.4. STEUERPROGRAMM DES MIKROCONTROLLERS
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
out PortD,temp
;#### Externer Interrupt konfigurieren ######
;Beim Wechsel von 0 nach 1 Interrupt
ldi temp,(1<<isc01)|(0<<isc00)|(0<<isc10)|(1<<isc11)
out MCUCR,temp
;####
Timer Overflow Interrupt konfigurieren #####
ldi temp,(1<<TOV0)
out TIMSK,temp
sei ;Glogal Interrupt aktivieren
;#### Einstellung der Hertz Zahl des Senders, 40 KHz ##########
ldi sendezeit,0b0001011
;#### Belegung von Hilfsregistern #####
ldi aus2,0b00000001 ; Fuer das abwechselnde Senden
ldi null,0x00
; Zum Loeschen von Registern
ldi warten,0b00001010 ;Anzahl der Perioden des Senders
ldi savex,28
;Bestimmt den Messbereich 146 Grad
;#### Ende Initialisierung und Start des Hauptprogramms#######
rcall motor
rcall startwinkel
;Initialisiert den Motor
;Motor fährt in Start Position
measure:ldi temp,201
;Damit bei jedem Winkel 200 Messungen
mov laufvariable,temp;durchgefuehrt werden
sei
;Interrupts global aktivieren
rcall timerinit
;8 Bit Timer starten
checking:CPSE laufvariable,null;Solange die laufvariable nicht 0 ist
rjmp checking
;werden weitere Messungen gemacht
cli
;Ist sie gleich 0, Globaler Interrupt
rcall timerstop
;deaktivieren und 8Bit Timer stoppen
dec savex
;wenn der Endwinkel noch nicht erreicht
BRNE weiter
;ist neuen Winkel einstellen
end:
rjmp end
;sonst in eine Endlosschleife gehen
weiter: rcall winkelset
rcall delay
;wenn der neue Winkel eingestellt ist
rjmp measure
;mit der Messung starten
; #### Ende Hauptprogramm #########
;#### Senden von Sender 1 ########
42
4.4. STEUERPROGRAMM DES MIKROCONTROLLERS
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
sender1:dec warten
BRNE start1
cbi PORTB,2
cbi PORTB,3
;Ultraschallsender deaktivieren
ldi warten,0b00001010 ;Anzahl der Perioden des Senders
ret
start1:sbi PORTB,2
cbi PORTB,3
signal: INC R1
CPSE Sendezeit,R1
rjmp signal
mov r1,null
sneu:
;Sender 1 an + ;Warteschleife für die Sendezeit
sbi PORTB,3
cbi PORTB,2
;Sender 1 an - +
INC R1
CPSE Sendezeit,R1
rjmp sneu
mov r1,null
rjmp sender1
;Warteschleife für die Sendezeit
;#### Senden von Sender 2 ########
sender2:dec warten
BRNE start1
cbi PORTB,1
cbi PORTB,3;Ultraschallsender deaktivieren
ldi warten,0b00001010 ;Anzahl der Perioden des Senders
ret
start2: sbi PORTB,0
cbi PORTB,1
signal2:INC R2
CPSE Sendezeit,R2
rjmp signal2
mov R2,null
sneu2:
;Sender 2 an + ;Warteschleife für die Sendezeit
sbi PORTB,1
cbi PORTB,0
;Sender 2 an - +
INC R2
CPSE Sendezeit,R2
rjmp sneu2
mov R2,null
rjmp sender2
;Warteschleife für die Sendezeit
;#### Interrupt 0 Behandlung #####
43
4.4. STEUERPROGRAMM DES MIKROCONTROLLERS
149 INT0_beh:cli
150
in temp,GIMSK
;Externer Interrupt 0 wird deaktiviert
151
andi temp,0b10111111
152
out GIMSK,temp
153
154
IN R5,TCNT1L
;Unteren 8Bit des Timers in R5 laden
155
IN R6,TCNT1H
;Oberen 8Bit des Timers in R6 laden
156
reti
157
158 ;#### Timer Ueberlauf Interrupt Behandlung ####
159
160 senden: ldi temp,215
;### Auf 215 setzen damit alle 10
161
;ms gesendet wird
162
out TCNT0,temp
163
dec laufvariable
; Damit 200 Mal gesendet wird bevor
164
; ein neuer Winkel eingestellt wird
165
166
out TCCR1B,null ;16 Bit Timer wir gestopt
167
ADD R10,aus2
;Negiere die 1. Stelle von Register 10
168
;#### Ausgabe der Timerwerte mit Hilfe der UART an den PC#######
169
170
ldi ausgabe,0
;Zur Synchronisation mit dem PC Ausgabe von 00 00
171
rcall serout
172
rcall serout
173
174
MOV ausgabe,r6 ;## Oberen 8 Bit des 1 Empfaengers ausgeben
175
rcall serout
176
177
MOV ausgabe,r5 ;## Unteren 8 Bit des 1 Empfaengers ausgeben
178
rcall serout
179
180
mov r6,null
;Register R5 und R6 auf 0 setzen
181
mov r5,null
182
183
ldi temp,0x00
;16 Bit Timer auf 0 setzen
184
out TCNT1H,temp
185
out TCNT1L,temp
186
187
out TCCR1B,aus2
;16Bit Timer wir aktiviert
188
189
ldi temp,0b11000000 ;ExternesInterruptFlag rücksetzen
190
out GIFR, temp
191
192
ldi temp, (1<<INT0)|(1<<INT1) ;Interrupt PortD2 und PortD3 aktivieren
193
out GIMSK, temp
194
sei
195
;### Sender 1 oder Sender 2 aktivieren####
196
SBRS r10,0
;Solange an Pos 0 eine 0 steht sendet Sender 1
197
Rcall sender1
44
4.4. STEUERPROGRAMM DES MIKROCONTROLLERS
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
SBRC r10,0
Rcall sender2
reti
;Solange an Pos 0 eine 1 steht sendet Sender 2
;#############Ausgabe an der UART###################### serout:
sbis USR,UDRE ;Warten, bis UDR für das naechste Byte bereit ist
rjmp serout
out UDR, ausgabe
ret
;***************************************************************************
; ; Hauptprogramm Motorsteuerung
motor:
push savex
ldi steppgonex,$00
ldi savex,$00
ldi countergx,$04 ;Initialisierung des Zaehlers fuer den Motor X-Achse
originx: ;Ausrichtung der X-Achse auf definierte Position
ldi ZL,$00 ;laden der Startadresse der Tabelle zur Motoransteuerung
ldi ZH,$02
ldi temp,$00 ;ist der Anfang der Tabelle erreicht
cpse countergx,temp ;wenn ja, dann setzte Zaehler auf 8
rjmp startx ;wenn nein, fahre weiter
ldi countergx,$04
startx: dec countergx ;verringer Zaehler um eins
add ZL,countergx ;addiere Zaehler als Offset
lpm ;lade Wert und gib ihn auf PortB aus
out PORTB,nextstepp
rcall delay
sbi PORTD,4 ;schalte Pull-Up an PD4 zu
sbic PIND,4 ;solange der Pin 4 nicht auf Masse gezogen wird
rjmp originx ;fahre weiter
pop savex
ret
wait1:
rjmp wait1
rcall startwinkel ; Ausrichtung in 0 Grad Position
ldi countergx,$FF ;nochmal initialisieren
ret
;#### Schritt vorwaerts ##### steppfx:
ldi ZL,$00 ;laden der Startadresse der Tabelle zur Motoransteuerung
ldi ZH,$02
ldi temp,$03 ;ist das Ende der Tabelle erreicht
cpse countergx,temp ;wenn ja, dann setzte Zaehler auf $FF
rjmp startfx ;wenn nein, fahre weiter
ldi countergx,$FF
startfx:inc countergx ;inkrementiere Zaehler um eins
45
4.4. STEUERPROGRAMM DES MIKROCONTROLLERS
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
add ZL,countergx ;addiere Zaehler als Offset
lpm ;lade Wert und gib ihn auf PortB aus
out PORTB,nextstepp
rcall delay ;verzoegere
inc steppgonex ;erhoehe die Zahl der ausgefuehrten Schritte um eins
ret
;#### Schritt rueckwaerts ##### steppbx:
ldi ZL,$00 ;laden der Startadresse der Tabelle zur Motoransteuerung
ldi ZH,$02
ldi temp,$00 ;ist der Anfang der Tabelle erreicht
cpse countergx,temp ;wenn ja, dann setzte Zaehler auf $04
rjmp startbx ;wenn nein, fahre weiter
ldi countergx,$04
startbx:dec countergx ;dekrementiere Zaehler um eins
add ZL,countergx ;addiere Zaehler als Offset
lpm ;lade Wert und gib ihn auf PortB aus
out PORTB,nextstepp
rcall delay ;verzoegere
dec steppgonex ;erniedrige die Zahl der ausgefuehrten Schritte um eins
ret
delay: ldi delcount1,$0F ;Unterprogramm zur Zeitverzoegerung
delayout:ldi temp,$FF
goonout:ldi delcount2,$FF goonin: dec delcount2
brne goonin
dec temp
brne goonout
dec delcount1
brne delayout
ret
;##### Stellt den Startwinkel von -70.2 Grad ein.
startwinkel: push savex
ldi savex,3
step:
rcall steppfx ; Mache einen Schritt rueckwaerts
dec savex
brne step
pop savex
ret
;#### Bewegt den Motor um 3 Schritte 5,4 Grad weiter
winkelset: rcall steppfx
; Mache eine Schritt vorwaerts
rcall steppfx
; Mache eine Schritt vorwaerts
rcall steppfx
; Mache eine Schritt vorwaerts
ret
;### 8 Bit Timer initialisieren #####
46
4.5. AUSWERTUNG DER MESSWERTE
296
297
298
299
300
301
302
303
304
305
306
307
timerinit:ldi temp,215
;### Auf 215 setzen damit alles 10 ms
gesendet wird
out TCNT0,temp
ldi temp,(1<<CS02)|(0<<CS01)|(1<<CS00) ;## 1024 Takte pro Timerschritt
out TCCR0,temp
ret
timerstop:ldi temp,(0<<CS02)|(0<<CS01)|(0<<CS00); Timer stoppen
out TCCR0,temp
ret
.org $0100 .db $50,$60,$A0,$90
4.5
Auswertung der Messwerte
4.5.1
Berechnung der Winkel
In Abschnitt 3.5.1 wurde erläutert wie aus den Werten des 16 Bit-Timerregisters
des Atmel die Entfernung vom Sender zum Empfänger berechnet werden kann
und in Abschnitt 4.1 die Formel 4.4 zur Berechnung des Winkels anhand der
Entfernungswerte vorgestellt.
Die Berechnung der Winkel erfolgt demnach in zwei Schritten auf dem PC.
1. Die Registerwerte werden per UART nach jeder Messung an den PC übertragen, welcher all diese Werte zwischenspeichert. Nach Ende eines Versuchs
sind 6000 Hexadezimale Registerpaarwerte an den PC übertragen worden.
Aus diesen Werten wird mit Hilfe der Formelm 3.3 und 3.4 wie im Abschnitt
3.5.1 beschrieben die Entfernung der beiden Sender zum Empfänger berechnet.
2. Für jeden der 28 Winkel sind nun jeweils 100 Entfernungswerte jedes Senders
zum Empfänger im PC gespeichert. Aus diesen 100 Werten wird der Mittelwert berechnet, so dass für jeden Winkel zwei Entfernungswerte (in der Skizze
47
4.5. AUSWERTUNG DER MESSWERTE
4.5 mit a1 und a2 bezeichnet) und insgesamt 60 Werte übrig bleiben. Diese
Werte werden durch die im Abschnitt 3.5.2 entwickelte Formel 3.5 korrigiert.
Aus diesen Werten werden mit der Formel 4.4 die Winkel berechnet.
4.5.2
Beurteilung der Messwerte
Für die spätere Beurteilung der Daten interessiert uns die Abweichung des gemessenen vom tatsächlichen Winkel. Pro Entfernung wurden immer zwei Messreihen
durchgeführt. Tabelle 6.1 (siehe Anhang B) zeigt die Differenz der berechneten
Winkel zu den tatsächlichen Winkeln, bei der in der ersten Spalte abgetragenen
Entfernung.
Es fällt auf, dass im Gegensatz zur Entfernungsmessung die Abweichungen vom
Sollwert nicht linear sind. Dies ist Anschaulich für die Entfernung von 20 cm in
Abbildung 4.9 dargestellt. Ebenso sollten die Werte bei gleicher Entfernung an-
Abbildung 4.9: Gemessene und tatsächliche Winkel bei 20 cm Entfernung
nähernd identisch sein. Als Beispiel ist die Abweichung der beiden Messungen bei
48
4.5. AUSWERTUNG DER MESSWERTE
einer Entfernung von 40 cm und einem Winkel von -16,2◦ 3.4587◦ . Noch deutlicher
werden die Abweichungen der Messwerte vom Sollwert bei Betrachtung des 3D
Plots (siehe Anhang B Abbildung 6.2) der Tabellenwerte.
Da die Abweichungen in einigen Fällen mehr als 10◦ betragen war es notwendig diese mit Hilfe weiterer Funktionen zu minimieren. Für ein besseres Ergebnis wurden
die Werte in der Tabelle in zwei Teile aufgeteilt. Teil eins beinhaltet die Spalten 1
bis 14 und Teil zwei die Spalten 15 bis 28. Alle Werte im ersten Teil haben gemein,
dass die Entfernung (in der Abb. 4.5 mit a1 bezeichnet) vom ersten Sender zum
Empfänger kleiner/gleich ist als die Entfernung (in Abb. 4.5 mit a2 bezeichnet)
des zweiten Senders zum Empfänger. Im zweiten Teil wird der umgekehrte Fall
betrachtet.
Für jede Spalte der beiden Teile wurde unabhängig voneinander die mittlere Abweichung von Sollwert und mit Hilfe der Formel 4.3 die mittlere gemessene Entfernung berechnet. Durch lineares Interpolieren wurden für die übrigen Entfernungen
die mittleren Abweichungen abgeschätzt. Somit ist es möglich zwei Funktionen zu
entwickeln, welche diese Werte möglichst genau abdecken. Für den ersten Teil der
Werte wurde so folgendes Polynom dritten Grades gefunden (4.5).
0.000017 ∗ b3 − 0.0031 ∗ b2 + 0.17 ∗ b + 0.8633
(4.5)
Für den zweiten Teil der Werte wurde folgendes Polynom dritten Grades gefunden
(4.6).
0.000069 ∗ b3 − 0.0081 ∗ b2 + 0.19 ∗ b + 1.2409
(4.6)
Abhängig von der Größe der beiden Entfernungen der Sender zum Empfänger und
von der berechneten Entfernung b wird der Wert des Polynoms 4.5 oder 4.6 von
dem durch die Formel 4.4 berechnetem Winkel abgezogen.
Durch diese Korrektur der Messwerte ergeben sich nun die in der Tabelle 6.2 (siehe
Anhang B) eingetragenen Abweichungen vom Sollwert. In Abbildung 4.10 sind die
49
4.5. AUSWERTUNG DER MESSWERTE
Abbildung 4.10: Säulendiagramm der Abweichungen vom Sollwert bei 30 cm Entfernung
Abweichungen der vierten Tabellenzeile als Säulendiagramm dargestellt. In den
ersten vier Tabellenspalten und den Spalten 26 bis 28 gibt es zum Teil immer noch
Abweichungen von über 10◦ . Die Abweichungen in den Spalten 5 bis 25 (-48.6◦ bis
59,4◦ ) liegt bis auf acht Ausnahmen unter 4◦ .
4.5.3
Ergebnis
Für die Winkelberechnung mit Ultraschall lässt sich abschließend sagen, dass anders als bei der Entfernungsmessung größere Abweichungen vom Sollwert aufgetreten sind und diese auch mit Hilfe von zwei Sendern und der Korrektur der
Messwerte bis zu 5◦ betragen. Dieses Ergebnis lässt sich zu einem auf die sehr
starke Richtcharakteristik sowohl des Senders als auch des Empfängers zurückführen und zum anderen auf die von mir verwendete Verstärkerschaltung. Ob z.B.
mit Hilfe einer Transistorverstärkerschaltung kleinere Abweichungen erzielt wer-
50
4.5. AUSWERTUNG DER MESSWERTE
den können, kann ich jedoch nicht beurteilen.
Anhand der Messwerte sind sehr gut die Grenzen des Systems zu erkennen. Ab
einem Winkel von ca. +/-55◦ vergrößern sich die Abweichungen vom realen Winkel
auf das Doppelte. Somit ergibt sich ein Messbereich von etwa 110◦ mit einer Abweichung von 5◦ . Wenn Abweichungen von bis zu 11◦ in Kauf genommen werden,
ist ein Messbereich von rund 150◦ möglich.
51
Kapitel 5
Beurteilung
Zum Abschluss meiner Arbeit möchte ich die erreichten Ergebnisse kurz zusammenfassen. Im Allgemeinen sehe ich die beiden Ziele der Arbeit im Großen und
Ganzen als erreicht an. Die Ergebnisse der Entfernungsmessung mit einer Abweichung von 0,25 cm zeigen, dass bei einer direkten Ausrichtung des Senders und
des Empfängers zueinander, eine relativ genaue Entfernungsmessung möglich ist.
Die Ergebnisse der Winkelmessung müssen hingegen ein wenig kritischer betrachtet werden. Eine Abweichung von zum Teil 5◦ bei einem Messbereich von 110◦ sind
für das in der Einleitung vorgestellte Beispiel eines Rückwärtsfahrassistenten für
einen PKW mit Anhänger nicht geeignet. Im Gegensatz zur Entfernungsmessung
hängt diese große Abweichung hautsächlich von der sehr starken Richtcharakteristik der Sender und des Empfängers ab. Trotz dieser Eigenschaft der Sender und
Empfänger ist es mit Hilfe von theoretischen Überlegungen gelungen überhaupt
eine Winkelmessung mit derartigen Ergebnissen zu realisieren. Es bliebe zu testen,
ob die Ergebnisse unter Verwendung anderer Ultraschallmodule, mit einer geringeren Richtcharakteristik, verbessert werden könnten.
Im Weiteren zeigen die Ergebnisse sehr deutlich die Grenzen der Winkelmessung
mit Ultraschall. So ist ab einem Winkel von rund +/-55◦ nur noch eine Messung
52
mit einer Abweichung von bis zu 11◦ möglich.
Zusammenfassend lässt sich sagen, dass die Entfernungsmessung in der vorgestellten Form recht gut in praktischen Anwendungsfällen eingesetzt werden könnte.
Wobei hier noch zu prüfen wäre, ob die Ergebnisse sich bei starken Störfeldern verändern.
Die Winkelmessung in dieser Form kann nur in Anwendungsfällen eingesetzt werden, in denen eine Winkelabweichung von bis zu 5◦ in Kauf genommen werden
kann und der zu messende Winkelbereich 110◦ nicht überschreitet.
Am Ende möchte ich mich noch für die exzellente und freundschaftliche Betreuung bei Dr. Merten Joost und den Mitarbeitern des physikalischen Institutes
für Physik der Universität Koblenz-Landau bedanken.
53
Kapitel 6
Anhang
54
6.1. ANHANG A: HARDWARE
6.1
6.1.1
Anhang A: Hardware
Schaltung Versuchsboard
Abbildung 6.1: Schaltplan Versuchsboard
55
6.2. ANHANG B: WINKELMESSUNG
6.2
6.2.1
Anhang B: Winkelmessung
Tabellen Abweichungen
Tabelle 6.1: Abweichungen der gemessenen Winkel von den tatsächlichen Winkeln
in Grad
Entfernung -70,2◦
-64,8◦
-59,4◦
-54,0◦
-48,6◦ -43,2◦ -37,8◦
20cm
-5.6415 -5.0427 -0.7031 1.4961 1.8701 2.2609 6.4713
20cm
-6.0599 -4.6836 -1.4728 2.3434 2.4986 2.3174 5.9031
-3.0906 -4.9309 -4.0982 -2.6372 2.6781 6.9703 6.2832
30cm
30cm
-6.2251 -4.9568 -4.5399 -2.1997 3.1080 7.0833 6.4789
5.1967 3.4913 -2.8196 0.3708 1.3527 6.1474 7.3466
40cm
40cm
3.5721 2.4474 -3.3934 -1.2558 3.9220 4.3018 7.3920
-4.8464 -4.1185 -2.6777 -1.6887 0.2261 4.1989 4.7167
50cm
-0.1136 -3.9557 -2.8887 -1.4024 -0.2607 2.2057 4.4334
50cm
2.2592 -4.1771 -3.1002 -4.9834 2.9769 3.7917 5.8755
60cm
3.5332 -4.4295 -3.3133 -3.1420 2.9472 3.6690 6.0123
60cm
70cm
2.3810 -0.8038 -6.8919 -1.4711 -0.0053 4.7242 6.9347
70cm
0.2727 -3.5754 -7.0501 -2.8310 -0.7502 2.8599 6.0555
Entfernung
20cm
20cm
30cm
30cm
40cm
40cm
50cm
50cm
60cm
60cm
70cm
70cm
-32,4◦
2.6647
8.0510
3.1657
5.3806
8.7939
6.8391
6.5928
5.8130
3.6770
3.5716
4.5416
2.7419
-27,0◦
3.6037
4.8699
2.4517
2.6990
7.5017
3.6518
7.0421
4.9083
5.1734
4.7628
4.4670
3.6427
-21,6◦
2.5484
4.1390
1.0560
1.2551
4.9667
3.1733
4.0658
3.9314
3.4955
3.4935
3.5375
1.0020
-16,2◦
0.2883
1.7173
-0.1109
0.1953
4.5238
1.0651
3.9104
3.5344
3.3103
3.2769
4.4834
2.5718
56
-10,8◦
-0.2354
-0.1932
0.3040
0.4908
2.7530
0.8874
1.6747
1.8228
1.4772
2.0628
4.4490
2.4086
-5,4◦
-0.5919
0.0800
0.6009
0.9492
2.9535
1.1893
1.9205
2.0013
1.4491
1.3605
2.3280
0.7116
0,0◦
0.6230
0.3387
0.7070
1.0576
3.0306
1.3761
2.1010
2.2495
1.5972
1.6066
2.5101
0.1545
6.2. ANHANG B: WINKELMESSUNG
Entfernung
20cm
20cm
30cm
30cm
40cm
40cm
50cm
50cm
60cm
60cm
70cm
70cm
5,4◦
0.6809
-0.5500
-0.3154
-1.2192
-3.2549
-1.4854
-2.4197
-2.3570
-1.6863
-1.7790
-2.7334
-0.4004
10,8◦
1.7469
0.8753
-0.5149
-0.6498
-3.5765
-1.7680
-2.6250
-2.6977
-1.9033
-2.0585
-1.5395
0.0487
16,2◦
1.6795
0.5859
-0.2983
-1.9358
-3.7714
-2.0022
-2.0696
-2.9169
-1.7013
0.0844
-0.6763
0.6678
Entfernung
20cm
20cm
30cm
30cm
40cm
40cm
50cm
50cm
60cm
60cm
70cm
70cm
43,2◦
5.2955
3.9733
3.8698
2.0036
3.0892
4.8548
1.6293
0.1698
0.3235
0.3001
-1.7242
0.9283
48,6◦
54,0◦
6.2627 7.2636
4.6274 5.9717
3.8947 3.7539
3.1993 2.3833
2.5140 -0.5832
4.1192 1.1904
-0.7727 -0.7806
-0.4823 -1.4850
-0.6392 -4.4298
-0.8465 -4.5936
-3.3135 -4.6753
-1.5711 0.3474
57
21,6◦
3.6612
2.4417
0.3559
0.0146
-3.3044
-0.6802
-1.9610
-1.9607
0.2402
0.2281
-0.7129
0.7876
27,0◦
4.0721
3.2684
-0.0872
0.7457
-1.1183
0.7071
-0.6589
-0.3724
0.3035
0.2956
-0.7001
0.9089
32,4◦
4.3010
3.3116
1.6516
1.6005
-1.2110
1.0729
-0.0714
-0.4657
0.9204
0.8661
-1.5920
1.0881
37,8◦
4.7479
3.4245
0.8775
0.0422
-0.3535
4.4110
2.7692
2.8480
0.6239
0.9446
-1.0118
1.0291
59,4◦
64,8◦
3.2945 0.9621
1.4512 -0.4211
0.1138 -1.2954
-0.7630 -2.3595
-0.4167 -0.2471
1.2106 1.3773
-5.1603 -6.3964
-5.7665 -6.4512
-3.4896 -1.7567
-3.7627 -1.7580
-1.5803 -1.7700
0.2446 0.1392
70,2◦
-3.1225
-4.5063
-2.8366
-5.9349
0.0298
1.6319
-7.9971
-7.8450
-7.2652
-6.9101
-3.9755
-3.9725
75,6◦
-2.8495
-4.6022
-8.6278
-8.7628
-1.2956
2.2016
-9.4639
-8.8617
-6.9503
-7.3014
-10.3022
-6.8954
6.2. ANHANG B: WINKELMESSUNG
Tabelle 6.2: Korrigierte
chen Winkeln in Grad
Entfernung -70,2◦
20cm
-8.8528
20cm
-9.2774
30cm
-6.7553
30cm
-9.8851
1.4025
40cm
-0.2221
40cm
50cm
-8.5560
-3.8226
50cm
60cm
-1.2899
60cm
-0.0149
70cm
-1.0046
70cm
-3.1134
Entfernung
20cm
20cm
30cm
30cm
40cm
40cm
50cm
50cm
60cm
60cm
70cm
70cm
-32,4◦
-0.5681
4.8071
-0.4940
1.7151
4.9999
3.0450
2.8762
2.0946
0.1144
0.0089
1.1444
-0.6560
Abweichungen der gemessenen Winkel von den tatsächli-64,8◦
-59,4◦
-54,0◦
-8.2617 -3.9090 -1.7087
-7.9046 -4.6904 -0.8655
-8.5920 -7.7614 -6.3008
-8.6178 -8.2032 -5.8635
-0.3029 -6.6140 -3.4237
-1.3469 -7.1878 -5.0502
-7.8279 -6.3862 -5.3964
-7.6665 -6.5990 -5.1119
-7.7328 -6.6552 -8.5328
-7.9858 -6.8686 -6.6942
-4.1920 -10.2776 -4.8518
-6.9646 -10.4342 -6.2121
-27,0◦
-21,6◦
0.3788 -0.6860
1.6388 0.9021
-1.2076 -2.5996
-0.9601 -2.4000
3.7078 1.1732
-0.1417 -0.6203
3.3242 0.3433
1.1839 0.2056
1.6023 -0.0795
1.1917 -0.0812
1.0687 0.1318
0.2424 -2.4025
58
-48,6◦
-1.3448
-0.7198
-0.9956
-0.5652
-2.4417
0.1276
-3.4811
-3.9704
-0.5710
-0.6004
-3.3864
-4.1328
-16,2◦
-10,8◦
-2.9327 -3.4674
-1.5041 -3.4382
-3.7642 -3.3508
-3.4578 -3.1633
0.7302 -1.0401
-2.7280 -2.9057
0.1879 -2.0516
-0.1917 -1.9067
-0.2651 -2.1025
-0.2982 -1.5151
1.0761 1.0411
-0.8362 -0.9997
-43,2◦
-0.9612
-0.9106
3.3043
3.4179
2.3531
0.5074
0.4859
-1.5068
0.2434
0.1207
1.3377
-0.5271
-5,4◦
-3.8300
-3.1690
-3.0548
-2.7065
-0.8397
-2.6038
-1.8056
-1.7280
-2.1313
-2.2199
-1.0841
-2.7006
-37,8◦
3.2358
2.6681
2.6162
2.8124
3.5523
3.5980
1.0039
0.7178
2.3177
2.4548
3.5442
2.6637
0,0◦
-1.6578
-2.9112
-2.9491
-2.5981
-0.7626
-2.4172
-1.6251
-1.4795
-1.9830
-1.9735
-0.9021
-3.2562
6.2. ANHANG B: WINKELMESSUNG
Entfernung
20cm
20cm
30cm
30cm
40cm
40cm
50cm
50cm
60cm
60cm
70cm
70cm
5,4◦
-1.6015
-2.8214
-1.7448
-2.6408
-3.4672
-1.6983
-1.4396
-1.4011
-0.0815
-0.1736
-1.2153
1.1125
10,8◦
-0.5474
-1.4117
-1.9466
-2.0862
-3.7885
-1.9793
-1.6440
-1.7423
-0.2976
-0.4529
-0.0341
1.5567
16,2◦
-0.6135
-1.7014
-1.7380
-3.3582
-3.9847
-2.2139
-1.0797
-1.9619
-0.0931
1.7019
0.8185
2.1675
Entfernung
20cm
20cm
30cm
30cm
40cm
40cm
50cm
50cm
60cm
60cm
70cm
70cm
43,2◦
3.0105
1.6925
2.5277
0.6407
2.9585
4.7258
2.6803
1.2213
1.9657
1.9420
-0.2937
2.3550
48,6◦
54,0◦
3.9741 4.9999
2.3412 3.7072
2.5468 2.4214
1.8435 1.0366
2.3925 -0.6719
3.9983 1.0994
0.2987 0.2905
0.5753 -0.4211
1.0053 -2.7768
0.7978 -2.9411
-1.9197 -3.2772
-0.1774 1.7242
59
21,6◦
1.3847
0.1702
-1.0961
-1.4409
-3.5109
-0.8708
-0.9692
-0.9915
1.8585
1.8465
0.7840
2.2833
27,0◦
1.7970
0.9991
-1.5105
-0.6991
-1.2879
0.5349
0.3502
0.6162
1.9211
1.9134
0.7956
2.3979
59,4◦
64,8◦
1.0176 -1.3150
-0.8235 -2.6965
-1.1869 -2.6058
-2.0710 -3.6776
-0.5064 -0.3363
1.1188 1.2853
-4.0606 -5.2934
-4.6745 -5.3593
-1.8334 -0.0975
-2.1077 -0.0992
-0.2080 -0.3987
1.6198 1.5125
32,4◦
2.0223
1.0397
0.2576
0.1992
-1.3842
0.9047
0.9437
0.5231
2.5415
2.4868
-0.1264
2.5308
37,8◦
2.4661
1.1486
-0.4948
-1.3398
-0.5188
4.2842
3.8106
3.8718
2.2650
2.5843
0.4277
2.4701
70,2◦
75,6◦
-5.3909 -5.1229
-6.7733 -6.8742
-4.1560 -9.9764
-7.2748 -10.1136
-0.0623 -1.3857
1.5350
2.1018
-6.8983 -8.3674
-6.7560 -7.7781
-5.6140 -5.2963
-5.2582 -5.6479
-2.5963 -8.9208
-2.5986 -5.5070
6.2. ANHANG B: WINKELMESSUNG
6.2.2
3d Plot Abweichungen
Abbildung 6.2: Plot der Winkelabweichungen
60
Literaturverzeichnis
[Wiki]
http://de.wikipedia.org/wiki/Schall, 10.04.2006
[Tipl]
Paul A. Tipler, Physik, Spektrum Akademischer Verlag, Heidelberg, 3. korrigierter Nachdruck, Heidelberg 2000.
[Nueh]
Dieter Nührmann, Das große Werkbuch Elektronik, Franzis Verlag, München, 4. neue bearbeitet und erweiterte Auflage, München
1984.
[Werle]
Alexander Werle, Nachführen eines Kameragestells, Koblenz 2005.
[Atm]
http://www.atmel.com, 10.04.2006
[Ult]
http://www.picbasic.org/articles/ultrasonic/, 10.04.2006
[Sho]
http://www.informatik.uni-kiel.de/~sho/Studienarbeit/,
10.04.2006
61
Herunterladen