Aller au contenu

Asservir des moteurs à courant continu avec un PID

Asservir des moteurs à courant continu avec un PID

Objectif : apprendre à utiliser un asservissement de type PID avec des moteurs à courant continu.

Difficulté : 3/5

Temps d'exécution : 20 min

Matériel nécessaire :

Pour contrôler un robot, un drone ou de manière plus générale un actionneur correctement, il faut souvent passer par une étape d'asservissement et de régulation. La régulation PID (Proportionnelle Intégrale Dérivée) est une méthode efficace pour que votre robot ou votre drone vous obéisse au doigt et à l'oeil !  

L'asservissement PID peut par exemple permettre au robot Lu-Bot V1 de rouler droit ou bien à un drone de rester stable malgré les conditions extérieures.

A quoi sert un asservissement PID ?

Le rôle d'un algorithme de correction PID est d'améliorer 3 principales caractéristiques d'un système : la rapidité, la précision et la stabilité.

Pour un moteur par exemple, ces éléments se traduisent par une montée en régime rapide, une vitesse réelle très proche de celle demandée et un fonctionnement à la vitesse de consigne sans oscillations (accélérations, décélération...).

En quelques mots, le PID sert à réduire l'écart qu'il y a entre une valeur de consigne et la valeur mesurée. Dans notre exemple : l'erreur entre la vitesse effective d'un moteur et la consigne qu'il lui a été donnée.

Pour fonctionner le PID à donc besoin de plusieurs choses : un actionneur à asservir, un capteur pour mesurée la grandeur voulue et un organe de contrôle (microcontrôleur par exemple) capable de faire les calculs et d'interpréter les informations de consigne et du capteur.

La régulation a également besoin de 3 paramètres qui sont des coefficients à entrés par l'utilisateur. Un paramètre pour la régulation proportionnelle (Kp), intégrale (Ki), dérivée (Kd). C'est coefficients vont avoir une influence sur le comportement du système : il peut être rapide, lent, stable, oscillant, précis...

C'est coefficients sont à changer en fonction de chaque applications qui n'auront pas les même besoins mais aussi en fonction de chaque actionneur qui n'auront pas la même façon de se comporter pour un même triplet de paramètres.

Mais comment obtient on Kp, Ki, Kd ? La manière la plus simple est de le faire manuellement (par essais/erreurs) en changeant un paramètre à la fois !

Kp aura une influence sur la rapidité d'un moteur à atteindre sa vitesse de consigne, Ki réduira l'erreur statique (erreur entre la vitesse demandée et la vitesse mesurée) et Kp réduira les oscillations engendrées.

Programmer un régulateur PID avec arduino :

Le code qui va être présenté est accessible à tous ceux qui connaissent déjà un peu l'univers d'Arduino. Même si vous ne comprenez pas certaines lignes, pas de panique : le programme est utilisable tel quel ! Vous aurez seulement à modifier les paramètres comme expliqué plus haut.

Comme actionneur j'ai choisis un moteur à courant continu qui sera piloté par un driver prévu à cet effet. Le moteur est équipé d'un encodeur dont vous avez appris à vous servir dans le tutoriel sur les encodeurs, le code présenté reprend en partie celui présent dans ce tutoriel.

Les connexions entre le moteur, le driver et la carte arduino sont les suivantes :


Il faut aussi bien sûr relier les deux bornes du moteur au borniers à vis du driver.

Et maintenant le tant attendu programme !

 

 Ce programme utilise une libraire qui facilite l'utilisation d'un algorithme PID : la librairie PID_V1.h. Pour fonctionner correctement, ce programme nécessite aussi la librairie TimerOne.h qui va permettre l'utilisation d'un timer qui va servir de référence de calcul pour déterminer la vitesse à partir des encodeurs.

Ce programme permet de réguler la vitesse du moteur en prenant comme valeur de consigne la vitesse entrée dans le moniteur série, entre 0 et 255. A noté aussi que la consigne est remise à 0 à chaque fin du timer.

Les valeurs envoyées au driver sont les valeurs en sortie de l'algorithme de PID, ainsi le moteur tourne toujours à la vitesse demandé !

Comme c'est le cas à la ligne 68, il est important d'activer le PID pour qu'il fonctionne !

A présent, il faut modifier les valeurs des coefficients Kp, Ki et Kd qui sont spécifiques à l'application et aux actionneurs.

Attention à ne pas trop augmenter Kp et Ki sinon vous aurez un phénomène d'oscillation comme cela :

Mais une fois le,bon compromis trouvé entre stabilité, précision et rapidité, vous pouvez voir que le résultat est très satisfaisant !

Ci-dessous une vidéo du moteur qui tourne à sa vitesse max sans correction :

Et puis le moteur qui tourne à la même vitesse avec une correction PID :

La différence est plutôt flagrante ! Dans le premier cas, le moteur voit sa vitesse diminuer dès qu'on l'oriente différemment comme s'il était sur une pente et dans l'autre cas, il n'y a aucun changement de vitesse !

J'espère avoir prouvé l'efficacité d'une méthode d'asservissement telle que le PID et vous avoir donné envie de l'utiliser sur vos robot ! En attendant, pour un premier essai vous pouvez essayer d'améliorer le robot à chenille présenté dans le tutoriel sur le char en le faisant se déplacer en ligne droite !