Servo-moteur

Description d'un servo-moteur

Un servo-moteur est un moteur combiné avec un capteur qui permet de tourner l'axe de rotation à un angle donné. Certain servo-moteur dont l'axe de rotation est continu permet de tourner à des vitesses variables. Ce type de moteur est souvant utilisé en robotique ou dans les véhicules télécommandés (avion, hélicoptère, auto, ...)

Parties externe du servo-moteur

  1. prise
  2. câble
  3. module de rotation (horn)
  4. boîtier
servo-moteur

Dans le cadre du cours nous utiliserons les servo-moteurs standart de Parallax et le GWS03N STD.

Lors de l'utilisation des connection des servo-moteurs, il faut positionner le commutateur à la position 2.

servoMoteurservo-moteur branchement

servomoteur

servomoteur

Branchement du servo moteur au microcontroleur

Il est important de bien branché le servo-moteur car, si on inverse les fils blanc et noir du câble d'alimentation, on peut endommager les circuits du servo-moteur.

servoMoteur

servoMoteur branchement

Exemple 1

Dans cet exemple, nous allons modifier la position de l'axe du moteur. Dans un premier temps, la position du servo-moteur se dirigera rapidement vers 10h00, ensuite vers 2h00 pour terminer à midi.

servoMoteur angle

code

' {$STAMP BS2}
' {$PBASIC 2.5}

compteur VAR Word
DEBUG "Position du servo-moteur à 10 heure", CR
FOR compteur = 1 TO 150
ESPACEPULSOUT 14, 1000
ESPACEPAUSE 20
NEXT

DEBUG "Position du servo-moteur à 2 heure", CR
FOR compteur = 1 TO 150
ESPACEPULSOUT 14, 500
ESPACEPAUSE 20
NEXT

DEBUG "Position du servo-moteur à midi", CR
FOR compteur = 1 TO 150
ESPACEPULSOUT 14, 750
ESPACEPAUSE 20
NEXT
DEBUG "Terminé."
END

code

La commande PULSOUT permet d'envoyer une impulsion électrique de très courte durée. La duré de l'impulsion est lue par le servo-moteur et l'axe de rotation est déplacé en concéquence.

PULSOUT 14,1000 envoi une impulsion sur l'interface 14 d'une durée de 1000 x 2 microsecondes (2000 microsecondes ou 2 millisecondes).

Une impulsion de 2,0 ms à chaque 20ms déplace le servo-moteur à 10 heure. D'où l'importance de la ligne de code PAUSE 20

pulseout

FOR counter = 1 TO 150
ESPACEPULSOUT 14, 1000
ESPACEPAUSE 20
NEXT
La boucle FOR permet de spécifier la durée que le servo-moteur doit conserver cette position. Sans la boucle FOR, le servo-moteur se déplacerait à 10 heure mais ne mentiendrait pas de force pour conserver la position.

PULSOUT 14,500 envoi une impulsion sur l'interface 14 d'une durée de 500 x 2 micro seconde (1000 microseconde ou 1 milliseconde)

Une impulsion de 1.0ms à chaque 20ms déplace le servo-moteur à 2 heure.

pulseout

PULSOUT 14,750 envoi une impulsion sur l'interface 14 d'une durée de 750 x 2 micro seconde (1500 microseconde ou 1,5 milliseconde)

Une impulsion de 1.5 ms à chaque 20ms déplace le servo-moteur à midi.

pulseout

Exemple 2

Nous allons maintenant créer un programme qui permet d'entrer manuellement l'impulsion à envoyer au servo-moteur et le temps que la position doit être maintenu.

code

' {$STAMP BS2}
' {$PBASIC 2.5}

counter VAR Word
impulsion VAR Word
temps VAR Word
DO
ESPACEDEBUG CLS, "Entrez la durée de PULSOUT (500 à 1000): ", CR
ESPACEDEBUGIN DEC impulsion
ESPACEDEBUG "Entrez la temps :", CR
ESPACEDEBUGIN DEC temps
ESPACEDEBUG "Servo en fonction...", CR
ESPACEFOR counter = 1 TO temps
ESPACEPULSOUT 14, impulsion
ESPACEPAUSE 20
ESPACENEXT
ESPACEDEBUG "Terminé"
ESPACEPAUSE 1000
LOOP
END

code

Expérimentez différentes valeurs pour le temps et l'impulsion. L'impulsion doit être un nombre entre 500 et 1000 et le temps un nombre entre 1 et 65534 puisqu'il s'agit d'une variable de type Word.

IMPORTANT : L'implusion doit être entre 500 et 1000 pour les servo-moteur de Parallax. Une valeur inférieur à 500 ou supérieur à 1000 forcerait le moteur à atteindre une position pour laquelle il n'a pas été conçu.

Question :

  1. Quelle doit être la valeur de temps pour maintenir la position du moteur servo pendant 1 seconde?

 

Pour empêcher l'utilisateur d'entrer une valeur incorrect pour la durée de la pulsation, on peut ajouter le code suivant :

code

' {$STAMP BS2}
' {$PBASIC 2.5}

compteur VAR Word
impulsion VAR Word
temps VAR Word
DO
ESPACEDO
ESPACEDEBUG CLS, "Entrez la durée de PULSOUT (500 à 1000): ", CR
ESPACEDEBUGIN DEC impulsion
ESPACEIF impulsion < 500 THEN
ESPACEDEBUG "La durée de PULSOUT doit être supérieure à 499", CR
ESPACEPAUSE 1000
ESPACEENDIF
ESPACEIF
impulsion > 1000 THEN
ESPACEDEBUG "La durée de PULSOUT doit être inférieure 1001", CR
ESPACEPAUSE 1000
ESPACEENDIF
ESPACELOOP UNTIL
impulsion > 499 AND impulsion < 1001

ESPACEDEBUG "Entrez la temps :", CR
ESPACEDEBUGIN DEC temps
ESPACEDEBUG "Servo en fonction...", CR
ESPACEFOR compteur = 1 TO temps
ESPACEPULSOUT 14, impulsion
ESPACEPAUSE 20
ESPACENEXT
ESPACEDEBUG "Terminé"
ESPACEPAUSE 1000
LOOP
END

code