Capteurs rotatifs de position : codeurs optiques incrémentaux

Le fonctionnement théorique :

          

  Ces dispositifs permettent de déterminer une position angulaire en comptant le nombre d’impulsion en sortie. Ils fonctionnent selon le principe du balayage photoélectrique de fins réseaux de traits. Le support de la mesure des capteurs rotatifs incrémentaux est un disque en verre sur lequel a été déposé un réseau radial de traits et d’interstices constituant ce qu’on appelle la piste incrémentale.

             A proximité et juste en face du disque gradué, se trouve une unité de balayage. Celle-ci possède quatre champs dont chacun comporte un réseau un réseau. Les quatre réseaux de trait de la platine de balayage sont déphasés les uns par rapport aux autres d’un quart de période (=360°/nombre de traits). Toutes les fenêtres sont balayées par un même faisceau lumineux dont les rayons sont orientés parallèlement. Ce faisceau est émis à partir d’une LED et focalisé par un condenseur. 

            Lorsque le disque gradué effectue une rotation, le flux lumineux est modulé de manière à générer un courant par les cellules photovoltaïques.  

 

Les capteurs rotatifs délivrant des signaux rectangulaires TTL contiennent des électroniques chargées de digitaliser les signaux de balayage. Les signaux de sortie sont constitués de deux trains d’impulsions rectangulaires Ua1 et Ua2 compatibles TTL et déphasés de 90°. Lors d’une rotation dans le sens trigonométrique, Ua2 est en avance par rapport à Ua1.

 

L'algorithme de lecture des codeurs :

 

            Les codeurs sont directement connectés au port parallèle de l’ordinateur. Aussi, la procédure de suivi consiste en une lecture régulière des lignes connectées aux codeurs et de gérer les variables comptabilisant le déplacement effectué suivant les changements d’états observés.

            A l’origine, les codeurs possèdent 500 incréments par tour (= 500 périodes) mais, grâce à la programmation, pour chaque période électrique d’un canal, nous observons quatre changements d’état pour les lignes correspondantes, nous obtenons ainsi virtuellement un codeur avec 2000 incréments soit une précision de 0,18° ; Malgré cet avantage, il a fallu ajouter un système de réduction entre l’arbre de la monture et son codeur afin d’atteindre les 0.1° demandés.

Afin de déterminer l’état des lignes qui nous concerne, nous appliquons un masque à la valeur lue sur le port au moyen de l’opération ET.

Le schéma ci-contre nous donne la correspondance entre les bits de la valeur lue et les différentes lignes.
Afin de préciser la démarche, nous allons considérer un codeur qui serait connecté sur les lignes Select et PE. La ligne Select est codée sur le cinquième bit du registre d’état ce qui correspond à la valeur 16. La ligne PE est elle représentée par la valeur 32. Ainsi, en utilisant un masque ayant pour valeur 48, nous obtenons le résultat ci-contre. 

           

Nous observons un cycle dans la suite de chiffre, ce qui nous permet de proposer l’algorithme suivant :

Pas=0 ;

Old_cod=lire_registre() ;

Faire

            Cod=lire_registre() ;

            Si Cod<>Old_cod alors

                        Si Old_cod=0 alors

                                    Si Cod=32 alors Pas=Pas-1 ;

                                    Si Cod=16 alors Pas=Pas+1 ;

                        Finsi ;

                        Si Old_cod=16 alors

                                    Si Cod=0 alors Pas=Pas-1 ;

                                    Si Cod=48 alors Pas=Pas+1 ;

                        Finsi ;

                        …     ( idem pour Old_cod = 32 et Old_cod = 48)

            Finsi ;

Tant_que codeur_tourne()=vrai.

 

             Afin de ne pas utiliser trop de temps machine, cette procédure est effectué en tâche de fond grâce à un outil de Visual Basic, le Timer qui offre la possibilité d’exécuter une procédure de votre choix toutes les x millisecondes.