Configuración de interrupción y FIFO en LSM6DS3

0

Requisito : debe usar solo el acelerómetro en LSM6DS3 a 104 Hz en modo de escala completa 2g y FIFO en modo continuo. La interrupción debe generarse cada 320 mseg.

Entendimiento : Por cada 1 segundo hay 104 muestras (104 muestras "X", 104 muestras "Y" y 104 muestras "Z", 2 bytes cada una), es decir, 624 bytes por segundo. Entonces, para generar una interrupción a 320 ms, necesito establecer el umbral FIFO en 210 bytes. El pin INT1 está configurado como interrupción. Se utiliza el protocolo I2C.

Configuración de registro :

CTRL1_XL = 0x10; //operating at 2g mode and ODR is 104Hz
CTRL3_C = 0x64; // BDU=1,H_LACTIVE=1,IF_INC=1
CTRL4_C = 0x29 //STOP_ON_FTH =1 and INT2_on_INT1=1 and SLEEP_G=1
CTRL6_C = 0x10 //XL_HM_MODE =1 
MASTER_CONFIG = 0x80 //DRDY_ON_INT1=1
INT1_CTRL = 0x08
FIFO_CTRL1 =210 bytes as threslod 
FIFO_CTRL5 = 0x23 //FIFO ODR is set to 104 Hz and FIFO Continuous mode selected

Problema : no se genera ninguna interrupción.

Por favor, avíseme si falta algo o si es necesario agregar / modificar algo. Cualquier ayuda muy apreciada.

    
pregunta Ganesh

1 respuesta

1

Fondo

Siguiendo el procedimiento normal de solución de problemas, en ausencia de otros datos (por ejemplo, el uso de algunos de los registros de estado del dispositivo proporcionará información útil). Formulé algunas hipótesis para posibles causas, verifiqué esas posibles causas en la hoja de datos del ST LSM6DS3 y algunos códigos de ejemplo ( ver más abajo) y encontré un problema. (Aún podría haber más problemas, la resolución de problemas suele ser iterativa, pero es necesario solucionar este problema).

Te falta una configuración de inicialización, ver más abajo.

Sin esa configuración, el acelerómetro no pondrá ninguna lectura en el FIFO. En ese caso, como ha visto, la interrupción de umbral FIFO no se puede activar, ya que FIFO no se está llenando con lecturas y, por lo tanto, nunca puede alcanzar su valor de umbral.

En lugar de hacer todo el trabajo para decidir cómo I inicializaría el dispositivo, revisé una biblioteca existente de SparkFun, que también inicializa el FIFO, como usted quiere hacer (algunas bibliotecas existentes ignoran el FIFO). El archivo principal del curso de C ++ está aquí:

enlace

En base a mi revisión de la hoja de datos del dispositivo, la nota de la aplicación y la comparación del código de inicialización de esa biblioteca, encontré la configuración faltante a continuación que explica su síntoma de "no hay interrupción FIFO".

Corrección

El registro FIFO_CTRL3 y / o FIFO_CTRL4 debe configurarse en un valor distinto de cero.

Esto se explica en Nota de aplicación AN4650 en el LSM6DS3 donde se indica en la página 90:

  

Se requiere establecer al menos uno de los cuatro factores de reducción en 1 (sin reducción).

Dado que ninguno de esos está en su lista de registros inicializados, ambos tendrán el valor predeterminado de cero, lo que significa que no se colocarán lecturas (giroscopio o acelerómetro) en el FIFO.

Espero que desees establecer FIFO_CTRL3 en 0b00000001 (es decir, DEC_FIFO_XL0 = 1).

Si aún tiene problemas, haga más comparaciones con el código SparkFun (me detuve en el primer problema que encontré) y use los registros de estado del dispositivo para averiguar qué le sucede al dispositivo con más detalle, con respecto a cualquier problema nuevo. usted encuentra.

    
respondido por el SamGibson

Lea otras preguntas en las etiquetas