Gyro Intergrieren

Gast #3245632
Lesenswert?

Ich mache momentan einige Versuche mit meine L3G4200D Gyro. Das Auslesen 
des Sensors mit I2C klappt. Jetzt will ich den Drehwinkel durch 
integrieren der z-Achse ausrechnen. Ich weiß, dass das auf lange Zeit 
nicht geht wegen der Drift, es ist aber auch nur ein Versuch. Ich 
arbeite mit einem Skalenendwert von ±250dps, das heißt das Gyro hat eine 
Auflösung von 8.75 mdps/digit. Wie kann ich diesen Wert in Grad 
umrechnen? Ich habe mir gedacht, dass wenn ich den Messwert mit 8.75 
multipliziere und diesen Wert dann integriere müsste das Ergebnis in 
Milligrad stehen. Wenn ich das Sensorboard jetzt aber um 360° drehe 
bekomme ich als Ergebnis 290.000 Milligrad.
Woran könnte das liegen? An der Drift, oder ist der Sensor so ungenau?
Gast #3245646
Lesenswert?

Noch eine Frage: Wenn ich das Sensorboard für einer Minute auf dem Tisch 
liegen lasse ohne es zu bewegen, bekomme ich einen Winkel von ca. 13° 
obwohl ich das Board gar nicht bewegt habe. Um den Offset zu 
kompensieren, wird vor dem Starten der Messung der Mittelwert aus 128 
Messwerten gebildet und dieser wird dann von jedem Messwert subtrahiert.
Gast #3245667
Lesenswert?

Die Frage ist, wie oft ließt Du Deinen Messwert aus?

asdf schrieb:
> Wenn ich das Sensorboard für einer Minute auf dem Tisch
> liegen lasse ohne es zu bewegen, bekomme ich einen Winkel von ca. 13°
> obwohl ich das Board gar nicht bewegt habe.

Halte ich für realistisch. Hauch ihn mal an oder mach ihn etwas warm und 
Du wirst Dich wundern ;-)
#3245705
Lesenswert?

was bedeutet denn dps?

Degrees per Second!

d.h. wenn sich der Sensor mit der momentan aktuell gemeldeten Rate 
gleichmässig weiterdrehen würde, dann würde er sich in 1 Sekunde um eben 
jene x Grad drehen.

D.h. du musst drauf achten, dass deine Zeitabstände gleichmässig sind, 
du musst drauf achten, wie lange du in Summe integrierst und du musst 
drauf achten wie oft du pro Sekunde integrierst.
Gast #3245719
Lesenswert?

Die Zeitabstände werden per Timerinterrupt erzeigt. Der Code sieht in 
etwa so aus:
1
gyro_z = Read_Gyro_Z();
2
z_integral+= gyro_z*256/15625    // 256/15625=0.016384
3
winkel = z_integral*35/4         // 35/4 = 8.75
Gast #3245723
Lesenswert?

Schalt mal den Testmodus ein und integriere über 1 Sek.
Dann müsstest Du auf die angegebenen 130Grad kommen.
Wenn nicht, stimmt Deine Routine nicht.

Schon mal nachgemessen ob Dein Timerinterrupt auch wirklich mit der 
Frequenz kommt wo Du meinst, dass er kommen sollte?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren