He buscado en este foro un poco en lo que respecta al giroscopio L3G4200D, y no he visto este problema mencionado, pero he visto a otros hablar de ello en otros foros. Estoy viendo un valor extraño grande en mi salida cuando el giroscopio está parado. Desafortunadamente, nadie parece haber podido responder por qué esto es así que pensé en preguntar por ahí
Entonces, estoy recolectando datos del giroscopio usando i2c a 400kHz (modo rápido), recolectando los datos del giroscopio usando multibyte read (seis bytes a la vez). Muestreo a 100Hz (también probó los mejores 800Hz), también se probó con el filtrado activado y desactivado en diferentes valores. No estoy usando el pin de interrupción, pero estoy usando el atributo 'actualización de datos de bloque' en el GYRCTRLREG4, para que los datos no se generen hasta que se lean LSB y MSB. 2000dps completos y no se hace nada con el FIFO. Puedo publicar mis valores de registro exactos si ayuda, pero imagino que la mayoría de ustedes no tendrán 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 "bips" aparecían al azar cuando el dispositivo estaba parado. Si lo dejo quieto por un par de segundos, obtendré uno de estos picos, siempre igual a 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 puede ver el primer pico en el plano X, el segundo en la Y), siempre alrededor del mismo valor, y uno, dos o todos Tres pueden suceder al mismo tiempo. El valor grande es solo para una muestra, luego vuelve a la normalidad.
Vi en otro hilo en algún lugar 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 estacionario / incorrecto). 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, también estoy viendo un poco de estos picos aleatorios con mi magnetómetro, ¿entonces estoy pensando que soy yo leyendo el dispositivo (a través de i2c) incorrectamente?
¡Cualquier sugerencia o cosas para probar son realmente bienvenidas!