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.
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.
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?
Hast du die einzelnen Achsen auch separat aufgezeichnet?
Ja, habe ich. Bereits da stimmen die 5% bzw. die 8% nicht.
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.
Welche Ergebnisse liefert denn der Selbsttest des Chips?
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?
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.
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?
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.
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..
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.
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.
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.
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.
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
Ε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).
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.