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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.