Enoncé du TP

ROB_TP3
Robot WIFIBOT : Mesure de vitesse
G.COLIN
1 – Présentation
Le robot WIFIBOT est un robot de surveillance, muni d’une caméra IP et de 4 roues motrices.
Il est pilotable à travers le réseau (privé ou Internet).
Dans ce TP, on s’intéresse en particulier au contrôle de la vitesse du robot. Le robot dispose de 4 moteurs, un pour
chaque roue. Chaque moteur dispose d’un codeur incrémental.
Le robot dispose de 2 cartes de commande des moteurs. Chaque carte commande 2 moteurs.
Moteur
Codeur
Réducteur
Objectif du TP : Réaliser la mesure de la vitesse de rotation du moteur
2 – Etude du codeur
Rappel :
Un codeur incrémental dispose de 2 pistes et délivre 2 signaux : A et B.
Les signaux A et B sont en quadrature, c'est-à-dire qu’ils sont déphasés de ¼ de période.
Les principales caractéristiques du motoréducteur sont les suivantes
Le réducteur a un rapport de 50 :1 lorsque l’axe en sortie du réducteur fait 1 tour, l’axe moteur en fait 50
Le codeur délivre 120 impulsions, sur une voie, lorsque le moteur fait 1 tour.
2.1 – Déterminer la vitesse de rotation du moteur lorsqu’on relève une fréquence de 10kHz sur une voie du codeur.
2.2 – Déterminer la vitesse de rotation en sortie du réducteur, dans ces mêmes conditions.
3 – Mesure de la vitesse avec une carte ARDUINO
Le principe utilisé est identique à celui vu dans le TP mesure en sortie de l’anémomètre.
Pour mesurer la fréquence, on compte le nombre d’impulsions fournies par le capteur pendant un temps fixe.
Pour cela, on utilise 2 types d’interruption au niveau du microcontrôleur :
• Une interruption du TIMER1, intégré au µP, à des intervalles de temps régulier
• Une interruption sur chaque front montant du signal fourni par le capteur
Rappels :
• La bibliothèque TimerOne permet de générer des interruptions à des intervalles de temps réguliers. La
fonction Timer1.initialize(temps) définit la périodicité des interruptions, le temps est en µs. La fonction
Timer1.attachInterrupt(procédure) définit la procédure à appeler au moment de l’interruption.
• La fonction attachInterrupt(p1,p2,p3) accepte 3 paramètres :
p1 définit le numéro de l’interruption (0 est lié à la patte 2 de la carte ARDUINO)
p2 définit le nom de la fonction a appelé lors de l’interruption
p3 définit le front qui provoque l’interruption (RISING, FALING, LOW, CHANGE)
Le programme complet à implanter dans la carte ARDUINO est donné (codeur.ino) en annexe.
Ouvrir le programme avec le logiciel arduino.
3.1 – A la lecture du programme, déterminer le temps entre 2 interruptions provoquées par le Timer 1
3.2 – A la lecture du programme, déterminer la fonction appelée lors d’une interruption provoquée par le Timer1
3.3 – A la lecture du programme, déterminer la fonction appelée lors d’un front montant (RISING) sur l’interruption 0
(patte 2).
La variable « nombre_imp » contient le nombre d’impulsions du codeur pendant le temps entre 2 interruptions du
Timer1.
Les caractéristiques du motoréducteur donnent une vitesse de rotation maximale de 175 rpm (rotations par minute)
en sortie du réducteur.
3.4 – Déterminer dans ces conditions où la vitesse est maximale :
• La vitesse de rotation en sortie du réducteur en tr/s
• La vitesse de rotation du moteur en tr/s
• La fréquence des impulsions sur une voie du codeur
• La valeur de la variable nombre_imp
3.5 – La taille de la variable nombre_imp, déclarée en unsigned char (variable sur 8 bits, de 0 à 255) est elle
suffisante ?
4 – Pilotage par LABVIEW
Ouvrir le vi « visa_commande_MCC_codeur.vi » avec LABVIEW
Le dialogue entre Labview et la carte ADUINO s’effectue via une liaison série (supportée par l’USB).
2 types de commande sont envoyés à la carte :
• Commande du moteur (sens et vitesse)
• Demande du nombre d’impulsions comptées (pendant le temps de mesure)
A la lecture du vi (et du programme de la carte ARDUINO) :
4.1 – Déterminer le premier caractère transmis pour la commande moteur
4.2 – Déterminer le premier caractère transmis pour la demande du nombre d’impulsion
Demander au prof de réaliser le câblage
Exécuter le programme et vérifier le fonctionnement.
Faire constater au prof
Relever la valeur maxi du nombre d’impulsion
4.3 – Déterminer la vitesse du moteur correspondante, et la vitesse en sortie du réducteur.
5 – Affichage de la vitesse de rotation
5.1 – Proposer une solution pour afficher directement la vitesse de rotation du moteur (en tr/s), ainsi que la vitesse
en sortie réducteur (en tr/s).
5.2 – Vérifier si le résultat obtenu est conforme (compter le nombre de tour de l’axe réducteur pendant un certains
temps).
6 – Détection du sens de rotation
On souhaite détecter le sens de rotation du moteur, à l’aide du codeur incrémental.
Pour cela, on lit l’état de la voie B du codeur au moment du front montant de la voie A, qui a provoqué
l’interruption.
SENS 1
SENS 2
La voie B est reliée sur la patte 3 de la carte arduino.
On ajoute les lignes de programme suivantes :
Déclaration des variables globales :
int voieB = 3 ;
unsigned char sens_lu ;
Dans la partie setup()
pinMode(voieB,INPUT);
Dans le programme d’interruption (compte_imp) provoquée par la voie A du codeur (interruption 0, patte 2)
if (digitalRead(voieB) == 0) sens_lu= 2; else sens_lu=1 ;
Dans la partie : case ‘C’
Serial.println(nombre_imp);
Serial.println(sens_lu);
break ;
ligne ajoutée uniquement
Le vi sous Labview doit être modifié de la manière suivante : la partie à ajouter est encadrée en pointillés
Réaliser les modifications
Faire des essais et faire constater au prof.