Forum: Mikrocontroller und Digitale Elektronik ITG 3200 - wie auf ° ?


von John (Gast)


Lesenswert?

Hey,

Ich habe einen ITG 3200 per I²C an einen ATMEGA2560 angeschlossen und 
übertrage die Messwerte per RS232 an ein PC-Programm. Soweit 
funktioniert mittlerweile alles super.

Einziges Problem ist, dass ich keinen Plan habe wie ich auf die 
Neigungswinkel in Grad oder Rad komme - habe zwar einige Artikel im Web 
gefunden, aber die widersprechen sich meistens gegenseitig.

Hier mal was ich bisher mache:

Init ITG:
1
i2c_write_reg_itg(0x15,0x00,a_itg1); //a_itg1 = write addr
2
i2c_write_reg_itg(0x16,0x18,a_itg1);
3
i2c_write_reg_itg(0x3E,0x01,a_itg1);

Die Werte auslesen und "zusammen rechnen" (passiert ~ alle 100ms)
1
itgval[0] = i2c_read_reg_itg(0x1D,a_itg1,(a_itg1 + 1)); //itgval = char
2
itgval[1] = i2c_read_reg_itg(0x1E,a_itg1,(a_itg1 + 1));
3
itgval[2] = i2c_read_reg_itg(0x1F,a_itg1,(a_itg1 + 1));
4
itgval[3] = i2c_read_reg_itg(0x20,a_itg1,(a_itg1 + 1));
5
itgval[4] = i2c_read_reg_itg(0x21,a_itg1,(a_itg1 + 1));
6
itgval[5] = i2c_read_reg_itg(0x22,a_itg1,(a_itg1 + 1));
7
    
8
ix = ((int)itgval[1]<<8)|(int)itgval[0]; //ix, iy & iz = unsigned int
9
iy = ((int)itgval[3]<<8)|(int)itgval[2];
10
iz = ((int)itgval[5]<<8)|(int)itgval[4];

Dann werden die Daten an den PC gesendet, welcher dann die endgültige 
Umrechnung machen soll:
1
dItg_c[0] = iItg[0] / 14.375;
2
dItg_c[1] = iItg[1] / 14.375;
3
dItg_c[2] = iItg[2] / 14.375;

Das Problem hierbei ist, dass meine 3 Werte nun irgendwo zw. 0 und 
4558,95 liegen (klar, wegen der Division durch 14.375 - die Zahl hab ich 
aus einem der oben erwähnten Artikel).

Hoffe ihr könnt mir ein wenig auf die Sprünge helfen - danke schonmal!

MfG,
John

von Stephan (Gast)


Lesenswert?

John schrieb:
> ix = ((int)itgval[1]<<8)|(int)itgval[0]; //ix, iy & iz = unsigned int
> iy = ((int)itgval[3]<<8)|(int)itgval[2];
> iz = ((int)itgval[5]<<8)|(int)itgval[4];

High/Low-Byte vertauscht

(raw[0]<<8) | raw[1])
...


Stephan

von Michael F. (startrekmichi)


Lesenswert?

John schrieb:
> Division durch 14.375 - die Zahl hab ich
> aus einem der oben erwähnten Artikel

Der steht übrigens im Datenblatt, wo man sich solche Werte immer her 
holen sollte und nicht aus irgendwelchen Artikeln. Da steht nämlich 
wirklich drin wie sich der Chip laut Hersteller zu verhalten hat. In 
diesem Fall "Sensitivity Scale Factor 14,375 LSB pro °/s".

In der Register Map steht dann auch was Stephan schon schrieb: du hast 
high- und low-byte vertauscht.

von H.Joachim S. (crazyhorse)


Lesenswert?

Michael Frangenberg schrieb:
> "Sensitivity Scale Factor 14,375 LSB pro °/s".

Hm, wer denkt sich denn so einen Skalierungsfaktor aus??

von John (Gast)


Lesenswert?

Sorry für die späte Antwort und vielen Dank für den Hinweis mit Low & 
High Byte.

Michael Frangenberg schrieb:
> Der steht übrigens im Datenblatt, wo man sich solche Werte immer her
> holen sollte und nicht aus irgendwelchen Artikeln. Da steht nämlich
> wirklich drin wie sich der Chip laut Hersteller zu verhalten hat. In
> diesem Fall "Sensitivity Scale Factor 14,375 LSB pro °/s".

Stimmt, den hatte ich ja auch aus dem Datenblatt, hatte dahinter noch 
einen Wert stehen den ich hier jetzt rausgenommen habe, weil er zu 
keinem Ergebnis führte - der war aus nem Artikel.

Das Problem ist nur weiterhin, dass ich keine Ahnung davon habe wie ich 
ich jetzt auf die Neigung in X- / Y-Richtung komme (in °). Habe nun 
schon sehr viel getestet und probiert, komme aber auf keinen grünen 
Zweig...

Hat jemand zufällig einen Tipp für mich?

Danke und mfG,
John

von Jan H. (jan_h74) Flattr this


Lesenswert?

Das ist ein gyro sensor. Der gibt nie die Neigungswinkel aus ! Was so 
ein sensor well macht, ist die actuelle Drehgeschwindigkeit ueber eine 
bestimmte Achse ausgeben. Wen du das integriert (°/sek * zeit = 
°)bekommst du eine Winkelaenderung.

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
Noch kein Account? Hier anmelden.