He buscado un poco en este foro con respecto al giroscopio L3G4200D, y no he visto este problema mencionado, pero he visto a otros hablar de ello en otros foros. Veo un gran valor extraño en mi salida cuando el giroscopio está parado. Desafortunadamente, nadie parece haber podido responder por qué es así, así que pensé en preguntar
Entonces, estoy recolectando datos del giroscopio usando i2c a 400kHz (modo rápido), recolectando los datos del giroscopio usando lectura multibyte (seis bytes a la vez). Muestreo a 100Hz (también probé los mejores 800Hz), también probé con el filtrado activado y desactivado a diferentes valores. No estoy usando el pin de interrupción, pero estoy usando el atributo 'actualización de datos de bloque' en el GYRCTRLREG4, por lo que los datos no se envían hasta que se leen tanto LSB como MSB. 2000dps completos y no hizo nada con el FIFO. Puedo publicar mis valores de registro exactos si me ayuda, pero creo que la mayoría de ustedes no tendrá la hoja de datos a mano.
La imagen de abajo muestra mi problema. Los datos que se emiten son buenos, se calculan correctamente (que yo sepa) y el ruido general es muy aceptable. Pero luego noté que estos molestos 'blips' aparecían al azar cuando el dispositivo está parado. Si lo dejo quieto durante un par de segundos, obtendré uno de estos picos, siempre igual a alrededor de 250-255 (por lo tanto ~ 18 cuando se convierte, usando '(salida * 70) / 1000'). Los picos, como digo, son aleatorios, pueden aparecer en cualquier plano (en la imagen de abajo puedes ver el primer pico en el plano X, el segundo en Y), siempre alrededor del mismo valor, y uno, dos o todos tres pueden suceder al mismo tiempo. El valor grande es solo para una sola muestra, luego vuelve a la normalidad.
Vi en otro hilo en alguna parte que debería estar usando la función de espera de datos de bloque en GYRCTRLREG4, como mencioné antes, pero sin cambios. He reducido el problema a ser cuando el MSB es cero o más alto, es decir, un número positivo, luego, cuando se combinan el MSB y el LSB, obtengo estos números grandes. Por ejemplo, tomo los dos bytes necesarios para el plano X, obtengo un -6 en el LSB, y un 0 en el MSB, combinándolos me da 250, luego la conversión da (250 * 70) / 1000 = 17.5 dps ( es decir, demasiado grande para estacionaria / incorrecta). En la misma muestra, los dos bytes para el plano Y son -3 LSB y -1 MSN, combinándolos da -3, y la conversión da -0.21 (es decir, esperado / correcto).
He estado en este problema durante días ahora, también estoy viendo un poco de estos picos aleatorios con mi magnetómetro, ¿así que estoy pensando que soy yo quien lee el dispositivo (a través de i2c) incorrectamente?
Cualquier sugerencia o cosas para probar son realmente bienvenidas!