Site ELEC344/ELEC381

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

Catégories

Avancement 09/04

Aujord’hui j’ai fait d’abord la configuration du PWM des deux broches (vers les deux moteurs de chaque vertèbre). La largeur du pulse est en fait le duty cycle (ça je ne comprenais pas trop avant…). Pour les tester, j’ai montré sur le LCD le résultat du calcul de la largeur du pulse et j’ai vérifié sur les leds (qui étaient branché sur les mêmes sorties) qu’il y avait une variation de l’intensité de luminosité.

Ensuite, j’ai travaille un peu plus sur la routine qui reçoit sa position, fait le calcul de celle de la prochaine vertèbre et le lui envoie. Pour cela, j’utiliserai au moins une file pour faire la synchronisation.

Par fin, je me suis lancé dans le bootloader, pour pouvoir flasher un programme et faire le « test d’un seul moteur » (étape du diagramme de Gantt). Mais j’ai eu un soucis parce que je ne comprenais pas trop le bootloader de l’année dernière (qui flashe toutes des 10 dix cartes en parallèle). Jon me l’a expliqué (merci, Jon) et je me suis lancé dans l’écriture du code pour utiliser celui de l’année dernière.

Diagramme de Gantt

Voici le diagramme de Gantt du groupe PuLSE (avec un peu de retard).

Romain

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 ?

GLiP : Diagramme de Gantt

Voici le diagramme qui résume la planification de la partie programmation du projet :

Diagramme de Gantt du projet GLiP

Carte logique et diagramme de GANTT

Depuis mardi soir, j’ai récupéré la carte logique, et je me suis donc attelée à adapter notre code pour elle. Après 4 heures de recherches pour découvrir que les interrupteurs de boot étaient juste un peu capricieux, j’ai pu commencer à mettre du code dessus. Résultat, hier soir j’avais déjà les leds et le buzzer qui fonctionnaient à merveille. En même temps, j’essaie de rendre le code le plus propre possible et de permettre qu’il soit facilement portable sur les cartes IMU, puisqu’on risque de travailler encore longtemps sur les deux cartes en parallèle.

Hier soir, avec Daniel, nous avons fait le diagramme de GANTT pour notre groupe. Nous avons décidé de ne pas mettre de dead-line pendant les vacances et le dimanche. Voila à quoi nous sommes arrivés :

Diagramme de Gantt du groupe PuLSE

Je voulais terminer le diagramme de Gantt ce soir, malheureusement Office Project en a décidé autrement et toutes mes dates ont sauté. Ca sera donc pour demain… mais voici quand même un petit aperçu!

Test des protocoles de communications

Aujourd’hui après la soutenance de ce matin, nous avons établit le diagramme de Gantt pour la fin du projet.

A midi j’ai demandé à Alexis s’il pouvait me souder des micromatch pour connecter deux cartes de TPs et tester les communications avec notre protocole.

Puis dans l’après midi, j’ai commencé l’encodage et la configuration des cartes.

Avancé - Serpentina

Cet après-midi, j’ai travaillé sur le codage de l’algorithme de mouvement avant/arrière du serpent.

Pour l’instant, j’ai deux fonctions qui font les calculs pour trouver le zéro d’une fonction. Chacne utilise une méthode :
- celle de la dichotomie, qui est la plus simple à implémenter, mais qui converge moins vite; je l’ai utilisé pour une première simulation.
- celle de Brent, qui utilise les méthodes de la dichotomie, de la sécante et de l’interpolation quadratique inverse et qui théoriquement est plus rapide pour converger.

Ensuite, j’ai aussi calculé les valeurs d’un tableau d’arctangente, dont je me sers pour le calcul de l’angle de mouvement du moteur.

Ce que je fait là c’est la séparation du code pour chaque vertèbre, pour ensuite faire son intégration avec le PWM.

Flavia et moi, on a aussi choisi les responsables pour les tâches à accomplir. Notre diagramme de Gantt est le suivant (en rouge les tâches dont la responsable est Flavia, je suis responsable pour les tâches en bleu, et en vert ce sont des tâches optionnels et la préparation pour la soutenance) :

ILDA

Cette après-midi j’ai codé le parsage de l’ILDA. J’arrive à lire un fichier ILDA et à mettre chaque point dans un buffer, en lisant les headers correctement (les utiles et en sautant les autres) ainsi qu’en gérant les fichiers ILDA aussi bien 2D que 3D. J’ai un peu galéré du fait que l’ILDA est en big endian et non pas en little endian et que le code de l’année dernière n’était pas modulé de la même façon que je souhaitais le faire (notamment à cause de leur format spécifique). Cela a du me prendre environ 4h.

Il me reste à choisir quel forme aura le buffer (une queue? FreeRTOS facilite beaucoup le travail) puis à le remplir avec une image. Je compte faire ca demain après-midi.

Sinon il faut que je re-fasse le diagramme de Gantt pour ce soir.

Romain