Estoy haciendo una IMU para 6DOF que tiene un giroscopio digital de 3 ejes L3G4200D.
He comprobado tantos blogs, foros, notas de aplicaciones y he programado en consecuencia para obtener la lectura / información adecuada de mi giro.
Aunque estoy muy cerca de resolverlo, ¡un solo problema me ha vuelto loco desde las últimas dos noches! Tengo un dígito de 16 bits - 1 bit con signo + valor de 15 bits
Supongamos que quiero medir un ángulo con respecto al eje X a 2000 dps, para eso estoy haciendo lo siguiente:
while(1)
{
for(g=39;g<42;g++)
{
r = I2CRegRead(I2C0_MASTER_BASE, 0x68, g); // read the reg. no. g
switch (g)
{
case 40:
l = r; // LSB part of X_Gyro
break;
case 41:
h = r; // MSB part of x_Gyro
x = 0;
x = h<<8;
x = x|l;
x = x*70/1000;
UARTprintf("Gyro_X : %5d\n\r",x);
break;
}
}
}
Probablemente obtengo algunos valores de < 800 cuando muevo el giro en la dirección contraria del reloj con respecto al eje X y obtengo > 4000 para la dirección opuesta.
Quiero tener valores de ángulos positivos mientras los giro en sentido contrario a las agujas del reloj y valores de ángulos negativos en sentido de las agujas del reloj ... ¿Por lo que debo agregar en mis cálculos? [Los ángulos deben estar en grados 1 a 180 y amp; (-1) a (-180)]
// en el código 0.007 está en mdps, que es el valor de cada LSB de los datos de gyro
Lo que debería agregar podría y por qué tengo > 4000 & < 800 valores en este momento?
¿Podría alguien ayudarme con esto?
Muchas gracias por su valioso tiempo.