Posted by
Unknown
at
8:58 AMon Wednesday, December 21, 2011
Robocomp revient dans sa deuxième édition qui s'est
déroulée le 18,19 et 20 décembre dans un hôtel à Yamine Hammamet .
Cette compétition nationale offre aux participants quatre types d'épreuves dont le robot suiveur de ligne et le robot détecteur d'obstacles, épreuves auxquelles les clubs de notre institut ont participé.
Deux clubs de l'INSAT y ont été représentés: le CCE et le mécatronique.
Le Club Commandes Embarquées CCE, fondé depuis deux mois seulement, est parvenu à gagner l'épreuve du robot suiveur de ligne, leur deuxième robot s'est classé cinquième, tandis que Le Club Mécatronique a eu la Sixèmeplace.
Club commande embarquée a également participé à l'épreuve du robot détecteur d'obstacles, mais n'a pas eu le même succès. On note aussi Club Mécatronique a exposé certaines de ses innovations en robotique pendant la compétition. Nos représentants méritent l'encouragement pour leur participation qui a honoré notre institut.
Pour comprendre le fonctionnement d'un servomoteur modifié (hacked) il faut d'abord comprendre le fonctionnement interne d"un servomoteur normal. Le servomoteur normal nous donne une position selon notre commande qui varie entre 1ms et 2ms. Donc le servo calcul l'écart entre sa position actuelle et sa position désirée tout le 20ms si l'écart est nul le servo maintient sa position sinon il tourne jusqu'à l'écart soit nul de nouveau. La vitesse de servo entre 2 position n'est jamais constante, elle est relative à l'écart calculé à chaque fois. Par exemple: Pour passer de 90° à 0° le servo commence à tourner d'une grande vitesse, vue que l'écart est grand puis il diminue jusqu'à qu'il arrive à la position 0°. Mais comment un servo peut connaître sa position? En fait l'arbre de moteur de servo est attaché à un potentiomètre la valeur de sortie de ce potentiomètre est relative à sa position. Supposons qu’on a enlevé se potentiomètre, le servo ne sait plus sa position réel. On peut même lui donné une fausse information de sa position en insérant à la place de potentiomètre un pont diviseur qui est en fin de compte un potentiomètre à valeur fixe. Supposons encore que le pont diviseur est constitué de deux résistances égales. Le servo va croire qu’il est toujours au milieu. Donc si la commande est de 1.5ms (commande pour que le servo normal tourne jusqu’à atteindre le milieu) le servo ne tourne pas puisque l’écart est nul. Si la commande est de 2ms l’écart est donc maximal le servo commence à tourner avec sa vitesse maximal et qui reste maximal puisque l’écart est toujours fixe. Si la commande est de 1ms l’écart est donc maximal mais négatif le servo commence à tourner avec sa vitesse maximal dans le sens contraire et qui reste maximal.
Les étapes pour modifier un servomoteur:
voilàun vidéo qui explique comment modifié un servo par roboticsed:
Pourquoi tous ces trucs, il est plus facile d’acheter un moteur DC et le commander en PWM!!
Oui c'est vrai, mais le servomoteur présente autre avantages plus que sa commande facile. Il n'est pas très cher par rapport au couple qu'il présente. Il est disponible par tout Il n'exige pas une interface de puissance Code C: int cnt=0; unsigned char down=0;
void interrupt(){ if(TMR2IF_bit){ //la résolution de timer est ~= 55µs cnt++; if(cnt==down) portb=0;// la valeur angle varie entre 0-->180 //cnt= 18 se traduit par 1ms //cnt=27 se traduit par 1.5ms d'ou 90° if(cnt==370) {portb=1;cnt=0;} TMR2IF_bit=0;//l3alam yarja3 lelsfer TMR2=0; } }
void main() { portb=0X00; trisb=0X00; T2CON=0X04; TMR2IF_bit=0; TMR2=0; TMR2IE_bit=1; INTCON=0XC0; while(1){ down=27;//moteur en arret delay_ms(1000); down=36;//moteur en avance vitesse maximal delay_ms(1000); down=18;//moteur en recul vitesse maximal delay_ms(1000); } } A bientôt :)
Posted by
Unknown
at
9:07 AMon Sunday, November 6, 2011
Bonjour, Je vais parler dans ce tutoriel, comme indique le titre, sur les servomoteurs et comment les interfacer avec des microcontrolleur pic. Ce tutoriel est spécialement conçue pour l'équipe de projet Labyrinthe au sein de l'atelier Robotique de club Android INSAT. D'abord, qu'est ce qu'un servomoteur??!
Un servomoteur de la marque FUTUBA
Un servomoteur est, comme son nom l'indique, un moteur mais avec quelques spécificités en plus. Contrairement à un moteur classique qui est utilisé pour tourner avec une vitesse proportionnelle à un courant ou à une tension, un servomoteur est utilisé pour obtenir une position ou une angle (source wikipedia). Donc contrairement aux moteurs classiques le servomoteur nous donne une position ou une angle bien défini autrement dit le servomoteur est asservi en position par défaut qui semble très utile pour la robotique. Ok,...mais comment il fonctionne??! Pas besoin de paniquer :)),le servomoteur possède son propre carte de puissance donc pour le commander il suffit de le relier directement avec le microcontrolleur. Ce qui est encore plus intéressant c'est la nature du signal de commande qui est totalement numérique. Il suffit de lui envoyer une impulsion logique dont la durée varie entre 1ms et 2ms. La durée de l'impulsion définie la position du servo, c'est-à-dire que si l'impulsion dure 1ms, le servo se déplacera tout à gauche et si l'impulsion dure 2ms, il ira tout à droite. Vous aurez également compris que pour 1,5ms, le servo se positionne au milieu.
pour maintenir cette position, on doit lui envoyer cette signal avec une fréquence conventionnelle de 50HZ.
mmmm... intéressent! Comment crier ce signal alors avec un PIC16F877 par exemple??!
Rien de sorcier, pour crier ce signal on doit utiliser les registre TIMER de PIC qu'on a choisi, vous devez peut être jetez un coup d'oeil sur ce tutoriel qui parle sur les timer.
Si vous avez bien compris comment fonctionne le timer vous pouvez compris ce code ci dessus. on utilse le timer2 8bit qui nous donne une résolution proche de 55µs. int cnt=0;
void interrupt(){ if(TMR2IF_bit){ //la résolution de timer est ~= 55µs cnt++; if(cnt==27) portb=0;// la valeur angle varie entre 0-->180 //cnt= 18 se traduit par 1ms //cnt=27 se traduit par 1.5ms d'ou 90° if(cnt==370) {portb=1;cnt=0;} TMR2IF_bit=0;//l3alam yarja3 lelsfer TMR2=0; } }