Approche intuitive de l'asservissement

Une des plus simples utilisations (en robotique) d'un moteur à courant continu est la suivante :

Commande classique d'un moteur

Si le moteur entraine un robot et que celui-ci doit se déplacer d'une certaine distance, alors l'organe de commande va envoyer une consigne pendant une certaine durée, sans savoir si le moteur aura réellement effectué ce qu'on lui a demandé.
L'asservissement consiste donc à aller vérifier ce que le moteur a réellement effectué et à corriger si nécessaire (en augmentant sa commande, pour rattraper le retard par exemple).
On doit alors "mesurer" ce que le moteur a réellement effectué. C'est à dire trouver un capteur qui permet de mesurer une information proportionnelle au déplacement du moteur.
Ici la solution est l'utilisation d'un codeur incrémental.

Un codeur incrémental est composé d'un disque solidaire d'un axe. Ce disque est percé d'un certain nombre de trous sur sa circonférence. Grâce à un dispositif optique, on peut savoir combien de trous ont été vus.

Roue Codeuse simplifiée

Il est alors possible de connaître l'angle parcouru et le sens de rotation. On peut ainsi mesurer un angle, ou un nombre de tours parcourus. Il est aussi possible en équipant ce codeur incrémental d'une roue en contact avec le sol, de connaître la distance parcourue.

 

