Vous êtes sur la page 1sur 5

ROB_TP3

Robot WIFIBOT : Mesure de vitesse


G.COLIN

1 Prsentation
Le robot WIFIBOT est un robot de surveillance, muni dune camra IP et de 4 roues motrices.
Il est pilotable travers le rseau (priv ou Internet).
Dans ce TP, on sintresse en particulier au contrle de la vitesse du robot. Le robot dispose de 4 moteurs, un pour
chaque roue. Chaque moteur dispose dun codeur incrmental.
Le robot dispose de 2 cartes de commande des moteurs. Chaque carte commande 2 moteurs.

Moteur
Codeur

Rducteur

Objectif du TP : Raliser la mesure de la vitesse de rotation du moteur

2 Etude du codeur
Rappel :

Un codeur incrmental dispose de 2 pistes et dlivre 2 signaux : A et B.


Les signaux A et B sont en quadrature, c'est--dire quils sont dphass de de priode.

Les principales caractristiques du motorducteur sont les suivantes

Le rducteur a un rapport de 50 :1  lorsque laxe en sortie du rducteur fait 1 tour, laxe moteur en fait 50
Le codeur dlivre 120 impulsions, sur une voie, lorsque le moteur fait 1 tour.
2.1 Dterminer la vitesse de rotation du moteur lorsquon relve une frquence de 10kHz sur une voie du codeur.
2.2 Dterminer la vitesse de rotation en sortie du rducteur, dans ces mmes conditions.

3 Mesure de la vitesse avec une carte ARDUINO


Le principe utilis est identique celui vu dans le TP mesure en sortie de lanmomtre.
Pour mesurer la frquence, on compte le nombre dimpulsions fournies par le capteur pendant un temps fixe.
Pour cela, on utilise 2 types dinterruption au niveau du microcontrleur :
Une interruption du TIMER1, intgr au P, des intervalles de temps rgulier
Une interruption sur chaque front montant du signal fourni par le capteur

Rappels :
La bibliothque TimerOne permet de gnrer des interruptions des intervalles de temps rguliers. La
fonction Timer1.initialize(temps) dfinit la priodicit des interruptions, le temps est en s. La fonction
Timer1.attachInterrupt(procdure) dfinit la procdure appeler au moment de linterruption.
La fonction attachInterrupt(p1,p2,p3) accepte 3 paramtres :
 p1 dfinit le numro de linterruption (0 est li la patte 2 de la carte ARDUINO)
 p2 dfinit le nom de la fonction a appel lors de linterruption
 p3 dfinit le front qui provoque linterruption (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, dterminer le temps entre 2 interruptions provoques par le Timer 1

3.2 A la lecture du programme, dterminer la fonction appele lors dune interruption provoque par le Timer1
3.3 A la lecture du programme, dterminer la fonction appele lors dun front montant (RISING) sur linterruption 0
(patte 2).
La variable nombre_imp contient le nombre dimpulsions du codeur pendant le temps entre 2 interruptions du
Timer1.
Les caractristiques du motorducteur donnent une vitesse de rotation maximale de 175 rpm (rotations par minute)
en sortie du rducteur.
3.4 Dterminer dans ces conditions o la vitesse est maximale :
La vitesse de rotation en sortie du rducteur en tr/s
La vitesse de rotation du moteur en tr/s
La frquence des impulsions sur une voie du codeur
La valeur de la variable nombre_imp
3.5 La taille de la variable nombre_imp, dclare 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 seffectue via une liaison srie (supporte par lUSB).
2 types de commande sont envoys la carte :
Commande du moteur (sens et vitesse)
Demande du nombre dimpulsions comptes (pendant le temps de mesure)

A la lecture du vi (et du programme de la carte ARDUINO) :


4.1 Dterminer le premier caractre transmis pour la commande moteur
4.2 Dterminer le premier caractre transmis pour la demande du nombre dimpulsion
 Demander au prof de raliser le cblage
 Excuter le programme et vrifier le fonctionnement.
 Faire constater au prof
 Relever la valeur maxi du nombre dimpulsion
4.3 Dterminer la vitesse du moteur correspondante, et la vitesse en sortie du rducteur.

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 rducteur (en tr/s).
5.2 Vrifier si le rsultat obtenu est conforme (compter le nombre de tour de laxe rducteur pendant un certains
temps).

6 Dtection du sens de rotation

On souhaite dtecter le sens de rotation du moteur, laide du codeur incrmental.


Pour cela, on lit ltat de la voie B du codeur au moment du front montant de la voie A, qui a provoqu
linterruption.
SENS 1

SENS 2

La voie B est relie sur la patte 3 de la carte arduino.

On ajoute les lignes de programme suivantes :


Dclaration des variables globales :
int voieB = 3 ;
unsigned char sens_lu ;
Dans la partie setup()
pinMode(voieB,INPUT);
Dans le programme dinterruption (compte_imp) provoque 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 ajoute uniquement

Le vi sous Labview doit tre modifi de la manire suivante : la partie ajouter est encadre en pointills

 Raliser les modifications


 Faire des essais et faire constater au prof.

Vous aimerez peut-être aussi