Site ELEC344/ELEC381

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

Catégories

Encore une victoire de canard !

Suite à mon dernier article j’ai tenté toutes sortes de manières de debug pour trouver d’où le petit problème venait. Je suis passé par l’implémentation d’un programme en C sur mon ordinateur pour tester le filtre sur un échelon pour comparer à ce que donnait MATLAB (pareil), tester l’échelon sur la carte logique, j’en passe et des meilleures.

Après de longues heures à m’arracher les cheveux, j’ai enfin réussi à corriger le code. Le problème venait de l’accéléromètre. La récupération des valeurs via SPI posait des soucis et désynchronisait le filtre. J’ai donc créé une tâche  spécifique qui se charge d’updater une variable locale au programme avec ce qu’elle récupère via SPI. Ca permet d’éviter de perturber le bon déroulement du filtrage.

Voici le résultat obtenu lors du benchmark. Cela correspond pile poil aux mouvements donné à la carte par le servomoteur. Et l’axe des ordonnées indique pile poil l’angle d’inclinaison de la carte en centièmes de degrés. C’est trop cool, et surtout, ça va permettre de bosser sur la suite en ayant une totale confiance dans les angles que l’on va manipuler.

Réseau Wheely

Hier, j’ai passé trois heures à essayer en vain de recevoir des informations par UART en les entrant dans minicom pour m’apercevoir que le câble qui connecte la carte à l’odrinateur était en train de se désouder.

J’ai aussi fait un programme permettant de commander la vitesse des roues en l’écrivant dans minicom, puis en passant par la carte logique par UART et enfin à la carte de puissance par CAN.

J’ai ensuite adapté le code de commande des servos-moteurs fait par le club robotique (merci!) pour pouvoir faire des tests d’angle et de vitesse avec notre carte logique. Ce code fonctionne bien, donc nous allons pouvoir commencer les tests.

J’ai commencé à relire ce que nous avions décidé pour le LQR et les fichiers Matlab. Nous devons nous synchroniser avec Fabien pour avoir un code bien cohérent entre ce qui sera fait sur la carte logique et ce qui sera fait sur la carte propulsion.

Ce matin, j’ai ajouté le code de l’UART au code de la carte propulsion et j’en ai profité pour harmoniser tout le code avec le code de la carte logique.

Communication et harmonie...

Hier, j’ai harmonisé le code qui avait été codé par chacun d’entre nous et donc avec différentes conventions… ça a ainsi permis au groupe d’arriver à un concensus sur la structure du code.

Aujourd’hui, j’ai enfin réussi à faire marcher la communication par l’UART1, et j’ai donc pu afficher les données filtrés de l’accéléromêtre et du gyroscope, ayant ainsi la confirmation que le code global fonctionne bien.

Ensuite, j’ai fait une fonction qui teste l’identifiant de la carte, pour qu’on ne puisse pas faire fonctionner le code prévu pour la carte logique sur une carte IMU et inversement. Cette fonction focntionne bien.

A l’arrivée de Daniel, nous avons pu tester mon code sur une carte IMU, nous avons bien réussi à allumer les LEDs simplement en changeant le #define dans le fichier de configuration global.

Nous avons eu pas mal de problèmes avec le bluetooth qui ne fonctionnait même plus avec la carte IMU. Nous avons finalement réussi à le faire fonctionner sur la carte logique! Il nous a semblé que les coordonnées que l’on additionne n’étaient plus les bonnes (on additionne le x de l’accéléromêtre avec le y du gyroscope). Daniel fera plus de tests et corrigera les calculs demain.

Et moi, je vais pouvoir me lancer dans le codage du LQR!

Carte logique wheely

Hier, j’ai fait fcontionné le bus CAN sur la carte logique de Wheely, ce qui m’a permis de communiquer avec ma carte de TP et donc de pouvoir faire du débuggage plus parlant sur l’écran LCD. J’ai donc pu m’atteler au fonctionnement du gyroscope qui a fonctionné ce matin.

