Utiliser le Gyroscope ADXRS453

Article réalisé par les étudiants de DUT GEII de l’IUT de Toulon

Lien vers la datasheet du composant

Information importante 

L’implémentation du gyroscope sur un projet existant s’effectuera grâce à la modification et à l’ajout de plusieurs fichiers. Nous avons donc mis à votre disposition ce guide qui vous accompagnera durant cette tâche.
Nous déclinons toutes responsabilités en cas de dysfonctionnement du programme principal et des dégâts occasionnés.

Fichier de la librairie

  • SPI.c
    • InitSPI(void) : Initialise le SPI.
      ChipSelectSpi1SetValue(uint value, uint device) : Permet de modifier la valeur du Chip Select et de sélectionner l’esclave.
    • WriteSimultaneousReadMultipleSpi1(uchar commands[], uchar results[], int nbTransactions, uchar device) : Permet l’envoi et la réception simultanée de données. commands contient les données à envoyer et results contient les valeurs reçus.
    • nbTransactions correspond au nombre d’échanges effectués (par défaut pour le gyro : 4) et device correspond à l’identifiant de l’esclave.
  • SPI.h
    • Prototype des fonctions
    • Ne pas oublier la définition de GYRO
  • RS453.c
    • RS453GetValue(void) : Renvoie la vitesse angulaire
    • RS453AnalyzeLastResponseReceived(uchar results[], uchar nbBytes) : On récupère la valeur renvoyée par le gyroscope qui sera mise dans une structure pour séparer les différents bits de la trame.
  • RS453.h
    • Déclaration de la structure : décrit les différentes trames possibles.
    • Prototypes des fonctions.

Code à ajouter

MPLAB

  • timer.c : Interruption d’un timer (fréquence conseillée : 100Hz) trouvable dans l’annexe AjoutTimer.c.

Dans son interruption, on récupère la vitesse angulaire avec la fonction RS453getValue() qui va nous permettre de calculer l’angle du robot. Pour cela, on intègre la vitesse. Quand la vitesse angulaire filtrée est nulle on récupère la valeur mesurée que l’on utilisera comme erreur pour avoir un angle plus précis. On envoie ensuite l’angle en UART avec la command ID : 0x0091.

  • IO.h : Définir la pin du ChipSelect (B7 pour SPI1) en l’appelant SS_GYRO
  • IO.c : Définir le gyroscope en sortie.

Visual Studio

  • Ajouter, dans votre fonction ProcessDecodedMessage() la reconversion et l’affichage du gyroscope.

Autres informations

Mettre le gyroscope dans le bon sens comme indiqué ci-dessous :

Orientation du gyroscope

Filtrage

Le filtrage se fait de la façon suivante : On calcul un filtre numérique. Le premier coefficient (devant vitesseAngulaireGyroFiltree) est réglé de la façon suivante : Coeff1 et le deuxième (devant vitesseAngulaire) est Coeff0. Ici, nous avons pris une constante de temps de 10 et une fréquence d’échantillonnage de 100 Hz.

Intégration

Comme le gyroscope nous renvoie la vitesse angulaire, il faut que nous intégrions cette valeur pour obtenir l’angle. On obtient une équation en fonction de la vitesse angulaire, de l’erreur (redéfini à chaque arrêt), du temps et de l’angle précédent.