Le programme décrit sur cette page permet de contrôler 8
servos de modélisme grâce à la réception d’ordres d’un maître (autre PIC, PC,
etc…) sur une liaison série à 19200 bauds.
J’ai tout d’abord cherché sur le net si je ne trouvais pas
mon bonheur mais ce ne fut pas le cas, où alors c’était des solutions soit trop
coûteuses, soit disproportionnées (prendre un char d’assaut pour tuer une
mouche).
Je me suis donc attelé à la tâche avec dans l’idée de
prendre un PIC 16F628, qui fait référence aujourd’hui car il est relativement
polyvalent. Il est très proche du mythique 16F84 mais possède quelques
fonctionnalités qui sont fort utiles en robotique, notamment un USART et un
TIMER 16 bit.
Pour plus de détails sur le signal dont a besoin un servo
pour fonctionner, je vous renvoie une fois de plus sur le site des Fribottes où vous trouverez tout le
nécessaire pour comprendre un tas de choses (pas que sur les servos).
Pour ceux qui connaissent l’interface proposée par les
Fribottes, ils verront sans difficulté que je m’en suis fortement inspiré du
point de vue ergonomie. Bien que n’ayant jamais été en contact avec eux, je les
remercie tout de même pour cette inspiration.
Fonctionnalités du programme :
-
Réception
des ordres par liaison série classique à 19200 bauds, 8 bit de donnée, 1 bit de
stop, pas de parité
-
Commande
de 8 servos avec impulsions en parallèle.
-
Possibilité
d’envoyer le même ordre à tous les servos en même temps (utile pour tous les
couper)
-
Réglage
de l’offset général (tous les servos en même temps)
-
4
adresses possibles permettant de gérer 32 servos (avec 4 PICs bien sûr)
Télécharger de fichier Hex ici
.(faire clic-droit puis enregistrer la cible)
Le fichier source est ici .
Le programme est prévu pour
fonctionner avec un PIC16F628 à 20Mhz
Je pars du principe que vous
savez câbler un PIC avec son oscillateur et que vous connaissez le brochage des
servos que vous utiliserez. Vous trouverez quand même ici
le fichier du typon, réalisé avec le logiciel TCI, dont le lien se situe sur ma page d’accueil.
Le brochage est le suivant.
1 : sortie vers servo
n°7
2 : sortie vers servo
n°6
3 : NC
4 : GND (0V)
5 : NC
6 : NC
7 : RX (réception des
ordres en provenance du maître)
8 : TX. Inutilisé pour
l’instant. Laisser en l’air
9 : Autorisation
réception. Cette sortie s’active pour autoriser le maître à envoyer des ordres.
10 : sortie vers servo
n°0
11 : sortie vers servo
n°1
12 : sortie vers servo
n°2
13 : sortie vers servo
n°3
14 : VDD (typiquement
+5V)
15 et 16 : quartz
à 20Mhz avec condensateur 27pF
17 : sortie vers servo
n°4
18 : sortie vers servo
n°5
Les ordres à
envoyer :
Un ordre est constitué de 2
octets (c’est bien assez et pratique du point de vue programmation).
Le premier octet contient les informations
suivantes :
Bit7 : adresse (poids
fort)
Bit6 : adresse (poids
faible)
Bit4 à Bit6 : inutilisé
pour l’instant (mais ça va venir…)
Bit0 à Bit3 : servo à
adresser ou commande .
Bit3 Bit2 Bit1 Bit0 Résultat
0 0 0 0 adresser
le servo n°0
0 0 0 1 adresser
le servo n°1
0 0 1 0 adresser
le servo n°2
0 0 1 1 adresser
le servo n°3
0 1 0 0 adresser
le servo n°4
0 1 0 1 adresser
le servo n°5
0 1 1 0 adresser
le servo n°6
0 1 1 1 adresser
le servo n°7
1 0 0 0 adresser
tous les servos en même temps
1 0 0 1 adresser
l’offset général
Le deuxième octet contient la consigne à
envoyer.
La valeur 0 (0000 0000 en
binaire) mettra le servo adressé hors couple.
Les valeurs comprises entre
1 et 255 correspondent aux positions de –90° à +90°
Exemple : pour mettre tous les servos
du PIC possédant l’adresse 0 en position milieu, il faut envoyer
Octet1 = ’0000 01000’ et
octet 2 = ‘1000 0000’
Pour ceux qui ont
VisualBasic, voici un petit programme qui permet
de relier le port COM1 du PC pour commander le PIC.
ATTENTION :
1)
Lorsque
l’on adresse l’offset général, tous les offsets de tous les servos bougent en
même temps. Donc si un des servos est à –90° et que l’on baisse l’offset, il risque
d’aller en butée et d’endommager son pignon. La valeur normale pour l’offset
est 73 (en décimal)
2)
La
plage réelle de consigne n’est pas de 1 à 255 pour tous les servos. Dans mon
cas par exemple, sur les servos HS-311 de chez HITEC, je ne peux ni descendre
en dessous de 4 ni monter au dessus de 245. Cela est dû à la vitesse de
traitement du µC qui, bien que cadencé à 20Mhz, est un peu juste pour rester
dans les temps voulus. Il y a également la tolérance entre les circuits
internes des servos qui joue à la fois sur leur débattement et sur leur offset.
J’ai fait quelques tests et résolu le problème en overclockant le PIC à
24.576Mhz (quartz récupéré sur une vielle carte son). Mais je ne vous conseille
pas de le faire. En effet, je grille mes PICs si j’ai envie mais je ne veux pas
être tenu pour responsable si vous grillez les vôtres.
Bon ! allez, le programme en 24.576Mhz est là ! cette version fonctionne bien chez moi
mais peut ne pas fonctionner chez vous. Pour cette vitesse, la valeur de
l’offset est de 102 (en décimal).
Pour ceux que cela
intéresse, je peux donner des explications sur le programme. Il suffit de
demander gentiment. Je fréquente souvent le forum robotique de Planète Sciences
(voir ma page d’accueil).
Il est strictement
interdit de copier ce montage dans un but lucratif.