Forum: Mikrocontroller und Digitale Elektronik Grundlagen im Umgang mit 9-Achs-Sensor


von Julian G. (bangarang)


Lesenswert?

Liebe Community,

für ein Projekt an der Uni wurde ich beauftragt, die Bewegung des 
Maschinentisches einer 5-Achs-Fräsmaschine zu überwachen. Mein Ziel ist 
es, die Lage, Winkelgeschwindigkeit und Beschleunigung während der 
Bewegung auf dem PC auslesen und weiterverabeiten zu können. Für den 
Messaufbau kommen zwei Sensoren in Frage.

BMX055 von Bosch:
http://www.bosch-sensortec.com/en/homepage/products_3/9_axis_sensors_5/ecompass_2/bmx055_1/bmx055
oder MPU9150:
http://www.digikey.de/product-highlights/de/de/invensense-mpu-9150/3809

In diesem Gebiet habe ich leider wenig (bzw. garkeine) Erfahrung, sodass 
ich nicht weiß, welche weiteren Teile bzw. Arbeitssschritte von Nöten 
sind, um die Daten des Sensors am PC auslesen zu können (sprich Bus 
etc.).
Ich würde mich freuen, wenn sich jemand die Zeit nehmen könnte um mir zu 
erklären, wie man hierbei am besten vorgeht. Ich weiß, viele 
Informationen konnte ich bisher nicht zur Verfügung stellen, aber wenn 
irgendetwas essenziell benötigt wird, werde ich mich bemühen, die 
Information zu beschaffen.

Vielen Dank im Voraus!

Beste Grüße
Julian

von Dominik S. (dasd)


Lesenswert?

1. Rausfinden welche Schnittstelle der Sensor anbietet. Wenn ich das auf 
die Schnell richtig sehe brauchst du beim Bosch I2C und SPI. Für den 
anderen nur I2C.

2. Herausfinden wie man die entsprechenden Schnittstellen an den Rechner 
angekoppelt bekommt. Da PCs weder SPI noch I2C sprechen brauchst du 
einen Umsetzer.
Da du keine Ahnung vom Thema hast kommt selberbauen mit µC wohl eher 
nicht in Frage.
Also vermutlich wirst du sowas in der Art brauchen: 
http://www.elv.de/usb-i2c-interface-komplettbausatz-inkl-gehaeuse-bearbeitet-und-bedruckt-usb-kabel-3-anschlusskabel.html

Julian G. schrieb:
> Mein Ziel ist
> es, die Lage, Winkelgeschwindigkeit und Beschleunigung während der
> Bewegung auf dem PC auslesen und weiterverabeiten zu können.

Auslesen kannst du nur die Daten die der Sensor auch zur Verfügung 
stellt :)
Das sind Winkelgeschwindigkeit und Beschleunigung. Die Lage musst du 
daraus natürlich selber berechnen.
Hier könnte ein guter Ansatz eines der vielen 
OpenSource-Quadrocopter-Projekte sein, die machen genau das selbe :)

Nachtrag:
Die Gehäuse dieser Sensoren sind mikroskopisch :) Das auch im Hinterkopf 
behalten.

: Bearbeitet durch User
von Stampede (Gast)


Lesenswert?

Der BMX055 kann man per SPI ansprechen, Verbindungen zum PC sind 
beispielweise per USB machbar. Also wählst du dir einen Controller, der 
beide Schnittstellen hat und du idealerweise schon auf fertige 
Bibliotheken zurückgreifen kannst. PIC18F4550 wäre ein beispiel, aber da 
gibts es noch massenweise passende Controller mit denen du das umsetzen 
kannst.

Die Funktionsweise des SPI Interfaces und die notwendigen Register zum 
Auslesen sind ja alle im Datenblatt beschrieben.

von Rudolph R. (rudolph)


Lesenswert?

Dominik S. schrieb:
> brauchst du beim Bosch I2C und SPI.

Nein, der kann beides, I2C oder SPI.

Auf jeden Fall ist der richtig winzig und durch das LGA Gehäuse auch 
nicht mehr wirklich von Hand lötbar.

Ich habe so einen mal im Dead-Bug Style aufgelötet für erste Tests und 
selbst das war nicht so richtig lustig.

Da empfiehlt sich ein Breakout-Board, zumindest zum Rumspielen.

Von IvenSense gibt es noch den MPU9250, das ist die Variante mit SPI.

Wobei gut lötbar sind die MFL-Gehäuse der MPU9x50 auch nicht, aber für 
die gibt es auf jeden Fall Breakout-Boards, Stichwort "IMU".

Ich würde auf jeden Fall SPI benutzen da I2C erheblich langsamer ist.
Wenn I2C nicht reicht hat man verloren.
Wenn man den SPI nicht ausreizen muss macht das nichts, den kann man 
dann auch immer noch langsamer takten.

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Dominik S. schrieb:
> Die Lage musst du daraus natürlich selber berechnen.

Aha, ich dachte, das macht die IMU an besten selbst?!

Der der MPU9150/MPU9250 hat einen internen DMP:

Um den Host-Prozessor von der Sensorfusion vom zu entlasten, lädt die 
folgende Bibliothek die Firmware hoch, die Quaternionen aus den 
Sensor-Daten erzeugt:

https://developer.mbed.org/users/p3p/code/MPU9150_DMP/

Aber ob das funktioniert, habe ich noch nicht ausprobiert. Ich bin noch 
nicht dazu gekommen.

von Peter (Gast)


Lesenswert?

