Commande des moteurs
Posted in I2C, PIC, electronique, informatique on mai 27th, 2009 by CyrilHello !
Cela fait maintenant quelques semaines que j’ai repris la fabrication du robot, et après une grosse partie de mécanique enfin achevée, l’électronique avait besoin de progresser pour pouvoir faire rouler le robot et poursuivre son développement.
Bon, la commande de la vitesse et du sens de rotation des moteurs du robot est plus complexe qu’elle peut y paraitre au premier abord et il ne s’agit pas seulement de brancher les moteurs sur un gros potentiomètre avec un joli système d’inversion de polarité pour changer la direction!
Imaginé et conçu en détail depuis belle lurette,il ne manquait plus que la phase de réalisation et d’assemblage pour chacun des éléments suivants (du moteur vers la commande):
1 – Carte de puissance (Pont en H – L298)
2 – Carte de contrôle (Microcontroleur – PIC 18F2431)
3 – Contrôle informatique de la carte de contrôle (haha …)
1 – Carte de puissance
Le courant de puissance des moteurs passe par un pont en H, circuit classique pour commander de manière simple et efficace un moteur à courant continu. Cette carte reçoit en entrée les signaux logiques (5V) de gestion du sens de rotation, et le signal PWM pour varier la puissance.

Carte de puissance en cours de test, connectée à la carte de contrôle des moteurs (en haut, fils blancs et jaunes) et à la partie puissance (vers le bas, alimentation a droite, moteur de test à gauche).
2 – Carte de contrôle
J’avais déjà pas mal travaillé sur la carte de contrôle moteur, celle ci ayant même eu le privilège d’être assemblée sur une plaque de pvc avec le programmateur de PIC, la carte d’interface USB/I²C Diolan, et un petit régulateur 5 volts. Cette implantation étant très pratique pour travailler et tester le code envoyé au PIC, tout est resté comme ça pour les phases de test.
La carte dans sa version actuelle sert simplement de « passerelle » pour les ordres venant du PC en direction de la carte de puissance, et ceux qui pensaient y trouver un contrôleur PID seront – pour l’instant – déçus. Le PIC est programmé en C (MCC18) dans l’IDE MaLab de Microchip.
Pour la partie du code qui s’occupe de la gestion des moteurs, la carte réagis à 6 commandes en provenance du bus I2C. Ces identifiants de commandes sont déclarés dans un ficher d’entête sous forme de constantes, communes au projet MCC18 pour le PIC et à l’interface développée en C++ côté informatique.
Voici les déclarations de commandes avec le code en hexadécimal qui leur est attribué:
#define I2C_SET_PWM1 0x10 //Valeur de la sortie PWM pour le moteur 1 (0-1023)
#define I2C_SET_SENS1 0x11 //Direction de rotation pour le moteur 1 (0-1)
#define I2C_SET_PWM2 0x18 //Valeur de la sortie PWM pour le moteur 2 (0-1023)
#define I2C_SET_SENS2 0x12 //Direction de rotation pour le moteur 2 (0-1)
#define I2C_SET_PWMS 0x20 //Valeur de la sortie PWM pour les deux moteurs (0-1023 / 0-1023)
#define I2C_SET_SENSS 0x21 //Direction de rotation pour pour les deux moteurs (0-1 / 0-1)
3 – Contrôle informatique
Le programme qui commande la carte moteur est développée en C++ sous CodeBlocks à l’aide des librairies graphiques wxWidget, associés au driver de la carte U2C de Diolan compilé sous forme de librairie partagée. Cette interface permet de communiquer avec les différentes cartes à base de PIC via le bus I²C (contrôle moteur, alimentation principale et carte d’interface générale), d’y envoyer des commandes et de lire des valeurs. Les fonctions développées dans cette interface seront par la suite regroupées au sein du driver Player (cf ce post décrivant le système : Contrôle informatique : Player, Stage et compagnie)

Interface de contrôle sous Linux
Une vidéo est en cours de préparation ou je présenterais une démo d’un moteur, piloté grâce à toutes cette chaine de commande.
A très bientôt pour la suite !










