Servo-moteur : Transformer une position en un déplacement

Rappel - Branchement du servo moteur au microcontroleur

Il est important de bien branché le servo-moteur car par exemple, 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 3

Nous allons maintenant programmer le microcontrolleur afin de modifier sa position à différentes vitesse. Considérons le code suivant :

code

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

counter VAR Word

FOR counter = 500 TO 1000
ESPACEPULSOUT 14, counter
ESPACEPAUSE 20
NEXT
END

code

La première fois que la boucle s'exécute, compteur=500, donc la position du servo-moteur est à 2 heures. Au fur et à mesure que la boucle FOR s'exécute la valeur envoyé par la commande PULSOUT augmente jusqu'à 1000 de sorte que la position du servo-moteur se déplacera dans le sens anti-horaire pour terminer à 10 heures.

Considéron maintenant l'ajout de la commande STEP à notre boucle FOR.

code

...
FOR
counter = 500 TO 1000 STEP 8
...

code

Quelle impact la commande STEP 8 a sur le servo-moteur?

Ensuite modifiez la boucle FOR pour le code ci-dessous.

code

...
FOR
counter = 1000 TO 500 STEP 20
...

code

Expliquez comment on peut modifier la boucle FOR pour modifier la position du servo-moteur.

code

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

compteur VAR Word

DEBUG "Rotation anti-horaire (impulsion augmentant de 8)", CR
FOR compteur = 500 TO 1000 STEP 8
ESPACEPULSOUT 14, counter
ESPACEPAUSE 7
ESPACEDEBUG DEC5 counter, CR, CRSRUP
NEXT
PAUSE 2000
DEBUG CR, "Rotation horaire (impulsion diminuant de 20)", CR
FOR compteur = 1000 TO 500 STEP 20
ESPACEPULSOUT 14, counter
ESPACEPAUSE 7
ESPACEDEBUG DEC5 counter, CR, CRSRUP
NEXT

END

code

 

Remarquez le code à l'intérieur des boucles FOR :

ESPACEPULSOUT 14, counter
ESPACEPAUSE 7
ESPACEDEBUG DEC5 counter, CR, CRSRUP

Pourquoi on a PAUSE 7 au lieu de PAUSE 20 comme dans les exemples précédents? Il faut comprendre que dans cet exemple, la commande DEBUG prend 13 millisecondes pour s'exécuter, ce qui donne un total de 20 millisecondes.

Exercice

  1. Modifiez le programme précédent avec différentes valeurs pour STEP
  2. Expérimentez différentes valeurs pour PAUSE entre 3 et 12 pour trouver le nombre qui permet une rotation la plus fluide.

Exemple 4 : Modifier la direction du mouvement avec de bouton poussoir

Dans cet exemple, nous allons utiliser 2 boutons poussoir pour changer la direction de rotation du servo-moteur.

Lorsqu'on utilise une boucle FOR, il faut connaître la valeur de départ et de fin du compteurde la boucle ce qui n'est pas le cas ici. La direction n'est pas pré-déterminée mais plutôt contrôlée par l'utilisateur. Nous allons donc utiliser une structure de sélection (IF) combinée à une boucle DO...LOOP.

Push button circuit

servo-moteur

 

code

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

impulsion VAR Word

impulsion = 750

DO
ESPACEIF
IN3 = 1 THEN
ESPACEIF
impulsion> 500 THEN
ESPACEimpulsion = impulsion - 25
ESPACEENDIF
ESPACEENDIF
ESPACEIF
IN4 = 1 THEN
ESPACEIF
impulsion< 1000 THEN
ESPACEimpulsion = impulsion + 25
ESPACEENDIF
ESPACEENDIF
ESPACEPULSOUT
14, impulsion
ESPACEPAUSE 10
ESPACEDEBUG HOME, DEC4 impulsion, " = impulsion"
LOOP

code

 

Exercice

  1. Ajuster le programme pour imposer sur le servo-moteur un déplacement de 650 à 850 au lieu de 500 à 1000
  2. Ajuster le code pour que la vitesse de rotation soit réduire de moitié.