lundi 7 mai 2012

Introduction


Le but du projet est de réaliser un ''traqueur de spot lumineux''. Dans la pratique, ceci correspond plus à un asservissement en position d'une pièce ''esclave'' par rapport à une pièce ''maître''.

Pour plus de simplicité, le problème est ramené à un seul degré de liberté, c'est-à-dire que, comme illustré sur l'image, il est constitué deux pièces (maître et esclave) montées chacune sur des liaisons glissières parallèles, actionnées par des petits moteurs que l'on programme nous-même. Il n'y a aucune liaison mécanique entre les deux pièces. Le moyen de transmission de la position du maître à l'esclave est une diode laser continue placée sur le maître et une barrette CCD placée sur l'esclave.

Le but exact de ce projet est de commander la position du maître et que l'esclave suive de lui-même cette position.


On va voir dans un premier temps le Cahier des Charges précis amenant au SADT. Puis on verra le fonctionnement de la barrette CCD qui est le coeur du système, ce qui nous permettra de définir les différentes étapes du programme. Enfin, nous présenterons un rapide mode d'emploi.

Cahier des Charges et SADT

Le CdC s'articule en deux parties dont la seconde est la principale :

Contrôler la pièce maître :
      - 3 formes de contrôles différents: manuel, LabView, programme créé par nos soins
Asservir la position de l'objet esclave par rapport à l'objet maître :
      - 1 degré de liberté pour les déplacements maître et esclave.
      - Distance typique de 30 cm.
      - Réagir le plus vite possible.
      - Pas d'instabilité sous vitesse raisonnable.
      - Rechercher le signal en cas de perte de celui-ci pendant l'asservissement.


