Hallo, ich habe ein Problem mit dem MPU6050: Ich bekomme perfekte Werte für die X- und die Y-Achse, wenn ich den Sensor in die eine oder andere Richtung kippe. Wenn ich aber den Sensor auf der Tischebene drehe, also um die Z-Achse, verändert sich der Wert dafür nicht. Auch finde ich erstaunlich, das der Offsetwert der Z-Achse 4 ist, ich aber, wenn ich von dem Messwert den Ofsetwert abziehe, immer noch 60 im LCD habe. Ist das normal? Kann ich mit dem Sensor garnicht die horizontale Drehung messen? Aber wofür ist dann die Z-Achse? Das Programm hängt an. Vielen Dank für eure Antworten Andreas
Du liest auch das Accelerometer, also den Beschleunigungssensor, aus. Was du möchtest ist das Gyroskop, also die Änderung des Drehwinkels um die jeweilige Drehachse. Der Offset ist die Erdbeschleunigung, die auf den Sensor Wirkt (Erdanziehungskraft). Kippe den Sensor mal, dann ändert sich auch dein Z-Wert.
Demnach sind auch deine Aktuellen Werte falsch. Die Werte des Gyros müssten in unbewegtem zustand alle ~0 betragen.
Hallo Gerd, ja das mit dem Accelerometer hat mich auch irritiert. Ich bekomme damit aber proportional zur Neigung des Sensors Werte zwischen 0 und 64 bzw. -64 heraus, bei drehen um +-90°. Also genau das, was ich brauche. Benutze ich das Gyroskop bekomme ich Werte die wahrscheinlich proportional zur Beschleunigung sind. Ich habe mir das DB nochmal angesehen, ob ich in den Defines eine falsche Adresse angegeben habe, aber die ACCEL_OUTs beginnen mit 0x3B. Und wenn ich den Sensor kippe verändern sich erwartungsgemäß die Werte für die X- bzw. Y-Achse, da ich ja um diese drehe. Ich würde erwarten, dass wenn ich den Sensor auf der Tischplatte drehe, dass sich dann der Wert für die Z-Achse ändert. Ist das denn nicht richtig? Bis dahin Andreas
Wenn du den Sensor gegenüber der z-Achse neigst, dann verändern sich die Acc-Werte. Während des Neigens zeigt der Gyro die Neigungsgeschwindigkeit um die x- oder y-Achse an.
Wenn du den Sensor um die z-Achse drehst, dann zeigt nur der z-Gyro eine Rotation an.
Hallo Sebastian, die aktuellen Werte sind voll korrekt. Der Offset für die x- und y-Achse liegt bei +-1 bis 2. Der Offset für die Z-Achse beträgt 4. Ich habe die Offsets nur von den Messwerten abgezogen, um bei horizontaler Lage den Wert 0 zu erhalten, was bei x und y auch so ist. Aber wenn ich von z den Offset von 4 abziehe bleiben immer noch 60 übrig, die mir angezeigt werden. Die Werte sind auch gut reproduzierbar: Egal wie ich den Sensor bewege, sobald er wieder auf dem Tisch steht, werden wieder zwei Nullen und für z 60 angezeigt. Also kein Drift oder so etwas. Das mit der Z-Achse bleibt mir weiter ein Rätsel. Bis denne Andreas
Andreas schrieb: > Hallo Gerd, > > ja das mit dem Accelerometer hat mich auch irritiert. Ich bekomme damit > aber proportional zur Neigung des Sensors Werte zwischen 0 und 64 bzw. > -64 heraus, bei drehen um +-90°. Also genau das, was ich brauche. > Benutze ich das Gyroskop bekomme ich Werte die wahrscheinlich > proportional zur Beschleunigung sind. Ich habe mir das DB nochmal > angesehen, ob ich in den Defines eine falsche Adresse angegeben habe, > aber die ACCEL_OUTs beginnen mit 0x3B. > Und wenn ich den Sensor kippe verändern sich erwartungsgemäß die Werte > für die X- bzw. Y-Achse, da ich ja um diese drehe. Ich würde erwarten, > dass wenn ich den Sensor auf der Tischplatte drehe, dass sich dann der > Wert für die Z-Achse ändert. Ist das denn nicht richtig? Stell dir ein Lot vor. Also ein Gewicht an einer Schnur, die an einem Brett festgeschraubt ist. Am oberen Aufhängepunkt der Schnur, also am Brett befestigst du einen Winkelmesser. Am Winkelmesser kannst du ablesen, in welchem Winkel das Brett steht, wenn du das Brett neigst, indem du abliest, durch welchen Strich am Winkelmesser die Schnur durchgeht. Dein Accelerometer ist dem nicht ganz unähnlich. Nur dass es dir nicht den WInkel direkt liefert, sondern dir sagt um wieviel die Schnur jeweils in X bzw. Y Richtung ausgelenkt wurde. Ob das jetzt deswegen ist, weil das Brett geneigt ist oder ob das deswegen ist, weil du das Brett mit dem Senkblei im Auto montiert hast und losgefahren ist, kann das Senkblei und auch das Accelermoter nicht festellen. Aber eines ist sicher, wenn du das Brett einfach drehst (um die Z-Achse), ohne es dabei zu kippen, ändert das genau gar nichts an der AUslenkung des Senkbleis. Das hängt weiter einfach nur senkrecht nach unten wie ein nasser Sack. Und ja. Der Zahlenwert in der Z-Achse (bei waagrechter Lage uns sonstigem Stillstand) ist die Erdbeschleunigung.
Karl Heinz schrieb: > Und ja. Der Zahlenwert in der Z-Achse (bei waagrechter Lage uns > sonstigem Stillstand) ist die Erdbeschleunigung. Dein Accelerometer liefert dir also keines wegs die Rotation, bestenfalls noch indirekt, sondern wo aus seiner Sicht 'unten' ist. Wobei sich unten als die Überlagerung deiner gewollten Beschleunigung und der Gravitation ergibt. Auf einem Round-Up würde dir ein derartiger Beschleunigungssensor also immer anzeigen, in welcher Richtung das Gitter ist, auf dem du magisch klebst (zumindest fast). http://de.wikipedia.org/wiki/Round-up
Hallo Joe, du hast Recht, aber das finde ich schade! Weil wozu brauche ich dann bei ACCEL eine Z-Achse, wenn ich die Beschleunigungen selbst integrieren muss. Ich hatte gehofft mit dem MPU einfacher die Drehung um die Z-Achse messen zu können, so wie ich ja auch die x- und y-Achse genau angezeigt bekomme. Bis denne Andreas
Hallo Karl Heinz, vielen Dank für deine Erklärung. Ich hatte wohl zu viel von dem Sensor erwartet. Bis dahin Andreas
Willst du den Neigungswinkel (ACC) in ° wissen oder die Neigungsgeschwindigkeit (Gyro) in °/s
Hallo Joe, ich möchte gerne eine Relation zwischen Drehwert des Sensors und dem tatsächlichen Drehwinkel. So wie ich ihn ja bei x und y bekomme. Ich hatte gehofft, bei einem Fahrroboter auf die Radencoder verzichten zu können. Bis dahin Andreas
Andreas schrieb: > Hallo Karl Heinz, > > vielen Dank für deine Erklärung. Ich hatte wohl zu viel von dem Sensor > erwartet. > Wie eigentlich die meisten, die da blauäugig reingehen. Ein Beschleunigungsmesser, genauer: derartige Beschleunigungsmesser sind eigentlich Kraftmesser. Eine kleine Probenmasse ist durch Federn in den 3 Raumachsen aufgehängt, und es wird gemessen, welche Kraft in jeder der 3 Raumrichtungen aufgebracht werden muss, damit die Probenmasse in der Mitte im Kreuzungspunkt bleibt. (andere Betrachtungsweise) Und ja. Rein Konzeptionell kann dein Beschleunigungsmesser eine von dir hervorgerufene Beschleunigung nicht von der Erdbeschleunigung unterscheiden. Dein Beschleunigungsmesser würde dir nur dann in allen 3 Raumachsen eine glatte 0 anzeigen, wenn er fern jeder Masse irgendwo im freien Raum schwebt, auf der ISS die Erde umkreist oder sich im freien Fall befindet. Beschleunigungsmesser: misst in welche Richtung die Nettokraft angreift. Gyroskop: misst die Verdrehung zu einer Bezugsachse, da ein Kreisel (=Gyro) seine Achse im Raum beibehält. Hat der erst mal eine fixe Bezugsachse, dann kann er messen wie weit er sich in Bezug auf diese Bezugsachse verdreht hat. Ein Gyro ist unabhängig von Beschleunigungen, dafür driftet er. Ein Beschleunigungssensor driftet nicht (zumindest sollte er es nicht), dafür kann er die Gravitation nicht ausblenden. Bzw. umgekehrt kann ein Beschleunigungssensor nicht sagen, wo unten ist, wenn gleichzeitig auch noch Beschleunigungen durch die Bewegung vorliegen. Erst die Kombination aus beidem, zusammen mit heftiger Filterung, ermöglicht es, die tatsächliche Lage im Raum zu ermitteln.
Hallo Karl Heinz, vielen Dank nochmal. Muss ich also doch die Encoder bemühen, geht ja auch, das andere hätte ich eleganter gefunden. Und immerhin kann ich ja jetzt die Neigung meines Robos messen. Bis dahin Andreas
Du willst also eine horizontale Drehung gegenüber einer vorherigen Richtung messen, so wie ich dich jetzt verstanden habe. Also eine Drehung um die z-Achse. Das ist ok und lässt sich auch machen. Dazu benötigst du den z-Gyro. Seine Werte müssen neben der Eichung dann integriert werden. Mit dem uC liest man dafür in der Regel in sehr kurzen Abständen den z-Gyro aus. Diese Werte müssen nach Abzug eines Offsetwertes dann addiert werden. Das wars. Die Eichung in der Praxis: Lies den Gyro alle 10ms aus. Subtrahiere jeweils den Offsetwert und addiere alles auf. Wenn keine Bewegung erfolgt, muss diese Summe null bleiben!! Drehe den Gyro (z.B. in einer Sekunde) um 90°. Dein Eichfaktor ist nun die 90/Summe. Aus deiner späteren Summe erhältst du damit immer den aktuellen Drehwinkel. Eine tiefe eingestellte Grenzfrequenz des internen Tiefpasses (5Hz oder 10Hz) ist dabei sinnvoll. Joe
Hallo Joe, vielen Dank für deine Erklärung. Werde ich mal ausprobieren. Ich würde mich freuen, wenn Du mir noch mitteilst welche Register für die Einstellung der Grenzfrequenz zuständig sind. Bis dahin Andreas
Register 26 (dezimal) 'Register 26 DLPF_CFG (digital lowpass filter) Configuration Setzen auf: &B00000101 'Bits 0..2 = 011 (3) - ACC:44Hz, 4.9ms; Gyro:42Hz, 4.8ms Tabelle mit Grenzfrequenzen ACC und Gyro 'wert Hz Hz '0 260 256 '1 184 188 '2 94 98 '3 44 42 '4 21 20 '5 10 10 '6 5 5 '7 RESERVED
&B00000101 'Bits 0..2 = 011 Links habe ich auf 5 gesetzt, rechts habe ich noch den Wert 3 angegeben.
Hallo Joe, vielen herzlichen Dank. DB habe ich schon, aber ich habe es nicht gefunden. Muss man ja auch wissen, dass das unter CONFIG ist. Oder nicht so blind wie ich. Bis dahin Andreas
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.