Hallo, mal wieder geht es für mich um das Gyroscope L3G4200D!
Hat jemand Erfahrungswerte mit diesem Gyroscope gesammelt?
Ich hänge an der Offset Eliminierung.
Folgendermaßen habe ich versucht den Offset raus zu rechnen:
1 | float X_Offset = 0;
|
2 |
|
3 | void Clean_Offset(void)
|
4 | {
|
5 | for(uint8_t i = 0; i<200; i++)
|
6 | {
|
7 | uint8_t XH = ReadByteSPI(OUT_X_H);
|
8 | uint8_t XL = ReadByteSPI(OUT_X_L);
|
9 | X_Offset += (((XH << 8) | XL));
|
10 | }
|
11 | X_Offset /= -200;
|
12 | }
|
13 |
|
14 | float Refresh_Gyro_Data_X(void)
|
15 | {
|
16 | uint8_t XH = ReadByteSPI(OUT_X_H);
|
17 | uint8_t XL = ReadByteSPI(OUT_X_L);
|
18 | X = ((((XH << 8) | XL)+X_Offset) * 0.00875);
|
19 | return X;
|
20 | }
|
X wird alle 10ms (über Refresh_Gyro_Data_X) neu ausgelesen und soll dann
der Wert in dps sein!
Dann wird ebenfalls alle 10ms zusätzlich folgende Zeile ausgeführt um
die ausgeführte Drehung in Grad zu erhalten:
1 | float refresh_time = 0.01;
|
2 | float X_add = 0;
|
3 | float X;
|
...
1 | X = Refresh_Gyro_Data_X();
|
2 | X_add += X*refresh_time; //<-- diese Zeile
|
Nach dieser Berechnung treten trotzdem immer wieder Offsets bis zu 1Grad
pro Sekunde auf, was nun doch recht viel ist.
Sieht jemand einen grundlegenden Fehler in der Berechnung, oder ist
diese in Ordnung so?