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 :
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