Aller au contenu

Rechercher

Panier 0 Produit Produits (vide)

Aucun produit

À définir Livraison
0,00 € Total

Commander

Asservir des moteurs à courant continu avec un PID et Arduino

Asservir des moteurs à courant continu avec un PID et Arduino

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). Ces coefficients vont avoir une influence sur le comportement du système : il peut être rapide, lent, stable, oscillant, précis...

Ces 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 Kd 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 comment utiliser un encodeur avec une arduino , 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 !

7 Commentaires

  • Avatar
    cnockaert jérôme
    déc. 6, 2017

    bonjour, super tuto, mais pouvez vous rajouter le montage avec un 2eme moteurs car j'ai tout acheté sur votre boutique et comme je débute j'aimerais avoir le cabalge et la partie programmation qui va bien. d'avance merci

  • Avatar
    Mike118
    mai 21, 2018

    Un exemple de code + câblage avec deux moteurs est disponible sur ce sujet : http://www.robot-maker.com/forum/topic/12077-robot-2wd-homologable-pour-la-coupe-de-france-de-robotique-realise-au-dernier-moment/

  • Avatar
    Tib
    juin 1, 2018

    Bonjour, Dans l'hypothèse ou la mesure n'est pas réalisée par encodeur mais par Sonar, qui fournit une information de distance, comment implémenteriez vous cela ? Merci.

  • Avatar
    Mathys
    janv. 5, 2019

    Bonjour, j’ai un gros projet qui est de créer un programme pour commander un fauteuil roulant, mais je rencontre un problème au niveau de la programmation de l’asservissm. Je veux onasszevir en vitesse malheureusement mes moteurs ne possède pas d’encodeur, j’essaie donc de mettre des capteurs de vitesse de rotation sur les moteurs et les relier à l’arduino, mais je n’arrive pas à trouver un programme capable de faire cela, pouvez vou m’aider ?

  • Avatar
    Christophe
    mars 6, 2019

    Bonjour, Je n'arrive pas à lire les vidéos pour me rendre compte, faut il installer un pilote particulier ? Merci.

  • Avatar
    ludovic
    avril 5, 2019

    Merci de ce tutoriel mais j 'aimerais savoir comment vous avez déterminer les facteurs d'asservissement ?

  • Avatar
    ANTOINE GUIAN
    avril 24, 2020

    Salut les codeurs Je souhaite asservir la vitesse d'un aspirateur domestique en fonction d'une dépression mesurée. L'aspirateur est ajustable avec un potentiomètre, la tension varie de 0 à 4 vc. https://www.philips.fr/c-p/FC9204_02/marathon-aspirateur-sans-sac-avec-brosse-triactive J'envisage de démonter le potentiomètre de l'aspi et de connecter l'entré de la carte à une borne d'un arduino Mon capteur de pression délivre une tension proportionnelle à la pression mesurée. Il me faudra une consigne. Bref j'ai les composants mais je n'y connais rien en PID Est ce possible d’utiliser la librairie PID ? Merci pour vos conseils

Cet article vous a plu ? Laissez-nous un commentaire !

Tous les champs sont obligatoires

Nom:
E-mail: (ne sera pas publié)
Commentaire:
Recopier le code
ok