En fixant ce codeur sur l'axe du moteur, on peut connaître l'angle de rotation du moteur (et en déduire une distance parcourue, si l'on suppose qu'il n'y a pas de dérapage ...). Si le moteur entraîne un robot, on peut, en utilisant une roue séparée, connaître la distance qu'à réellement parcouru le robot. Distance qui sera proportionelle à la rotation effectuée par le moteur.

Codeur recevant une information directement du moteur

Codeur recevant indirectement une information du moteur

Le codeur va donc être monté pour que l'on puisse surveiller l'élément qui nous intéresse.
Dans le premier cas, c'est directement la rotation du moteur qui nous interesse (exemple : tour à fraiser).
Dans le deuxième cas, ce qui nous intéresse c'est le déplacement de la plateforme sur laquelle est montée le moteur (ex : robot). Le fait que le moteur tourne n'importe pas directement. Ce qui nous intéresse principalement est le déplacement de la plateforme (cependant, le moteur est l'élément qui permet ce déplacement). Dans ce 2ème cas, le fait que le codeur surveille la plateforme et non le moteur permet de s'apercevoir d'un dérapage de la roue motrice par exemple.

On peut ainsi mesurer ce qu'a fait le moteur (ex : il a fait avancer la plateforme de 5 cm). Si on compare cette information à ce qu'on voulait faire (ex : avancer la plateforme de 7 cm), on peut en déduire que le moteur n'a pas avancé assez vite ou assez longtemps et on augmente la commande du moteur (ici la tension à ses bornes).

Le petit paragraphe précédent résume les 2 fonctions principales du LM629 :

  • Déterminer ce que l'on veut faire : génération de trajectoire
  • Comparaison avec ce qu'a fait le moteur : asservissement de la trajectoire

Principe de l'asservissement

Ainsi, plus la différence entre la position de consigne et la position réelle augmente, plus l'erreur augmente. Donc plus la commande vers le moteur augmente et plus celui-ci va avoir tendance à diminuer cette erreur.

 

La génération de la trajectoire

Générer une trajectoire consiste à créer une consigne. Dans le cas du LM629, il peut y avoir 2 modes :

  • Un mode position, c'est à dire qu'on définit une position à atteindre.
  • Un mode vitesse, c'est à dire qu'on définit une vitesse à atteindre.

Dans tous les cas, le LM629 va générer une consigne de position, que ce soit en mode position ou en mode vitesse. (le LM629 ne réalise pas un "vrai" asservissement de vitesse en mode vitesse). Une consigne de position va indiquer à chaque instant quelle est la position idéale que l'on devrait avoir (position désirée).

Les trajectoires que peut générer le LM629 sont des trajectoires à profil de vitesse trapézoïdal. Ces trajectoires sont définies par 3 phases successives :

  • accélération constante (a = A), la vitesse augmente linéairement
  • accélération nulle (a = 0), la vitesse est constante et maximale
  • décélération constante (a = -A), la vitesse diminue linéairement

Au final, le mode vitesse change très peu de choses, c'est à dire que dans le cas du mode vitesse, la phase de décélération n'existe pas. C'est là la seule différence théorique dans le LM entre le mode position et le mode vitesse.

On peut donc représenter la vitesse ainsi :

Profil de vitesse trapézoïdal

A partir de cette vitesse, le LM va à chaque instant calculer la consigne de position, cette consigne va avoir cette allure :

Position désirée associée

Pour définir cette consigne, on utilise 3 paramètres :

  • La position finale
  • La vitesse maximale (V)
  • L'accélération (A)

Le LM va donc générer une trajectoire qui va accélérer jusqu'à la vitesse maximale. Il va garder la vitesse maximale jusqu'à temps qu'il soit nécessaire de commencer à décélérer. Evidemment si au mileu de la trajectoire, le LM n'a toujours pas atteint la vitesse maximale, il va commencer directement à décélérer (sinon la trajectoire ne pourrait pas s'arrêter à temps). Dans le cas où il n'est pas possible d'atteindre la vitesse maximale, la trajectoire aura cette allure là.

Il n'a pas été possible d'atteindre la vitesse maximale

On a ainsi un élément dans le LM qui nous permet de générer cette trajectoire (une consigne de position, conséquence du profil de vitesse) qui va servir de référence. Il faut maintenant s'assurer que le moteur va la suivre le mieux possible.

 

L'asservissement

L'asservissement consiste à comparer la consigne de position (générée au dessus) et la position réelle (obtenue grâce au codeur).

Le LM629 fait ceci de façon numérique c'est à dire échantillonée (temps discrets et grandeurs quantifiées). Il va donc périodiquement faire la différence entre la consigne de position et la position réelle puis ajuster la tension aux bornes du moteur (appelée ici Vm) en fonction de cette erreur (appelée ici e).

Il utilise 3 corrections différentes :

  • Le premier moyen consiste à dire que plus l'erreur est grande et positive et plus il faut augmenter la tension aux bornes du moteur (pour rattraper cette erreur). La tension aux bornes du moteur est alors directement proportionelle à l'erreur : V=P*e
    P
    étant un coefficient de proportionnalité.

  • On voit cependant apparaître des problèmes. Il faut une certaine tension aux bornes du moteur pour que celui-ci puisse commencer à tourner. A la fin de la trajectoire, l'erreur ne sera plus assez grande pour pouvoir faire avancer le moteur. Il y aura donc une erreur qui subsitera et on n'atteindra pas exactement la position souhaitée (erreur d'ordre 0). De même, pour qu'il puisse y avoir un mouvement, il sera nécessaire que le moteur soit alimenté, et donc qu'il y ait une erreur ... C'est pourquoi, on ajoute un autre élément qui va augmenter la tension aux bornes du moteur lorsque l'erreur reste constante. A chaque période, on va sommer l'erreur (intégration de l'erreur). Donc, si l'erreur reste constante, sa somme va augmenter au fil du temps.
    On a alors : V=P*e+I*integrale(e)
    La valeur I est un coefficient qui va déterminer l'influence de ce paramètre intégral.

  • Le moteur, lorsqu'on lui applique une tension, va mettre un certain temps à réagir (constante de temps mécanique). Pendant ce temps l'erreur va continuer à augmenter et l'on va encore accroître la tension aux bornes du moteur alors que cela n'est pas nécessaire. Pour diminuer ce phénomène "d'emballement", on va introduire un 3ème élément qui va permettre d'en "calmer" les effets. (il est souvent fait référence pour ce terme à la notion de viscosité, en augmentant ce terme c'est comme si on augmentait la viscosité de la réaction, on trempe le tout dans un liquide de plus en plus visqueux). On se base sur la différence (la variation) de l'erreur entre 2 mesures. Il s'agit de la dérivée de l'erreur.
    On obtient alors au final : V=P*e+I*integrale(e)+D*dérivé(e)

L'asservissement commande donc le moteur en prenant en compte 3 aspects de l'erreur entre la consigne de position et la position réelle. Chacune des influences peut être réglée par la constante appropriée : P (proportionnel), I (intégral), D (dérivée). Il s'agit de l'utilisation d'un filtre PID.

Aspect Electronique