Contrôle de la position de la casquette par codeur
Le codeur incrémental
Le moto-réducteur est équipé d'un codeur incrémental pour fournir une indication précise sur le nombre de tours qu'il a fait. Des impulsions sont envoyées régulièrement lors de la rotation du moteur, il suffit de compter ces impulsions et de connaître le nombre d'impulsions par tour pour déterminer la position angulaire de l'arbre du moteur.
Ainsi, on peut le commander pour faire 2,5 tours en descente et le commander pour qu'il refasse 2,5 tours précisément en montée. La casquette reviendra donc exactement à sa position initiale.
On peut voir sur l'image qu'il y a plus que deux bornes : il faut commander le moteur et on peut lire de combien de degrés le moteur a tourné.

Réaliser le câblage de la photo suivante :
Remarques :
La broche « OUT » du bouton poussoir reliée à une borne JAUNE de la carte.
La broche « VCC » du bouton poussoir reliée à une borne ROUGE de la carte.
La broche « GND » du bouton poussoir reliée à une borne NOIRE de la carte.

Faire vérifier votre câblage au professeur avant de mettre les piles et de relier la carte au PC. [pdf]
Ouvrir le programme « Arduino »
Aller dans le menu « Outils - Type de carte » et choisir « Arduino/Genuino Mega or Mega2560 ».
Raccorder votre carte à votre ordinateur avec le câble USB fourni.
Aller dans le menu « Outils - Port » et choisir le port USB où votre carte est reliée.
Saisir le programme suivant.
MeEncoderOnBoard encoder_1(SLOT1);
uint8_t rpmMoteur = 50;// A configurer sans dépasser l'indication sur le moteur
uint8_t reductionMoteur = 46;// A configurer en regardant votre moteur
uint8_t nbrEncoches = 8;// A configurer en regardant votre moteur
const int BP_1 = A6; // BP1 connecté sur la broche A6
const int BP_2 = A7; // BP2 connecté sur la broche A7
// définition des variables //
int BP1; // BP1 de déclenchement en mode manuel, =0 si appuyé //
int BP2; // BP2 de déclenchement en mode manuel, =0 si appuyé //
int prog = 0; // variable
void gestion_impulsions_encoder1()
{
if (digitalRead(encoder_1.getPortB()) == 0) encoder_1.pulsePosMinus();
else encoder_1.pulsePosPlus();
}
void setup()
{
pinMode(BP_1,INPUT_PULLUP); // broches en entrée avec une résistance de tirage à +5V
pinMode(BP_2,INPUT_PULLUP); // broches en entrée avec une résistance de tirage à +5V
attachInterrupt(encoder_1.getIntNum(), gestion_impulsions_encoder1, RISING);
//set pwm 1khz
// gestion du port 1 (le plus à droite)
TCCR1A = _BV(WGM10);//PIN12
TCCR1B = _BV(CS11) | _BV(CS10) | _BV(WGM12);
encoder_1.setPulse(nbrEncoches);
encoder_1.setRatio(reductionMoteur);
encoder_1.setPosPid(1.8,0,0.5);
encoder_1.setSpeedPid(0.18,0,0);
}
void loop()
{
BP1 =digitalRead(BP_1); // lecture des entrées des BP
if(BP1==LOW) { // BP1 appuyé
prog=1;
}
BP2 =digitalRead(BP_2);
if(BP2==LOW) { // BP2 appuyé
prog=2;
}
switch(prog){
case 1: // Sortir la casquette
encoder_1.moveTo(360, rpmMoteur); // +1 tour moteur / position initiale
break;
case 2: // Rentrer la casquette
encoder_1.moveTo(-360, rpmMoteur); // -1 tour moteur / position initiale
break;
}
encoder_1.loop();
}
Téléverser votre programme dans la carte
.
FAIRE VALIDER le fonctionnement par le professeur (ne pas oublier de mettre les 6 piles AA et de mettre l'interrupteur sur ON)
Contrôle des codeurs
Passons au codeur.
Un moteur DC (à courant continu) tourne lorsqu'on lui impose une tension. Les bornes de sortie du codeur envoient des signaux. Par exemple, le codeur pourrait envoyer 100 impulsions lorsque l'axe de rotation fait un tour complet. Les signaux permettent donc de savoir de combien de degrés le moteur à tourner.
On veut tourner de 1/4 de tours (90°) en sachant qu'on possède un codeur qui envoie 100 impulsions par tour ? C'est simple : il vous suffit de le faire fonctionner jusqu'à avoir obtenu 25 impulsions de sortie (un quart de 100). Simple et efficace.
Observer le signal rouge parvenant à traverser le disque dans le système de codage ci-dessous :
Impossible d'accéder à la ressource audio ou vidéo à l'adresse :
La ressource n'est plus disponible ou vous n'êtes pas autorisé à y accéder. Veuillez vérifier votre accès puis recharger le média.
Si vous comptez, vous pourrez voir qu'il y a 16 trous qui permettent le passage du signal rouge. Du coup, 16 détections d'apparition du lumière rouge veut dire qu'on a fait un tour complet, 360°.
Connaissant le pas de la crémaillère et le nombre d'impulsions par tour, PROPOSER une méthode pour calculer le nombre d’impulsions envoyées par le codeur pour un déplacement de 60 mm.
MODIFIER le programme précédent pour que la casquette se déplace de 60 mm.
FAIRE VALIDER le fonctionnement par le professeur.