Dernière mise à jour :
29/01/2017
Présentation
Un encodeur optique (parfois aussi appelé roue codeuse optique) est un composant
électromécanique qui peut prendre différentes formes, et qui dans bien
des cas ressemble beaucoup à un
potentiomètre.
Mais contrairement à ce dernier, l'encodeur possède
un axe dont
le déplacement n'est limité ni vers la gauche ni
vers la droite : il peut être tourné indéfiniment
dans un sens
comme dans l'autre, il n'y a pas de butée.
Ce
genre de composant peut être utilisé
pour décrémenter ou incrémenter la
valeur de différents paramètres
dans un système électronique, tel un four à
micro-ondes avec affichage
numérique, ou une surface de contrôle servant à piloter un
logiciel séquenceur, par exemple. L'encodeur permet de déterminer une
position, la vitesse et/ou le sens de rotation.
Fonctionnement général
Si
le potentiomètre classique possède trois broches, l'encodeur optique
"classique" en possède souvent quatre, parfois cinq ou six : deux broches pour
son alimentation (il y
a en effet une LED à l'intérieur qui nécessite du courant pour
s'allumer) et deux broches pour la sortie des "données", ces dernières
étant
généralement nommées A et B. Une éventuelle
troisième sortie - appelée signal de référence ou zéro - permet parfois d'envoyer
une impulsion à chaque révolution complète. Il existe plusieurs types d'encodeurs
optiques, avec des structures internes plus ou moins différentes, mais
le principe de base reste le même : la LED intégrée éclaire des
capteurs sensibles à la lumière à travers de trous pratiqués dans
un
disque physiquement solidaire de l'axe que peut manoeuvrer l'utilisateur.
S'il
n'y avait qu'un seul capteur sensible à la lumière àl'intérieur de l'encodeur optique, on
disposerait
déjà d'un système capable de produire des impulsions électriques à un
rythme dépendant de la vitesse de rotation de l'axe. Par exemple, si le
disque intercallé entre LED émettrice et récepteur photosensible
possède 200 trous régulièrement espacés sur son pourtour, on
obtiendrait 200 impulsions pour une rotation complète de l'axe. Ce
serait déjà pas mal, mais en aucun cas cela ne permettrait de savoir dans
quel sens l'axe évolue. Pour déterminer le sens de rotation, un
deuxième capteur photosensible est installé à une certaine distance du
premier, de telle sorte que les informations délivrées par les
deux capteurs - qui reçoivent tous deux de la lumière mais pas au même
moment - soient décalées dans le temps. Le schéma suivant représente
l'encodeur optique RES20-50-200 de COPAL, constitué d'une LED avec sa
résistance de limitation de courant intégrée, et les deux
photodétecteurs (phototransistors NPN) câblés en collecteur commun,
sorties A et B disponibles sur leurs jonctions émetteur (pour pouvoir
exploiter ces sorties, il faut mettre une résistance entre chaque
émetteur et la masse).
Le
décalage temporel en
question (entre sorties A et B) est généralement de Pi / 2, ce qui
correspond à un décalage
de 1/4 du temps occupé par une période complète (déphasage de 90 degrés). On parle aussi de
signaux en quadrature, ne soyez donc plus surpris de lire "encodeur
optique à quadrature" dans telle ou telle publicité, ça vient de là.
Mais un petit diagramme valant mieux qu'un
grand discours, voici un exemple de signaux délivrés sur les sorties A et B d'un encodeur à quadrature.
L'écart
temporel entre les impulsions des deux sorties peut être obtenu de
plusieurs façons : les deux récepteurs photosensibles peuvent être
éclairés par un même trou placé sur une même circonférence, ou par deux
trous différents, chacun situé sur un cercle concentrique qui lui est
propre. Mais au final, on obtient la même chose sur les sorties A et B,
deux signaux périodiques de "fréquences" égales mais décalés en phase de Pi / 2.
Détermination du sens de rotation
Comme
vu précédement, le sens de rotation peut être deviné en regardant de
quelle façon les sorties A et B changent d'état logique. Cela est
facile à faire, il suffit de prendre une des deux sorties comme
référence et de regarder ce qui se passe sur l'autre. Si l'on décompose
dans le temps les différentes solutions binaires qu'offrent les deux
sorties, on se rend compte qu'il n'existe que quatres possibilitées -
ce qui n'a rien de surprenant puisqu'on travaille sur deux bits - qui
sont espacées de façon égales dans le temps.
Rotation dans le sens horaireSupposons
pour commencer que les deux sorties soit à l'état logique bas. En
tournant l'axe de l'encodeur dans le sens des aiguilles d'une montre, la sortie A passe à l'état logique haut
alors que la sortie B reste à l'état logique bas. C'est l'instant T1...
Puis,
si on continue de tourner l'axe, la sortie B passe à son tour à l'état
logique haut, puis A repasse à l'état logique bas, puis B repasse
à l'état logique bas. Ce qui nous donne les quatres instants T1 à
T4 suivants :
T1 : A = 1 et B = 0
T2 : A = 1 et B = 1
T3 : A = 0 et B = 1
T4 : A = 0 et B = 0
On remarque que A est en avance sur B.
Rotation dans le sens anti-horaireIl suffit de lire le diagramme dans l'autre sens...
T1 : A = 0 et B = 1
T2 : A = 1 et B = 1
T3 : A = 1 et B = 0
T4 : A = 0 et B = 0
On constate maintenant que B est en avance sur A. C'est
en sachant comment cela fonctionne dans ce sens que l'on peut en
déduire les faits inverses : en regardant en permanence l'état des deux
sorties A et B, on en déduit que l'axe a été tourné, et avec très peu
de besoin en calcul, on peut aussi en déduire dans quel sens la
rotation s'est opérée. Le simple fait de regarder à un instant donné
l'état logique des deux sorties A et B ne suffit cependant pas : il
faut aussi avoir mémorisé l'état de ces sorties lors du précédent
changement d'état, et effectuer une comparaison entre anciens et
nouveaux états pour savoir dans quel ordre les choses se passent. Une
façon de faire est expliquée plus en détails (avec un exemple
pratique) à la page
PIC - Bases - Encodeur optique.
Nombres de trous et résolution
Le
nombre de trous pratiqués dans le disque et par lesquels la lumière de
la led peut passer pour aller jusqu'aux photodétecteurs, détermine la
précision de l'encodeur. Le disque peut comporter 100 trous sur
son pourtour, tout
comme il peut en comporter 6000. Ce qui veut dire que le nombre
d'impulsions fournies en un tour complet de l'axe (et du disque) peut
varier dans d'assez grandes proportions. Les deux photos qui suivent
montrent deux disques ayant des résolutions différentes : les trous
sont si nombreux et si serrés sur la deuxième photo, qu'on a un
peu de mal à les distinguer.
Plus
le nombre de trous est
élevé et plus la résolution est importante, cette dernière doit être
choisie en fonction de l'application concernée. Une résolution élevée
pourrait sembler préférable dans tous les cas (qui peut le plus
pourrait à priori le moins), mais elle n'est pas forcement nécessaire
et peut même poser certains problèmes dans des systèmes qui ne seraient
pas en mesure de traiter un gros flux d'informations dans un temps très
court (microcontrôleur travaillant avec une fréquence d'horloge basse,
par exemple). De plus, il existe un rapport
assez direct entre la résolution de l'encodeur et son prix, inutile de
dépenser plus que nécessaire (les prix varient entre 5 euros et 200
euros). D'un point de vue angulaire, la
résolution atteint 3,6 degrés pour un modèle 100 trous (360 / 100), et
atteind 0,06
degrés pour un modèle 6000 trous (360 / 6000). Si l'encodeur optique
doit être utilisé pour connaitre le positionnement d'un objet mobile
(tel qu'une lunette astronomique), la résolution devra être élevée. Par
contre, pour un petit montage électronique "utilitaire", un modèle
faible résolution peut sans doute largement suffire.
Alimentation des encodeurs et "polarité" des signaux de sortie
Ha, des sorties. Bien. Mais, heu... comment dire... je branche quoi et où ?
Utilisation des sorties (collecteur commun ou collecteur ouvert)
Quand
les sorties de l'encodeur optique sont de type "émetteur
commun/collecteur ouvert", il faut y ajouter une résistance de charge
reliée au +Valim qui permet de disposer d'un état logique haut quand le
transistor correspondant est bloqué. Si vous n'ajoutez pas ces
résistances, vous aurez en sorties soit un niveau bas, soit un état
indéterminé.
Quand les sorties de l'encodeur optique sont de type "collecteur commun/émetteur ouvert",
il faut y ajouter une résistance de charge reliée à la masse qui permet de disposer d'un
état logique bas quand le transistor correspondant est bloqué. Si vous
n'ajoutez pas ces résistances, vous aurez en sorties soit un niveau haut,
soit un état indéterminé.
Les
résistances de charge (qu'on peut aussi appeler résistances de rappel)
peuvent dans certains cas être remplacées par les pullup ou pulldown
internes au microcontrôleur, quand bien sûr ce dernier en possède. Il
faut toutefois se méfier car les fameuses "résistances" de rappel
intégrées aux uC sont en fait des générateurs de courant et non pas
vraiment de simples résistances. Leur emploi peut parfois poser
problème (cas assez typique avec des liaisons I2C à "haute" vitesse).
Voici un exemple de signaux acquis avec une même configuration
matérielle (encodeurs Grayhill et PIC 24F), dans un cas en utilisant
les pullup internes du PIC (écran de gauche), dans l'autre cas en
utilisant des vraies résistances externes de 2,2 kO (écran de droite).
Même
si on constate des fronts légèrement plus raide dans le second cas,
cela fonctionne bien avec les deux configurations. A noter que la
"propreté" des transitions dépend énormément de la façon dont
l'utilisateur manipule l'axe de l'encodeur, et de la qualité mécanique de l'encodeur lui-même...
Alimentation encodeur optique en 3,3 V ou en 5 V ?
Bien
souvent, un encodeur optique est associé à un microprocesseur ou
microcontrôleur qui tire son énergie d'une source de tension de
5 V ou
3,3 V. Problème de compatibilité en vue ? L'encodeur, s'il
nécessite une tension, doit de préférence en utiliser une qui "colle"
avec celle du microcontrôleur (uC) auquel il est raccordé. De plus en
plus, les microcontrôleurs nécessitent du 3,3 V, et la grande
majorité des encodeurs optiques fonctionne sous 5 V. Cela n'est
toutefois pas un soucis, car un encodeur optique "5 V" peut être
utilisé dans un circuit "3,3 V" selon l'une des trois méthodes
suivantes :
-
raccord direct entre encodeur alimenté en 5 V et uC alimenté
en 3,3 V, uniquement possible si les broches de l'uC sont
"tolérantes 5 V"
- insertion d'adaptateurs/convertisseurs de
niveau (5 V vers 3,3 V) entre encodeur alimenté en 5 V et uC
alimenté en 3,3 V
- sous-alimentation de l'encodeur 5 V, avec une tension de 3,3 V
Ce
dernier cas nécessite des essais, car le fait de sous-alimenter la LED
incluse dans l'encodeur peut conduire à des dysfonctionnements, surtout
quand on tourne l'axe un peu vite. Les transitions
haut-bas et bas-haut sur les sorties peuvent alors être moins franches.
La copie d'écran suivante à gauche montre ce qu'on obtient avec un
encodeur Grayhill 62A prévu pour une tension de 5 V, quand il est
alimenté en 5 V. La copie d'écran de droite montre ce qu'on a avec
le même encodeur mais cette fois sous-alimenté en 3,3 V.
Dans
les deux cas, les signaux sont tout-à-fait exploitables. Ma dernière
maquette - un contrôleur MIDI - qui les fait travailler en sous-régime
fonctionne très bien.
Détection des changements d'état des sorties
Pour
détecter les changements d'états survenus sur les deux sorties A et B,
et déterminer par la même occasion le sens de rotation de l'axe,
rien de tel qu'un microcontrôleur. Ce type de composant peut disposer
de plein de broches, et embarque l'intelligence que vous lui
transférez. Pour un résultat fiable, (une détection avec le moins de
risques de ratées) il est préférable d'avoir recours aux interruptions
externes. La plupart des PIC (et autres uC) possèdent une ou plusieurs
broches qui peuvent déclencher une interruption externe. Le classique
16F628A par exemple, dispose de 5 broches (RB0 et RB4 à RB7) qu'on peut
ainsi mettre à contribution pour des encodeurs optiques. Pour des
besoins plus élaborés (4 encodeurs optiques ou plus) la tâche est un
poil plus ardue mais pas impossible.
Projet avec PIC et 4 encodeurs optiques Il suffit de trouver le bon uC - ou le composant annexe qu'on lui associe - qui comble le besoin.
Encodeur asymétriques et symétriques
L'encodeur
vu ci-avant est de type asymétrique, les deux sorties A et B se font
sur un seul fil et sont référencées par rapport à la masse. Une sortie
(A ou B) peut délivrer soit un état "flottant", soit un état logique
haut ou bas selon la configuration interne de l'encodeur. Il existe
aussi des encodeurs de type symétriques pour lesquels les sorties A et
B se font chacune sur deux fils (A et A' pour la première sortie, B et
B' pour la seconde sortie). Pour ces derniers, les sorties ne peuvent
délivrer que des états logiques haut ou bas, jamais flottant.
C'est pourquoi on dit aussi de ce genre de sortie qu'elle correspond à
une configuration de type "push-pull". Tout comme dans le domaine
audio, les sorties symétrique (complémentées / différentielles) offrent
une meilleur immunité au bruit et assurent une plus grande robustessse
des signaux dans des environements perturbés, surtout quand les
liaisons entre encodeur et circuit de traitement sont longues (voir
Symétrique / asymétrique).
Encodeurs incrémentaux
Ce
type d'encodeur permet uniquement de mesurer des changements de
position, mais il est bien sûr possible d'en déduire vitesse et même
accélération (ce que permettent aussi les autres types d'encodeurs).
Encodeur absolu
Ce
type d'encodeur permet de connaitre la position d'un objet solidaire de
l'axe. Il est constitué de segments opaques et de segments
transparents répartis en plusieurs cercles concentriques sur la
roue
de l'encodeur. Le premier cercle, situé au milieu de la roue,
possède un certain nombre de segments. Le cercle suivant
(en allant vers le bord extérieur du disque) possède deux fois plus de
segments que le premier. Le suivant (en allant toujours vers le bord
extérieur du disque) en possède deux foix plus que le précédent (et
donc quatre fois plus que le premier), etc. Le premier cercle (le plus
proche du centre) comporte
un segment transparent et un segment opaque. Le deuxième possède deux
segments transparents et deux segments
opaques. Le troisième cercle possède quatre segments de chaque type,
etc. On se trouve en pleine représentation binaire avec le bit de poids
fort situé au plus près du centre et le bit de poids faible situé le
plus à la périphérie du disque. On comprendra donc qu'un disque doté de
10 cercles sera en mesure de donner un nombre relatif à sa position
compris entre 0 et 1023 (2 puissance 10 positions possibles), et qu'un
disque doté de 16 cercles sera en mesure de donner un nombre relatif à
sa position, compris entre 0 et 65535 (2 puissance 16 positions). Bien
sûr, pour que cela fonctionne, il faut un capteur photosensible par
piste (cercle).
Des encodeurs "très/trop" bon marché ?
Je
ne pourrai pas cacher bien longtemps que je fais partie de ceux
qui achètent parfois des composants de manière compulsive, se
disant que "ça
peut servir un jour". Les encodeurs optiques sérieux
(professionnels)
coûtent cher, plusieurs dizaines
d'euros la pièce. Alors forcément, quand on voit un lot de 3 encodeurs
mécaniques pour 1 euro, ou un lot de 10 pour moins de 5 euros, on est
tenté. J'ai
ainsi commandé, l'année dernière (2016) un lot de 3 encodeurs
mécaniques (et non optiques) pour 1 euro, et un autre lot de 4
encodeurs mécaniques pour 2 euros. Dans
la foulée (début 2017) je me suis aussi laissé tenter par un lot de 10
encodeurs mécaniques pour environ 4 euros.
Remarque
: on reconnait ces encodeurs mécaniques au fait qu'ils possèdent 3
broches, et non 4 ou 5 (pas besoin d'alimenter une source lumineuse).
Une des particularités de ce type d'encodeur (je parle bien de ceux que
j'ai acquis, et non de tous les types) est de délivrer des signaux
temporaires et non fixes. En exploitant les changements d'états avec
les interruptions d'un uC, pas de soucis (en tenant toutefois compte
des rebonds). Mais gare aux crises de nerf si on essaye de savoir où on
en est avec un simple multimètre en mode ohmmètre...
Alors,
ces encodeurs valent-ils le coucou (coup et coût) ? Désolé, mais je
vais être franc. Si c'est pour faire des tests sur une petite maquette
et vérifier un principe de fonctionnement, alors OK. Mais si c'est pour
un montage sérieux qui doit tenir dans le temps, oubliez tout de suite.
Sur les sept encodeurs mécaniques que j'ai achetés en 2016 et testés début 2017, un seul
fonctionnait encore (les autres sont simplement et purement bloqués, on
ne peut plus les tourner) ! Mais pourquoi en avoir racheté, alors que
c'est de la m... ? C'est simple, j'ai passé la dernière commande avant
de (re)tester les "vieux"... Je m'attendais évidement à ce qu'ils
tiennent moins longtemps que ceux proposés par les pros, mais pas à ce
point là ! Ceci dit je dois être honnête avec vous. Ces encodeurs ont
été stockés dans un garage dont la température avoisine toujours la
température extérieure.
Voir aussi
PIC - Bases - Encodeur optique - Exemple avec PIC et MikroPascal
Compteur points 002 - Comptage et décomptage entre 0000 et 9999 avec PIC 16F628A et 4 afficheurs 7 segments
Alimentation ajustable 014c - Génération tension et signal PWM avec deux encodeurs optiques