Récupération information MCC + codeur incrémental

Bonjour, dans le cadre d'un projet étudiant je cherche à obtenir la vitesse de rotation de mon moteur en fonction du temps. Mon moteur dispose d'un codeur incrémental. Pour le moment je récupère juste les ticks de la codeuse (représentant le déplacement du moteur à droite ou à gauche). Je cherche maintenant à obtenir la position de ce moteur afin de pouvoir la dérivée après et obtenir ma vitesse.

Je connais la résolution et le pas de mon capteur.
Je vous remercie d'avance pour votre aide.

postez le, ça fera un point de départ

Lire ce fil, ça peut donner des idées.

int pinA = 2; // Le port D2 est associé à l'interruption 0
int pinB = 3;
float omega;
volatile int pos = 0; // Position (en nombre de pas) du codeur

void setup() {
Serial.begin(115200);
Serial.println("Codeur incremental");
pinMode(pinB, INPUT);
attachInterrupt(0, front, FALLING); // Détection des fronts descendants
}
void loop() {
delay(500);
}
void front() {
int s = digitalRead(pinB);
if (s == LOW) {
++pos;
}
else {
--pos;
}
Serial.println(pos); // Ligne à supprimer après les tests, car elle ralenti le dispositif
}

Voici le code donnant juste les ticks de la codeuse en fonction du sens de rotation

Merci d’éditer votre post pour rajouter les balises de de code, c’est quasiment illisible tel quel:

  • sélectionner la partie du texte qui correspond au code
  • appuyez sur l’icône </> dans la barre d’outils pour indiquer que c’est du code

(Assurez vous aussi d’indenter le code correctement dans l’IDE avant de le copier pour le coller ici. Cela se fait en pressant ctrlT sur PC ou cmdT sur un Mac)

—-

De manière plus générale lisez les recommandations listées dans « Les bonnes pratiques du Forum Francophone”

Bon début, sous réserve que ça fonctionne. Tester dans la routine d'interruption (ISR) que le signal est à "low" si on a connecté l'interruption sur un front descendant me parait inutile. Vous pouvez remplacer votre "delay (500)" dans la fonction "loop" par rien du tout, ça fonctionnera de la même manière. Après, il va falloir réfléchir un peu à ce que vous voulez faire avec ces fronts de codeur incrémental, et ce sera le gros du boulot.

hello

ce n'est pas la pin d'interruption qui est testée, c'est la pin de direction

Ah oui ok. Alors dans ce cas on est sur de perdre la position la première fois où le moteur va s'arrêter et le codeur vibrer en envoyant une rafale d'interruptions sur le même état de l'autre voie. J'ai même vu un axe avec un asservissement de position qui prenait sa mesure d'entrée comme ça qui dérivait sur la course complète en moins d'une heure.