Servo-mécanismes

(menu général)

Les ordinateurs sont très pratiques pour réaliser à notre place les tâches fastidieuses. En général on les emploie uniquement pour des tâches intellectuelles, de type calcul numérique, mais on peut aussi les utiliser pour des tâches physiques, à condition de leur donner le squelette et les muscles adéquats.

 Les servo-mécanismes ("servos") employés en modélisme conviennent très bien pour ceci, et peuvent être commandés facilement par les interfaces habituelles (ou même inhabituelles...) employées en EXAO. On peut les acheter pour une vingtaine d'euros dans les boutiques de modélisme.

Ce que sont les servos

Etymologiquement, ce mot signifie "esclave" : un servo est un dispositif qui doit obéir aveuglément aux ordres qui lui sont donnés par la télécommande ; ce n'est donc pas du tout un "cerveau".

 En modélisme, un servo est un petit boitier portant un disque mobile (ou une forme différente), pouvant tourner sur environ un demi tour. Ce disque est mis en mouvement par un moteur situé à l'intérieur du boitier, et, en étant relié par le constructeur du modèle réduit, il peut actionner les organes de la maquette (entrer ou sortir le train d'atterrissage, faire pivoter le gouvernail, faire accélérer ou ralentir le moteur...).


Du boitier partent 3 fils :

 - un fil de masse électrique (souvent noir)

 - un fil d'alimentation électrique, normalement en 5 ou 6 volts (souvent rouge)

 - un fil de commande (souvent jaune ou blanc).
 
 

A l'intérieur du boitier est située toute l'électronique de commande, le moteur électrique lui-même et les mécanismes de démultiplication éventuels.

Leur intérêt essentiel par rapport aux moteurs simples est que par l'envoi des bons signaux sur le fil de commande, on peut fixer directement la position choisie, sans avoir à faire une construction électronique complexe. Leur inconvénient mineur est que leur course est limitée à environ 180°.

Les mystères de la commande des servos

Il est difficile d'avoir de la documentation précise sur la commande des servos : il n'y a aucune indication dans les notices vendus avec les appareils. C'est normal dans leur emploi habituel : le maquettiste relie toujours ses servos à un boitier de commande radiocommandé, et n'intervient que pour la construction mécanique de la maquette.

 Par contre, pour relier un servo à un ordinateur, il nous faut deviner comment donner l'ordre de mettre le disque à tel angle... Faute de documentation précise, j'ai procédé par tâtonnements, en envoyant des impulsions sur le fil de commande et en regardant le résultat sur la position du disque. Que ceux qui ne trouvent pas ceci suffisamment scientifique se souviennent que Claude Bernard, en son temps, procédait de la même façon pour deviner le fonctionnement du foie.

 Bref, apparemment, il semble que la commande du servo puisse être faite par modulation de fréquence des impulsions (alternance de tension positive et de tension nulle). L'intervalle entre les phases de tension positive et de tension nulle doit être de l'ordre de la milliseconde.

 Finalement, j'ai réussi à trouver de la documentation dans l'ouvrage suivant :
Burkhard KAINKA, "J'exploite les interfaces de mon PC", édition Publitronic 1995 
Une version plus récente en est : B. Kainka / H.-J. Berndt "Je programme les interfaces de mon PC sous Windows", Publitronic/Elektor 1999.

Comment envoyer ces impulsions à partir du PC ?

Je me suis limité aux interfaces disponibles chez moi : PMB (à brancher dans un connecteur ISA), Orphy GTS, Arduino et Velleman K8055.

Pour PMB

C'est le plus simple ! Il n'y a pas besoin d'alimentation extérieure, puisque l'alimentation en +5V peut être fournie directement par le boitier PMB, à partir de l'alimentation électrique de l'ordinateur ; néammoins il peut être plus prudent de prévoir une alimentation extérieure, pour ne pas surcharger celle de l'ordinateur.

commande d'un servo par la sortie analogique

La procédure ci-dessous permet de couvrir la totalité du déplacement du servo en fixant les paramètres entre 0 et 200 (l'instruction "microdelay" correspond à un délai en microseconde ; si vous n'avez pas de telle instruction possible, faites une boucle d'attente d'une autre manière)

 procedure position(tension:word;n:integer);
var compteur:word;
begin
for compteur:=1 to 1000 do
begin
port[$302]:=tension; microdelay(350+10*n);
port[$302]:=0; microdelay(2350-10*n);
end;
end;

