Fonctionnement de l'encodeur rotatif et interface avec Arduino

Fonctionnement De L Encodeur Rotatif Et Interface Avec Arduino



L'encodeur rotatif est un dispositif électromécanique important qui a diverses utilisations dans le domaine de l'électronique. Cet article explique les types et le fonctionnement de l'encodeur rotatif ainsi que son interface avec Arduino.

Qu'est-ce qu'un encodeur rotatif

Un encodeur rotatif est un dispositif d'entrée numérique qui détecte la position angulaire du bouton rotatif et envoie des signaux au microcontrôleur ou à tout autre dispositif auquel ils sont connectés. Ils peuvent pivoter à 360° sans s'arrêter. Il est également appelé codeur d'arbre. Il est utilisé dans les imprimantes, l'électronique audio, les moteurs et les contrôleurs.









Types d'encodeurs rotatifs

Il existe principalement deux types d'encodeurs rotatifs qui sont décidés en fonction du signal de sortie généré par eux. Ces types sont nommés :



Encodeur rotatif incrémental

Ce type d'encodeur compte les tours du bouton rotatif sous forme d'impulsions. Lorsque le bouton est tourné une fois, une impulsion est générée. A chaque impulsion, le compteur s'incrémente pour indiquer la position angulaire de l'arbre.





Encodeur rotatif absolu

Ce type d'encodeur donne la position angulaire absolue de l'arbre, car il a un code séparé pour chaque position de l'arbre, et il mesure l'angle à travers ce code. Il n'a pas besoin d'un compteur pour donner une sortie de position angulaire. Même si le codeur rotatif absolu est désactivé, les valeurs respectives des positions angulaires sont conservées. C'est aussi un encodeur à faible coût.



Fonctionnement de l'encodeur rotatif

L'encodeur rotatif se compose d'un disque avec des zones équidistantes connectées à une broche commune C qui est mise à la terre. Les deux autres broches A et B sont des broches de contact qui entrent en contact avec C lorsque le bouton rotatif est tourné. Lorsque la broche A ou B est connectée à la masse, un signal est généré. Ces signaux générés à partir des broches de sortie sont déphasés de 90°. En effet, la broche A est connectée à la terre lorsque le bouton est tourné dans le sens des aiguilles d'une montre, et la broche B est connectée à la terre en premier lorsque le bouton est tourné dans le sens antihoraire. Par conséquent, le sens de rotation du bouton est déterminé par ces connexions.

Si l'état de B n'est pas égal à UN , alors le bouton a tourné dans le sens des aiguilles d'une montre.


Si l'état de B est égal à A, le bouton a tourné dans le sens antihoraire.

Configuration des broches de l'encodeur rotatif

Le schéma ci-dessous donne un brochage de l'encodeur rotatif qui montre les broches de sortie A et B, un commutateur rotatif pouvant être utilisé comme bouton-poussoir et des broches pour l'alimentation.

Description de la broche de l'encodeur rotatif

Voici la description donnée de toutes les broches du codeur rotatif.

Sortie B ou CLK

Cette broche donne une sortie du nombre de fois que le bouton ou l'encodeur rotatif a tourné. Chaque fois que le bouton est tourné, le CLK complète un cycle de HIGH et LOW. Elle est comptée comme une rotation.

Sortie A ou DT

C'est la deuxième broche de sortie de l'encodeur rotatif qui détermine le sens de rotation. Il est en retard de 90° par rapport au signal CLK. Par conséquent, si son état n'est pas égal à l'état de CLK, le sens de rotation est dans le sens des aiguilles d'une montre, sinon dans le sens inverse des aiguilles d'une montre.

Changer

La broche de l'interrupteur est utilisée pour vérifier si le bouton-poussoir est enfoncé ou non.

VCC

Cette broche est connectée à une alimentation 5V

Terre

Cette broche est connectée à la masse

Interfacer l'encodeur rotatif avec Arduino

L'encodeur rotatif a cinq broches. VCC et GND de l'encodeur rotatif sont connectés à celui d'Arduino. Les broches restantes CLK, DT et SW sont connectées aux broches d'entrée numérique d'Arduino.

Code Arduino pour encodeur rotatif

// Entrées d'encodeur rotatif
#définir CLK_PIN 2
#define DT_PIN 3
#définir SW_PIN 4
compteur entier = 0 ;
int currentCLKState ;
int lastCLKState ;
Direction du courant de chaîne = '' ;
non signé long lastButtonPressTime = 0 ;
void setup ( ) {
// Définir les broches de l'encodeur comme contributions
    PinMode ( CLK_PIN, ENTRÉE ) ;
    PinMode ( DT_PIN, ENTRÉE ) ;
    PinMode ( SW_PIN, INPUT_PULLUP ) ;
// Configurer le moniteur série
Serial.begin ( 9600 ) ;
// Lire l'état initial de CLK
lastCLKState = digitalRead ( CLK_PIN ) ;
}
boucle vide ( ) {
// Lire l'état actuel de CLK
currentCLKState = digitalRead ( CLK_PIN ) ;
// Si la dernier et l'état actuel de CLK est différent, alors une impulsion s'est produite
// Réagir uniquement à 1 changement d'état pour éviter le double comptage
si ( étatCLKactuel ! = dernierétatCLK && étatCLK actuel == 1 ) {
// Si l'état DT est différent de l'état CLK, alors
// L'encodeur tourne dans le sens inverse des aiguilles d'une montre, donc la décrémentation
si ( numériqueLire ( DT_PIN ) ! = étatCLK actuel ) {
comptoir--;
directioncourante = 'CCW' ;
} autre {
// L'encodeur tourne dans le sens des aiguilles d'une montre, donc incrémentez
compteur++ ;
directioncourante = 'CW' ;
}
Serial.print ( « Sens de rotation : » ) ;
Serial.print ( directioncourante ) ;
Serial.print ( ' | Valeur du compteur : ' ) ;
Serial.println ( comptoir ) ;
}
// Se souvenir du dernier État CLK
lastCLKState = currentCLKState ;
// Lire l'état du bouton
int buttonState = digitalRead ( SW_PIN ) ;
// Si nous détectons un signal BAS, le bouton est enfoncé
si ( état du bouton == BAS ) {
// Si 50 ms se sont écoulées depuis le dernier Impulsion BASSE, cela signifie que le
// bouton a été enfoncé, relâché et enfoncé à nouveau
si ( millièmes ( ) - lastButtonPressTime > cinquante ) {
Serial.println ( 'Bouton appuyé!' ) ;
}
// Se souvenir du dernier événement de pression sur un bouton temps
lastButtonPressTime = millis ( ) ;
}
// Mettre dans un léger retard à aider faire rebondir la lecture
retard ( 1 ) ;
}


Dans le code ci-dessus, l'état de la broche CLK est vérifié dans la fonction loop(). S'il n'est pas égal à son état précédent, il indique que le bouton rotatif a tourné. Maintenant, pour vérifier le sens de rotation du bouton, l'état actuel de CLK est comparé à l'état de DT. Si les deux états sont inégaux, cela indique que le bouton a tourné dans le sens des aiguilles d'une montre et le compteur incrémente sa valeur pour afficher la position du bouton rotatif. Dans le cas contraire, le compteur décrémente.

Conclusion

Les encodeurs rotatifs sont des capteurs de position avancés qui peuvent tourner en continu. Ils sont disponibles en deux types : incrémentiel et absolu. L'encodeur rotatif fonctionne en comptant les impulsions générées en raison de la rotation du bouton. Il a diverses applications dans l'électronique de la vie quotidienne jusqu'à l'automatisation industrielle.