Gyroskop mit Matlab/Simulink
Autor: Philipp Tewes
Betreuer: Prof. Dr.-Ing. Ulrich Schneider
Sensor: EV3-Gyrosensor-45505
Für die Lehrveranstaltung Signalverarbeitende Systeme des Studiengangs Business and Systems Engineering im SoSe 2018 war es die Aufgabe einen Gyro Sensor des Lego EV3 Roboter mit Matlab/Simulink auszulesen und seine Messwerte zu verarbeiten. Verwendet werden konnten dazu zwei Variationen, eine Möglichkeit war es, den EV3 Sensor an ein EV3 zu Verbinden und diesen dann mit dem PC, auf welchem Matlab die Werte verarbeitet auszulesen. Die andere Möglichkeit welche in dem Fall des Gyso Sensors verwendung fand, war es den Sensor an einen Arduino anzuschließen, dieser Kommuniziert mit dem PC auf welchem Matlab/Simulink die Sensordaten auswerte kann.
Lego Mindstorms
Der Lego Mindstorms EV3 Roboter ist der dritte Roboter welcher von Lego entwickelt wurde. Die erst Entwicklung war der RCX welcher im Jahr 1998 erschienen ist. Diese Variante ist von der Leistungsfähigkeit den neueren Entwicklugen deutlich unterlegen, bot aber schon drei Eingänge und 3 Ausgänge an. Beim Aufbau der Systeme hat Lego mit diesem begonnen eine zentrale Recheneinheit mit externen Motoren und Sensoren zu ergänzen. Auf diese weise sind sehr flexible Konstruktionen möglich. Beim RCX wurde die Konstruktion der Bauteile auf die Art vorgenommen, das diese mit dem normalen Lego System kompatiebel sind. Für die Verbindung der Komponenten trifft dies ebenfalls zu, diese werden durch einen Lego "Block" versteckt (Abb. 3). [1]
Mit der Lego Mindstorms NXT Serie welche im Jahr 2006 auf dem Markt erschienen ist, gab es deutliche Veränderungen gegenüber des RCX Roboters und seiner Anbauteile (Abb. 2). Die Integrationsmöglichheit in das normale Lego Stecksystem wurde auf das System von Lego Technik umgestellt. Bei den Sensoren wurden alle neu entwickelt ohne eine Abwärtskompatibilität zu bieten. Die NXT Serie bot neben analogen Sensoren erstmals digitale Sensoren welche die Messwerte intern bestimmen und per BUS-System an den NXT senden. An vielen Schulen und Universitäten fand der Lego NXT Abnehmer, hier wurde dieser für die Einführung in Programmierung verwendet. Bei den Verbindungen der Bauteile gab es gegenüber des RCX ebenfalls eine nicht Abwärtskompatibile Änderung, die Verbindung wurde von der Lego "Block" Verbindung zu einer Art RJ12 Stecker umgestellt. [2] [3]
Die aktuellste Entwicklung ,aus 2013, der Lego Mindstorms Serie ist der EV3 (Abb. 1). Dieser bietet ebenfalls wie der NXT eine integrationsmöglichkeit in das Lego Technik System. Bei dieser Entwicklung wurde ein größerer Wert auf Abwärtskompatibilität gesetzt. Dies gillt für die Sensoren wie für die Kabelverbindungen. Bei den Schnitstellen gab es eine Erweiterung auf die Möglichkeit 4 Motoren mit dem EV3 Verbinden zu können. Neben dieser Änderung wurde der EV3 mit mehr Tasten und stärkerer Rechen Hardware ausgestattet, sowie mehr Speicherplatz. Die digitalen Sensoren übermitteln die Messwerte beim EV3 via UART welches zu der I2C des NXT eine weitere Veränderung darstellt.
Lego EV3 Gyro-Sensor
Bei dem Lego Gyrosensor (Abb. 4) handelt es sich um einen digitalen Sensor um Drehungen um die Hochachse ermitteln zu können. Diese kann bis zu einer Geschwindigkeit von 440º / Sekunde gemessen werden. Die Messabweichung liegt in einem Bereich von Plus/Minus 3º bei einer Drehung um 90º. Die Bestimmung der Drehrate um andere Achsen ist mit diesem Sensor nicht möglich, es können nur Drehungen um die Hochachse (z-Achse) gemessen werden.
Bei der Kommunikation mit dem EV3 wurde auf die UART Schnittstelle zurückgegriffen, der Sensor beinhaltet einen 8 Bit Microkontroller welcher für die Datenverarbeitung und Datenversendung zuständig ist. Der Microkontroller übermittelt selbstständig 1000 Messwerte in der Sekunde. Der Sensor versendet Messwerte wann immer diese eine Änderung aufweisen, neben dieser selbstständigen Übermittlung ist es ebenfalls möglich das der EV3 den aktuellen Messwert abfragen kann.
Wird der Gyrosensor mit dem EV3 Verbunden, beginnt dieser damit sich beim EV3 als Gyrosensor "anzumelden". Wurde dies erfolgreich Durchgeführt übermittelt der Gyrosensor seine möglichen Messmöglichkeiten und Wertebereiche der gesendeten Messwerte. Nach dem Abschluss dieses Anmeldevorgangs startete der Gyrosensor mit der Übermittlung von Messwerten an den EV3. Es kann zwischen drei verschiedenen Modi gewechselt werden. Der Default Modus ist der Gyro Winkel Modus, hierbei wird kontinuierlich gemessen und die Winkelgeschwindigkeit akkumuliert, dies wird übersetzt in einen relativen Winkel. Der relative Winkel bezieht sich auf die Drehung seit dem letzten Zurücksetzen des akkumulierten Winkels. Wird der Gyrosensor zu langsam gedreht, oder schneller als die maximale Geschwindigkeit von 440º / Sekunde, wird die relative Winkelmessung ungenau. Neben diesem Modus gibt es den Gyro Modus, bei diesem wird die Gierrate kontinuierlich bestimmt. Wenn sich der Sensor nicht dreht, ist dieser Wert Null. Die schnellste Rotationsgeschwindigkeit, die der Sensor bestimmen kann, beträgt 440 Grad/Sekunde. Der dritte Modus des Gyrosensors ist der Gyro und Winkel Modus, bei welchem die identischen Messungen wie in den zuvor behandelten Modi durchgeführt werden. Der Unterschied liegt darin das beide Messwerte gleichzeitig an den EV3 versendet werden. [4]
Messprinzip
Ein Gyroskop, auch Kreiselinstrument bezeichnet, ist ein rotierender symmetrischer Kreisel, der sich in einem beweglichen Lager dreht. Dieser ist frei in einem Käfig beweglich aufgehanden. Aufgrund der Drehimpulserhaltung weist ein Kreisel ein hohes Beharrungsvermögen gegenüber äußeren Lageänderungen im Raum auf. Gyroskope werden als Navigationsinstrumente sowie zur aktiven Lageregelung eingesetzt, insbesondere in der Luftfahrt und Raumfahrt. Bei der Lageregelung von Raumflugkörpern wie Satelliten oder Raketen wird der Effekt genutzt, dass das Gesamtsystem aus Raumflugkörper und Gyroskop seinen Drehimpuls beibehält. Hierdurch kann die Drehimpulsübertragung zwischen beiden bestimmt werden und die Lage gesteuert.
Historisch
Die bei Gyroskopen verwendeten Kreiselsysteme lassen sich als geschlossenes System betrachten. Der Drehimpuls dieses Systems bleibt konstant. Wird durch eine äußere Kraft versucht die Drehachse des Kreisels zu kippen, resultiert hierdurch ein Drehmoment (Abb. 5). Damit das System seinen Gesamtimpuls bewahren kann, kippt die Kreiselachse senkrecht zur angreifenden Kraft. Bekannt ist dies vermutlich jedem durch Spielzeugkreisel, dessen Achse durch die ihn kippen wollende Schwerkraft entlang eines Kegelmantels präzediert. Durch diesen Effekt, der Massenträgkeit und des Drallsatzes ist es möglich die Lageänderung eines Objektes zu bestimmen. Hierraus ergeben sich zwei Messprinzipien. Soll ein Bezug zur Lage hergestellt werden, kann die Stabilität der Kreiselachse verwendet werden. Durch das Bestreben eines symmetrischen Kreisels die Drehachse im Inertialraum beizubehalten, ist ein Bezug zur Lage gegeben. Dies ist bekannt vom z.B. künstlichen horizont in Flugzeugen. Das weitere Messprinzip ist die Präzession, hierbei kann eine Kraft gemessen werden die im direkten Zusammenhang zur Präzession steht. Hierdurch wird ebenfalls eine Lageänderung messbar. [3] [5]
Modern
Kreiselinstrumente haben den Nachteil das sie relativ großen Bauraum benötigen und dazu teuer sind. Der Verbau in Robotern oder Handys würde so nicht in Frage kommen. Moderne Gyroskope, wie es im Lego EV3 Gyrosensor verbaut ist, verwenden eine andere Technik zur Bestimmung einer Lageänderung und damit Drehrate. Die verwendete Technik wird MEMS genannt. Bei Gyroskopen mit dieser Technik dreht sich kein Kreisel mehr in einem Käfig, sondern wird ein Körper in eine definierte Vibration versetzt. Genutzt wird der Effekt der Corioliskraft, diese Besagt das bei jeder Drehbewegung im Raum die Größe von 2?v entsteht. Hierbei handelt es sich um ?, die Drehrate, und v die Bahngeschwindigkeit. Zur Bestimmung der Lageänderung wird genutzt, dass, wenn ein vibrierendes Objekt im Raum gedreht wird die Corioliskraft diese Vibration verändert. Gemessen wird der Grad der Veränderung der Vibration durch die Corioliskraft. In Schwingung werden sehr kleine Bauteile gebracht, die Schwingung beträgt oft zwischen 16 kHz bis zu 32 kHz. Über den Schwingungsmodus lässt sich die Drehrate bestimmen. Die Veränderung des Schwingungsmodus wird oft, wie auch im Fall des Lego EV3 Gyroskop, kapazitiv bestimmt (Abb. 6). Eine seismische Masse befindet sich zwischen zwei Kondensatorplatten. Durch die Lagerung und Vibration der Masse verändert sich durch die Corioliskraft, bei einer Drehung, die Position der Masse, dies bedeutet eine Feldänderung, welche bestimmt werden kann. Es wird von einem kapazitiven Wandler gesprochen welcher die Veränderung der Vibration bestimmt und in die Drehrate umrechnet. [6] [7]
Aufbau
Bei dem in diesem Projekt behandelten Gyro Sensor handelt es sich um eine Entwicklung von Lego selbst. Er stammt nicht wie viele Sensoren vom NXT Roboter vom Unternehmen HiTechnics. Der Sensor ist als ein digitaler Sensor entwickelt worden, dieser gibt also kein analoges Signal aus welches vom EV3 ausgewertet wird. Der eigentliche Gyro Sensor besteht aus drei Einheiten, eines Spannungswandlers, eines 8 Bit Microkontrollers und des eigentlichen Gyroskops. Die Messwerte werden im Sensor selbst berechnet und gefiltert, kommuniziert wird über die UART Schnittstelle. Hierrüber übermittelt der Sensor selbstständig seine Messwerte. [4]
Spannungswandler
Versorgt wird der Gyro Sensor im normalen Fall vom EV3 Roboter mit einer Spannung von 4.4V, dies ist Einheitlich und wird vom EV3 nicht variiert. Der Microkontroller und das Gyroskop selbst im Sensor benötigen aber eine Eingangsspannung von 3.3V. Der Spannungswandler besitzt die Aufgabe die Eingangsspannung des Sensors die vom EV3 Roboter gespeist wird, auf die benötigten Arbeitsspannungen des Gyroskop und des Microkontrollers zu wandeln. Beim Spannungswandler handelt es sich um den XC6201P33 welcher eine maximale Eingangsspannung von 12V wandeln kann, aus diesem Grund ist es möglich den Sensor mit der Spannung des USB Ports des Computers zu versorgen, welche 5V beträgt.
Datenblätter zum Spannungswandler sind im SVN Ordner für eine detailliertere Einsichtsmöglichkeit abgelegt.
Gyroskop
Beim verbauten Gyroskop handelt es sich um das ISZ-655, dieses ist ein einachsiges Gyroskop welches um die Z-Achse misst. Bei Gyroskopen ist es ein häufiges Problem, dass die Messung mit einem Drift des Messwertes behaftet sind. Diese Störung muss heraus gerechnet werden, möglich ist dies z.B. mit der Koppelung eines Beschleunigungssensors. Beide Sensordaten können so z.B. in einem Kalmanfilter fusioniert werden und die Störung herausgerechnet. Dieses Verfahren ist je nach Umsetzung rechenaufwenig, was einen Grund für den Verzicht dieses Verfahrens im Fall dieses Gyrosensors darstellen könnte. Um die Eliminierung durch die Verwendung eines Kalmanfilters oder eines Komplementärfilters durchführen zu können müsste ein weiterer Sensor verbaut werden. Kombiniert werden bei diesen verfahren Sensoren mit hochfrequenten und niederfrequenten Störungen. Aus dem Grund, dass der Drift eines Gyroskops niederfrequent ist, könnte ein Beschleunigungssensor verwendet werden, denn weist dieser eine hochfrequente Störung auf. Weitere Sensoren können in den Datensätzen welche durch Lego veröffentlicht wurden nicht gefunden werden.
Im Fall des ISZ-655-Gyroskop handelt es sich um ein zweimassen- Vibrations MEMS Gyroskop. Die Verwendung von zwei Massen welche gegensätzlich oszilliert werden, haben den Hintergrund externe Beschleunigungen bestimmen zu können. Diese würden die Messung verfälschen. Die Prüfmassen werden bei Resonanz elektrostatisch oszilliert. Ein interner automatischer Verstärkungsregelkreis steuert präzise die Oszillation der Prüfmassen. Der Block Charge Pump Regulator erzeugt die Spannung, die erforderlich ist, um die mechanische Struktur zu oszillieren. Der Coriolis Effekt beeinflusst die Vibration, die durch einen kapazitiven Abgriff detektiert werden. Das resultierende Signal wird verstärkt, demoduliert und gefiltert, um eine analoge Spannung zu erzeugen, die proportional zur Winkelgeschwindigkeit ist. Die Oszillation oder auch Schwingung wird in einem Vakuum durchgeführt. Ändert sich der Innendruck, z.B. durch starke thermische oder physische Belastung des Sensors, kann dies signifikanten Einfluss auf die Präzision des Sensors haben.
Um die zu Abweichung führenden Temperaturveränderungen auszugleichen, wird ein Skalierungsfaktor aufgeschaltet. Der Skalierungsfaktor des Gyroskops ist abhängig von der Amplitude der mechanischen Bewegung und der Trimmeinstellung der internen Verstärkungsstufen. Der Schwingkreis steuert präzise die Amplitude, um eine konstante Empfindlichkeit über den Betriebstemperaturbereich aufrechtzuerhalten und keine Messbeeinflussung durch Temperaturveränderungen zu bekommen. Für die Ermittlung der Temperatur ist ein integrierter Temperatur Sensor (Proportional zur absoluten Temperatur) enthalten, Temperaturinformationen sind auf Pin 20 zu erhalten.
Die Aufgabe des Blocks des Rate Sensor ist es, die Winkelgeschwindigkeit um die Z-Achse, unter Verwendung von InvenSens proprietärer hergestellter Bulk-Silizium-Technologie, zu erfassen. Die Struktur ist auf Waferebene aufgebaut und hermetisch abgeschlossen. Die hermetische Abdeckung schützt den Gyro Sensor vor elektromagnetischen Störungen sowie Funkstörungen (EMI / RFI). Verwendet wird das bereits erwähnte zwei-Massen-Design, um Störungen durch lineare Beschleunigung zu eliminieren. Der Block Oszillatorschaltung erzeugt elektrostatische Kräfte, um die Struktur in Resonanz zu schwingen. Die Schaltung erfasst die Vibration durch Messen der Kapazität zwischen der oszillierenden Struktur und einer festen Elektrode. Die Oszillatorschaltung schaltet in Quadraturphase mit der Kapazitätsmessung, um bei Resonanz zu schwingen.
Der Block Coriolis Sense besitzt die Aufgabe, die durch die Coriolis Kraft bewirkte Schwingungsänderung, welche auf die mechanische schwingende Struktur wirkt, zu bestimmen. Die resultierende Vibration wird wie bei der Oszillatorschaltung kapazitiv gemessen. Dieses Signal wird mittels rauscharmer ladungsintegrierender Verstärkerstufen und Verstärkungsstufen in eine wellenförmige Spannung umgewandelt. Mit diesem Signal arbeitet der Demodulator weiter. Die Amplitude entspricht der Drehrate und die Trägerfrequenz ist die mechanische Antriebsfrequenz. Der Synchrondemodulator wandelt die durch die Coriolis Kraft entstandenen Erfassungswellen in ein Niederfrequenz Winkelgeschwindigkeitssignal um. Das Signal des Demodulationsstufen Blocks ist ein Tiefpassfilter nachgeschaltet. Dieser Filter dämpft Rauschen und hochfrequente Artefakte vor der Endverstärkung.
Wie bereits erwähnt handelt es sich im Fall des Gyroskops im Lego Gyrosensor um ein sogenanntes MEMS Gyroskop, diese weisen einen hohen Drift über der Zeit aus. Dieser kann bis zu 20º / Stunde betragen. Aus diesem Grund besitzt das Gyroskop den Auto Zero Block. Dieser reduziert den durch Offset-Drift verursachten DC-Offset. Die Implementierung dieser Funktion variiert je nach Anwendungsanforderung und wird von Lego nicht offengelegt. Pin 21 (AZ) kann verwendet werden, um die Auto Zero Funktion einzustellen und die Vorspannung auf ungefähr VREF zurückzusetzen. Aus dem Grund das die Signale keinen Drift aufweisen, wird davon ausgegangen das Lego diese Funktionalität verwendet hat.
Das Gyroskop besitzt zwei Ausgänge (Z-OUT und Z4.5OUT), mit Skalierungsfaktoren und Full Scale Empfindlichkeiten, die um einen Faktor von 4,5 variieren. Mit zwei Empfindlichkeiten kann der Endbenutzer einen Ausgang für schnellere Bewegungen (über einen vollen Skalenbereich von ± 2000º / Sekunde) und einen zweiten Ausgang, der für langsamere Bewegungen (über einen vollen Skalenbereich von ± 440º / Sekunde) zugreifen. Somit kann ein Analog Digital Wandler (ADC) mit niedrigerer Auflösung verwendet werden, um die Bewegung zu digitalisieren, wobei die Verstärkung von 4,5 in dem Ausgang Z4.5OUT dem Benutzer effektiv zwei zusätzliche Bits an Auflösung ermöglicht.
Microkontroller
Wie bereits erwähnt handelt es sich beim Gyro Sensor für den EV3 Roboter um einen digitalen Sensor, alle Messwerte werden im "Sensor" verarbeitet. Diese Aufgabe übernimmt der Microkontroller des Unternehmens ST Elektronics, es handelt sich um das Modell STM8S103F3. Bei diesem Handelt es sich um einen 8 bit Microkontroller welcher mit einem Takt von 16 MHz getaktet ist. Die genauen Spezifikationen sind in der Tabelle 2 nachzusehen oder im Datenblatt im SVN Ordner. Zu den Aufgaben des Microkontrollers gehört es mit dem integrierten A/D Wandler das analog Signal welches das Gyroskop ausgibt zu wandeln und zu Filtern. Neben dieser Aufgabe ist es die Aufgabe des Microkontrollers die Kommunikation mit dem EV3 durchzuführen und diesem die Messwerte über die UART Schnittstelle zu senden. Der Aufbau als Blockbild des verwendeten Microkontrollers ist in der Abbildung 9 zu sehen.
Einheit | Merkmal | |
---|---|---|
Core | 16 Mhz advanced STM8 core mit Harvard Architektur | |
Speicher | ||
Programm Speicher | 8 Kbyte Flash | |
Data Speicher | 640 byte EEPROM | |
Spannungsversorgung | 2.95 V - 5.5 V | |
Kommunikation | ||
UART | SmartCard, IrDA, LIN master mode | |
SPI | 8 Mbit/s | |
I2C | 400 kbit/s |
Analog Digital Wandler
Um das Gyroskop welches ein analoges Signal ausgibt einlesen zu können, bedarf es einem analog zu digital Wandler.
Dieser wird dazu verwendet das kontinuierliche Eingangssignal in einzelne diskrete Abtastwerte digital aufzulösen. Hierbei ist eine Qantiesirung nötig, denn stehen in jedem Fall nur endliche Ausgangswerte zur verfügung (Abb. 10). Das Ergebnis einer A/D Wandlung lässt sich in einem Signal Zeit Diagramm in einer Punktabfolge mit endlichen horizontalen und vertikalen Abständen Zeichnen. Die Hauptparameter eines A/D Wandlers sind die Bittiefe und seine maximale Abtastrate bei dieser. Die Umsetzzeit sollte wesentlich kleiner als das Kehrwert der Abtastrate betragen. Die Bittiefe eines A/D Wandlers begrenzt die maximal mögliche Auflösung und damit resultiert eine begrenzte Genauigkeit, mit welcher das Eingangssignal gewandelt wird. [8]
Diese Aufgabe wird von dem im Sensor verbauten 8 Bit Microkontroller übernommen, dieser wandelt das erhaltende analog Signal in einen digitalen Wert. Aufgelöst wird das analoge Signal in ein 10 Bit digitales Signal. Die benötigte Zeit für eine Wandlung beträgt 14 Taktzyklen. Seine Aufgabe ist es eine analoge Eingangsspannung durch succsessive Approximation in einen 10 bit Digitalwert zu wandeln. Der kleinste mögliche Wert entspricht GND, der maximale Wert entspricht der Referenzspannung, welches die Arbeitsspannung des Microkontrollers darstellt. Betrieben werden kann der Analog Digital Wandler in zwei Arten, der kontinuierlichen oder der einzelnen Wandlung. Bei der Einzelwandlung wird jede Wandlung durch das Programm einzeln gestartet, hierzu wird ein durch das Programm getriggert. Bei der kontinuierlichen Wandlung werden die Eingänge ständig ausgewertet und die Daten im ADC Daten Register aktualisiert. Wurde eine Wandlung abgeschlossen, kann ein Interrupt ausgelöst werden.
Das succsessive Approximations Verfahren, wird für die Umsetzung des Analogsignals, des Gyroskop, für die Wandlung in ein Digitalsignal benutzt. Es basiert auf dem Vergleich der analogen Eingangsspannung mit einer Referenzspannung und wird auch als Wägeverfahren bezeichnet. Für dieses Verfahren bedarf es einem digital zu Analog Wandler um die Referenzspannungen zu erzeugen. Es erfolgt ein schrittweiser und wiederholter ständiger Vergleich, wobei die Referenzspannung so variiert wird, dass sie sich immer mehr der Eingangsspannung annähert. Es werden also nicht direkt Spannungen gemessen, sondern vergleicht. Nach dem ersten Vergleich im Komparator wird die Referenzspannung in einem größeren Digitalschritt an die Spannung des Analogsignals angepasst. Anschließend wird in folgenden Vergleichen der Digitalschritt der Referenzspannung verringert. Nach einem erneuten Vergleich erfolgt eine weitere Verringerung um immer näher an den wahren Wert zu gelangen. Für jeden Schritt, also jeden neuen Vergleich, ist jeweils ein eigener Taktzyklus erforderlich. [8]
Weist die Eingangsspannung beim ersten Schritt des A/D Wandlers einen niedrigeren Wert als die Vergleichsspannung auf, dann wird das Most Significant Bit (MSB) auf 0 gesetzt, im anderen Fall auf 1. Anschließend wird die Referenzspannung halbiert und erneut für einen Vergleich angelegt. Der nachfolgede Vergleich zwischen beiden Spannungen für das nächste Bit zeigt, dass die Referenzspannung geringer ist als die Eingangsspannung. Hierraus resultiert dass, das folgende Bit wird auf 1 gesetzt wird. Es wird wieder die Referenzspannung halbiert und erneut verglichen. Dieses Verfahren wird zyklisch weitergeführt bis alle Bits gesetzt sind, das letzte Bit ist das Least Significant Bit (LSB). [8]
Die Bildliche abfolge einer analog Signal zu digital Signal Wandlung ist in den Abbildungen 11 bis 14 zu sehen.
Kommunikation
Aus dem Grund das es sich beim EV3 Gyro Sensor um einen digitalen Sensor handelt und diese dem EV3 übermittelt werden müssen, bedarf es einer Kommunikation. Der im Sensor verbaute Microkontroller bietet hierzu mehrere Möglichkeiten. Welche in der Tabelle 1 aufgeführt sind. Gewählt wurde von Lego die UART Schnittstelle um die Kommunikation umzusetzen. Mögliche Übertragungen finden vom EV3 zum Sensor und auch in der anderen Richtung statt. Der EV3 nutzt die Schnittstelle um abzufragen um welchen Sensor es sich handelt, oder um den Sensor in einen bestimmten Modus zu setzen. Der Sensor antwortet auf diese Anfragen, selbst stellt dieser keine Abfragen an den EV3. Finden keine Abfragen des EV3 statt, nutzt der Sensor den Microkontroller, und damit die UART Schnittstelle, um selbstständig die Messwerte an den EV3 zu übermitteln. [4]
Die UART Kommunikation ist eine asynchrone Kommunikation und unterstützt 2400 Bit/s bis zu 460 Kbit/s an den Ports 1 und 2, die Ports 3 und 4 unterscheiden sich hiervon, sie beiten bis zu 230 Kbit/s. Um zu Kommunizieren werden 1 Startbit, 8 Datenbits, kein parity bit und 1 Stoppbit verwendet. Um eine UART Kommunikation mit dem EV3 herstellen zu können, müssen die bestimmten Kommunikationssequenzen befolgt werden. [4]
Sensor Identifikation
Die LEGO EV3 unterstützt die automatische Erkennung von externen Elementen wie Sensoren. Das Erkennen der externen Sensoren oder Motoren an den Eingangsports erfolgt nach einem speziellen Schema, in welcher Pin 1, 2, 5 und 6 in einer speziellen Sequenz gesetzt werden, um zu identifizieren, welches externe Element angeschlossen ist. [4]
Anfänglich wird ein Eingangsport als "offener Port" mit der folgenden Konfiguration gesetzt:
- Alle E/A Pins innerhalb eines Sensorports sind als Eingabeports festgelegt
- Wert an Pin 1 ist größer als 4800mV, (AD Messung)
- Pegel an Pin 2 ist high, (Digital I/O Messung)
- Pegel an Pin 5 ist high, (Digital I/O Messung)
- Pegel an Pin 6 ist low, (Digital I/O Messung)
- Wert an Pin 6 ist kleiner als 150 mV, (AD Messung)
- Wert an Pin 1 ist größer als 4800mV, (AD Messung)
Um eine sichere Erkennung der angeschlossenen externen Elemente zu ermöglichen, muss dieser Zusatnd der Pins mindestens für 350mS vorliegen. Die aktuelle Version der Firmware kann folgende Elemente erkennen:
- MINDSTORMS EV3 Berührungssensor
- MINDSTORMS EV3 Temperatursensor
- MINDSTORMS EV3 digitale Sensoren
- MINDSTORMS EV3 Farbsensor
- MINDSTORMS EV3 Gyrosensor
- MINDSTORMS EV3 Ultraschallsensor
- MINDSTORMS EV3 IR-Sensor
Neben den Sensoren die für den EV3 entwickelt wurden, sind auch die folgenden NXT Sensoren kompatiebel:
- MINDSTORMS NXT Touch Sensor
- MINDSTORMS NXT Lichtsensor
- MINDSTORMS NXT Farbsensor
- MINDSTORMS NXT Temperatursensor
- MINDSTORMS NXT Soundsensor.
Alle anderen Sensoren führen zu einem Fehler.
Verwendet werden die Erkennungssequenzen die in der Tabelle 2 aufgeführt sind. Der Gyro Sensor des EV3 ist ein digitaler Sensor, alle digitalen Sensoren melden sich identisch an.
Sensor | Pin Level | |
---|---|---|
LEGO MINDSTORMS EV3 Digital Sensor | Pin 2 ist high, Pin 1 besitzt weniger Spannung als 100 mV |
Sensor Kommunikation
Um mit dem EV3 Gyro Sensor kommunizieren zu können, musste sein Kommunikationsprotokoll implementiert werden. Diese Implementation wird auf dem Arduino ausgeführt. Das Matlab Programm wird auf diese Weise entlastet und konnte auf die GUI, Daten Pelotten sowie das Daten Logging spezialisiert werden.
Die von Lego für den EV3 entwickelte Kommunikationsarchitektur für externe Sensoren und Motoren erfordert, dass die Geräte bestimmten Richtlinien einhalten. Die Entwicklung dieser Richtlinie ermöglicht viel mehr Möglichkeiten und Leistungsfähigkeit für die externen Geräte. Die neue EV3 Architektur erfordert, dass die externen Geräte Daten automatisch an den EV3 zurücksenden, ohne dass diese angefragt werden müssen. Der EV3 besitzt die Leistungsfähigkeit, neue Sensordaten vom externen Gerät mit einer maximalen Geschwindigkeit von 1 ms zu verarbeiten. Im Folgenden wird die Initialisierungssequenz für einen digitalen Sensor wie den Gyro Sensor durchgeführt, um zu veranschaulichen, wie das Protokoll implementiert wurde:
Der z.B. Gyro Sensor beginnt mit der Übertragung aller Konfigurationswerte, hierdurch kann der EV3 das System entsprechend konfigurieren. [4]
Konfigurationsdaten umfassen:
- Der UART Tx-Pin wird für mindestens 500 ms auf low gesetzt.
- Sesnortyp (Sensor ID)
- Anzahl der vom Sensor unterstützten Modi
- Unterstützte UART Kommunikationsgeschwindigkeit
- Übertragung der einzelnen unterstützten Modi. Der Standardmodus für den Sensor muss als Modus 0 kommuniziert werden, der auch der letzte übertragene Modus sein muss. Begonnen wird mit der Übertragung des höchsten Modus und enden Sie mit dem Sendemodus 0. Zwischen jeder Modus Übermittlung sollte eine Verzögerung von 10 ms gelassen werden.
- Modus Name
- Rohwertbereich
- SI-Wertebereich
- Symbol
- Datenformat
- Nachdem alle Modus Daten übermittelt wurden, sendet der Sensor ein ACK und wartet auf ein ACK des EV3. Wenn innerhalb von 80 ms kein ACK empfangen wird, setzt sich der Sensor zurück. Wenn kein ACK vom Ev3 gesendet wird lag in der Übermittlung ein Fehler vor. Nachdem der Sensor sich zurückgesetzt hat beginnt die Übermittlung erneut.
- Wurde ein ACK vom EV3 gesendet, drückt dies eine Bestätigung der Daten aus und es wird auf die angeforderte Kommunikationsgeschwindigkeit geschaltet. Der EV3 ist nun Bereit die Daten zu empfangen.
- Der EV3 sendet automatisch alle 300 ms einen NACK an den Sensor. Die MINDSTORS EV3 Sensoren verwenden diesen Befehl, um den internen Watchdog-Timer innerhalb des Sensors zurückzusetzen. Dies ermöglicht dem EV3 und den Sensoren, kontinuierlich Synchronisiert zu sein. Nach dem zurücksetzen senden die MINDSTORMS EV3 Sensoren die letzten gültigen Daten an den EV3. Wenn innerhalb von 5 NACKs keine Daten empfangen werden, wird das NACK nicht weiter vom EV3 gesendet, dies führt dazu, dass der Watchdog des Sensors nicht zurückgesetzt wird. Der EV3 wartet einen Watchdog-Timeout innerhalb des externen Geräts ab, dies führt zu einem Reset des externen Elements. [4]
EV3 Connect Box
Für die Auslesung des Lego EV3 Gyroskop wurde, wie in der Einleitung bereits erwähnt, die Möglichkeit eines Arduinos verwendet. Dies bietet den Vorteil, dass für die Aufgabe des Datentransfers vom Sensor zum PC kein teurer EV3 Baustein verwendet werden muss. Denn wird die hohe Funktionalität eines EV3 Bausteins, welche einen hohen Preis resultieren lässt, für diese Aufgabe nicht benötigt. Es wurde unter Verwendung eines Arduino Nano eine Connect Box für EV3 Sensoren entwickelt. Diese bietet die Funktionalität, das EV3 Sensoren prinzipiell mit jede PC Anwendung ausgelesen werden können. Alle Lego EV3 Sensoren nutzen die bereits vorgestellte Kommunikation. Die Connect Box wickelt diese Kommunikation mit dem Sensor vollständig ab, die Anwendung auf dem PC kann dadurch Infos zum Sensor oder auch Messdaten des Sensors Auslesen. Die Connect box bietet ein übersichtliches Kommunikationsprotokoll über welche die Kommunikation von PC und Connect Box abgewickelt wird.
Kommunikation mit der EV3 Connect Box
Das entwickelte Kommunikationsprotokoll ist in der Tabelle 2 zu sehen, diese findet zwischen dem PC und der EV3 Connect Box statt. Hierrüber könnte mit der EV3 Connect Box mit jedem beliebigen Gerät kommuniziert werden.
Befehl | Befehls Information |
---|---|
's' | Sensor ID auslesen |
'm' | Sensor Modus auslesen |
'0' - '6' | Sensor in Modus z.B. 0 versetzen |
'r' | Sensor Reset durchführen |
'f' | Connect Box in den Daten-Modus versetzen |
'd' | Messdaten des Sensors anfordern |
Wird die EV3 Connect Box durch den Anschluss eines USB Kabels mit Spannung versorgt, startet diese Damit eine Verbindung zu einem EV3 Sensor aufzubauen. Wurde noch kein Sensor erkannt leuchtet die Status LED der EV3 Connect Box rot, wurde ein Sensor erkannt leuchtet die gelbe und die grüne LED. Ab diesem Zeitpunkt kann eine Verbindung mit dem PC zur EV3 Connect Box hergestellt werden. Wird die im folgenden Kapitel vorgestellte speziell für die EV3 Connect Box entwickelte Windows Anwendung verwendet muss auf solche Details nicht geachtet werden. In diesem Fall wird alles Automatisch für den Nutzer abgewickelt. Wurde die EV3 Connect Box durch die Anwendung erkannt und in den Datenmodus versetzt leuchtet nur noch die grüne LED, werden aktiv Daten ausgetauscht pulsiert die grüne LED.
Arduino der EV3 Connect Box
Beim verwendeten Arduino wurde sich für den Arduino Nano entschieden. Dieser besitzt nahezu dieselben Funktionalitäten und Leistungen wie der Arduino Uno, bietet aber eine kompaktere Bauform an. Um den Gyrosensor oder andere Komponenten anschließen zu können, stehen insgesamt 14 I/O Pins, wovon acht analoge Eingänge sind, zur Verfügung. Die Spannungsversorgung für den Arduino wird durch das USB Kabel sichergestellt, der Gyrosensor bezieht einen Teil davon für die eigene Versorgung. Verwendet wurden insgesamt acht Pinns des Arduino, sechs davon für die Schaltung der LED's und zwei für die Serielle Kommunikation mit dem EV3 Sensoren.
Aus dem Grund, dass der verwendete Arduino nur eine hardwaretechnisch umgesetzte serielle Schnittstelle aufweist, musste eine weitere, durch die für Arduinos zur Verfügung stehende Software Serial, serielle Schnittstelle in Software hinzugefügt werden. Die in Hardware vorhandene serielle Schnittstelle wird für die Kommunikation mit dem PC verwendet, die in Software umgesetzte für die Kommunikation mit dem Sensor. Hierbei wäre keine variation möglich, denn ist die in Hardware umgesetzte Serielle Schnittstelle mit der USB Buchse verbunden.
Einheit | Merkmal |
---|---|
Core | 16 Mhz ATmega328 |
Speicher | |
Flash-Speicher | 32 KB |
SRAM | 2 KB |
EEPROM | 1KB |
Spannungen | |
Betriebsspannung | 5 V |
Empfohlene Eingangsspannung | 7 V - 12 V |
Maximale Eingangsspannung | 20 V |
Kommunikation | |
UART | Ja |
I2C | Ja |
I/O-Pins | 14, davon 6 PWM und 8 analoge Eingänge |
Verbindungen der EV3 Connect Box
Um vollstanädig funktionsfähig zu sein, muss die EV3 Connect Box mit einem EV3 Sensor und einem PC Verbunden werden. Ein Beispiel für die Verbindung ist in der Abbildung 17 zu sehen, der USB Hub ist mit einem PC verbunden.
Die Verbindung von Connect Box und PC wurde über die Serielle Schnittstelle des Arduino umgesetzt. Hierzu kann das USB Kabel verwendet werden welches ebenfalls für das Code flashen auf den Arduino verwendet wird. Dieses muss in die mini USB Buchse des Arduino gesteckt werden und in einen USB Anschluss des PC.
Bei der Verbindung vom EV3 Gyroskop und der Connect Box gab es die Möglichkeit eines verstecken. Es wurde eine baugleiche Buchse verwendet, wie sie an einem Lego EV3 Baustein verwendet wird, hierdurch können Sensoren mit den originalen Kabeln von Lego mit der Connect Box verbunden werden. Die Verkabelung nach der Tabelle 3 ist hierdurch sichergestellt. Die interne Verbindung von Buchse und Arduino wurde durch Kabel mit einem geringen Querschnitt realisiert, um eine auf lange Zeit sichere Kontaktierung sicher zu stellen, wurden diese verlötet.
Ader im EV3 Kabel | Belegung im Sensor | Anschluss an Arduino |
---|---|---|
Pin1 Weiß | GND | GND |
Pin2 Schwarz | Nicht angeschlossen | Nicht angeschlossen |
Pin3 Rot | GND | GND |
Pin4 Grün | Vin | 5V |
Pin5 Gelb | RX | 14 |
Pin6 Blau | TX | 15 |
EV3 Connect Box Anwendung
Eine möglichkeit die EV3 Connect Box zu verwenden, ist die für diese entwickelte PC Anwendung. Diese wurde mit der Software Matlab entwickelt mit zu hilfenahme von GUIDE, wodurch es möglich ist grafische Oberflächen zu erstellen. Insgesamt gibt es zwei Matlab Skripts, einmal eins mit den Callback Funktionen für die grafische Oberfläche und ein weiters für die Steuerung der GUI und die Kommunikation mit dem Sensor. Prinzipiell wurde die EV3 Connect Box sowie die EV3 Connect Box Anwendung so entwickelt, das sich hiermit alle EV3 Sensoren Auslesen und Konfigurieren lassen, bisher ist jeweils nur der Case für den EV3 Gyro Sensor implementiert, weitere Sensoren können dadurch unkompliziert hinzugefügt werden.
Die grafische Oberfläche ist in der Abbildung 18 zusehen. Im Abschnitt des serial Port kann im drop down Menü der COM Port ausgewählt werden, an welchem die EV3 Connect Box angeschlossen wurde. Wurde das Programm gestartet, werden alle COM Ports aufgelistet an welche ein Gerät angeschlossen wurde. Die Aktualisierung des drop down Menü wird durchgängig durchgeführt, ein schließen und öffen der Anwendung ist dadurch nicht notwendig, wenn der Sensor erst zur Laufzeit der Anwendung verbunden wurde. Nach der Auswahl des korrekten COM Ports kann die Connect Box durch den button "Connect" verbunden werden. Im Abschnitt Working mode muss hierraufhin der Arbeitsmodus des Sensors ausgewählt werden, ebenfalls kann ein Data logging aktiviert werden. Wird das Data logging aktiviert, wird eine Textdatei im Verzeichnis des Programms erstellt in welchem alle Messwerte geschrieben werden, so sind die Daten auch auf längere Zeit verfügbar. Die Auslesung des Sensors beginnt wenn nach Auswahl des Working mode mit confirm bestätigt wird. Daraufhin werden Messwerte von der Anwendung bei der Connect Box abgefragt und im Plot visualisiert, ebenfalls wird der aktuelle Messwert dezimal angezeigt. Aus dem Grund, dass die Plots in der Anwendugng nur eine begrenzte Größe aufweisen, kann per Bigger plot ein beliebig großer Plot aktiviert werden (Abbildung 19). In den Plots werden auf der X-Achse immer die letzten 100 Messwerte Angezeigt. Im Fall des Gyrosensors können zwei Messwerte zur selben Zeit ausgelesen und in der Anwendung visualisiert, sowie im Log File abgespeichert werden.
Die Anwendung kann durch das erstellte .m-file auf jedem PC verwendet werden, auf welchem die Software Matlab installiert ist. Um ebenfalls eine Nutzung auf PCs zu ermöglichen, auf welchen die Software Matlab nicht verfügbar ist, wurde eine .exe Anwendung mit dem Matlab Application Compiler erstellt. Auf dem Ziel PC muss bei dieser Variante eine Matlab Laufzeit umgebung installiert werden, anschließend ist auf diese weise eine Verwendung möglich.
Datenverarbeitung
Im Fall des EV3 Gyroskop ist keine weitere Datenverarbeitung nötig, wie im Kapitel Lego "EV3 Gyro-Sensor" ersichtlich ist, handelt es sich um einen digitalen Sensor. Intern im Sensor werden die Messwerte bestimmt und bereits gefiltert. Der typische Gyroskop Drift, sowie Messrauschen werden intern eliminiert und der Messwert anschließend über das BUS System versendet. Um diese Theorie zu überprüfen wurden Messreihen aufgenommen.
Drift
Gyroskope weisen in der Regel eine niederfrequente Messabweichung auf, diese wird auch Drift genannt, der Messwert "driftet" vom wahren Wert kontinuierlich ab.
Winkelmessung
Wahrer Wert | Absolute Abweichung | Relative Abweichung in % | Arithmetisches Mittel | Standardabweichung | Messunsicherheit | Vertrauensintervall | ||
---|---|---|---|---|---|---|---|---|
Soll Winkel | Min. | Max | Min | Max | ||||
5° | 0 | 0 | 0,00% | 0,00% | 5,00 | 0,00 | ± | |
10° | 0 | 0 | 0,00% | 0,00% | 10,00 | 0,00 | ± | |
20° | 0 | 0 | 0,00% | 0,00% | 20,00 | 0,00 | ± | |
30° | 0 | 0 | 0,00% | 0,00% | 30,00 | 0,00 | ± | |
40° | 0 | 0 | 0,00% | 0,00% | 40,00 | 0,00 | ± | |
50° | 0 | 0 | 0,00% | 0,00% | 50,00 | 0,00 | ± | |
60° | 0 | -1 | 0,00% | -1,67% | 59,75 | 0,50 | ± | |
70° | 0 | -1 | 0,00% | -1,42% | 69,75 | 0,50 | ± | |
80° | 0 | -2 | 0,00% | -2,50% | 79,50 | 1,00 | ± | |
90° | 0 | -2 | 0,00% | -2,22% | 89,00 | 0,82 | ± | |
100° | 0 | -3 | 0,00% | -3,00% | 99,00 | 1,41 | ± | |
110° | 0 | -3 | 0,00% | -2,73% | 108,75 | 1,26 | ± | |
120° | 0 | -3 | 0,00% | -2,50% | 118,75 | 1,26 | ± | |
130° | 0 | -3 | 0,00% | -2,31% | 128,75 | 1,26 | ± | |
140° | 0 | -4 | 0,00% | -2,86% | 138,75 | 1,89 | ± |
Einzelnachweise
- ↑ "Lego Mindstorms" von Wikipedia.org [1]
- ↑ "Lego NXT" von Wikipedia.org [2]
- ↑ 3,0 3,1 "Berns, Schmidt (2009): Programmierung mit LEGO MINDSTORMS NXT; Springer Vieweg
" Referenzfehler: Ungültiges
<ref>
-Tag. Der Name „Programmierung mit LEGO MINDSTORMS NXT“ wurde mehrere Male mit einem unterschiedlichen Inhalt definiert. - ↑ 4,0 4,1 4,2 4,3 4,4 4,5 4,6 "Lego EV3 Gyro Sensor" von Lego.com [3]
- ↑ "Mahnken (2009): Lehrbuch der Technischen Mechanik - Dynamik; Springer Vieweg"
- ↑ "Schloms (2008): Physik verstehen; Oldenbourg Wissenschaftsverlag"
- ↑ 8,0 8,1 8,2 "Heyne (1999): Elektronische Meßtechnik; Oldenbourg Wissenschaftsverlag"