Picos aleatorios L3G4200D

He buscado un poco en este foro con respecto al giroscopio L3G4200D, y no he visto que se mencione este problema, pero he visto a otros hablar de ello en otros foros. Veo un valor grande y extraño en mi salida cuando el giroscopio está estacionario. Desafortunadamente, nadie parece haber podido responder por qué esto 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 100 Hz (también probé los 800 Hz superiores), también 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 GYRCTRLREG4, para que los datos no se emitan hasta que se lean tanto LSB como MSB. Full 2000dps y no hizo nada con el FIFO. Puedo publicar mis valores de registro exactos si ayuda, pero la mayoría de ustedes no tendrán la hoja de datos a mano.

La siguiente imagen muestra mi problema. Los datos que se emiten son buenos, se calcularon correctamente (que yo sepa) y el ruido general es muy aceptable. Pero luego me di cuenta de que estos molestos "señales intermitentes" aparecían al azar cuando el dispositivo estaba parado. Si lo dejo quieto durante un par de segundos, obtendré uno de estos picos, siempre equivalente 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 se puede ver el primer pico en el plano X, el segundo en el Y), siempre alrededor del mismo valor, y uno, dos o todos tres pueden ocurrir al mismo tiempo. El valor grande es solo para una sola muestra, luego vuelve a la normalidad.

pitidos de error

Vi en otro hilo en alguna parte que debería usar la función de espera de datos de bloque en GYRCTRLREG4, como mencioné antes, pero no hubo cambios. He reducido el problema a que cuando el MSB es cero o más alto, es decir, un número positivo, entonces, 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, combinarlos da -3 y convertirlos 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, así que estoy pensando que soy yo leyendo el dispositivo (a través de i2c) incorrectamente.

¡Cualquier sugerencia o cosas para probar son realmente bienvenidas!

Un enlace a la hoja de datos podría ser útil: hoja de datos L3G4200D
¿Resolviste tu problema? Estoy atascado desde hace un día en un problema similar usando un giroscopio diferente. Tengo picos individuales cada segundo y hasta ahora no pude resolverlo.
También tengo este mismo problema con el L3g4200d. ¿Alguna vez te diste cuenta?

Respuestas (3)

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 ser un problema de código debido a la operación intermitente, primero verificaría cómo está conectado el bus. Algunas cosas para verificar/probar:

  • Si no está utilizando resistencias pull-up externas, pruebe con resistencias 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 autobús tanto como sea posible y trate de mantenerlo alejado de las señales de alta velocidad.

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

  • Si está utilizando placas prototipo que ya incluyen resistencias pull-up, es posible que terminen en paralelo y, en efecto, puede tener un valor de resistencia pull-up demasiado bajo.

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

Si esos pasos no funcionan, Texas Instruments tiene el informe de la aplicación Troubleshooting I2C Bus Protocol que brinda más detalles sobre el cálculo de las resistencias pull-up y los problemas que puede encontrar con la capacitancia.

Gracias por su respuesta. Probé en una placa de prueba, con cables cortos y cambié el valor de la resistencia, de 10k a 1,5k (me decidí por 1,5k). También tengo una placa compuesta, con componentes de montaje en superficie y pistas muy cortas. Verificaré con un alcance más tarde, pero me sorprendería si mis resistencias o pistas pull up fueran un problema. Intentaré recopilar algunos datos lejos de cualquier dispositivo electrónico para eliminar los problemas de EMI.

Lo que puede estar pasando 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 alrededor de 1 g. Si la siguiente lectura es MSB = 1 y LSB = 2, debería obtener 258, lo cual es razonable. El problema es cuando para 1 muestra solo el MSB se ha actualizado a 1 y el LSB sigue siendo -4, obtienes 508, aproximadamente 2 g, que podría ser este problema.

Se supone que BDU en CTRL_REG4 previene esto. ¿Quizás leer ese registro del sensor y asegurarse de que la retención de bloque esté habilitada?

intente con un filtro mediano y estos picos se desvanecerán.

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