Codeur rotatif incrémental

De Wiki LOGre
Révision de 13 juin 2012 à 17:11 par Remi (discuter | contributions) (Comment lire l'encodeur ?)

Aller à : navigation, rechercher

Je vais essayer de compiler sur cette page tout ce que je sais et qui peut être utile à propos des encodeurs.

Qu'est ce qu'un encodeur ?

Ici nous allons parler d'encodeur rotatif incrémentaux, par la suite je dirais simplement encodeur pour parler de ce type précis d'encodeur.
Un encodeur rotatif sert à donner une information d'angle en mesurant la rotation autours d'un axe, un peu comme un potentiomètre rotatif.
Ici, avec les encodeurs incrémentaux, on incrémente un compteur à chaque fois que l'encodeur tourne d'un cran, cran qui correspond à sa résolution.
C'est grâce à ce compteur qu'on connaît par la suite l'angle de l'encodeur.

Comment lire l'encodeur ?

L'encodeur agit un peu comme deux switch. On regarde en permanence si il y a un changement d'état sur chacun de ces deux switchs.
En analysant les changement on peut par la suite définir si l'encodeur a était tourné dans un sens ou dans l'autre.
Pour cela on a besoin de l'état précédent de chacun de deux pôle, ainsi que leur état actuel.
Voici la variation de l'état des deux pôle d'un encodeur :

2000px-Quadrature Diagram.svg.png

Lorsque l'encodeur tourne dans le sens des aiguilles d'une montre, l'état des deux pôles change comme sur le dessin en allant vers la droite, et dans le sens inverse il change comme en allant vers la gauche.
Ici une phase de 1 à 4 correspond à un cran. Mais en réalité on peut lire le changement de chaque phase et ainsi multiplier la précision par 4.
Voici le code le plus simple possible pour analyser l'état de l'encodeur et incrémenter une position. Il faudra exécuter ce code à chaque fois qu'un changement est détecté sur un des deux pôles de l'encodeur.

// a l'état actuel du pôle 1, et pa au l'état précedent. Idem pour b et pb. pos est la valeur d'incrémentation de la position de l'encodeur.
if(!b) {
   if(pa) pos--; 
   else pos++; 
}
else {
   if(!pa) pos++; 
   else pos--; 
}

Ici nous avons une précision de 4 fois le nombre de cran de l'encodeur. Par exemple pour un encodeur à 20 cran, on pourra détecter 80 positions différentes.

Les crans d'un encodeur rotatif

Sur la pluspart des encodeurs il y a des crans. Pour certaine application il ne sont pas souhaitable, et surtout si vous voulez utiliser un précision supérieur au nombre de cran.
Je ne sais pas si c'est pareil sur tout les encodeurs, mais sur ceux que j'ai acheté il suffit d'enlever un bille à l'intérieur de l'encodeur pour se passer des crans.
Encodeur - bille.jpg