„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