La méthode de lecture de la valeur d'un codeur dépend du type de codeur. Les méthodes de lecture pour les codeurs incrémentaux et absolus sont décrites ci-dessous.
Codeur incrémental
Les codeurs incrémentaux fournissent deux canaux de signaux de sortie : la voie A et la voie B. Il s'agit de signaux impulsionnels décalés de 90 degrés électriques l'un par rapport à l'autre. En détectant les changements d'état sur la voie A et la voie B, il est possible de déterminer à la fois le sens et l'angle de rotation. Voici les étapes de base pour lire un codeur incrémental avec un Arduino.
- Connectez la voie A et la voie B du codeur aux broches compatibles avec les interruptions de l'Arduino (par exemple, les broches 2 et 3).
- Définissez une variable globale dans le code Arduino pour stocker le comptage du codeur.
- Écrivez une routine de service d'interruption (ISR) pour gérer les changements d'état sur la voie A et la voie B. Dans cette routine, déterminez le sens de rotation en comparant l'état actuel d'une voie avec l'état précédent de l'autre, puis mettez à jour le comptage du codeur en conséquence.
volatile long encoderCount = 0;
int lastB = 0;
void encoderInterrupt() {
int A = digitalRead(2);
int B = digitalRead(3);
// Décodage en quadrature simple : comparer A actuel avec B précédent
if (A == lastB) {
encoderCount++;
} else {
encoderCount--;
}
lastB = B;
}
- Dans la fonction
setup(), configurez les modes des broches et attachez les interruptions afin que l'ISR soit déclenchée à chaque changement d'état de la voie A ou de la voie B.
void setup() {
pinMode(2, INPUT);
pinMode(3, INPUT);
lastB = digitalRead(3);
attachInterrupt(digitalPinToInterrupt(2), encoderInterrupt, CHANGE);
attachInterrupt(digitalPinToInterrupt(3), encoderInterrupt, CHANGE);
}
- Dans la boucle principale
loop(), lisez la variableencoderCountpour obtenir la position relative et le sens de rotation de l'arbre du moteur.
Remarque : L'exemple ci-dessus utilise une approche simplifiée du décodage en quadrature. Pour les codeurs à grande vitesse ou à haute résolution, envisagez d'utiliser une machine à états complète pour le décodage en quadrature ou une bibliothèque d'interface codeur dédiée afin d'éviter les pertes de comptage dues au jitter du signal ou aux rebonds de contact.
Codeur absolu
Les codeurs absolus délivrent un signal numérique représentant la position absolue de l'arbre du moteur. L'exemple ci-dessous s'applique spécifiquement aux codeurs absolus à sortie parallèle, où chaque bit de la valeur de position est présenté sur un fil de données distinct.
Remarque : La plupart des codeurs absolus industriels utilisent des interfaces de communication série telles que SSI, SPI ou RS-485 plutôt que des sorties parallèles. Ces interfaces nécessitent des méthodes de lecture différentes et, dans certains cas, des bibliothèques de protocoles dédiées. Consultez toujours la fiche technique de votre codeur pour obtenir les détails corrects sur l'interface et le câblage.
- Connectez chaque broche de données du codeur à une broche d'entrée numérique de l'Arduino.
- Dans la fonction
setup(), configurez chaque broche de données en mode entrée.
void setup() {
pinMode(dataPin1, INPUT);
pinMode(dataPin2, INPUT);
// ... Broches de données supplémentaires, selon le nombre de bits du codeur
}
- Écrivez une fonction pour lire la valeur du codeur. Dans cette fonction, lisez l'état de chaque broche de données à l'aide de
digitalRead()et combinez les résultats en une seule valeur entière.
int readEncoder() {
int value = 0;
value |= digitalRead(dataPin1) << 0;
value |= digitalRead(dataPin2) << 1;
// ... Broches de données supplémentaires, selon le nombre de bits du codeur
return value;
}
- Dans la boucle principale
loop(), appelez la fonctionreadEncoder()pour obtenir la position absolue de l'arbre du moteur.
Remarque : Ces exemples couvrent les types de codeurs de base. Les codeurs utilisés dans les applications réelles peuvent nécessiter un traitement plus avancé, tel que la mise en œuvre d'un filtrage des rebonds de signal ou l'utilisation d'un circuit intégré d'interface codeur dédié. Consultez toujours la fiche technique du codeur pour garantir un câblage et un traitement des signaux appropriés.