Hallo,
behalte deine Genauigkeitsanforderungen im Auge. Um irgendwelche 
sinnvollen Ergebnisse zu erhalten wirst du um ein regelmäßiges Stützen 
der Sensordaten nicht herumkommen. Nur zur Info: Dein BMX0055 hat ein 
Nullpunktsfehler von 1° pro Sekunde. Selbst wenn du das durch 
entsprechende Kompensation (Temperatur und Mondphasenabhängig) im Griff 
hast kommt noch das Rauschen dazu. Ein Stichwort wäre auf jedenfall der 
Kalmannfilter.
Es gibt natürlich auch genauere Sensoren, aber die erfordern auch einen 
größeren Geldbeuetel. >1000€ (Faserkreisel)
Gruß
Peter

von Wolfgang (Gast)


Lesenswert?

Julian G. schrieb:
> In diesem Gebiet habe ich leider wenig (bzw. garkeine) Erfahrung, sodass
> ich nicht weiß, welche weiteren Teile bzw. Arbeitssschritte von Nöten
> sind, um die Daten des Sensors am PC auslesen zu können (sprich Bus
> etc.).

Du brauchst zunächst den/die Sensor/-en auf einem Experimentierboard 
(z.B. ebay 310670112244, 161299143883 o.ä.) und ein Mikrocontrollerboard 
idealerweise mit USB-Schnittstelle. Damit kann man ohne Probleme beim 
Aufbau erstmal Erfahrungen sammeln und die Software testen. Aufgabe des 
µC ist es, die Sensordaten mit der von dir gewünschten Rate mit Hilfe 
eines von dir zu schreibenden Programmes auszulesen, ggf. zu filtern und 
zum PC zu übertragen. Auf dem PC wird dann noch ein Programm benötigt, 
dass die Daten z.B. vom VCOM-Port liest, ggf. weiter auswertet und damit 
irgendetwas anstellt.

von Julian G. (bangarang)


Lesenswert?

Dominik S. schrieb:
>
> Nachtrag:
> Die Gehäuse dieser Sensoren sind mikroskopisch :) Das auch im Hinterkopf
> behalten.

Das stimmt wohl. Ich glaube die vorgefertigte Version auf dem 
Experimentierboard von Wolfgang ist für meine Bedürfnisse sehr gut 
geeignet.

Peter (Gast) schrieb:
>
> Nur zur Info: Dein BMX0055 hat ein
> Nullpunktsfehler von 1° pro Sekunde. Selbst wenn du das durch
> entsprechende Kompensation (Temperatur und Mondphasenabhängig) im Griff
> hast kommt noch das Rauschen dazu. Ein Stichwort wäre auf jedenfall der
> Kalmannfilter.

Danke für den Tipp. Zufällig beschäftigt sich ein Kollege genau mit 
diesem Kalmannfilter. Das trifft sich ja gut.

Was gibt es bei der Wahl eines Microcontoller Board zu beachten? Ich 
nehme an, dass ich nicht irgendein beliebiges Board nehmen kann. Und 
schließe ich das Board direkt über die USB-Schnittstelle an den PC an 
oder benötige ich noch weitere Hardwarekomponenten?

Beste Grüße
Julian

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Julian G. schrieb:
> Was gibt es bei der Wahl eines Microcontoller Board zu beachten?

Klar, im Grunde geht alles irgendwie, zur Not mit einem SW-UART. 
Trotzdem ein paar Hinweise, die die Sache vereinfachen könnten:

USB:
Um sich keine Gedanken über Treiber und USB-Firmware machen zu müssen, 
einen USB-VCOM-Adapter an den UART des µC anschließen.

Den AduinoProMini gibt es bei ebay oder Ali oft im 'bundle' mit so einem 
Adapter, der AduinoNano hat schon einen on board.

I²C:
Um Pegelwandler zu vermeiden, den µC mit 3,3V betreiben. Der µC 
sollte I²C unterstützen.

Der 8MHz-AduinoProMini hat z.B. 3,3V.

Noch preiswerter ist ein STM8S103F3P6-Board, auch von ebay oder Ali.

Ein MSP430-Launchpad ginge z.B. auch, ich hätte noch eins über.

SPI:
Das geht zwar per SW in der Regel nicht langsamer, es ist aber 
einfacher, wenn der µC auch SPI unterstützt.

Dabei ist wichtig, dass die benötigten (alternativen) Funktionen sich 
nicht gegenseitig auf einem und dem selben Pin im Wege stehen. Das ist 
aber meistens kein Problem und bei den o.g. Beispielen auch nicht.

: Bearbeitet durch User
von Torsten C. (torsten_c) Benutzerseite


Lesenswert?

Wichtige Frage: Wie willst Du debuggen?

Mit Serial.print()? Dann wäre ein zweiter UART gut. Oder

im Single-Step-Betrieb und mit Breakpoints? Dann wäre ein ST-Link-Clone 
oder ein Launchpad preiswerter als ein AVR-ICD-Adapter. Alternativ ginge 
auch ein STM32F4-Nucleo-Board.

: Bearbeitet durch User
von Julian G. (bangarang)


Lesenswert?

Wenn ich für einen Sensor auf dem Experimentierboard und einem dazu 
gehörigen Mikrocontrollerboard entschieden habe, muss ich es irgendwie 
noch schaffen, vom PC aus mit dem Sensor zu kommunizieren.
Am Ende sollen mir die Daten in LabVIEW zur Weiterverarbeitung zur 
Verfügung stehen. Wenn ich das noch schaffen würde, sollten alle Sorgen 
aus der Welt geschafft sein.

Beste Grüße,
Julian

von Torsten C. (torsten_c) Benutzerseite


Lesenswert?


Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.