Beschleunigungssensor mit Matlab/Simulink: Unterschied zwischen den Versionen
Keine Bearbeitungszusammenfassung |
|||
Zeile 2: | Zeile 2: | ||
== Aufgabenstellung == | == Aufgabenstellung == | ||
[[Datei:Bild_Sensor.jpg |mini|300px| <ref name="HiTechnics Acceleration/Tilt Sensor"> http://modernroboticsinc.com/hitechnic-nxt-acceleration-tilt-sensor Sensor </ref>]] | |||
Der ausgesuchte [http://modernroboticsinc.com/hitechnic-nxt-acceleration-tilt-sensor Sensor], in diesem Fall der HiTechnics Beschleunigungssensor, soll mit Matlab/Simulink ausgelesen werden und die Signalverarbeitungskette beschrieben, untersucht und verstanden werden. | Der ausgesuchte [http://modernroboticsinc.com/hitechnic-nxt-acceleration-tilt-sensor Sensor], in diesem Fall der HiTechnics Beschleunigungssensor, soll mit Matlab/Simulink ausgelesen werden und die Signalverarbeitungskette beschrieben, untersucht und verstanden werden. | ||
Zeile 19: | Zeile 21: | ||
=== Auswahl eines Primärsensors === | === Auswahl eines Primärsensors === | ||
Der ausgewählte Sensor für dieses Projekt ist ein Beschleunigungssensor der Firma HiTechnics. Dieser trägt die offizielle Bezeichnung NXT Acceleration/Tilt Sensor (NAC 1040) und wurde für den Lego Mindstorms NXT entwickelt. | Der ausgewählte Sensor für dieses Projekt ist ein Beschleunigungssensor der Firma HiTechnics. Dieser trägt die offizielle Bezeichnung NXT Acceleration/Tilt Sensor (NAC 1040) und wurde für den Lego Mindstorms NXT entwickelt <ref name="HiTechnics Acceleration/Tilt Sensor"> http://modernroboticsinc.com/hitechnic-nxt-acceleration-tilt-sensor Sensor </ref>. | ||
[[Datei:Achsen_Sensor.jpg |mini|200px| <ref name="HiTechnics Acceleration/Tilt Sensor"> http://modernroboticsinc.com/hitechnic-nxt-acceleration-tilt-sensor Sensor </ref>]] | |||
= | |||
Der Sensor misst die Beschleunigung in drei Achsen (X, Y und Z) und kann zudem noch die Neigung entlang der Achse ermitteln. | Der Sensor misst die Beschleunigung in drei Achsen (X, Y und Z) und kann zudem noch die Neigung entlang der Achse ermitteln. | ||
Die Beschleunigung wird mit einer Skalierung von ca. 200 Zählimpulsen pro g in einem Bereich von -2 g bis + 2g gemessen. Die Beschleunigungsmessung wird für jede Achse etwa 100 mal pro Sekunde aktualisiert. Die Neigung der drei Achsen kann ebenfalls gemessen werden, da die Schwerkraft als Beschleunigung wahrgenommen wird. Ist der Sensor stationär und in normaler horizontaler Position so sind die X- und Y- Achsen fast null, da der Sensor horizontal steht. Die Z-Achse dagegen sollte bei etwa 200 liegen, was der Erdbeschleunigung 1 g entspricht. Wird der Sensor geneigt, so wird die Schwerkraft auch auf den anderen Achsen erkannt und der Wert für die Z-Achse beginnt zu sinken. Die Schwerkraft wird so auf drei Komponentenvektoren verteilt und die Neigung des Sensors kann bestimmt werden. | Die Beschleunigung wird mit einer Skalierung von ca. 200 Zählimpulsen pro g in einem Bereich von -2 g bis + 2g gemessen. Die Beschleunigungsmessung wird für jede Achse etwa 100 mal pro Sekunde aktualisiert. Die Neigung der drei Achsen kann ebenfalls gemessen werden, da die Schwerkraft als Beschleunigung wahrgenommen wird. Ist der Sensor stationär und in normaler horizontaler Position so sind die X- und Y- Achsen fast null, da der Sensor horizontal steht. Die Z-Achse dagegen sollte bei etwa 200 liegen, was der Erdbeschleunigung 1 g entspricht. Wird der Sensor geneigt, so wird die Schwerkraft auch auf den anderen Achsen erkannt und der Wert für die Z-Achse beginnt zu sinken. Die Schwerkraft wird so auf drei Komponentenvektoren verteilt und die Neigung des Sensors kann bestimmt werden. | ||
So ist dieser Sensor auch für selbstnivellierende Roboter geeeignet, da der Sensor anzeigt, ob der Roboter gerade steht. | So ist dieser Sensor auch für selbstnivellierende Roboter geeeignet, da der Sensor anzeigt, ob der Roboter gerade steht <ref name="HiTechnics Acceleration/Tilt Sensor"> http://modernroboticsinc.com/hitechnic-nxt-acceleration-tilt-sensor Sensor </ref>. | ||
Sieht man sich den Sensor von innen an, so lässt sich die Hauptplatine des NAC 1040 erkennen. Auf der Hauptplatine ist ein 20-poliger Microchip (PIC16F677) und eine 3-Achsen-MEMS-Beschleunigungsmesser (STMicroelectronics LIS344ALH). Das graue Gehäuse ist die Klinkenbuchse für den Anschluss des NXT Roboters. Der 20-polige Microship ist ein Flash-basierter 8-Bit-CMOS Microcontroller mit NanoWatt-Technologie. Das Datenblatt ist hier zu finden. | |||
Im nachfolgenden wird der Beschleunigungsmesser detaillierter analysiert. Der Beschleunigungsmesser ist in die Gruppe der MEMS-Bauelemente einzuordnen, die elektronische und mechanische Bauteile auf winzigen Bauraum vereinen. Ein entsprechendes Datenblatt ist hier zu finden. Der Beschleunigungsmesser besteht aus einem Sensorelement und einer IC-Schnittstelle, die in der Lage ist, die Informationen der Messung in ein analoges Signal für die Außenwelt umzuwandeln. Der | |||
Das Werkzeuglayout des MEMS-Chip, welches durch Ätzen (DRIE) erstellt wurde ist in Bild zu sehen. Es lassen sich zwei mikrobearbeitete Strukturen erkennen, die eine 3-Achsen-Beschleunigungserfassung ermöglichen. Die linke Struktur ist empfindlich für Bewegungen in der XY-Ebene der Matrize und die rechte Struktur für Z-Bewegungen senkrecht zur Matrizenoberfläche. Wenn nun eine Beschleunigung auf den Sensor ausgeübt wird, verschiebt sich die Prüfmasse „Proof Mass“ von ihrer eigentlichen Position und verursacht ein Ungleichgewicht in der kapazitiven Halbbrücke. Dieses Ungleichgewicht wird unter Verwendung der Ladungsintegration als Reaktion auf einen an den Erfassungskondensator angelegten Spannungsimpuls gemessen. Im stationären Zustand beträgt der Nennwert der Kondensatoren wenige pF. Wenn eine Beschleunigung anliegt ist die kapazitive Last im fF Bereich. | [[Datei:Sensor_Hauptplatine.jpg |mini|links|300px| <ref name="Innenleben Sensor"> http://www.findmems.com/stmicroelectronics/tearing-down-lego-mindstorms%C2%AE-stmicroelectronics-mems-accelerometer-lis344alh </ref>]] | ||
Sieht man sich den Sensor von innen an, so lässt sich die Hauptplatine des NAC 1040 erkennen. Auf der Hauptplatine ist ein 20-poliger Microchip (PIC16F677) und eine 3-Achsen-MEMS-Beschleunigungsmesser (STMicroelectronics LIS344ALH). Das graue Gehäuse ist die Klinkenbuchse für den Anschluss des NXT Roboters <ref name="Innenleben Sensor"> http://www.findmems.com/stmicroelectronics/tearing-down-lego-mindstorms%C2%AE-stmicroelectronics-mems-accelerometer-lis344alh </ref>. | |||
Der 20-polige Microship ist ein Flash-basierter 8-Bit-CMOS Microcontroller mit NanoWatt-Technologie. Das Datenblatt ist [http://ww1.microchip.com/downloads/en/DeviceDoc/41262d.pdf hier] zu finden. | |||
[[Datei:Sensor_3Chips.jpg |mini|300px| <ref name="Innenleben Sensor"> http://www.findmems.com/stmicroelectronics/tearing-down-lego-mindstorms%C2%AE-stmicroelectronics-mems-accelerometer-lis344alh </ref>]] | |||
Im nachfolgenden wird der Beschleunigungsmesser detaillierter analysiert. Der Beschleunigungsmesser ist in die Gruppe der MEMS-Bauelemente einzuordnen, die elektronische und mechanische Bauteile auf winzigen Bauraum vereinen. Ein entsprechendes Datenblatt ist [http://www.st.com/content/ccc/resource/technical/document/datasheet/59/4c/43/66/c7/4d/4b/db/CD00182781.pdf/files/CD00182781.pdf/jcr:content/translations/en.CD00182781.pdf hier] zu finden. Der Beschleunigungsmesser besteht aus einem Sensorelement und einer IC-Schnittstelle, die in der Lage ist, die Informationen der Messung in ein analoges Signal für die Außenwelt umzuwandeln. Der 4 mm x 4 mm große Beschleunigungsmesser enthält zwei drahtgebundene Siliziumchips. Der obere Chip beinhaltet den anwendungsspezifischen integrierten Schaltkreis für die Signalverarbeitung (ASIC). Der untere Chip wiederum besteht aus zwei Chips, dem MEMS-Chip und dem hermetischen Kappenchip <ref name="Innenleben Sensor"> http://www.findmems.com/stmicroelectronics/tearing-down-lego-mindstorms%C2%AE-stmicroelectronics-mems-accelerometer-lis344alh </ref>. | |||
[[Datei:Sensor_3Achsen.jpg |mini|links|200px| <ref name="Innenleben Sensor"> http://www.findmems.com/stmicroelectronics/tearing-down-lego-mindstorms%C2%AE-stmicroelectronics-mems-accelerometer-lis344alh </ref>]] | |||
Das Werkzeuglayout des MEMS-Chip, welches durch Ätzen (DRIE) erstellt wurde ist in Bild zu sehen. Es lassen sich zwei mikrobearbeitete Strukturen erkennen, die eine 3-Achsen-Beschleunigungserfassung ermöglichen. Die linke Struktur ist empfindlich für Bewegungen in der XY-Ebene der Matrize und die rechte Struktur für Z-Bewegungen senkrecht zur Matrizenoberfläche. Wenn nun eine Beschleunigung auf den Sensor ausgeübt wird, verschiebt sich die Prüfmasse „Proof Mass“ von ihrer eigentlichen Position und verursacht ein Ungleichgewicht in der kapazitiven Halbbrücke. Dieses Ungleichgewicht wird unter Verwendung der Ladungsintegration als Reaktion auf einen an den Erfassungskondensator angelegten Spannungsimpuls gemessen. Im stationären Zustand beträgt der Nennwert der Kondensatoren wenige pF. Wenn eine Beschleunigung anliegt ist die kapazitive Last im fF Bereich <ref name="Innenleben Sensor"> http://www.findmems.com/stmicroelectronics/tearing-down-lego-mindstorms%C2%AE-stmicroelectronics-mems-accelerometer-lis344alh </ref>. | |||
Der Sensor liefert digitale Rohwerte, sodass das eigentlich analoge Signal, wie oben beschrieben, noch durch den Microship vorverarbeitet wird. Der Sensor arbeitet in einem Bereich von +- 19,62 m/s^2. Es können also, wie oben schon genannt Beschleunigungen in Höhe der doppelten Erdbeschleunigung gemessen werden. Die Erdbeschleunigung g entspricht dabei den Rohwert 200 vom Sensor. | Der Sensor liefert digitale Rohwerte, sodass das eigentlich analoge Signal, wie oben beschrieben, noch durch den Microship vorverarbeitet wird. Der Sensor arbeitet in einem Bereich von +- 19,62 m/s^2. Es können also, wie oben schon genannt Beschleunigungen in Höhe der doppelten Erdbeschleunigung gemessen werden. Die Erdbeschleunigung g entspricht dabei den Rohwert 200 vom Sensor. | ||
=== Signalvorbereitung === | === Signalvorbereitung === | ||
Zeile 66: | Zeile 79: | ||
==== Welche Fehler treten in welchen Verarbeitungsschritten auf? ==== | ==== Welche Fehler treten in welchen Verarbeitungsschritten auf? ==== | ||
==== Stellen Sie die Messunsicherheit bzw. das Vertrauensintervall da ==== | ==== Stellen Sie die Messunsicherheit bzw. das Vertrauensintervall da ==== | ||
== Literatur == | |||
<references /> | |||
---- | ---- | ||
→ zurück zum Hauptartikel: [[SigSys_SoSe2018| Signalverarbeitende Systeme]] | → zurück zum Hauptartikel: [[SigSys_SoSe2018| Signalverarbeitende Systeme]] |
Version vom 7. Juni 2018, 13:58 Uhr
Im Rahmen der Lehrveranstaltung Signalverarbeitende Systeme im Modul Systementwurf des Masterstudienganges Business and Systems Engineering ist die Aufgabe semesterbegleitend ein Projekt mit Matlab/Lego Mindstorms zu lösen.
Aufgabenstellung
Der ausgesuchte Sensor, in diesem Fall der HiTechnics Beschleunigungssensor, soll mit Matlab/Simulink ausgelesen werden und die Signalverarbeitungskette beschrieben, untersucht und verstanden werden.
Projektplan
Konzepterstellung zum Auslesen des Sensors mit Matlab/Simulink
Nach der Ausgabe der Sensoren wurde festgestellt, dass der Sensor nicht so einfach an den PC angeschlossen werden kann. Der erste Ansatz war, dass der Sensor mit einem Arduino Uno ausgelesen werden sollte und eine Kommunikation zwischen PC und Arduino zu den Sensordaten führen sollte. Hierbei gestaltete sich für mich das Problem, dass das Anschlusskabel hätte auseinander geschnitten und die einzelnen Adern an den Arduino gelötet werden müssten. Da ich nicht über ausreichende Kenntnisse verfüge, wollte ich eine andere Lösungsmöglichkeit probieren. Auch der Ansatz den Sensor direkt über die Sensoreingänge des EV3 auszulesen funktionierte leider nicht, da der Beschleunigungssensor nicht im Lego Mindstorms EV3 Support Package enthalten ist. Der dritte Lösungsansatz und schließlich der hier erläuterte ist das Auslesen des Sensors mit Hilfe des älteren Lego Mindstorms NXT. Der HiTechnics Beschleunigungssensor ist in der RWTH - Mindstorms Toolbox enthalten und wird hier zum Auslesen mit Matlab verwendet.
Anleitung für den Anschluss des NXT an den eigenen Laptop
Damit der NXT an den PC angeschlossen werden kann und der Sensor ausgelesen werden kann, muss zuvor die Toolbox in Matlab eingebunden werden und der passende Treiber für den NXT installiert werden. Gemäß der Anleitung wurde zunächt die Toolbox in Matlab integriert. Dazu wird die Toolbox als ZIP-Datei heruntergeladen, entpackt und dann im Matlab Ordner gespeichert. Der passende Lego USB Treiber kann ebenfalls heruntergeladen werden. In der Anleitung wird der Fantom USB Treiber genannt. Doch im weiteren Verlauf stellte sich heraus, dass dieser lediglich für Windows 32-Bit Version geeignet ist. Nach umfassender Recherche benötigt ein Windows 64-Bit Betriebssystem einen libusb-Treiber, dieser kann ebenfalls auf einer Internetseite heruntergeladen werden. Unter den neueren Betriebssystemen (ab Windows 8) ist beim Installieren des Treibers das Problem, dass es sich um keinen von Microsoft signierten Treiber handelt. Die erste Möglichkeit besteht darin, den Rechner im Shutdown-Modus zu starten. Dies war mir aber zu riskant, sodass ich nach längerer Recherche auf ein Programm gestoßen bin, mit welchem sich der Treiber ohne Probleme installieren lässt.
Schritte zur Signalbearbeitung
Auswahl eines Primärsensors
Der ausgewählte Sensor für dieses Projekt ist ein Beschleunigungssensor der Firma HiTechnics. Dieser trägt die offizielle Bezeichnung NXT Acceleration/Tilt Sensor (NAC 1040) und wurde für den Lego Mindstorms NXT entwickelt [1].
Der Sensor misst die Beschleunigung in drei Achsen (X, Y und Z) und kann zudem noch die Neigung entlang der Achse ermitteln.
Die Beschleunigung wird mit einer Skalierung von ca. 200 Zählimpulsen pro g in einem Bereich von -2 g bis + 2g gemessen. Die Beschleunigungsmessung wird für jede Achse etwa 100 mal pro Sekunde aktualisiert. Die Neigung der drei Achsen kann ebenfalls gemessen werden, da die Schwerkraft als Beschleunigung wahrgenommen wird. Ist der Sensor stationär und in normaler horizontaler Position so sind die X- und Y- Achsen fast null, da der Sensor horizontal steht. Die Z-Achse dagegen sollte bei etwa 200 liegen, was der Erdbeschleunigung 1 g entspricht. Wird der Sensor geneigt, so wird die Schwerkraft auch auf den anderen Achsen erkannt und der Wert für die Z-Achse beginnt zu sinken. Die Schwerkraft wird so auf drei Komponentenvektoren verteilt und die Neigung des Sensors kann bestimmt werden.
So ist dieser Sensor auch für selbstnivellierende Roboter geeeignet, da der Sensor anzeigt, ob der Roboter gerade steht [1].
Sieht man sich den Sensor von innen an, so lässt sich die Hauptplatine des NAC 1040 erkennen. Auf der Hauptplatine ist ein 20-poliger Microchip (PIC16F677) und eine 3-Achsen-MEMS-Beschleunigungsmesser (STMicroelectronics LIS344ALH). Das graue Gehäuse ist die Klinkenbuchse für den Anschluss des NXT Roboters [2].
Der 20-polige Microship ist ein Flash-basierter 8-Bit-CMOS Microcontroller mit NanoWatt-Technologie. Das Datenblatt ist hier zu finden.
Im nachfolgenden wird der Beschleunigungsmesser detaillierter analysiert. Der Beschleunigungsmesser ist in die Gruppe der MEMS-Bauelemente einzuordnen, die elektronische und mechanische Bauteile auf winzigen Bauraum vereinen. Ein entsprechendes Datenblatt ist hier zu finden. Der Beschleunigungsmesser besteht aus einem Sensorelement und einer IC-Schnittstelle, die in der Lage ist, die Informationen der Messung in ein analoges Signal für die Außenwelt umzuwandeln. Der 4 mm x 4 mm große Beschleunigungsmesser enthält zwei drahtgebundene Siliziumchips. Der obere Chip beinhaltet den anwendungsspezifischen integrierten Schaltkreis für die Signalverarbeitung (ASIC). Der untere Chip wiederum besteht aus zwei Chips, dem MEMS-Chip und dem hermetischen Kappenchip [2].
Das Werkzeuglayout des MEMS-Chip, welches durch Ätzen (DRIE) erstellt wurde ist in Bild zu sehen. Es lassen sich zwei mikrobearbeitete Strukturen erkennen, die eine 3-Achsen-Beschleunigungserfassung ermöglichen. Die linke Struktur ist empfindlich für Bewegungen in der XY-Ebene der Matrize und die rechte Struktur für Z-Bewegungen senkrecht zur Matrizenoberfläche. Wenn nun eine Beschleunigung auf den Sensor ausgeübt wird, verschiebt sich die Prüfmasse „Proof Mass“ von ihrer eigentlichen Position und verursacht ein Ungleichgewicht in der kapazitiven Halbbrücke. Dieses Ungleichgewicht wird unter Verwendung der Ladungsintegration als Reaktion auf einen an den Erfassungskondensator angelegten Spannungsimpuls gemessen. Im stationären Zustand beträgt der Nennwert der Kondensatoren wenige pF. Wenn eine Beschleunigung anliegt ist die kapazitive Last im fF Bereich [2].
Der Sensor liefert digitale Rohwerte, sodass das eigentlich analoge Signal, wie oben beschrieben, noch durch den Microship vorverarbeitet wird. Der Sensor arbeitet in einem Bereich von +- 19,62 m/s^2. Es können also, wie oben schon genannt Beschleunigungen in Höhe der doppelten Erdbeschleunigung gemessen werden. Die Erdbeschleunigung g entspricht dabei den Rohwert 200 vom Sensor.
Signalvorbereitung
Sollen Messwerte oder vorverarbeitete Daten übertragen werden
Wie lässt sich eine Verarbeitung umsetzen
Wird eine Kennlinie eingesetzt? Wenn ja, wie wird diese kalibriert?
Analog - Digital - Umsetzer
Der Analog-Digital Wandler sitzt im Mikrochip und ermöglicht die Umwandlung eines analogen Eingangssignal von der IC Schnittstelle des Beschleunigungsmesser in eine 10-Bit Binärdarstellung. Der Wandler verwendet analoge Eingänge, die in einer einzigen Abtast- und Halteschaltung gemultiplext werden, um Resourcen zu sparen. Durch sukzessive Approximaion wird ein 10-Bit Binärergebnis gespeichert und in den ADC-Ergebnisregistern gespeichert (ADRESL und ADRESH). Unter einer sukzessiven Approximation wird eine schrittweise Annäherung verstanden. Das bedeutet, dass die analoge Eingangsspannung mit einer Referenzspannung schrittweise verglichen wird. Dieser Vergleich wiederholt sich ständig und die Referenzspannung wird in jedem Schritt so geändert, dass sie immer näher an der Eingangsspannung ist. Vorstellen kann man es sich wie eine alte Waage mit Gewichten, weswegen das Verfahren auch Wägeverfahren genannt wird. In Bild ist das Prinzip dieses Verfahrens dargestellt. Wenn die Vergleichsspannung höher ist als die Eingangsspannung, dann wird das Most Significant BIT auf den Lo-Wert 0 gesetzt. Andersherum auf den Hi-Wert 1 und die Referenzspannung wird halbiert. Dies wird so lange gemacht bis alle Bits gesetzt sind. Das letzte Bit wird Least Significant Bit genannt. Dieser Analog-Digital Umsetzer ist sehr leicht ohne großen Aufwand zu realisieren im Gegensatz zum Flash-Umsetzer.
Bussystem
Zwischen dem Sensor und dem Mikrocontroller, hier dem NXT-Lego Mindstorms wird ein Bussystem das sogenannte I2C eingesetzt. 1982 wurde I2C von Phillips als Kommunikationsbus entwickelt und der Lego NXT Baustein verwendet dieses. Das bedeutet, dass jede Kommunikation zwischen NXT Brick und dem Beschleunigungssensor über das I2C Protokoll übertragen wird und so eine einfache und effiziente Kommunikation zwischen Mikrocontroller und Sensoren gewährleistet ist.
Dieses Bussystem funktioniert nach dem Master Slave Prinzip. Dabei ist der NXT Brick der Master und der Beschleunigungssensor der Slave. Die Übertragung zwischen Master und Slave beginnt mit einem Start Bit und endet mit einem Stop Bit. Zwischen diesen beiden Bits findet die eigentliche Übertragung statt. Dabei schreibt zunächst der Master (NXT Brick), die I2CSchnittstelle des Slaves (Sensors) in den Bus. Die beiden Bausteine können jetzt ihre Daten austauschen und durch ein vom Master gesendetes Stop Bit wieder angehalten werden.
Damit der NXT Brick an den PC angeschlossen werden kann und mit Matlab ausgelesen kann wird ein serielles Bus-System verwendet (USB). Hierbei werden einzelne Bits nacheinander übertragen. Dabei enthält jedes Bit ein Teil der Informationen, die übertragen werden sollen.
Digitale Signalverarbeitung
Welche Verarbeitungsschritte sind notwendig
Welche Filter werden angewendet
Bestimmen Sie Auflösung, Empfindlichkeit und Messunsicherheit des Sensors
Darstellung der Ergebnisse
Welche Fehler treten in welchen Verarbeitungsschritten auf?
Stellen Sie die Messunsicherheit bzw. das Vertrauensintervall da
Literatur
→ zurück zum Hauptartikel: Signalverarbeitende Systeme