on Wednesday, December 21, 2011

Comprendre le fonctionnement d'un servo modifié!

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 :)




on 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;
     }
}

void main() {
portb=0X00;
trisb=0X00;
T2CON=0X04;
TMR2IF_bit=0;
TMR2=0;
TMR2IE_bit=1;
INTCON=0XC0;
while(1){
}
}


à très bientôt :)





on Sunday, October 23, 2011
Today is October the 23rd, I got up about 6:41 am with a great hope. I thought that I would go with my friends but none of them was ready. I took my breakVERYfast at the RAcafé alone and I continued my path to the election place which is The school of "sahat etahrir". I can't describe my feelings when I first walk in the school, it's like a little kid about to open his birthday present.
I was amazed by the line: tall and organized that I felt that people has finally realize  the importance of election. It was so organized that I felt a little bit scary. When I took the line like every one else I saw my father who has finished voting. I had a little conversation with the people in the line about the RCD electors who are seemed to vote to the INITIATIVE party.
I finally arrived to the election room it was the first room by the way, I put my id, phone and another paper on the table I signed in front  of my name, I dipped my finger in the blue ink then I went to the polling booth where I chose my political party, I put my voting paper in the election box and I went out.

It was an amazing experience for me, this time I voted for our lovely Tunisia and I know that my vote counts and each counted vote is just another step ahead to take our freedom that our precious martyrs has died for.