Ultraschall mit Matlab/Simulink: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 230: | Zeile 230: | ||
{| class="wikitable" | {| class="wikitable" | ||
|+ Tab.: Besondere Pins | |+ Tab.: Besondere Pins | ||
|-align="left | |-align="left | ||
| Serielle Kommunikation (UART) || 0 (RX), 1 (TX) | | Serielle Kommunikation (UART) || 0 (RX), 1 (TX) | ||
|- | |- | ||
| Externe Interrupts || 2, 3 | | Externe Interrupts || 2, 3 | ||
|- | |- | ||
Zeile 260: | Zeile 260: | ||
<br/> | <br/> | ||
== Ergebnisse == | == Ergebnisse == | ||
{| class="wikitable" | |||
|+ Tab.: ESC015 Pinbelegung | |||
|-align="middle" | |||
! Wahre Distanz <br/> in cm !! Gemessene Distanz in cm <br/> 1. Messreihe !! Gemessene Distanz in cm <br/> 2. Messreihe !! Gemessene Distanz in cm <br/> 3. Messreihe !! Mittelwert <br/> in cm !! Absoluter Fehler <br/> in cm !! Relativer Fehler <br/> in cm | |||
|-align="middle" | |||
| 2,4 || 7 || 6 || 5 || | |||
|-align="middle" | |||
| 3,6 || 4 || 5 || 5 || | |||
|-align="middle" | |||
| 4,8 || 6 || 6 || 6 || | |||
|-align="middle" | |||
| 6,0 || 6 || 6 || 6 || | |||
|-align="middle" | |||
| 7,2 || 7 || 7 || 7 || | |||
|-align="middle" | |||
| 8,4 || 8 || 8 || 8 || | |||
|-align="middle" | |||
| 9,6 || 9 || 9 || 9 || | |||
|-align="middle" | |||
| 10,8 || 10 || 10 || 10 || | |||
|-align="middle" | |||
| 12,0 || 11 || 11 || 11 || | |||
|-align="middle" | |||
| 13,2 || 13 || 13 || 13 || | |||
|-align="middle" | |||
| 14,4 || 14 || 14 || 14 || | |||
|-align="middle" | |||
| 15,6 || 15 || 15 || 15 || | |||
|-align="middle" | |||
| 16,8 || 16 || 16 || 17 || | |||
|-align="middle" | |||
| 18,0 || 18 || 18 || 18 || | |||
|-align="middle" | |||
| 19,2 || 19 || 19 || 20 || | |||
|-align="middle" | |||
| 20,4 || 20 || 21 || 21 || | |||
|-align="middle" | |||
| 21,6 || 21 || 21 || 22 || | |||
|-align="middle" | |||
| 22,8 || 22 || 23 || 22 || | |||
|-align="middle" | |||
| 24,0 || 23 || 23 || 23 || | |||
|-align="middle" | |||
| 25,2 || 24 || 24 || 24 || | |||
|} | |||
<br/> | |||
<br/> | <br/> | ||
== Einzelnachweise == | == Einzelnachweise == | ||
<references /> | <references /> |
Version vom 7. Mai 2018, 17:57 Uhr
Autor: Sven Gaida
Betreuer: Prof. Dr.-Ing. Ulrich Schneider
Sensor: Lego Ultraschall 9846
Das Ziel der Lehrveranstaltung „Signalverarbeitende Systeme“ mit dieser semesterbegleitenden Prüfung ist es eine Signalverarbeitungskette beschreiben, untersuchen und verstehen zu können. Die Untersuchung des Sensors wird mit der Entwicklungsumgebung MATLAB/Simulink durchgeführt.
Einleitung
Der Lego Mindstorms NXT Ultraschallsensor (Artikel 9846), weiterhin nur NXT Ultraschallsensor genannt, ist ein von Lego entwickelter Sensor um Abstände zwischen sich und der Umgebung zu messen. Der NXT Ultraschallsensor wurde erstmalig Anfang 2006 auf der Messe „Consumer Electroncis Show“ vorgestellt und war seitdem ein fester Bestandteil verschiedener Lego Mindstorms NXT-Sets. Heutzutage ist der NXT Ultraschallsensor nur noch ein Auslaufmodell, da die NXT-Serie Anfang 2013 durch die EV3-Serie abgelöst wurde. Aufgrund dieser Erneuerung wurden einige NXT-Bauteile, darunter auch der NXT Ultraschallsensor, durch neuere und verbesserte Bauteile ausgetauscht. [1]
Lego klassifiziert ihre Sensoren in drei verschiedene Kategorieren: die passiven, aktiven und digitalen Sensoren. Als digitale Sensoren werden die Sensoren bezeichnet, die einen zusätzlichen Mikrocontroller besitzen und mittels dem I2C-Protokoll kommunizieren. Der NXT Ultraschallsensor war der erste digitale Legosensor mit dem es möglich war Abstände zu verschiedenen Objekten berührungslos zu ermitteln und ebenfalls die Distanz zum Sensor zu messen. Dabei misst der Sensor Distanzen wahlweise in Zentimetern oder in Zoll. Es können Abstände von 0 bis 250cm mit einer Messungenauigkeit von ±3cm germittelt werden.[2]
Messprinzip
Das Prinzip des Sensors beruht auf der physikalischen Grundlage der Akustik und der Ausbreitung des Schalls. Der Ultraschall liegt bei Frequenzen oberhalb des menschlichen Hörbereiches und wird von 20kHz bis 1GHz definiert. Der Ultraschall kann entweder pneumatisch oder elektrisch erzeugt werden und dieser kann sich im Gegensatz zu elektromagnetischen Wellen nur in Materie ausbreiten. In vielen Anwendungen ist diese Materie hauptsächlich Luft. Die Abstandsmessung mit Ultraschall basiert auf einer Laufzeitmessung eines Schallpulses. Dafür ist die genaue Kenntnis der Schallgeschwindigkeit, ebenfalls Ausbreitungsgeschwindigkeit genannt, für die Messungen eine primäre Größe. Aufgrund physikalischer Gegebenheiten der Schallausbreitung ergeben sich Abhängigkeiten der Reichweite und der Ausbreitungsgeschwindigkeit des Schalls durch die Lufttemperatur, dem Luftdruck und der relativen Luftfeuchte. Abschließend sei zusammenfassend zu erwähnen, dass die Schallgeschwindigkeit somit die Geschwindigkeit, mit der sich Schallwellen in einem Medium bewegen, beschreibt.
Lufttemperatur
Folgende Gleichung berücksichtigt die Lufttemperatur bei der Berechnung der Schallgeschwindigkeit:
Dabei ist die Temperatur in °C und die Schallgeschwindigkeit bei (331,6m/s).
Die Schallgeschwindigkeit ist somit proportional zur Wurzel der Temperatur.
T in °C | -20 | 0 | +20 | +40 | +60 | +80 |
c in m/s | 319,3 | 331,6 | 343,8 | 355,3 | 366,5 | 377,5 |
Luftdruck
Neben der Temperaturabhängigkeit der Schallgeschwindigkeit existiert auch eine starke Abhängigkeit vom Luftdruck. Steigt dieser nimmt ebenfalls die Schallgeschwindigkeit zu. Die Zusammenhänge werden in der rechten Abbildung dargestellt.
Relative Luftfeuchte
Die linke nachfolgende Abbildung zeigt die Abhängigkeit der Schallgeschwindigkeit als Funktion zur relativen Luftfeuchte bei 20°C. Hierbei ist zu erkennen, dass mit zunehmender Luftfeuchte sich die Schallgeschwindigkeit erhöht. Die anderen Abbildungen stellen die Abhängigkeit zwischen der Reichweite, rel. Luftfeuchte und der Temperatur dar. Es ist deutlich zu erkennen, dass die Reichweite bei niedrigen Temperaturen unabhängig von der rel. Luftfeuchte steigt. Bei geringen Reichweiten hat die Luftfeuchte erst bei ungefähr 0°C und bei hohen Reichweiten bei ungefähr -20°C einen erheblichen Einfluss auf die Reichweite.
-
Abb.: Schallgeschwindigkeit in Abhängigkeit zur relativen Luftfeuchte bei 20°C
-
Abb.: Zusammenhang zwischen geringer Reichweite, rel. Luftfeuchte und Temperatur
-
Abb.: Zusammenhang zwischen hoher Reichweite, rel. Luftfeuchte und Temperatur
Funktionsprinzip
Mithilfe des Taktgenerators aktiviert die Steuerelektronik den Leistungsverstärker periodisch, sodass dieser die Sendeeinheit für kurze Zeit mit einer hohen Spannung und damit auch einer hohen elektrischen Leistung ansteuert. Beim Anlegen der sinusartigen Spannung wird das Piezoelement zum Schwingen angeregt. Hierdurch wird elektrische Energie in mechanische Energie umgewandelt, wodurch der Ultraschallimpuls (Sendeimpuls) entsteht. Dabei arbeitet der Sensor mit einer festen Frequenz und einer Sendedauer von Δt=300µs (=12 Schwingungen). Nach dieser Zeit benötigt der Sender eine gewisse Ausschwingzeit, um wieder in den Anfangszustand zu kommen. In dieser Zeit wechselt die Steuerelektronik vom Sendemodus in den Empfangsmodus. Bei der Empfangseinheit wird der umgekehrte Effekt ausgenutzt. Eine äußere Kraft (einwirkendes Echo) bewirkt auf dem Piezoelement Oberflächenladungen, die als Spannung messbar sind. Somit wird mechanische Energie in elektrische Energie umgewandelt.
Erfassungsbereich
Jeder Ultraschallsensor hat einen gewissen Erfassungsbereich in dem der Sensor die Objekte erkennen kann. Diese wird von der kleinsten und größten Reichweite begrenzt. Laut Datenblatt beträgt die Reichweite 0 bis 250cm mit einer Messungenauigkeit von ±3cm. Eine sehr geringe Entfernung kann mit einem Ultraschallsensor nicht erreicht werden, da dieser Bereich als Blindzone bezeichnet wird. In dieser Blindzone kann der Ultraschallsensor kein Objekt detektieren. Sie wird von der Sendeimpulsdauer und der Ausschwingzeit des Senders verursacht, da während der Übertragung des Sendeimpulses kein Echosignal empfangen werden kann.
Distanzmessung
Die Zeit zwischen dem Senden und Empfangen des Impulses/Schalls ist proportional zum Abstand zwischen Objekt und Sensor. Wie bereits erwähnt ist die Ultraschallgeschwindigkeit eine sehr wichtige Größe, da diese beschreibt mit welcher Geschwindigkeit sich Schallwellen in einem Medium bewegen.
Die Distanzmessung zum nächstgelegenen Objekt kann nun mit folgender Formel berechnet werden:
Die Entfernung wird aus der Multiplikation der gesamten benötigten Echolaufzeit und der Schallgeschwindigkeit errechnet. Da der Ultraschall zum Objekt und wieder zum Empfänger zurücklaufen muss, legt er damit die doppelte Entfernung zurück und muss somit schlussendlich noch halbiert werden.
Beispiel
Der NXT Ultraschallsensor wird vor einem Objekt platziert und nun wird die Entfernung zwischen dem Objekt und dem Sensor gesucht. Die Echolaufzeit wird von einem Mikrocontroller ermittelt und soll betragen. Die Lufttemperatur beträgt 20°C und der Luftdruck, sowie die relative Feuchte können vernachlässigt werden.
Nach der Formel zur Distanzmessung beträgt die Entfernung:
Bei idealisierten Verhältnissen befindet sich der Sensor 20,62cm vor dem Objekt.
Aufbau und Schaltplan
Primäre Elemente des Sensors sind der Mikrocontroller ESC015 und der dazugehörige externe Oszillator mit einer Frequenz von 3.58MHz, die Sende- und Empfangseinheiten TCT40-12F2 / TCT40-12S2 und die 6-fach invertierende Treiberstufe mit dem Baustein CD4049.
Der ESC015 ist ein spezieller 4-bit RISC Sound Prozessor mit drei verschiedenen I/O Ports, wobei Port 1 nur als reiner Input-Port verwendet werden darf. Alle Ports haben Softwarekontrollierte "Pull Low" Widerstände. Zudem verfügt der Mikrocontroller über eine I2C-Schnittstelle und übernimmt die Aufgabe der Steuerelektronik.
Symbol | I/0 | Funktionsbeschreibung |
---|---|---|
OSCI | I | Oszillator In |
OSCO | O | Oszillator Out |
P1.0~3 | I | Bits 0~3 Port 1 |
P2.0~3 | I/O | Bits 0~3 Port 2 |
P3.0~3 | I/O | Bits 0~3 Port 3 |
VCC | I | 2.2V bis 5.1V Versorgungsspannung |
GND | I | Masse |
RESETB | I | Reset Pin (intern pull-high) |
Der Baustein CD4049 ist ein sogenannter Hex invertierender Treiber/Verstärker. Das Hex (=6) bezieht sich auf die Anzahl der vorhandenen Treiber. Der CD4049 hat primär zwei verschiedene Anwendungsfälle. Zum Einen kann dieser Baustein als Logikbaustein eingesetzt werden, womit der Ausgang immer das entgegengesetzte Signal als das am Eingang erhält. Das Eingangssignal wird also invertiert. Zum Anderen und wie hier in der Schaltung kann der Baustein als Leistungsverstärker eingesetzt werden. Dadurch ist es möglich die Sendeeinheit mit einer kurzzeitigen hohen Spannung zu betreiben.
Die Sende- und Empfangseinheiten sind für die Ein- und Auskopplung des Ultraschalls zuständig. Hieraus resultiert auch die Empfindlichkeit und die Reichweite den Sensors. Beide Einheiten arbeiten bei einer festen Frequenz von 40kHz.
-
Abb.: Kompletter Aufbau
-
Abb.: Ansicht oben
-
Abb.: Ansicht unten
-
Abb.: Ansicht Sensoren
Signalvorverarbeitung
Analog-Digital-Umsetzer
Bussystem
Der Sensor kommuniziert mittels dem I2C-Protokoll auf dem I2C-Bus. I2C, auch TWI (Two-Wire-Interface) genannt, ist eine von der Firma Philips (heute NXP Semiconductors) entwickelte synchrone serielle Zweidraht-Verbindung, somit werden für die Kommunikation mit dem Sensor nur zwei weitere Leitungen, die Taktleitung SCL (Serial Clock) und die Datenleitung SDA (Serial Data), benötigt. Obwohl der I2C Bus vor guten 30 Jahren entwickelt worden ist, ist es heutzutage aufgrund der einfachen Implementierung, der niedrigen Kosten und der hohen Übertragungsrate noch immer ein Industriestandard für Steuerungs-, Diagnose und Überwachungslösungen in eingebetteten Systemen.
I2C wurde als Master-Slave-Bus konzipiert, sodass ein Datentransfer immer durch einen Master gestartet wird. Der Master gibt den Takt und den Betriebsmodus vor und initiiert die byteweise Datenübertragung. Dazu selektiert der Master einen Slave durch seine Slave-Adresse, die innerhalb eines Busses eindeutig sein muss. Zu jeder Zeit bleibt der Slave passiv und lauscht nur auf die Slave-Adresse und vergleicht diese mit seiner eigenen Slave-Adresse. Erst wenn die Adressen identisch sind, greift der Slave auch aktiv ins Protokoll ein. Mit einer 7-Bit-Adresse können bis zu 112 Slaves und einer 10-Bit-Adresse bis zu 1008 Slaves angesprochen werden. [3]
Hardwareaufbau
Die nebenstehende Abbildung zeigt, wie die einzelnen Buskomponenten hardwaremäßig miteinander verbunden werden. Hierbei fungiert der Arduino Uno als Master und der NXT Ultraschallsensor als Slave. Die beiden Busleitungen sind an sogenannte Pull-up-Widerstände angeschlossen. Dieses ist in der Abbildung nur zur Illustration dargestellt, da die beiden Widerstände laut dem Schaltplan schon im Sensor integriert sind. Die Widerstände haben eine Größe von 4.7kΩ und zusammen mit dem Sensor, der Open-Collector-Ausgänge, bzw. Open-Drain, besitzt, entsteht eine Wired- AND-Schaltung. Das bedeutet, wenn die Versorgungsspannung von 5V am Open-Collector-Ausgang liegt UND der Open-Collector geschaltet ist, wird das Signal auf Masse/Low-Pegel gezogen andernfalls auf einen High-Pegel. [3]
Um klare und definierte Pegel zu erhalten, darf der Lowpegel maximal 0,3·VDD (<1,5V) und der Highpegel mindestens 0,7·VDD (>=3,5V) betragen. Der Bereich zwischen 1,5V und 3,5V wird als undefinierter Bereich bezeichnet. Zudem arbeitet der I2C mit ein positiven Logik, sodass ein High-Pegel auf der Datenleitung einer logischen "Eins" entspricht. [3]
Protokoll und Adressierung
Das I2C Protokoll kann grob in sechs Zustände eingeteilt werden: Bus frei, Startbedingung, Datenbit, Acknowledge, No Acknowledge und Stoppbedingung. Im folgenden soll kurz auf die einzelnen Zustände drauf eingegangen werden. [4] Verschiedene I2C-Besonderheiten, wie die 10-bit Adressierung oder Clock Stretching, werden an dieser Stelle nicht erläutert.
(1) Bus frei
Zu Beginn jeder Kommunikation muss der zusendende Master überprüfen, ob der Bus frei ist und kein anderer Master bei einem Mehr-Mastersystem gerade den Bus belegt. Der Bus ist nun frei, wenn SCL und SDA dauerhaft High sind. Dieser Zustand wird auch ebenfalls Ruhezustand genannt
_________________ SCL _________________ SDA
(2) Startbedingung
Bei einem Start-Signal schließt der Master zuerst den SDA- und dann den SCL-Schalter. Dadurch zieht er beide Pegel nacheinander auf Low. Dadurch werden alle Slaves in Bereitschaft versetzt und warten nun auf das Adressbyte.
__________ / \ SCL ___/ \__ __________ \ SDA \_______
(3) Datenbits
Die Datenbits können zwei logische Zustände einnehmen: 0 (SDA Low) oder 1 (SDA High). Diese Daten sind gültig während SCL auf High liegt.
Logisch 0:
____ / \ SCL _____/ \____ ___ __ \ / SDA \________/
Logisch 1:
____ / \ SCL _____/ \____ ________ / \ SDA ___/ \__
(4) Acknowledge
Acknowledge, ebenfalls kurz ACK genannt, ist eine Quittierung/Bestätigung des Masters und des Slaves. Diese Bestätigung wird bei Schreib- und Lesesequenzen benötigt. Hierfür zieht der Master/Slave den SDA auf Low bei einem gültigen Takt.
____ / \ SCL _____/ \____ ___ \ SDA \____________
(5) No Acknowledge
Falls der Master nach dem Lesen des letzten Bytes keine Bestätigung schickt, möchte dieser keine weiteren Daten mehr lesen.
____ / \ SCL _____/ \____ ____________ / SDA ___/
(6) Stoppbedingung
Mit der Stoppbedingung signalisiert der Master dem Slave, dass er die Datenübertragung beenden möchte. Hierzu zieht er bei einem High der Taktleitung ebenfalls die Datenleitung auf High.
____________ / SCL ___/ ______ / SDA _________/
Nach der Startbedingung sendet der Master das erste Byte (MSB zuerst), das die eigentliche Slave-Adressierung erhält, aus. Die Adressierungsbits sind insgesamt 7Bit groß und das letzte Bit (LSB) gibt die Datenrichtung an. Dieses letzte Bit wird als Read/Write (R/W) Bit bezeichnet, wobei 0 für schreiben und 1 für lesend steht. Bei korrekter Slave-Adressierung antwortet der Slave nun mit einem ACK. Hierauf folgt nun die Datenübertragung mit dem höchstwertigen Bit (MSB zuerst). Dieses geschieht solange, bis der Master mit einer Stoppbedingung die Datenübertragung beenden möchte. [3]
-
Abb.: I2C Protokoll
-
Abb.: I2C Adressierung und Befehle (1/2)
-
Abb.: I2C Adressierung und Befehle (2/2)
Projektrealisierung
Vor der Projektdurchführung wurden einige Ideen und Pläne zur späteren Realisierung erarbeitet. Die größte Fragestellung war, wie man mit einem einzelnen Sensor und dem dazugehörigen Datenkabel eine Signalauswertung durchführen kann. Sicherlich wäre die einfachste und schnellste Lösung die gewesen den NXT Ultraschallsensor direkt an das Lego Mindstorms Zielsystem anzuschließen und auszuwerten. Dieses Vorgehen wäre aber keine Herausforderung gewesen, sodass der Umweg über einen Arduino Uno als Zielsystem gegangen wurde. Hierbei kommuniziert der Arduino mit dem NXT Ultraschallsensor per I2C. Die empfangenen Messwerte werden daraufhin per USB in MATLAB/Simulink verarbeitet. Dazu wird der COM-Port in der Entwicklungsumgebung ausgelesen.
Arduino Uno
Für das Projekt wurde ein Arduino Uno in der Version R3 genutzt. Heutzutage ist dieser Arduino der "Standard-Arduino" und ist für die meisten Projekte völlig ausreichend. Herzstück des Einplatinenrechners ist der Mikrocontroller von ATMEL, der ATmega 328P. Mit der Bootloader-Software und einem zweiten Mikrocontoller dem ATmega8U2, der die USB Kommunikation herstellt, können eigene Arduino-Programme schnell per USB übertragen werden. Insgesamt verfügt der Arduino Uno über 14 digitale I/O Pins, wovon sechs als PWM-Kanäle genutzt werden können und sechs analoge Input Ports. Zudem kann der Arduino Uno mit den Bussystemen UART, SPI und I2C kommunizieren. [5]
Mikrocontroller | ATmega328P |
Betriebsspanunng | 5V |
Empfohlene Eingangsspannung | 7-12V |
Digitale I/O Pins | 14 (wovon 6 PWM-Kanäle sind) |
Analoge Input Pins | 6 |
Ausgangsstrom pro I/O Pin | 20mA |
Ausgangsstrom am 3.3V Pin | 50mA |
Flash Speicher | 32KB, davon wird 0,5 KB vom Bootloader verwendet |
SRAM | 2KB |
EEPROM | 1KB |
Clook Speed | 16MHz |
Serielle Kommunikation (UART) | 0 (RX), 1 (TX) |
Externe Interrupts | 2, 3 |
PWM Pins | 3, 5, 6, 9, 10, 11 |
SPI | 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK) |
I2C | A4 (SDA), A5 (SCL) |
Analoge Referenzspannung | AREF |
Integrierte LED | 13 |
Kommunikation
Für die eigentliche Kommunikation zwischen dem Arduino und dem Sensor wurde das Datenkabel aufgetrennt und mit Female-Jumperkabeln erweitert. So konnte eine schnelle Realisierung der Schaltung auf dem Breadboard durchgeführt werden.
-
Abb.: Verkabelung Stecker
-
Abb.: Schaltplan erstellt in Fritzing
Arduino Code
MATLAB/Simulink
Digitale Signalverarbeitung
Ergebnisse
Wahre Distanz in cm |
Gemessene Distanz in cm 1. Messreihe |
Gemessene Distanz in cm 2. Messreihe |
Gemessene Distanz in cm 3. Messreihe |
Mittelwert in cm |
Absoluter Fehler in cm |
Relativer Fehler in cm |
---|---|---|---|---|---|---|
2,4 | 7 | 6 | 5 | |||
3,6 | 4 | 5 | 5 | |||
4,8 | 6 | 6 | 6 | |||
6,0 | 6 | 6 | 6 | |||
7,2 | 7 | 7 | 7 | |||
8,4 | 8 | 8 | 8 | |||
9,6 | 9 | 9 | 9 | |||
10,8 | 10 | 10 | 10 | |||
12,0 | 11 | 11 | 11 | |||
13,2 | 13 | 13 | 13 | |||
14,4 | 14 | 14 | 14 | |||
15,6 | 15 | 15 | 15 | |||
16,8 | 16 | 16 | 17 | |||
18,0 | 18 | 18 | 18 | |||
19,2 | 19 | 19 | 20 | |||
20,4 | 20 | 21 | 21 | |||
21,6 | 21 | 21 | 22 | |||
22,8 | 22 | 23 | 22 | |||
24,0 | 23 | 23 | 23 | |||
25,2 | 24 | 24 | 24 |
Einzelnachweise
- ↑ "Lego Mindstorms NXT" von Wikipedia
- ↑ "Mindstorms Education" von Generationrobots
- ↑ 3,0 3,1 3,2 3,3 "I2C-Bus" von ELV Journal
- ↑ "I2C-Zustände" von Computer:club^2
- ↑ "Arduino UNO" von Arduino Tutorial