Navigation
Internships & Projects
Raspberry Pi
Code Embarqué et Temps Réel
SE et Pilotes
[Protected]
Il s'agit d'un IMU (Inertial Measurement Unit) fournissant des mesures d'accélération sur 6-axes :
La documentation du capteur est ici.
Il est connecté à la carte Beagle Board par une liaison I2C.
Son numéro de client / périphérique est 0x68
et les registres disponibles sont documentés 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.
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 :
Les échantillons sont stockés dans l'ordre des adresses des registres correspondants.
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
.