Electronica

http://cgrosse1.free.fr/guppy/

Module I2C : Commande de 4 servomoteurs (Bus I2C)


pservo.gif
Photo du module I2C à base de PIC16C84

Le principe de fonctionnement

Ce module se connecte sur l'interface i2c universelle pour PC décrite sur ce site grace a un cable muni de connecteurs 6P/4C.La base du montage est le module "interface I2C pour PIC16C84" décrit sur ce site auquel a été ajouté quelques composants pour la commande des servos. Une fois connecté sur le bus et alimenté via celui-ci ( aucune alimentation externe n'est requise si vous ne commandez que 1 ou 2 servos ! ),le PIC16C84 se comporte comme un composant I2C possédant 8 registres internes 8 bits accessible individuellement en lecture et en écriture.Le contenu de ces registres permettra de commander la position exacte des servos ( voir le tableau ci-dessous ).D'autre part , il est possible de stocker ces registres dans l'EEPROM du PIC qui assure la rétention des données même en cas de coupure de l'alimentation. Les données stockés dans l'EEPROM peuvent être rechargés dans les registres de manière automatique lors des prochaines mises sous tension ! Ainsi , il est possible de définir une position par défaut pour les 4 servos lors de la mise sous tension du montage. Pour chaque servo-moteur , on peut controler un Offset ( qui sert de valeur de réglage de la butée gauche ) et la position du servo. Le controle d'un moteur nécessite donc l'utilisation de deux registres du PIC.

RegistreFonction du registre
reg0Offset du servo N°1
reg1Position du servo N°1
reg2Offset du servo N°2
reg3Position du servo N°2
reg4Offset du servo N°3
reg5Position du servo N°3
reg6Offset du servo N°4
reg7Position du servo N°4
Les registres du PIC

Ce module pourra être détecté automatiquement grace à sa chaine d'identification ( voir interface I2C pour PIC16C84 pour plus de précisions ) qui vaut :

Chaine d'identification = Servo
Numéro de version = 1.0

Schéma

servo.gif
Schéma du module I2C à base de PIC16C84

Les lignes SDA et SCL sont directement reliées aux broches bidirectionnels RB0/RB1. L'utilisation de RB0/INT permet de déclencher une interruption logicielle du PIC16C84 lors de l'arrivé d'une trame I2C.Les broches RB4,RB5 et RB6 sont des entrées qui possède des résistances de pull-up vers le +5V. Un dip-switch à 3 interrupteur permet de forcer celles-ci à l'état bas.Il est ainsi possible de personaliser l'adresse I2C de la platine ( même lorque le montage est alimenté ! ).L'adresse de base étant 24. Un oscillateur à quartz cadencé à 2Mhz est connecté sur les entrés OSC1 et OSC2.L'alimentation du montage se fait directement à partir du bus I2C.Une interruption logicielle se produit toutes les 5ms pour produire séquentiellement les impulsions de commande des quatre servos. Chaque servo reçoit donc une impulsion de commande toute les 20ms.Les longueurs des impulsions sont proportionelles aux valeurs des registres et définissent très précisément la position des servos. Les impulsions de commande des servos sont disponibles sur les sortie RB3,RB2,RB7,RA2. Sur le schémas seul deux servos sont connectés ( limite du logiciel de dessin ! ). Le signal de commande d'un servo attaque la base d'un transistor 2N2222 via une résistance de limitation de courant de 4,7K. Un signal inversé se trouve appliqué sur l'entrée signal du servo. Deux servos peuvent être alimentés directement par le bus I2C mais pour plus de sécurité , une alimentation 5V continue séparée est conseillée ( on voit les deux plots à droite sur la photo du haut ).

 conec1.gif
Connection d'un servo S21 ( connecteur CONRAD )

Les servo-moteurs utilisés sont des S21 de chez CONRAD , mais le montage devrait fonctionner correctement avec tout autre marque de servo. Des condensateurs de découplage peuvent être ajouté entre les broches d'alimentation des servos pour éviter les parasites. Les connecteurs CONRAD permettent une connection directe sur des barettes sécables simple rangée.

 conecb.gif
Brochage du module vu de dessus


Les deux modular jack ont un brochage différent repéré par les symboles comme sur la photo ci-dessus. Pour avoir plus de précision sur la connection de ce module à l'interface allez voir sur la page de cette dernière.

Nomenclature

Résistances

R1,R2,R5,R6 : 1.5K
R3,R4,R7,R8 : 4.7K

Condensateurs

C1,C2 : 20pF
C3 : 100nF

Transistors

T1,T2,T3,T4 : 2N2222A

Circuits Intégrés

IC1 : PIC16C84

Divers :

Un quartz 2Mhz
Un porte circuit 6 broches
Un porte circuit 18 broches
Deux connecteur modular jack 6P/4C à souder sur CI.
Le cordon de laison 6P/4C.
Un dip-switch à 3 interrupteurs
Une barrette sécable de 36pts simple rangée droite
Quatre Servo-moteurs S21 CONRAD
Eventuellement deux plots ou un connecteur pour l'alimentation des servos

Logiciels

Le source SERVO.ASM devra être compilé par l'assembleur MPASM de MICROCHIP.Le résultat obtenu est le fichier SERVO.HEX qui servira a programmer le PIC16C84.
Une unité écrite en Turbo Pascal permet de gérer ce module.Vous pouvez librement télécharger le source ( SERVO.PAS ) de cette unité , ou directement l'unité compilée ( SERVO.TPU ) a intégrer dans vos projets futurs. Le listing étant documenté , je ne m'attarderais pas sur le fonctionnement de cette unité.

Une DLL ( 16 bits ) sera bientot disponible pour ceux qui désirerait programmer sous windows.

A titre d'exemple, le programme TSERVO.EXE permet de tester ce module. Vous pouvez également télécharger le source TSERVO.PAS ( nécessite les fichiers BUSI2C.TPU , PIC.TPU et SERVO.PAS )

 tservo.gif
Illustration du programme de test