Ci joint un code vous permettant de tester 4 codeurs quadrature avec une teensy. ( Teensy 3.2 3.5 36 4.0 ou 4.1 )
En effet si vous souhaitez mettre en oeuvre un asservissement de un ou plusieurs moteurs CC équipé d'encodeurs, il faut bien tester les bases et vérifier son matériel .
Note : un codeur quadrature est généralement équipé de 4 fils : 2 fils de data, 2 fils d'alimentation.
Vérifiez bien les tensions d'alimentation avant de brancher vos encodeurs.
Attention : si la tension indiquée est de 3.3V, brancher du 5V peut être fatal en fonction du matériel.
Si il est indiqué 5V le 3.3V peut marcher ( généralement c'est le cas ) mais parfois dans certains cas ça ne convient pas mais vous ne risquez pas d'abîmer votre matériel en essayant dans ce cas précis
De même au niveau des broches d'alimentation 1 est pour la masse l'autre est pour la source d'alimentation généralement 3.3V ou 5V. Il ne faut pas inverser l'alimentation et la masse sous peine de définitivement endommager votre encodeur.
Le code ci dessous vous permet de vérifier que 4 codeurs , afin de s'assurer que tout marche comme il le faut en tournant à la main le codeur / l'arbre du moteur.
Vous pourrez ainsi avoir une estimation du nombre de " count" / tour et vérifier les sens d'incrémentation et de décrémentation.
Dans ce code on part du principe que les broches data du codeur 0 sont branchés sur 5 et 6 du codeur 1 sont sur 7 et 8, avec 9 et 10 pour le codeur 2 et 11 et 12 pour le codeur 3.
( Si le compteur incrémente au lieu de décrémenter il faut inverser les deux fils de data des codeurs.
#include <Encoder.h> // Librairie déjà inclue avec l'installation de teensyduino #define NBENCODER 4 Encoder encoder0(5, 6); Encoder encoder1(7, 8); Encoder encoder2(9, 10); Encoder encoder3(11, 12); Encoder encoders[NBENCODER] = {encoder0, encoder1, encoder2, encoder3}; // note : On peut changer les pins des encodeurs mais il faut éviter le pin 13 à cause de la led intégrée void setup() { Serial.begin(115200); // Pensez à bien régler votre moniteur série à 115200 Bauds ou ajustez cette valeur Serial.println("Test des codeurs "); } int32_t positionsencoder[NBENCODER] = {0}; // Variable qui stock le résultat des codeurs void loop() { int32_t newEncoders[4]; for (uint8_t i = 0; i < NBENCODER; i++) { newEncoders[i] = encoders[i].read(); // Lecture de l'objet codeur if (newEncoders[i] != positionsencoder[i]) { // Si changement alors afficher le résultat Serial.print("Encoder "); // Note : si vous avez un codeur avec beaucoup de pulse par tours votre moniteur série rique d'être un peu spammé par tous les changements Serial.print(i); Serial.print(" = "); Serial.println(newEncoders[i]); positionsencoder[i] = newEncoders[i]; } } // Envoyer un caractère sur le moniteur série pour remettre à zero les codeurs if (Serial.available()) { Serial.read(); for (uint8_t i = 0; i < NBENCODER; i++) { encoders[i].write(0); } Serial.println("Reset des encodeurs"); } }