Vous êtes sur la page 1sur 8

Asservissement en position d’un moteur er réglage du PID

1 Introduction

6 avril 2007

Ce document a pour but d’expliquer de manière concise, une méthode simple permettant de déterminer les coefficients d’un régulateur PID pour un asservissement en position d’un moteur. Cette méthode, bien que générale est appliquée ici dans le cadre d’un asservissement pour un robot mobile.

2 Fonction de transfert de la boucle d’asservissement

Pour pouvoir régler convenablement le régulateur PID, il faut tout d’abord calculer la fonc- tion de transfert en boucle fermée de la boucle d’asservissement. Le schéma bloc utilisé est le suivant :

Le schéma bloc utilisé est le suivant : Fig. 1 – Schéma bloc de la boucle

Fig. 1 – Schéma bloc de la boucle d’asservissement

Classiquement, la fonction de tranfert d’un moteur à courant continu (MCC) peut être assimilée à un système du premier ordre (la constante de temps électrique étant beaucoup plus rapide que la constante de temps mécanique) soit :

1

H m (s) =

K sT

1 +

Avec :

Ke , Ke (V/rd.s 1 ) étant la constante électrique du moteur.

K =

1

(1)

RJ

KtKe , avec R la résistance de l’induit du moteur, J l’inertie du moteur et Kt (Nm/A)

T =

la constante de couple.

La fonction de transfert du PID s’écrit quant à elle :

H PID (s) = P + K i

s

+ Kds = K i + Ps + K d s 2

s

(2)

La fonction de transfert de la boucle fermée s’ecrit donc de la manière suivante :

H(s) =

H(s)

H

PID

K

s(1+sT )

1 + H PID

K

s(1+sT )

=

H PID K

s(1 + sT ) +

H PID K

=

=

K i K + PKs + KK d s

2

s 2 (1 + sT ) + KK i + KPs + KK d s 2 K i K + PKs + KK d s

2

KK i + KPs + (KK d + 1)s 2 + Ts 3

(3)

(4)

(5)

On peut également écrire cette fonction de transfert sous forme canonique

H(s) =

K i K

T

+ PK

T

s + KK d s 2

T

KK i

T

+ KP

T

s

2

+ (KK d +1)

T

s 2 + s 3

(6)

3

Réglage des coefficients du PID

Pour régler un PID, il existe de nombreuses méthodes. Le réglage proposé dans ce document permet de déterminer les 3 coéfficients du PID en fonction de deux paramètres physiques représentatifs. Le dénominateur de la fonction de transfert en boucle fermée peut s’écrire de la manière suivante :

(7)

D(s) = (s + ω n )(s 2 + 2ξω n s + ω n )

en posant :

2

KK i

T

KP

T

= ω

3

n

2

= ω n (1 + 2ξ)

KK d + 1

T

=

ω n (1 + 2ξ)

Sous cette écriture, on se rend compte que cela correspond à un système du premier ordre suivi d’un second ordre. De plus, les paramètres ξ et ω n étant des réels strictement positifs, le système est toujours stable. On voit donc qu’en jouant sur le paramètre ξ, on peut spécifier si oui ou non on souhaite un dépassement de la consigne. En jouant sur le paramètre ω n , on peut régler la vitesse de réponse (appelée bande passante) du système. Par défaut, on considère qu’un "Bon réglage" de ω n consiste à prendre :

ω n = 2π

T

Avec T la constante de temps du moteur définie précédemment.

Les coefficients du régulateur sont donc les suivants :

P = Tω

n 2 (1 + 2ξ)

K

K i = Tω

K

K d = n (1 + 2ξ) 1

3

n

K

3

4

Introduction de l’Antiwindup

Considérons de nouveau notre système d’asservissement en position du moteur. On garde le schéma de régulation précédent, mais on va ajouter un bloc de saturation qui traduit le fait que la tension que l’on souhaite appliquer au moteur ne peut pas dépasser la tension d’alimentation de notre système (par exemple 12V) :

d’alimentation de notre système (par exemple 12V) : Fig. 2 – Introduction d’un bloc de saturation

Fig. 2 – Introduction d’un bloc de saturation

Lorsque le système arrive en saturation, cela veut dire que :

– Le PID est mal réglé

– La consigne d’entrée est trop importante donc le moteur ne peut pas suivre

– L’axe du moteur est arrêté pour une raison quelconque donc la commande augmente pour corriger l’erreur (sans y arriver)

Lorsqu’un de ces cas ce produit, cela veut dire que l’erreur entre la consigne et la mesure est non nulle et reste de même signe. Or, lorsque l’erreur est non nulle et quelle reste de meme signe pendant un moment, le terme intégrale ne fait qu’augmenter. Cela veut dire que si les conditions redeviennent normale, il va falloir un certain temps à l’intégrateur pour se décharger et revenir à des valeurs cohérentes. Si l’on reprend notre exemple d’asservissement en position, si on bloque l’axe du moteur pendant un court instant, lorsqu’on le relache celui si va se mettre à tourner à plein régime (phénomène d’emballement). Ce genre de phénomène peut être préjudiciable pour de gros systèmes (voir même dangereux) et il peut également rendre le système complètement instable.

Pour éviter ce genre de problème, on indroduit donc le principe de l’Antiwindup (littéra- lement anti emballement). Cette astuce est extrèmement simple à mettre en place numé- riquement puisqu’elle consiste simplement à geler le terme intégrateur du PID si jamais la commande du moteur est en saturation.

