Fonctionnement d’un servo-moteur

 

1-      Généralités

 

Un servo-moteur est un moteur à courant continu couplé à un circuit électronique, cependant il n’agit pas comme un simple moteur car ce circuit agit de telle sorte que le servo ne se mette pas rotation continuelle du moment qu’on lui applique une tension à ses bornes. En effet un servo-moteur ne tient compte que de la longueur d’impulsion c’est à dire la période du signal. Il est programmé de telle manière que son angle de rotation soit directement proportionnel à la période (un signal de période égale à 1ms lui fait revenir en position initiale, un signal de 1.5ms le force à atteindre la position 90°…).

 

Le câblage du servo s’effectue grâce à trois fils, 2 fils reliés au générateur pour l’alimentation du circuit et du moteur et 1 fil appelé « signal de commande » qui justement va être le signal dont la période va être celle interprétée par le circuit pour mettre le moteur en rotation ou non. C’est ce fil qui sera relié à notre port parallèle afin de recevoir le signal qu’on aura auparavant modulé selon nos besoins.

 

       2-La programmation (carnet de bord)

 

            (voir code source commenté)

Dans un premier temps nous avions réalisé la partie programmation sous Microsoft Windows en langage Pascal. Au début pour les tests on se contentait de signaux modulés (signaux dont la période est fixée) à 0.5ms près (de 90° en 90°) et les résultats furent suffisamment concluants.

 

Cependant étant donné la fonction qu’on lui avait inculquée (réglage du volume mais aussi et surtout réglage des différents filtres) une précision de 90° n’était pas suffisante car ainsi le réglage du volume et de la valeur de la bobine du filtre se ferait en 4 positions 0°, 90°, 270° et 360° ce qui rendrait impossible d’atteindre exactement le volume voulu et un filtre inutile car totalement imprécis.

 

De là, nous fûmes obligés d’augmenter la précision de la modulation du signal pour essayer d’atteindre un pas de 3.6° ce qui correspondrait à cent points de réglages ce qui conviendrait à quiconque.

 

C’est à ce moment précis que tout alla de mal en pis, le moteur ne faisait pas du tout ce qu’on le voulait jusqu’à même effectuer des mouvements inverses. Cela venait des interférences avec le système d’exploitation, qui nous empêchait une telle précision (un pas de 20 microsecondes). Une solution  consistait à passer sous le système d’exploitation D-O-S. Bien qu’offrant une interface graphique archaïque, ce dernier offre une précision incomparable.

 

On réussit enfin à atteindre la précision souhaité et les tests nous ont convaincus.

 

 

CODE SOURCE COMMENTE DE LA PROGRAMMATION DU SERVO MOTEUR.

 

CLS                                               ‘INITIALISATION DE L’ECRAN

pourcent = 100                              ‘ET DES VARIABLES UTILISEES

tempo = .01

 

PRINT "APPUI SUR +: INCREMENTE DE 2.4 Degrés"

PRINT "APPUI SUR -: DECREMENTE DE 2.4 Degrés"

 

DO

 

  OUT &H378, 1                             ‘ROUTINE ALTERNANT ORDRE DE MISE A 1

  GOSUB T2                                   ‘ET A 0 DE LA SORTIE D0 DU PORT PARALELLE

  OUT &H378, 0                             ‘POUR CREER UN UN COURANT CYCLIQUE

 

a$ = INKEY$

 

IF a$ = "+" THEN                           ' ATTENTE D’APPUI DE LA TOUCHE -        

   IF tempo > .01 THEN                  ' VERIFIE QUE LE SERVO N’EST PAS EN POSITION

                                                         ‘MINIMALE

      tempo = tempo - .0002              ' DECREMENTE LE SERVO MOTEUR D’UN ANGLE    

                                                         ‘DE 45°

      pourcent = pourcent + 1.33        ' AFFICHE LE VOLUME COURANT EN POURCENT

      PRINT "POURCENT:", pourcent

      END IF

END IF

 

IF a$ = "-" THEN                              ' ATTENTE D’APPUI DE LA TOUCHE +        

  IF tempo < .025 THEN                    ' VERIFIE QUE LE SERVO N’EST PAS EN  

                                                           ‘POSITION MAX

     tempo = tempo + .0002                 ' INCREMENTE LE SERVO MOTEUR D’UN ANGLE

                                                            ‘DE 45°

     pourcent = pourcent - 1.33            ' AFFICHE LE VOLUME COURANT EN POURCENT

     PRINT "POURCENT:", pourcent

  END IF

END IF

GOSUB temps

 

LOOP

 

temps:

FOR i = 0 TO 50000

NEXT i

RETURN

 

T2:

FOR j = 0 TO tempo * 250000

NEXT j

RETURN