Tengo una IMU BMI160 que proporciona una buena lectura para el eje paralelo a la gravedad (1G o -1G), pero un valor cambiante de aproximadamente 2G o -2G para los ejes que deben mostrar 0G. Esto es cierto para todos los ejes, he intentado rotar la IMU.
Estoy leyendo la IMU con una placa de descubrimiento STM32F4 a través de SPI. A mi entender, la IMU genera datos para el acelerómetro en 2 bytes, siendo LSB el primero. Dentro de estos bytes, los bits están en formato MSB. Por lo tanto, una lectura de 0111 0010 1111 1101 debe ser 64 882 en decimal (invertida a 1111 1101 0111 0010) e igualar a aproximadamente 19.23 m / s ^ 2 o 1.96 G. Sé que los bits exactos se mueven en la línea de datos SPI, ya que Lo he leído con un analizador lógico para verificar.
Configuración de BMI160: el modo de energía es "normal", y el registro ACC_CONF es "0x2B": sin submuestreo, modo de filtro normal (frecuencia de corte 3dB) y una velocidad de datos de 800 Hz. También he probado 100 Hz y 1600 Hz. La velocidad en baudios para SPI es 156,250 Hz, también he intentado más alto (por ejemplo 1,250,000 Hz).
Sé que el BMI160 funciona bien, porque tengo una placa de aplicación de Bosch y un programa de escritorio de desarrollo, que genera un buen gráfico de ejecución de datos atractivos para todos los ejes. También he probado un BMI160 diferente y una placa STM32 diferente.
Sospecho que el problema está en algún lugar en cómo inicializo la pizarra o en cómo leo el SPI, pero ¿dónde exactamente?
Hoja de datos de BMI160: enlace