Forum: Mikrocontroller und Digitale Elektronik IMU MPU6050 Erdbeschleunigung nicht gleich 1


von Oliver W. (oliverwigger)


Angehängte Dateien:

Lesenswert?

Salü

Ich habe vier MPU6050-IMU-Boards 
(https://www.bastelgarage.ch/mpu-6050-3-achsen-beschleunigungssensor-mit-gyroskop) 
und lese die Beschleunigungsdaten über ein Multiplexer (TCA9548A) per 
Arduino Mega aus.

Nun habe ich folgendes Problem:
Wie in der angehängten Grafik zu sehen habe ich die Magnitude der Daten 
(nur Beschleunigung, kein Gyro) pro Sensor mittels |a| = sqrt(ax^2 + 
ay^2 + az^2) dargestellt und diese ist nicht immer eins. Die vier 
Sensoren wurden dazu auf einem Breadboard gleich ausgerichtet und 
jeweils das gesamte Board um 90° in die Vertikale gedreht und danach 
wieder in die Horizontale gebracht. Die X-Achse entspricht dabei den 
gemessenen Datenpunkten und wurde über rund 50 Sekunden (30Hz) 
aufgenommen. Mich erstaunt des Weiteren, dass die Magnitude sich 
überhaupt ändern kann (sollte ja gleich bleiben während den Ruhephasen). 
Ich hatte auch schon Messungen da war die Magnitude zu Beginn 0.5 oder 
1.6. Auch etliche DIY PCB's mit MPU6050 haben bei mir dieses Problem.

Im Datenblatt 
(https://invensense.tdk.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf) 
steht bei Zero-G Output die initial Calibration Tolerance (X,Y = +-50mg, 
Z = +- 80mg) aber das reimt sich in meinem Kopf nicht zusammen mit den 
Messergebnissen.

Das Ziel ist es diesen Magnitudenfehler zu verkleinern (< 3%).

Alle konstruktive Hilfe ist herzlich willkommen und wird geschätzt.

von Ob S. (Firma: 1984now) (observer)


Lesenswert?

Oliver W. schrieb:

> steht bei Zero-G Output die initial Calibration Tolerance (X,Y = +-50mg,
> Z = +- 80mg) aber das reimt sich in meinem Kopf nicht zusammen mit den
> Messergebnissen.

Wieso nicht? Der Einzelfehler der Komponenten beträgt 5% bzw. 8%. Dein 
Messwert liegt ca. 5% neben dem Erwartungswert. Passt doch gut.

> Das Ziel ist es diesen Magnitudenfehler zu verkleinern (< 3%).

You got what you paid for.

von Oliver W. (oliverwigger)


Lesenswert?

Ob S. schrieb:
> Dein Messwert liegt ca. 5% neben dem Erwartungswert.

Eine Magnitude von 1.1 bzw. 1.2 liegt 10% bzw. 20% neben dem 
Erwartungswert (1.0).

Passt also nicht, oder?

von Florian L. (muut) Benutzerseite


Lesenswert?

Hast du die einzelnen Achsen auch separat aufgezeichnet?

von Oliver W. (oliverwigger)


Angehängte Dateien:

Lesenswert?

Ja, habe ich. Bereits da stimmen die 5% bzw. die 8% nicht.

von Rainer W. (rawi)


Lesenswert?

Oliver W. schrieb:
> Das Ziel ist es diesen Magnitudenfehler zu verkleinern (< 3%).

Hast du den Sensor kalibriert?

Die Werte im Datenblatt, auf die du dich beziehst, sind alles typische 
Werte.

von Rolf (rolf22)


Lesenswert?

Welche Ergebnisse liefert denn der Selbsttest des Chips?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Oliver W. schrieb:
> Wie in der angehängten Grafik zu sehen habe ich die Magnitude der Daten
> (nur Beschleunigung, kein Gyro) pro Sensor mittels |a| = sqrt(ax^2 +
> ay^2 + az^2) dargestellt
Wie sieht es denn aus, wenn du die Rohdaten der 3 Achsen anschaust?

von Oliver W. (oliverwigger)


Lesenswert?

Rainer W. schrieb:
> Hast du den Sensor kalibriert?
Im Datenblatt und in folgender Datei 
(https://invensense.tdk.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf) 
habe ich kein Register zur Kalibrierung gefunden. Ich sehe daher keine 
andere Lösung als den Sensor im Post-Processing zu kalibrieren (mit 
Referenzwinkel & Ausrichtung), oder?

Lothar M. schrieb:
> Wie sieht es denn aus, wenn du die Rohdaten der 3 Achsen anschaust?
Sind weiter oben gegeben.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Oliver W. schrieb:
> Lothar M. schrieb:
>> Wie sieht es denn aus, wenn du die Rohdaten der 3 Achsen anschaust?
> Sind weiter oben gegeben.
Wenn ich ikm Datenblatt nach Offest suche, dann finde ich Infos zum 
Layout der Leiterplatte. Mir scheint, dass die bei der verlinkten 
Platine nicht eingehalten wurden. Besonders die Sache mit den "11.4.2 
Exposed Die Pad Precautions" sieht spannend aus. Ich könnte mir 
vorstellen, dass das Pad hier entgegen der Layout Rules angelötet wurde. 
Oder wohin führen die 4 Vias unter dem Chip?

von Εrnst B. (ernst)


Lesenswert?


von Rainer W. (rawi)


Lesenswert?

Oliver W. schrieb:
> Ich sehe daher keine andere Lösung als den Sensor im Post-Processing zu
> kalibrieren

Eine Kalibrierung stellt Abweichungen gegenüber einem Normal fest.

In der Verarbeitung musst du die bei der Kalibrierung bestimmten 
Abweichungen einrechnen. Bei so einem Sensor hast du sowohl Offset- als 
auch Skalierungsfehler und die können sich auch noch z.B. mit der 
Temperatur ändern.

Oliver W. schrieb:
> Im Datenblatt und in folgender Datei
> 
(https://invensense.tdk.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf)
> habe ich kein Register zur Kalibrierung gefunden.

Wieso soll der Sensor Register dafür besitzen?
Das passiert in deiner Software.

von Norbert (der_norbert)


Lesenswert?

0g kann man in Bremen beim ZARM kalibrieren.

Billiger als mit dem Ding nach Kourou zu reisen und auf die nächste 
Mitfluggelegenheit zu warten..

von Frank O. (frank_o)


Lesenswert?

Rainer W. schrieb:
> Hast du den Sensor kalibriert?

Guter Hinweis!

Oliver W. schrieb:
> Im Datenblatt und in folgender Datei
> 
(https://invensense.tdk.com/wp-content/uploads/2015/02/MPU-6000-Register-Map1.pdf)
> habe ich kein Register zur Kalibrierung gefunden.

Passende Antwort dazu.
Statt erstmal danach zu suchen oder zu fragen.

Beim Schießen wirst du deine Waffe auch erst einschießen müssen, um 
gute Ergebnisse zu erzielen.

von Rainer W. (rawi)


Lesenswert?

Norbert schrieb:
> 0g kann man in Bremen beim ZARM kalibrieren.

Da hat nicht jeder Zugriff drauf, ist auch gar nicht nötig.

Für einen Beschleunigungssensor mit vernachlässigbarer 
Querempfindlichkeit der Kanäle reicht es, ihn langsam in alle möglichen 
Orientierungen zu bringen. Die von den verarbeiteten Vektoren 
beschriebene Oberfläche ist eine Kugel mit Mittelpunkt im Ursprung. Die 
Ausgabewerte des Sensors liegen allerdings erstmal anders.
Für eine Relativkalibrierung der Kanäle reicht des örtliche Schwerefeld 
als Normal. Der sich aus den Messdaten ergebende Körper muss erst in den 
Ursprung verschoben werden (Offset-Korrektur) und anschließen die Kanäle 
so skaliert werden, dass eine Kugel daraus wird. Für viele Anwendungen 
reicht diese einfache Methode bereits.

von Rolf (rolf22)


Lesenswert?

Das Ding wird im Werk kalibriert. Anderswo wäre es auch schwierig. Man 
müsste sich dann zunächst mal eine Mechanik basteln (z. B. eine 
Zentrifuge),  die exakte Beschleunigungen produziert und ihrerseits 
kalibriert ist – kann das jemand hier?

Der Hersteller verspricht bestimmte maximale Abweichungen vom wahren 
physikalischen Wert, und damit muss man leben.

Man kann zwar die Ausgabe so umrechnen, dass 1,0 herauskommt, aber das 
ist ja nur ein einziger Punkt der Kurve. Über den Rest ist damit gar 
nichts gesagt, wenn man die Interna und deren Funktion nicht kennt.

von Norbert (der_norbert)


Lesenswert?

Rainer W. schrieb:
> Da hat nicht jeder Zugriff drauf, ist auch gar nicht nötig.

Der Beitrag enthielt ein implizites Smiley.
Ich mach's beim nächsten mal explizit.

von Rainer W. (rawi)


Lesenswert?

Rolf schrieb:
> Anderswo wäre es auch schwierig. Man müsste sich dann zunächst mal eine
> Mechanik basteln (z. B. eine Zentrifuge),  die exakte Beschleunigungen
> produziert und ihrerseits kalibriert ist – kann das jemand hier?

Die Sin- und Cos-Funktionen sind dir bekannt, nehme ich an. Da kommen 
alle Zwischenwert zwischen -1 und +1 drin vor. Um die zu nutzen, musst 
man lediglich den Sensor z.B. im Schwerefeld der Erde unterschiedlich 
orientieren. Damit wäre der Bereich +/- 1 g abgedeckt.

: Bearbeitet durch User
von Oliver W. (oliverwigger)


Angehängte Dateien:

Lesenswert?

Εrnst B. schrieb:
> Schau mal hier:
>
> https://www.eevblog.com/forum/projects/counterfeit-mpu6050-chips-from-china/

Tatsächlich. Ich habe mir die MPU6050 Chips bestellt und gleichzeitig 
ein paar MPU-6050 Boards um das Prototyping voranzutreiben. Die Chips ab 
Rolle sind 4x4mm gross und entsprechen damit den Daten im Datenblatt. 
Die Chips auf den Boards sind 3x3mm gross (siehe Bild, Chips auf 4x4mm 
Raster).

von Oliver W. (oliverwigger)


Lesenswert?

Lothar M. schrieb:
> Wenn ich ikm Datenblatt nach Offest suche, dann finde ich Infos zum
> Layout der Leiterplatte. Mir scheint, dass die bei der verlinkten
> Platine nicht eingehalten wurden. Besonders die Sache mit den "11.4.2
> Exposed Die Pad Precautions" sieht spannend aus. Ich könnte mir
> vorstellen, dass das Pad hier entgegen der Layout Rules angelötet wurde.
> Oder wohin führen die 4 Vias unter dem Chip?

Korrekt, die Vias auf dem Board sind mit dem Pad verbunden und wurden 
angelötet.

Notiz: Auf meinen eigenen PCB's habe ich kein Pad auf dem PCB und habe 
das Problem der Ungenauigkeit trotzdem.

Ich danke für den Input.

von Oliver W. (oliverwigger)


Lesenswert?

Rainer W. schrieb:
> Wieso soll der Sensor Register dafür besitzen?
> Das passiert in deiner Software.

Weil es praktisch ist. Wie z.B. bei einem ADC bei dem ich den Offset 
direkt in ein Register schreiben kann und das somit direkt in "Hardware" 
für mich korrigiert wird.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Angehängte Dateien:

Lesenswert?

Rainer W. schrieb:
> Oliver W. schrieb:
>> Im Datenblatt ... habe ich kein Register zur Kalibrierung gefunden.
> Wieso soll der Sensor Register dafür besitzen?
Er hast zumindest Register für eine Werkskalibirerung. Wenn die aus 
"Kostengründen" oder weil als "nicht kalibierbarer Ausschuss" im Werk 
nicht beschrieben wurden, dann könnte das zu Abweichungen führen...

Oliver W. schrieb:
> MPU6050-IMU
Mir würde bei einer Neuentwicklung das hier zu denken geben:
1
MPU-6050 Produktstatus: Obsolete 
2
Recommended Alternate Part No. : ICM-42670-P 
3
(Interchangeability is not guaranteed.)
Könnte natürlich auch sein, dass diese Abkündigung irgendwelche 
chinesischen "Second-Source" Hersteller reizt.

von Rainer W. (rawi)


Lesenswert?

Oliver W. schrieb:
> Weil es praktisch ist. Wie z.B. bei einem ADC bei dem ich den Offset
> direkt in ein Register schreiben kann und das somit direkt in "Hardware"
> für mich korrigiert wird.

Dann kleb für den Sensor einen HAL dazwischen, der das erledigt.

: Bearbeitet durch User
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.