L3G4200D picos aleatorios

8

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!

    
pregunta ritchie888

3 respuestas

1

Debido a que está observando un problema similar con su magnetómetro, supongo que tiene un problema en el bus I2C. Si bien podría tratarse de un problema de código debido a la operación intermitente, primero comprobaría cómo está conectado el bus. Algunas cosas para verificar / probar:

  • Si no está usando resistores de pull-up externos, pruebe los resistores de pull-up de 10K en SDA y SCL. El pull-up interno en la mayoría de los microcontroladores no será lo suficientemente fuerte.

  • Si es posible, reduzca la longitud del bus tanto como sea posible y trate de mantenerlo alejado de las señales de alta velocidad.

  • Si usa una placa de pruebas, intente mantener las conexiones lo más directas posible para evitar el exceso de capacidad.

  • Si está utilizando tableros prototipo que ya incluyen resistencias de pull-up, pueden terminar en paralelo y, en efecto, puede tener un valor de resistencia de pull-up demasiado bajo.

  • Si puede organizar el acceso a un alcance que sería ideal para asegurarse de que el reloj y las líneas de datos se vean bien y en forma cuadrada y no estén demasiado inclinados.

Si esos pasos no funcionan, Texas Instruments tiene el Solución de problemas del informe de la aplicación I2C Bus Protocol eso se detalla en el cálculo de las resistencias pull-up y los problemas que puede encontrar con la capacitancia.

    
respondido por el PeterJ
0

Lo que puede estar sucediendo es que se está tomando una nueva muestra entre la lectura del LSB y el MSB. Entonces, si MSB = 0 y LSB = -4 debería obtener 252, o aproximadamente 1 g. Si la siguiente lectura es MSB = 1 y LSB = 2, debe obtener 258, lo cual es razonable. El problema es que cuando 1 muestra solo el MSB se ha actualizado a 1 y el LSB sigue siendo -4, obtienes 508, aproximadamente 2 g, lo que podría ser este problema.

BDU en CTRL_REG4 se supone que debe evitar esto. Tal vez lea el registro del sensor y asegúrese de que la retención de bloqueo esté habilitada?

    
respondido por el DDub
0

intente con un Filtro de Mediana y estos picos se desvanecerán.

Consulte mi pregunta aquí en StackExchange y luego lea esta publicación sobre el mismo problema

    
respondido por el UserK

Lea otras preguntas en las etiquetas