Proceso de comunicación con los 5 sensores MPU6050 - Gloveland/esp32_glove GitHub Wiki

Problemática

La comunicación entre el Esp32 y los sensores MPU6050 se efectúa mediante el bus I2C, el cual nos permite obtener mediciones con una gran frecuencia. El funcionamiento del bus i2c funciona de la siguiente manera: cada sensor escribe en una dirección del bus i2c asignada de fábrica, especificada por el fabricante; en nuestro caso el MPU6050 tiene por defecto la dirección 0x68 para transmitir datos a través del bus i2c y si se le activa el pin de ad0 el sensor escribe en la dirección 0x69 del bus. Dado que necesitamos comunicarnos con 5 idénticos sensores en simultáneo y que disponemos únicamente de dos direcciones posibles para escribir en el bus i2c, nos encontramos limitados.

Solución

Mecanismo de obtención de mediciones

Leemos de a un sensor por vez de la siguiente manera:

  1. Configuramos el sensor objetivo para que escriba en la dirección 0x68 del bus i2c, desactivando el pin AD0.
  2. Configuramos los sensores restantes para que escriban en la dirección 0x69 del bus i2c, activando el pin AD0.
  3. Ordenamos una operación de escritura a los sensores.

Con esta modalidad, logramos disponer de una medición válida en la posición 0x68, mientras que descartamos lo que sea que se haya escrito en la dirección 0x69, dado el hecho de que los 4 sensores restantes escribieron en simultáneo generando basura.

ad0_1 ad0_2 ad0_3 ad0_4 ad0_5 ad0_6

Frecuencia de reloj de los sensores y del bus I2C

Además de establecer el anterior mecanismo, a fin de incrementar la frecuencia de obtención de mediciones, realizamos lo siguiente:

  • incrementar la frecuencia de comunicación del bus I2C a 400KHz (en lugar de los 100KHz por defecto)
  • incrementar la frecuencia de toma de mediciones en los sensores MPU6050 a 400KHz.

De este modo, aprovechando el hecho de que el bus i2c tiene una frecuencia de comunicación muy elevada, podemos obtener mediciones con una frecuencia de 60Hz que es lo suficientemente buena para nuestro proyecto.