Robot Pidzy - Implémentation d'un asservissement PID
Date d'initialisation : Décembre 2006
Etat actuel : Terminé
Sommaire
- Liste des sous-projets
- Description générale
- Photos
- Code source
- Documents PDF
- Divers
- Commentaires des visiteurs
![]()
Sous-projets
| Titre | Date | Etat |
| Carte de contrôle du robot Pidzy | Décembre 2006 | Terminé |
| Carte d'asservissement du robot Pidzy | Décembre 2006 | Terminé |
| Carte moteurs à L298 du robot Pidzy | Décembre 2006 | Terminé |
| Décodeur et diviseur de signaux en quadrature | Décembre 2006 | Terminé |
| Convertisseur Fréquence => Tension | Janvier 2007 | Terminé |
Description générale
Le but de ce robot est uniquement d'apprendre à mettre en place un asservissement de position et/ou de vitesse logiciellement (sans utiliser de HCTL ni de LM629...) pour un projet d'étude. Il n'y a donc aucun autre capteur que deux encodeurs optiques placés sur les moteurs (deux HEDS 512pt/tour en quadrature).
Aspect mécanique
La mécanique est réalisée en étages à partir de plaques de plastique de 3mm disponibles chez GoTronic. Elles ont l'avantage de se découper très facilement et très rapidement au cutter : on fait une entaille en quelques passages de cutter, puis on plie le plastique qui se casse de lui-même en suivant la fente dessinée par le cutter.
Les moteurs sont achetés chez Robot-Italy : ce sont de bons compromis puisque pour un coût réduit on dispose de moteurs correctement réductés (réduction 1/30, 200rpm) livrés avec roues, moyeux et supports, et qui ne consomment que quelques centaines de milliampères sous 12V, donc facilement pilotables avec un L298, voire même un L293D.
Aspect électronique
Du côté de l'électronique, j'ai préféré concevoir plusieurs cartes réparties sur différents étages du robot :
- Au troisième étage se trouve une carte de contrôle, facultative, basée sur un AVR AtMega32 cadencé à 16MHz. Cette carte pilote la carte d'asservissement par I2C, et dispose en plus d'une EEPROM I2C, d'une liaison série sans fil utilisant un XBee et d'un écran LCD alphanumérique 2x16 caractères. Elle dispose aussi de connecteurs pouvant recevoir des télémètres analogiques Sharp GP2D120.
- Au second étage se trouve la carte d'asservissement, utilisant un AVR AtMega32 cadencé à 16MHz, piloté par I2C par la carte maître. Cette carte dispose de plus d'un bargraph d'état de la batterie de puissance (et peut signaler à la carte maître si la batterie de puissance est déchargée) et d'une connexion série sur nappe, permettant de faire la mise au point du PID en se passant de carte maître et en utilisant seule la carte d'asservissement.
- Au premier étage se trouve la carte moteurs, basée sur un classique L298 piloté par la carte d'asservissement.
- Au niveau des moteurs se trouve une carte de décodage et de prédivision des signaux en quadrature :
- Une bascule D décode le déphasage des signaux et indique le sens de rotation selon un schéma disponible sur le site des fribotte.
- Le microcontrôleur d'asservissement ne pouvant compter toutes les impulsions à vitesse maximale (il faudrait checker les ports à 200KHz, ce qui est trop gourmand et inutile), un diviseur de fréquence est associé à chaque capteur pour réduire le nombre d'impulsions et simuler une résolution plus faible des capteurs.
Remarque : Pour ces tests, seule la carte d'asservissement a été utilisée et recevait ses ordres du PC via une liaison série et non de la carte de commande via une liaison I2C. Les programmes disponibles en téléchargement correspondent à ce mode de fonctionnnement.
La prédivision des signaux n'étant pas indispensable selon la résolution des capteurs utilisés, l'association des broches des connecteurs d'entrée (venant des capteurs HE10) et des connecteurs de sortie (vers la carte d'asservissement) est identique, ce qui permet dans le cas de capteurs de faible résolution de ne pas utiliser la carte de prédivision des signaux et de connecter directement les encodeurs HEDS sur la carte d'asservissement.
Aspect informatique embarquée
Les deux AVR sont programmés en C avec AVR-GCC. Toutes les sources sont commentées et les fichiers makefile sont fournis, ce qui devrait faciliter la compréhension.
Voici les fusibles de configuration à utiliser pour les deux AtMega32 :
- Fuse High Byte : 0xDF
- Fuse Low Byte : 0xFF
- Lock Bit Protection Modes : 0xFF
Pour plus de détails à propos de la mise en place d'un PID sur microcontrôleurs, vous pouvez aussi vous référer au site des fribotte.
Récupération de courbes d'évolution
Pour pouvoir mettre au point l'asservissement PID de manière efficace, il est utile de récupérer des courbes d'évolution du système. On peut ainsi comparer le temps de réaction, le dépassement, l'erreur statique, ..., et ainsi déterminer la meilleure valeur pour les coefficients du PID que l'on recherche.
Pour cela, il y a deux manières : récupérer les courbes logiciellement sur un PC via la connexion série du robot, ou les récupérer par une acquisition électronique directe d'après les signaux renvoyés par les capteurs.
La première méthode est assez simple à mettre en oeuvre : à chaque boucle de correction du PID, on envoie sur le port série une nouvelle ligne contenant la valeur asservie (position ou vitesse). Ensuite, on récupère ces données depuis un terminal série et on se sert d'un logiciel comme l'excellent GnuPlot pour tracer immédiatement les courbes correspondantes.
La deuxième méthode va nécessiter un circuit de traitement des signaux carrés issus des encodeurs. En effet, les encodeurs ne vont fournir qu'un signal carré dont la fréquence sera l'image de la vitesse de rotation. Pour obtenir quelque chose de facilement mesurable avec une interface d'acquisition, on va utiliser un circuit de conversion fréquence => tension, détaillé sur ce site.
La mise en place du PID - Travail d'étude
L'ensemble des détails à propos du PID, de sa mise en place et des résultats est disponible dans ce document PDF :
Photos
Carte de contrôle des moteurs contenant un double pont en H L298 et les diodes de roue libre.
Carte de conversion Fréquence-Tension permettant de visualiser les signaux à l'oscilloscope.
Graphique généré automatiquement par gnuplot depuis un script bash pilotant le robot (double PID vitesse/position sur une consigne de position).
Code source
Documents PDF
PDF de la modélisation sous Maple de l'asservissement PID en position et en vitesse d'un moteur électrique.
Document écrit résumant l'ensemble de mon travail sur le PID. Il traite dans un premier temps du PID appliqué aux moteurs électriques, puis étudie les cas de double asservissement.
Divers
Export HTML (visualisable directement en ligne) de la modélisation sous Maple de l'asservissement PID en vitesse et en positiond d'un moteur électrique.
Fichier Maple (version 10) de la modélisation de l'asservissement PID en vitesse et en positiond d'un moteur électrique.
Commentaires des visiteurs
Par sylv le 06/05/2007
Salut !
c'est une belle réalisation !
le lien vers le rapport ne semble pas fonctionner...
Par Totofweb le 07/05/2007
Sylv> Le rapport n'est pas encore terminé, il le sera d'ici un mois. Je t'en joins une copie en l'état actuel dans ta boîte mail (en espérant que tu sois bien le sylv auquel je pense...).
Par seb232 le 15/10/2007
Page tres interessante, surtout la description tres detaillée d\'un asservissement numerique PID.Je n\'ai plus qu\'a potassé tout cela pour notre futur robot !!
Par bailo le 21/05/2008
vraiment tre bien construit ta page et on ytrouve toutes les connaissances pour bien comprendre le pid ;le rapport est tres bien fait ;merci beaucoup.




