Master SIAME | Université Toulouse 3

Internet of things and System on Chip

Master SIAME | Université Toulouse 3

Internet of things and System on Chip

User Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

embedded:materiel:imu [2015/08/26 20:37] (current)
Line 1: Line 1:
 +====== MPU-6050 ======
 +
 +{{ http://​www.karlssonrobotics.com/​cart/​prodimages/​11028-04.jpg}}
 +
 +Il s'agit d'un IMU (Inertial Measurement Unit) fournissant des mesures d'​accélération sur 6-axes :
 +  * gyromètre X, Y et Z (en °/s),
 +  * accéléromètre X, Y et Z (en G = 9,81 m/​s<​sup>​2</​sup>​).
 +
 +La documentation du capteur est {{:​embedded:​ps-mpu-6000a.pdf|ici}}.
 +
 +Il est connecté à la carte Beagle Board par une liaison [[https://​fr.wikipedia.org/​wiki/​I2C|I2C]].
 +
 +Son numéro de client / périphérique est ''​0x68''​ et les registres disponibles sont documentés {{:​embedded:​rm-mpu-6000a-00v4.2.pdf|ici}}.
 +
 +L'IMU a de nombreux registres mais on pourra s'​intéresser seulement aux registres suivants:
 +  * ''​PWR_MGR''​ -- configuration horloge (il faut absolument sélectionner une horloge, par exemple ''​PLL_XGYRO''​),​
 +  * ''​GYRO_CONFIG''​ -- précision du gyromètre,
 +  * ''​ACCEL_CONFIG''​ -- précision de l'​accéléromètre,​
 +  * ''​ACCEL_XOUT_H''​ / ''​ACCEL_XOUT_L''​ -- accélération axe X,
 +  * ''​ACCEL_YOUT_H''​ / ''​ACCEL_YOUT_L''​ -- accélération axe Y,
 +  * ''​ACCEL_ZOUT_H''​ / ''​ACCEL_ZOUT_L''​ -- accélération axe Z,
 +  * ''​GYRO_XOUT_H''​ / ''​GYRO_XOUT_L''​ -- accélération angulaire X,
 +  * ''​GYRO_YOUT_H''​ / ''​GYRO_YOUT_L''​ -- accélération angulaire Y,
 +  * ''​GYRO_ZOUT_H''​ / ''​GYRO_ZOUT_L''​ -- accélération angulaire Z.
 +
 +Bien sûr, pour un contrôle plus fin et plus performant de l'IMU, on pourra s'​intéresser aux autres registres.
 +
 +====== Lecture en BURST  ======
 +
 +Pout diminuer les vibrations, il est intéressant de sur-échantilloner le capteur IMU et par exemple en faire une moyenne (mais il existe plein d'​autres méthodes de filtrage). Pour cela, on peut utiliser le mode BURST de l'IMU qui va réaliser automatiquement plusieurs mesures et stocker le résultat dans une FIFO interne.
 +
 +Il ne reste alors plus qu'​aller lire cette FIFO pour obtenir les résultats des mesures sans devoir attendre l'IMU. Hélas, dans configuration actuelle de l'I2C (100 KHz), Linux ne permet pas de lire plus de 5 mesures sur 10ms.
 +
 +Les registres intéressants pour gérer la FIFO sont :
 +  * SMPRT_DIV -- pour régler la période de mesure (comme tout bon timer) ; la dréquence de l'IMU est 1000 Hz.
 +  * FIFO_EN -- permet de sélectionner quelles mesures stocker dans la FIFO;
 +  * FIFO_COUNT -- nombre d'​octets stockés dans la FIFO;
 +  * FIFO_R_W -- les lectures successives permet d'​obtenir les octets stockés dans la FIFO.
 +
 +Les échantillons sont stockés dans l'​ordre des adresses des registres correspondants.
 +
 +
 +===== FAQ =====
 +
 +**L'​IMU renvoie toujours 0 pour les registres accéléromètre et gyromètre ?**
 +
 +Pour pouvoir fonctionner,​ il faut initialiser l'IMU en choisissant une horloge ​ grâce au registre ''​PWR_MGR''​.
 +
 +