Ensuite, je me suis occupée des interrupteurs qui m’ont posé pas n=mal de problèmes en particulier parce qu’ils sont sur le même handler d’interruption.

Le gyroscope fonctionne aussi, et l’accéléromêtre étant exactement sur les mêmes pins sur notre carte que sur la carte IMU, il n’y a pas de modifications à faire sur la partie du code le concernant.

J’ai ensuite essayé de faire fonctionner l’UART1, mais pour l’instant mes essais ne sont pas concluants…

J’ai aussi fait un fichier utils.h avec les fonctions de base, qui contient pour l’instant atoi et itoa.

J’ai fais quelques recherches sur la récupération de l’ID des cartes, dans le but de faire une fonction qui vérifie qu’on a bien fait les #define qui conviennent à la carte connectée.

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 :

TP

Je me suis consacré principalement au TP récemment, afin d’être mieux préparé lorsque la carte logique sortira de la production (et aussi parce qu’il faut le faire :) ).

A la première séance en cours, j’étais arrivé jusqu’au tout début de la partie sur lcd.
Puis j’ai fait l’impasse sur le lcd car je n’arrivais pas à comprendre son fonctionnement pour aller ‘m’amuser’ avec le buzzer avec lequel j’arrive à faire jouer la musique de joyeux anniversaire (avec des fréquences recopiées d’un site).

Ce weekend j’ai tenté (plutôt en vain de comprendre comment fonctionnait le lcd, mais je ne parvenais qu’a afficher des choses incongrues.

Ce matin en cours j’ai finalement bien compris le rôle de enable et après pas mal de corrections de bugs de factorisation de code et de mise en forme j’ai désormais un lcd qui écrit bien où je veux !

Quelques détails pris au hasard :
Ne pas oublier que RS et RW sont sur le port C et non le A (pas mal de temps perdu car à un endroit j’avais mal recopié)
Pour se ‘ballader’ sur le lcd, la doc nous dit : adresse ligne 1 = 0×00 et adresse ligne 2 = 0×40. Ne pas oublier que DB7 doit être à 1 lors de cette instruction ce qui donne donc ligne 1=0×80+(column-1)%16 et ligne 2=0xc0+(column-1)%16
Dans l’initialisation mettre le entire shift off dans le entry mode set !

Photos de Wheely

Quelques photos de la carte logique Wheely, actuellement en production…

Wheely : Carte logique finie ?

Suite aux derniers mails échangés avec Alexis j’ai pu perfectionner la carte logique :

  • Correction de quelques coquilles ( TDO != TD0)
  • Vérification CRC et corrections de toutes les erreurs critiques
  • Routage de l’alim récupérée par le bus CAN vers l’entrée des régulateurs

Ce coup-ci, on touche au but. La carte est en cours de validation par Alexis avant lancement de la production.

Par ailleurs, j’essaie d’avancer sur le pilotage du LCD de la carte de TP, mais c’est pas du gâteau !

[ Edit d'Alexis ]

La carte logique est effectivement partie en production. Voici un aperçu des faces top et bottom.

Wheely : carte logique en version beta

Cette fin de journée a été pour moi l’occasion de procéder au routage de la carte logique.

La carte logique est donc pour l’instant, à priori terminée. J’espère qu’Alexis pourra me dire quoi corriger ou bien lancer la production assez rapidement, que nous puissions passer au soft le plus tôt possible, afin de ne pas prendre trop de retard sur le projet.

Puisque’une image vaut mieux qu’un long discours :

Wheely : placement final de la carte logique

Grâce aux conseils d’Alexis j’ai pu améliorer le placement des composants de la carte logique. J’en arrive à cette version quasi finale, qui me permet de maintenant passer au routage à proprement parler :

Mhhhh, ça va faire un beau plat de nouilles tout ça !