commande d'un servo par une sortie logique

Les sortie logiques de PMB correspondent au passage de l'état 0 V à l'état 3 V. On peut donc se servir du même algorithme pour commander un servo, ce qui laisse disponible la sortie analogique normale pour un autre usage :
procedure forcebit(var nombre:word;numero:byte;etat:boolean);
begin
if etat
then nombre:=nombre or(1 shl numero)
else nombre:=nombre and hi($FEFF shl numero);
end;
const memosl:word=0;
procedure poslog(voie:word;n:integer);
var tempsloc:real; varloc:word;
begin
varloc:=memosl;
tempsloc:=tempst;
repeat
forcebit(varloc,voie,true);
port[$303]:=varloc; delay(n);
forcebit(varloc,voie,false);
port[$303]:=varloc; delay(10-n);
until tempst>tempsloc+1;
end;

Commande de plusieurs servos

C'est plus complexe. Si on essaie d'utiliser plusieurs sorties logiques, la commande de l'une interfère sur la commande de l'autre, et le résultat est mauvais. Le plus simple est d'utiliser les sorties logique pour commander des relais qui donnent l'alimentation électrique à l'un ou à l'autre des servos, et d'envoyer les signaux de commande à tous les servos simultanément : seul répondra celui qui est alimenté.

Pour Orphy GTS:

Le principe est le même avec le problème de la commande de la sortie analogique par l'interface RS232 : à la vitesse normale de 9600 bauds, il n'est pas possible que l'intervalle entre deux changements de tension soit inférieur à une milliseconde, ce qui limite un peu l'amplitude de l'angle de rotation du servo (il manque une trentaine de degrés). Il est probable qu'à la vitesse de 115000 bauds, possible sur un grand nombre de PC, ce problème serait résolu.

Un autre petit problème est que la prise "5V" n'est pas capable de débiter assez de courant (100 à 200 mA) pour alimenter le servo ; il faut donc prévoir une alimentation extérieure (ce qui est toujours plus prudent : à force de tirer sur l'alimentation du PC, on risque de dépasser ses capacités).

for i:=1 to 200 do
     begin
     ecris_rs(chr(123));
     microdelay(1500+10*valeur);
     ecris_rs(chr(112));
     microdelay(3350-10*valeur);
     ecris_rs(chr(112));
     end;

Pour Arduino :

Arduino a des commandes PWM, et il existe une bibliothèque PWM qui permet de commander les servos de façon très pratique.

Idées pour d'autres interfaces :

En fait, toutes les interfaces où il est possible de commander un changement de tension doivent convenir : Candibus, Jeulin, et toutes les autres. Il est probable qu'on peut même se passer complètement d'interface "normale", et utiliser simplement une prise d'imprimante parallèle : comme il est possible de commander par voie logicielle l'état électrique de différentes broches de cette prise (voir article "Cappar") on peut s'en servir pour commander des servos.
Certaines interfaces ont des sorties PWM, directement utilisables pour commander les servo-moteurs : c'est le cas d'Arduino, du kit Velleman K8055, et en principe des Orphy GTS2 et GTI2.

Logiciels permettant de commander ces servos :

Avec les vieux Mesugraf pour DOS :

J'ai réalisé quelques pilotes d'interfaces où la sortie analogique contrôle en fait les impulsions de commande de servos :
- ServoPMB.EXE, pour la carte PMB
- Servor1.EXE et Servor2.exe pour Orphy-GTS en Com1: ou Com2:

Ceci permet de les utiliser avec Mesugraf. L'option "Sortie analogique fixe" permet de fixer l'angle, et l'option "Sortie progressive" permet de faire varier l'angle pendant la durée de la série de mesure, ce qui permet un balayage régulier.

Avec les nouveaux Mesugraf pour Windows :

Mesurwin est un logiciel initialement conçu pour Windows 16 bits (Windows 3.1)
MGW32 et Visu32 sont des logiciels conçus pour Windows 32 bits (Windows 95, 98, Windows XP et suivants, en principe)

Les pilotes pour Arduino ont leurs sorties analogiques qui sont des commandes PWM, donc directement connectables à un servo-moteur.

Contact :
Pierre DIEUMEGARD
professeur de biologie-géologie
Lycée Pothier
45000 ORLEANS

courriel : pierre.dieumegard@free.fr