Site ELEC344/ELEC381

Partie interactive du site pédagogique ELEC344/ELEC381 de Télécom ParisTech (occurrence 2010).

Catégories

Heliokter : acquisition des gyros

Hier et aujourd’hui, je me suis centré sur l’acquisition des données des gyroscopes, à l’aide des ADC (contrairement à l’accéléromètre et aux magnétomètre qui possédaient une interface numérique SPI). J’ai eu un peu de mal hier après-midi pour faire marcher l’ADC puisqu’il fallait mettre le bit ‘enable’ de l’ADC deux fois à 1 : une fois pour ‘power up’ et l’autre pour activer réellement la conversion.
J’ai vu (et corrigé) ce problème hier soir ce qui m’a permis de reprendre aujourd’hui sur un bon pied et d’implémenter l’acquisition sur plusieurs canaux, avec la DMA.
J’ai essayé de faire une mise à l’echelle (avec un rapport VDD/nbre de bits et la sensibilité des gyroscopes) pour obtenir des valeurs en degrés par seconde mais je doute un peu de la méthode. Voilà une des courbes que j’obtient en prenant un point toutes les 20ms, et en faisant l’intégration en post-production (avec awk). Le mouvement que je fais faire à la carte est une rotation de 90° dans un sens puis dans l’autre (du plan horizontal au plan vertical, autour de l’axe Y).

Sur cette courbe, on voit que :

  • La forme est correcte (c’est déjà ça !)
  • Les valeurs non nulles des gyros au repos (je n’ai pas encore fait d’offset) entraine une grosse déviation de l’angle (15°  environ au bout des 2 secondes de test ici)
  • Ma fonction de mise à l’échelle n’est pas terrible, même en prenant en compte la déviation du gyro. C’est aussi peut être dû à l’intégration offline qui n’est faite que toutes les 20 ms du coup …
  • Ou alors c’est la calibration de l’ADC …
  • Peut-être aussi qu’on a aucune garantie du fait que  Vdd correspond à 4095 et Gnd à 0 une fois encodé sur l’ADC, même en calibrant tout ce qu’on veut …

Voilà sinon, c’est à la mode, j’ai fait un petit diagramme de Gant pour les deux semaines qui vont venir. Les noms indiqués sont les noms des responsables et bien sûr il y aura de la collaboration sur certaines tâches.

C’est assez flou sur la dernière semaine puisque ça dépend beaucoup de ce qu’on aura effectivement réussi.

Edit (00:36) :

J’ai implémenté le calcul de l’intégrale sur la carte. Pour le problème de la virgule fixe (qu’on ne peut pas résoudre avec la nouvelle norme de C avec les _Fract et _Accum, celle-ci n’etant pas porté pour nos architectures), j’ai pour le moment fait un bête scaling de 1000 et je représente mon nombre sur un long. C’est ce qui m’a paru le plus logique puisque je sample des valeurs entières sur un nombre entier de millisecondes. C’est peut être pas le plus malin en terme de bits mais ça a le mérite d’être simple . Et voilà la nouvelle courbe que j’obtiens, beaucoup plus satisfaisante (en post-traitement, j’ai juste recalé la valeur intégrée à 0 au début et divisé la valeur par 1000). Modulo le décalage, on atteint plus que 80°, sachant que je n’ai pas vraiment pris mon équerre pour faire le mouvement.

A ce propos, est-ce qu’on peut disposer à peu de frais d’un dispositif tournant à vitesse lente, constante et connue sur lequel on pourrait tester les gyroscopes précisément ?

1 comment to Heliokter : acquisition des gyros

  • Samuel Tardieu

    Tu obtiendras bien 0 pour Vss et 4095 pour Vdd. C’est d’ailleurs ce qu’on constaté d’autres qui ont utilisé les ADC avec un potentiomètre.