Lectura de valores MPU6050 DMP

Estoy usando la IMU de la placa de conexión MPU6050 junto con el microcontrolador ATtiny2313 para obtener los valores del acelerómetro y el giroscopio de la IMU. Aquí está la pregunta: quiero saber qué valores son computarizados por el DMP dentro del MPU6050 y cómo puedo leer los valores usando I2C (es decir, ¿cuáles son los números de registro en los que se almacenan los valores DMP?)

No estoy usando ninguna biblioteca ya que he escrito todo el código yo mismo. Solo necesito saber cuales son los datos que proporciona el DMP y como leerlos. Por favor ayuda !

Respuestas (1)

No estás solo si estás frustrado. a continuación hay una explicación detallada de lo que está pasando con este chip, pero es una lectura larga, así que apilaré algunos enlaces en la parte superior aquí para que pueda comenzar rápidamente:

  1. probablemente obtendrá los mejores resultados al portar una biblioteca existente, o al menos tomando prestada la lógica de algunas de las funciones. Invensense lanzó recientemente el código fuente para la versión 6.12 de su controlador MotionApps, y también proporcionan (solo) las últimas versiones de sus documentos para la parte de sus controladores basada en I2C/Registro. Todo esto está disponible en su sitio después de registrarse. Lamentablemente, muchas de las funciones de DMP no están completamente incluidas... consulte más abajo para obtener más información al respecto.

  2. I2CDevLib es una gran fuente de información sobre el MPU6050. Tengo un hilo abierto ahora con la esperanza de suscitar un debate sobre cómo activar las funciones avanzadas de DMP del chip. Sin embargo, hay mucho que leer, necesitarás una larga noche para asimilarlo todo.

  3. De hecho, obtuve la mayoría de mis avances después de buscar en Google otras discusiones sobre proyectos basados ​​en MPU (cuadricópteros, teléfonos celulares, controles remotos de wii, etc.). Mucha gente usa este chip, pero por diferentes razones, muchos usuarios del foro desconocen los problemas y soluciones de los demás.

  4. Si busca en Google, no limite las búsquedas a "MPU6050". Hay varias otras unidades, como la 6500 y la 9150, que comparten controladores. Y no se sorprenda si llega a la página 10 de los resultados de Google: siga paginando :)


Así que ahora tiene algunos consejos, aquí está la historia completa:

El código ejecutado por el coprocesador DMP en el MPU6050 es propietario y no se almacena en el chip; la versión compilada se incluye con cada versión de los archivos MPU c/c++ de Invensense como una matriz de ~3kB de bytes sin procesar. Para empeorar las cosas, los registros y las ubicaciones de memoria para habilitar o modificar la funcionalidad DMP pueden ser diferentes para cada versión del firmware DMP.

Incluso los mapas de registro básicos y la documentación de la API para las funciones que se enumeran en las especificaciones del producto, como la detección de gestos y la fusión avanzada de sensores, son difíciles de encontrar. Algunas versiones de los documentos de Invensense incluyen secciones que otras revisiones no incluyen, aludiendo a una funcionalidad que no está documentada en ningún otro lugar. Es casi como si hubiera una versión de "solo uso interno" de su documentación, pero los miembros del personal de documentación ocasionalmente incluyen algo confidencial en un comunicado público por accidente.

Mi apuesta es que, a menos que alguien haga ingeniería inversa de un binario, solo Invensense sabrá exactamente cómo se mueven los engranajes allí.

A pesar de todo esto, hay muchas promesas en este pequeño chip: algunas de las constantes en los archivos .h implican la existencia de una funcionalidad que es muy intrigante, como Swing_xxx, Flick_xxx y muchas otras . Recientemente logré obtener datos de detección de Tap y Orientación en el FIFO después de portar un controlador de una versión aleatoria del sistema operativo Android. Desafortunadamente, encontré el archivo fuente después de hacer clic en más de 20 páginas de resultados de Google, y estaba tan inmerso en Chrome: "pestañas nuevas" en ese momento que ni siquiera guardé un enlace... ¡lo siento! Ahora que estoy obteniendo datos, puedo ver que Tap y Orientation solo representan 8 bits del aumento de 4 bytes en el tamaño del paquete FIFO cuando "Enviar datos de gestos FIFO" está habilitado. Definitivamente hay más que aprender.

¡Buena suerte, avísanos a todos si haces algún progreso!

-Mate

Entonces, ¿cómo es que DMP con I2CDevLib parece funcionar? ¿Fue ingeniería inversa?
Recuerdo haber leído, creo que en hackaday.com, hace unos años, que al principio del proceso de exploración de la funcionalidad DMP para uso de aficionados, alguien (¿posiblemente Jeff Rowberg? github.com/jrowberg) usó un osciloscopio/data- registrador para olfatear la línea I2C de un dispositivo comercial que usaba el MPU6050 y reconstruyó el binario DMP a partir de esos datos.
Uno o dos años más tarde, por cierto, Invensense " desclasificó " uno o dos de los binarios de DMP, lo que puede explicar la funcionalidad que está viendo en su copia de I2CDevLib. Cuando estaba trabajando en mi último proyecto de MPU, hice un montón de búsquedas en github/linux-repository, y recuerdo haber encontrado varias variantes adicionales del binario DMP, algunas de las cuales pueden haber tenido diferentes funciones habilitadas o deshabilitadas. Sin embargo, todavía era demasiado inexperto en C++/desarrollo integrado/depuración para saber qué hacer con ellos en ese momento.