/
Tutoriel 04 - Encodeur de moteur

Tutoriel 04 - Encodeur de moteur

Objectif

L’objectif de ce tutoriel est de comprendre comment connecter, à l’aide d’un contrôleur de moteur, un moteur de 12V au CRCduino. Cela montre aussi comment contrôler, de la manière la plus simple possible, le-dit moteur à l’aide d’un encodeur relatif à quadrature (comme ceux présents dans les moteurs goBilda). Utiliser un encodeur permet de précisément mesurer la rotation d’un moteur.

Schéma électrique et présentation complète

Code

Téléchargez le code de démonstration:

Qui est ici retranscrit:

//************************************************************************************************************************** // Tutoriel CrcDuino 4 - Contrôle de base d'un moteur de puissance à l'aide d'un encodeur //************************************************************************************************************************** #include <CrcLib.h> // La librairie "Encoder" par Paul Stoffregen doit préalablement être installée via le "Arduino Library Manager" // Guide d'utilisation (en anglais) https://www.pjrc.com/teensy/td_libs_Encoder.html //#define ENCODER_OPTIMIZE_INTERRUPTS #include <Encoder.h> // C'est pratique d'avoir un nom pour chaque port de contrôle #define MC_1 CRC_PWM_1 #define BTN_AVANCE CRC_DIG_1 // Constantes const int POSITION_ARRET = 1994; // Trouvé par essai-erreur pour une rotation de 360° avec nos moteurs. Certains moteurs (comme le goBilda) ont cette information dans la "specsheet" const int VITESSE_MOTEUR = 13; // 10% × 127 = 13 // Variable pour l'encodeur du moteur: dépend de la librairie "Encoder" Encoder enco(CRC_ENCO_A, CRC_ENCO_B); // L'encodeur est branché à ces deux ports sur le CRCduino //************************************************************************************************************************** void setup() { CrcLib::Initialize(); Serial.begin(2000000); // 2000000 permet de bloquer moins longtemps lors d'un affichage sur la console CrcLib::SetDigitalPinMode(BTN_AVANCE, INPUT); CrcLib::InitializePwmOutput(MC_1); // Utilisez CrcLib::InitializePwmOutput(MC_1, true); pour facilement renverser la direction de rotation du moteur sans avoir à modifier le reste du programme // Établir une position de référence au début de l'exécution // Idéalement, une « limit switch » permettrait au robot d'automatiquement trouver la position « zéro » au début du programme. En anglais, cela s'appelle le « homing ». enco.write(0); } void loop() { CrcLib::Update(); Serial.println(enco.read()); // Afficher en continu la position du moteur if(CrcLib::GetDigitalInput(BTN_AVANCE) == LOW) { // Lorsque le bouton est appuyé, débuter la rotation CrcLib::SetPwmOutput(MC_1, VITESSE_MOTEUR); } if(enco.read() >= POSITION_ARRET) { // Lorsque l'encodeur atteint sa position maximale, arrêter CrcLib::SetPwmOutput(MC_1, 0); } }

 

Comment avoir un contrôle plus précis, plus lisse de la position ?

Ce tutoriel présente la façon la plus simple de contrôler la position: le moteur va à une vitesse fixe jusqu'à ce qu’il atteigne la position voulue, puis s’arrête brusquement. Ce n’est pas idéal – l’inertie fera que le moteur s’arrêtera un peu après la position voulue, et les arrêts brusques ne sont pas agréables pour les moteurs.

Par exemple, c’est beaucoup plus agréable, lorsque vous êtes dans une auto approchant un feu rouge, si le conducteur commence à ralentir un peu à l’avance et de manière graduelle.

Et si le CRCduino pouvait lui aussi savoir que le moteur s’approche de sa position voulue et ralentir peu à peu ? Une façon très simple et largement documentée de faire cela est d’incorporer un contrôle PID à votre programme. Vous pouvez chercher « Arduino contrôle moteur PID » dans votre moteur de recherche préféré pour commencer en apprendre un peu plus sur cette technique populaire.

De manière brève, un contrôleur PID compare la différence entre la position voulue et la position actuelle (l’erreur). En utilisant certaines approximations mathématiques et trois paramètres (P, I et D, d’où le nom de la technique), le système ajuste la vitesse du moteur (valeur contrôlée) pour réduire au maximum l’erreur.

Related content

Tutoriel 02 - Reproduire la fonction delay()
Tutoriel 02 - Reproduire la fonction delay()
More like this
Tutoriel 11 - Conception de code séquentiel pour robots
Tutoriel 11 - Conception de code séquentiel pour robots
Read with this
Tutoriel 01 - Moteur avec interrupteur de position
Tutoriel 01 - Moteur avec interrupteur de position
More like this
Tutoriels - Page d'introduction
Tutoriels - Page d'introduction
More like this
Tutorial 04 - Motor encoder
Tutorial 04 - Motor encoder
More like this
English Section - Introduction Page
English Section - Introduction Page
More like this