Ceci nous amène au SADT: Structured Analysis an Design Technic, en images jointes. Le coeur de celui-ci étant le diagramme A0 (si vous ne devez en regarder qu'un seul ;) ).









La barrette CCD

Fonctionnement :


   La barrette CCD possède 64pixels et son mode de fonctionnement est simple et se fait grâce aux trois bornes illustrées sur la figure ''SI'', ''CLK'' (pour clock), et ''AO''; les bornes VCC et GND ne servant qu'à l'alimenter.

   AO est le signal de sortie qui renvoie la valeur des pixels les un à la suite des autres. SI et CLK sont des signaux en entrée de la barrette. CLK est une suite d'impulsions qui déterminent la fréquence de lecture des pixels: chaque impulsion représente la lecture d'un pixel sur AO. La fréquence maximale est 5MHz. SI est le signal de référence qui indique à quel moment on commence la lecture de la barrette. Il a lieu au plus rapide tous les (64+1)=65 impulsions de CLK, ''+1'' car un front montant de CLK doit avoir lieu pendant l'impulsion de SI.
   Plus simplement, SI se déclenche, les 64 pixels sont alors envoyés vers AO à la fréquence CLK, SI se redéclenche au plus tôt le temps d'un pixel après, et ainsi de suite. (Par exemple dans notre programme on a attendu 2 pixels pour plus simplicité à synchroniser les deux signaux).


Comportement :

   Avant même de coder les différents signaux SI et CLK, il est important de connaître le comportement de la barrette, c'est-à-dire le type de signal qu'elle nous renvoie. On réalise donc les signaux SI et CLK avec deux GBF synchronisés, et on relève le signal AO à l'oscilloscope.

   On constate que pour de basses fréquences, le simple éclairement ambiant sature la CCD, le signal AO est une constante, on ne peut relever aucune information. Plus la fréquence est importante moins les pixels de la CCD ont le temps de se charger, et pour que celle-ci ne soit pas saturée, il faut donc augmenter la fréquence. On se rend compte expérimentalement que pour avoir une contribution de la lumière ambiante faible, on doit se situer quasiment à la vitesse maximale de fonctionnement de la barrette, on s'est donc placé à une fréquence CLK de 5MHz.

   De plus, même à cette fréquence le spot lumineux sature la CCD, et on obtient un signal comme illustré sur l'image. Ce dernier point va déterminer la nature de la détection du spot lumineux.


 Si on souhaite ralentir la barrette, il est envisageable de placer un filtre devant, afin de baisser la luminosité apparente.


Le programme

Algorithme:


La trame du programme principal est simple: lire la position du spot et commander le moteur pour déplacer l'esclave vers cette position.

Une fois le signal AO récupéré par l'intermédiaire d'un convertisseur analogique numérique (ceci se fait automatiquement au fur et à mesure que les bits arrivent), il faut le traiter pour en déduire la position du spot. Pour cela, on voulait faire une corrélation de l'image du spot lumineux avec le signal, afin d'avoir une position très précise. Cependant, la saturation de celui-ci rend infaisable cette solution.

On a donc choisi de réaliser la détection en 2 temps:
      • Connaître la taille du spot lumineux sur la barrette. Pour cela on laisse le spot immobile sur la barrette sur 8 images, on détecte alors les bords de la saturation, on en déduit la taille du spot et on en fait la moyenne et on la garde en mémoire. Cette étape permet de s'adapter à toute taille de spot lumineux.
      • Connaître l'emplacement du spot lumineux. Pour cela, sur chaque ''image'' rendue par la barrette on détecte les bords de la saturation par seuillage, puis on compare la taille obtenue à la taille du spot connue grâce à l'étape précédente. Cela nous permet de savoir, si celle-ci est plus petite que le spot dépasse sur un bord de la barrette, et que donc il faut commander à l'esclave d'aller un peu plus loin. S'il n'est pas sur un bord, on commande à l'esclave de superposer le milieu des bords de la saturation et le milieu de la barrette.
        On reboucle cette deuxième étape.

Ceci donne l'algorithme suivant.


Difficulté du programme :


La principale difficulté est de synchroniser les signaux SI et CLK d'un côté, de relever le signal AO et commander les 2 moteurs d'un autre, le tout à la fois.
Pour cela, il faut utiliser plusieurs timers. L'un à 5MHz qui détermine CLK et sur lequel est également indexé SI (ces deux signaux sont donc parfaitement synchronisés) et les relevés du signal AO, ainsi qu'un deuxième timer à 50Hz pour commander les servo-moteurs.

Mise en oeuvre et améliorations


Mise en œuvre finale :


Au final, on constate bien que lorsque l'on dirige le maître, grâce à Labview par exemple, l'esclave le suit de lui-même.


Améliorations :


Si l'on avait eu plus de temps, on aurait pu apporter 2 améliorations importantes à notre système:
  • tout d'abord on constate qu'il a une petite tendance à osciller autour de la position voulue, en effet quand la pièce maître est fixe, l'esclave va faire de petites oscillations de part et d'autre d'une position moyenne. On aimerait éviter cela par un lissage de la consigne ou une prise en compte des positions précédentes ainsi que de la position du maître évidemment. Typiquement, pour ces instabilités, il faudrait étudier plus en détails la boucle d'asservissement réalisée, et adapter le gain en conséquence, ou introduire un PI (proportionnel-intégrateur).
  • Ensuite,  si le spot est sorti de la barrette car le maître a bougé trop rapidement par exemple,réaliser une recherche du spot par balayage sur toute la zone en commençant par le côté où le spot a disparu.

Mode d'emploi

Précautions d’usage :

Le matériel fourni afin de travailler dans des conditions optimum, ou simplement pour permettre sa pérennité, se doit d’être dans un environnement adapté. Cet environnement doit de suivre les règles suivantes :
                - Température entre -25°C et 85°C.
                - Ne pas être émergé.
                - Ne pas être soumis à des chocs importants.



Branchements :

Les branchements sont les suivants et doivent être correctement réalisés avant la mise sous tension du dispositif.
                - Broche 1 de la barrette avec la broche 2 du microcontrôleur
                - Broche 2 de la barrette avec la broche 3 du microcontrôleur
                - Broche 3 de la barrette avec la broche 6 du microcontrôleur
                - Broche 4 de la barrette avec une source d’alimentation 5V continue.
                - Broches 7 et 8 de la barrette avec la terre.
                - Laisser les broches 5 et 8 sans branchement.
                - Branche 33 du microcontrôleur avec la broche du moteur maître (• broche de la grande série de broche, coin extérieur opposé à la petite série de broche).
                - Branche 34 du microcontrôleur avec la broche du moteur esclave (• broche de la petite série de broche, 2ème broche de l’intérieur opposé à la grande série de broche).
                - Une source de tension 5V pour les alimentations des moteurs maître et esclave.

Utilisation :

Le moteur maître est contrôlable en position par le biais d’un potentiomètre fourni avec le dispositif. Le moteur esclave quant à lui suivra le moteur maître de lui-même quelques instants après la mise sous tension du système. Il est requis de placer initialement les 2 moteurs face à face pour un bon fonctionnement.

En bref


Finalement ce projet nous a permis de sortir des TPs souvent très guidés et de réfléchir à une solution à un problème donné par nous-même, puis de la réaliser; ainsi que souvent partir sur des pistes pour  se rendre compte de leur infaisabilité, ou leurs difficultés de mise en œuvre.
Cela nous a permis de prendre du recul sur les TPs réalisés au préalable par la réutilisation de certaines parties en les adaptant au travail présent.