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