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 :)
0 comments:
Post a Comment