Gestion de 8 servos en parallèle

 

         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.

 

retour