Aller au contenu


Information tutoriel

  • Ajouté le: déc. 17 2010 11:48
  • Date Updated: mars 26 2017 12:20
  • Lectures: 24201
 


* * * * *
0 Notes

Modification d'un servomoteur en moteur à rotation continue

Posté par robocop on déc. 17 2010 11:48
Les servomoteurs sont des ensembles mécanique composés d'un moteur courant continu, d'un servomoteur, d'un potentiomètre et d'un système électronique d'asservissement. Le moteur peut tourner selon un certain angle, qui dépend du servomoteur : il y a une butée mécanique qui l'empêche d'aller plus loin, et le potentiometre permet de connaitre la position de l'axe du servomoteur, c'est à dire l'angle que forme l'axe du servomoteur avec la butée.

La commande du moteur se fait selon un signal assez similaire des signaux du type PWM : il s'agit d'un signal carré dont la durée des impulsions détermine l'angle que doit atteindre l'axe du servomoteur :

Image IPB

Ainsi, les servomoteurs sont très pratique en robotique par exemple pour créer un robot bipède : on peut s'en servir pour réaliser les jambes du robot.

Cependant ici nous allons voir une application dérivée du servomoteur. En effet, un servomoteur contient un reducteur, un moteur, un système d'asservissement et un boitier solide et compacte. On peut trouver des servomoteurs pour moins de 10 euros. Ainsi, si on pouvait enlever la butée du servomoteur, et l'utiliser comme moteur à courant continu, on aurait à disposition un moteur avec un bon couple, dans un beau boitier, on disposerait de la marche arrière, et tout cela pour moins de 10 euros !

C'est l'objet de ce tutoriel.
Sommaire :

1. Principe
2. Enlever la butée
3. Remplacer le potentiomètre par une résistance variable
4. A la recherche du neutre
5. Commande du moteur
  Principe


Lorsque l'on envoi une commande au moteur, l'asservissement alimente le moteur jusqu'a que la commande correspond à la tension du potentiomètre, c'est à dire a la bonne position.

Maintenant, si on remplace le potentiomètre par une résistance fixe, qui correspond à un angle de 0 degrés, lorsque l'on lui enverra un signal pour aller dans un sens ou dans l'autre, il va tourner tourner dans ce sens, mais il se croira toujours à 0 degrés, et va continuer à tourner indéfiniment !

Ainsi, nous avons un moteur à courant continu.
  Enlever la butée



Le servomoteur possède une protection, une butée mécanique qu'il faut enlever.

Commencez par démontez le servomoteur et enlevez avec un cutter ou une pince la butée :
Image IPB

Image IPB

Image IPB
La butée enlevée

  Remplacer le potentiomètre par une résistance variable



Enlevez le circuit électronique et dessoudez le potentiomètre.
Remplacez le par deux résistances montées pont diviseur de tension.

Pour la valeur des résistances, il faudra chercher, cela dépend de votre servomoteur. L'idéal est d'avoir deux résistances de la valeur du potentiomètre quand le servomoteur se trouve à un angle de 0 degrés.

Ceci-dis, si on est pas super précis, cela n'a pas une réelle importance, il faudra juste trouver la valeur du "neutre".

Personellement, j'ai utilisé pour mon servomoteur deux résistances de 2.2 Kohm.

Voici une photo du servomoteur après modification :
Image IPB


Il est également possible pour cette étape de garder le potentiomètre, en coupant son axe qui dépasse et qui modifie sa valeur avec le mécanisme de réduction du moteur, et en le fixant au neutre avec de la pâte à modeler.

C'est la méthode qui est présentée dans cet article.
  A la recherche du neutre


Prenez votre arduino (ou votre microcontrolleur habituel) et réalisez le circuit suivant :
Image IPB

On alimentera la carte par l'USB.

On va écrire une programme qui fait tourner le servomoteur entre un angle de 0 à 180 degrés, et on va regarder à quelle impulsion le moteur s'arrête : il s'agira du neutre.

Voici le programme :
Code : C
#include

Servo servo;

void setup()
{
servo.attach(10); // On attache le servomoteur à la patte 10 de l'arduino
Serial.begin(9600); // On va envoyer des informations à l'ordinateur grâce à ce port
}

void loop()
{
int i = 0;
while(i <= 180)
{
servo.write(i); //On fait avancer le servomoteur de 5 en 5, de 0 jusqu'à 180
Serial.println(i); //On affiche la valeur en cours de l'angle
delay(1000); // On attend une seconde pour avoir le temps de lire la valeur qui nous interesse

i = i+5;
}
while(i >= 180)
{
servo.write(i); //on fait reculer ensuite le servomoteur
Serial.println(i);
delay(1000);
i = i-5;
}

}


On fait simplement varier l'angle, et à chaque fois on affiche la valeur de cet angle.
Je trouve personnellement que mon moteur s'arrête, puis change de sens à 85°.
Il est ensuite possible d'être plus précis en allant de 1 en 1. Je trouve alors un angle de 84°.

Commande du moteur


Et voilà, le modification du moteur est maintenant terminée.
Si vous envoyez un angle plus grand que le neutre votre moteur ira dans un sens, et si vous envoyez un angle plus petit, il ira dans l'autre sens.
Il est même possible d'avoir des vitesses : on peut faire ralentir le moteur en envoyant une valeur proche du neutre.

Voici une fonction que j'ai écris pour controler facilement mon moteur, il suffit de lui donner une vitesse comprise entre -5 et 5, et il avancera ou reculera suivant cette vitesse :
Code : C
#define SERVO 0

int getNeutral = 84; // La valeur du neutre de mon servomoteur
void handleS(int s, int speed)
{
//Vitesse :
// 0 -> 0; 1 -> 1; 2 -> 3; 3 -> 8; 4 -> 10; v => 5 -> 30
int tab[6] = {0,1,3,8,10,30};
int pos = getNeutral;

int acc;
if (speed < 0)
acc = - tab[abs(speed)];
else
acc = tab[speed];

servog.write(pos += acc);
}
Et voilà, vous savez maintenant comment modifier vos servomoteurs en moteur à courant continu Image IPB.
Bon bricolage.