4

Le code permettant de calculer ce régulateur PID peut s’écrire selon l’algorithme suivant :

Remarque : Le calcul de l’intégrale est effectué en utilisant la méthode des trapèzes.

Algorithme de calcul du PID

e

k

= θ d θ

k =

e k e k1

Te

if |U| < Umax then

T i =

T i + Ki e k + e k1

2

else T i = T i end if

Te

U = Kp e k + Kd.k + T i

if U>Umax then U=Umax end if if U<-Umax then U=-Umax end if

e k = e k1

Fin Algorithme

Cet algorithme est calculé à chaque période d’echantillonage Te.

5

5

Application des résultats pour un robot mobile

5.1 Identification du robot

Pour un robot mobile classiquement équipé de deux roues motrices, les calculs théoriques développés précédemment ne sont pas modifiés. Seulement, l’étude ne concernait jusqu’ici qu’un moteur seul sans charges. En concidérant un robot dans son entier, il faut donc tenir compte de son comportement dynamique. Hors comme cela n’est pas évident d’identifier les paramètres dynamiques d’un robot (surtout lorsqu’on à pas les moyens pour le faire), on va simplifier le problème. Dans la majorité des applications ou le robot mobile ne se déplace pas très vite, on va alors faire l’hypothèse qu’on peut négliger l’influence d’un moteur sur l’autre et que, par conséquent, chaque moteur se vera en charge la propulsion d’une moitiée de robot. Concrètement dans les calculs, cela revient à déterminer l’inertie d’un demi robot perçue par le moteur. Pour déterminer cela, une solution simplifiée consiste à calculer l’énergie cinétique du demi robot pour un déplacement en ligne droite :

E c =

1

2 mV

Roue +

2

1

2

J s ω

2

Roue

(8)

Avec :

m : le poids d’un demi robot (P/2),

V Roue : La vitesse d’avance du centre de la roue,

J s : L’inertie du moteur au niveau de l’axe de la roue,

ω Roue : La vitesse de rotation de la roue.

En remarquant que V Roue = ω Roue R Roue , l’energie cinétique se simplifie :

E c =

2 1 mR

2

Roue + J s ω Roue

2

(9)

L’expression de l’energie cinétique dépend ici de la vitesse de rotation de la roue. Hors, les calculs théorique étant fait en fonction de la vitesse de rotation du moteur, il faut alors prendre en compte le rapport de réduction n :

ω M oteur = Roue

(10)

L’énergie cinétique peut donc se calculer en fonction de la vitesse de rotation du moteur :

E c =

1 mR

2

2

Roue

+ J s 2 ω

n

n

2

2

Roue

(11)

On peut déduire de cette équation l’inertie totale d’un demi robot perçu par le moteur. De

plus en remaquant que constructeur), on a :

2 = J m , J m étant l’inertie du rotor (fournie dans la documentation

J s

n

6

J = mR

n 2

2

Roue

(12)

A présent que l’on connaît l’inertie totale perçue par chaque moteur, ce nouveau J est utilisé

pour calculer la constante de temps de réponse du moteur (T) de l’équation 1.

+ J m

5.2 Conversion des données

L’aspect conversion des données est quelquechose de fondamental en robotique puisque toute

la boucle de régulation (PID + moteur) ne peut pas être calculée dans le système des unités

SI (contrairement à la simulation). Cette impossibilité s’explique par plusieurs phénomènes :

– L’organe permettant de connaître la position du moteur est généralement un codeur in- crémental. Le microcontrôleur aura donc une première conversion à faire entre un nombre de pas codeurs et la rotation réelle du moteur.

– Le deuxième phénomène est plutôt d’ordre hardware puisque suivant le type de microcon- troleur utilisé (8, 16 ou 32 bits, avec ou sans calculs flottant), il peut être necessaire de dégrader la précision des calculs pour que le temps d’execution soit suffisemment petit.

– La dernière étape de conversion se situe au niveau de la commande du moteur. Classique- ment, ce pilotage est réalisé à partir d’une commande de type PWM associée à un pont en H, donc une nouvelle conversion entre un nombre numérique et une valeur de tension analogique. Pour obtenir une boucle de régulation non plus compatible avec le système SI, mais compatible avec l’environnement de calcul du microcontroleur, la méthode suivante peut être utilisée.

1. Faire un contrôle de position avec une consigne en pas codeur plutôt qu’en unité SI.

2. Calculer les coefficient PID comme expliqué précedemment.

3. Appliquer un facteur d’echelle afin que les coefficients PID soient compatibles avec des consignes en pas codeurs et le module de génération du signal PWM.

Pour la dernière étape de cette méthode, le facteur de conversion doit être le suivant :

Coeff =

2π

Res Codeur

. Res PWM

U M ot

(13)

Avec :

Res codeur La résolution du codeur (par ex 2048 points par tour),

Res PWM La résolution du module PWM, c’est a dire le nombre de pas qui permettent d’aller de 0 à 100% de la vitesse du moteur (ex 255 soit 8 bits)

U M ot : La tension d’alimentation du pont en H (ex 12V)

7

6 Conclusion

La méthode présentée ici constitue une méthode simple permettant de réaliser un asservis- sement en position d’un moteur (ou d’un robot). Il faut tout de même noter que même si cette méthode permet de déterminer un bon réglage des coefficients PID, compte tenu des différentes hypothèses, il est possible que l’utilisateur doivent légèrement les modifier.

8