Vous êtes sur la page 1sur 10

HEIG-VD

Laboratoire de rgulation numrique

Laboratoire de rgulation numrique Programmation d'un rgulateur PID numrique

Table des matires


1 Introduction 2 Ralisation d'un rgulateur PID numrique
2.1 2.2 But et cahier des charges du travail . . . . . . . . . . . . . . . Environnements matriel et logiciel disposition . . . . . . . . 2.2.1 Edition du chier regul.c, programmation du rgulateur 2.2.2 Compilation du chier regul.c . . . . . . . . . . . . . . 2.2.3 Essai du rgulateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2 2
2 2 3 4 5

3 Canevas du chier regul.c 4 Rgulateur PID numrique


4.A Loi de commande . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.B Algorithme selon "textbook" . . . . . . . . . . . . . . . . . . . . . 4.C Algorithme modi . . . . . . . . . . . . . . . . . . . . . . . . . . 1

6 7
7 8 9

Rgulateur PID numrique, v.1.7

MEE \pid_num.tex
3 octobre 2007

HEIG-VD

Laboratoire de rgulation numrique

1 Introduction
Le but de ce travail de laboratoire est de programmer puis de mettre en oeuvre une premire version du rgulateur numrique de type PID. L'algorithme du rgulateur sera programm en langage de haut niveau (C) sur Windows XP puis test sur un systme rgler du laboratoire (simulateur analogique, foehn, rail, etc). Bien que l'environnement de travail propos (Windows XP, temps rel, Simulink, etc) puisse paratre relativement complexe, il est bon de se rappeler que la seule et unique fonction C que l'on demande de programmer est

reg_pid()
Le code devra se trouver dans le chier

regul.c
L'annexe 4 page 7 fournit un rappel thorique le rgulateur PID numrique.

2 Ralisation d'un rgulateur PID numrique


2.1 But et cahier des charges du travail
On propose dans le cadre de cette manipulation de laboratoire d'crire le programme C implantant l'algorithme du rgulateur PID numrique prsent en annexe 4. Ce programme sera utilis ultrieurement dans le cadre du laboratoire de rgulation numrique. Le programme crire doit orir les fonctionnalits suivantes :  rgulateur PID comprenant les trois actions P, I et D ;  limitation logicielle de la grandeur de commande calcule par le rgulateur. Le code du rgulateur PID devra tre test et valid de faon ce que l'utilisateur ait l'assurance que les gains Kp , Ti et Td ainsi que la priode d'chantillonnage h qu'il applique sont bel et bien ceux pris en compte par la fonction implantant l'algorithme du rgulateur. Il est ncessaire de dnir la procdure de test, qui fait partie intgrante de ce travail. Le programme devra tre soigneusement document et l'on fera usage notamment de variables de type tableau pour la mmorisation des donnes ncessaires au fonctionnement du rgulateur. La fonction programme sera code dans le chier regul.c dont le canevas est disposition (chier regul.txt, voir annexe). Il s'agit du seul chier diter !

2.2 Environnements matriel et logiciel disposition


Il faut commencer par tlcharger et dcompresser le chier
Rgulateur PID numrique, v.1.6

MEE \pid_num.tex
3 octobre 2007

HEIG-VD

Laboratoire de rgulation numrique

pid_num.zip
partir du site http://www.iai.heig-vd.ch/mee//Laboratoires_regulation_aut.htm dans votre propre rpertoire (qui devrait tre d:\users ou un de ses sousrpertoires que vous pouvez crer).

2.2.1 Edition du chier

regul.c

, programmation du rgulateur

La seule unique fonction que l'on demande de programmer devra se trouver dans le chier regul.c. Pour diter le code, l'diteur "PFE" est install et son utilisation est recommande. On peut l'appeler par son icne partir du bureau. Le canevas de ce chier est fourni. Il montre que les signaux provenant de la carte d'acquisition sont disponibles dans les variables globales in0, in1, in2 et in3.
/

float float float float

out0 , out1 ; in0 , in1 , in2 , i n 3 ; offset_out0 , offset_out1 ;


a appliquer sur a appliquer sur les les sorties entrees

/ s o r t i e s / e n t r e e s

analogiques analogiques

/ /

decalages

analogiques analogiques

/ /

decalages

offset_in0 , offset_in1 , offset_in2 , offset_in3 ;

Les paramtres du rgulateur doivent quant eux tre dclars comme variables globales, par exemple comme suit :
/ g a i n s

float float float float

Kp = 0 . 0 ; Gi = 0 . 0 ; Td = 0 . 0 ; a = 0.01;

du

regulateur

PID /

1 Le paramtre Gi est gal T . Pourquoi le gain sur l'action intgrale est-il implant i de cette manire ? De faon ce que ces paramtres soient visibles et modiables en ligne partir de RTPWatch, il faut les enregistrer dans le tableau var comme suit :
/ Declaration des variables accessibles depuis le PC via RTPWatch

t_var var [ ] = { ... , v a r _ f l o a t (Kp) , v a r _ f l o a t ( Gi ) , v a r _ f l o a t (Td ) , ... , end_var_list };

Si vous l'estimez ncessaire, vous pouvez bien sr crer d'autres fonctions prives de regul.c, comme par exemple une fonction de limitation de la commande. A noter que les valeurs numriques initiales, "par dfaut" des paramtres peuvent tre spcies dans regul.c : la fonction regulation_init est appele au dmarrage et les initialisations peuvent y tre places :
Rgulateur PID numrique, v.1.6

MEE \pid_num.tex
3 octobre 2007

HEIG-VD

Laboratoire de rgulation numrique

/ Initialisation du regulateur

void

regulation_init (
de la

void )

/ D e f i n i t i o n

r e g u l a t i o n _ b o u c l e _ i n t e r n e = regul_PID ; mode_boucle_interne = 1 ;
de la fonction effectuant la

fonction

effectuant

la

regulation

de

la

boucle 1 / / mode

no1 / regulation no2 / 2 / regulation

/ R e g u l a t e u r

/ D e f i n i t i o n

regulation_boucle_externe = regul_rien ; mode_boucle_externe = 0 ;


des parametres de la regulation

regulation

de

la

boucle / mode

/ R e g u l a t e u r

/ I n i t i a l i s a t i o n

Kp = 0 . 0 ; Gi = 0 . 0 ; Td = 0 . 0 ; a = 0.01; AW = 0 ; offset_out0 = 0 . 0 ; offset_out1 = 0 . 0 ; offset_in0 offset_in1 offset_in2 offset_in3 = = = = 0.0; 0.0; 0.0; 0.0;

w = 0.0; umax = 1 0 . 0 ;
RTPWatch.

Les valeurs pourront ensuite tre modies en ligne via l'interface

2.2.2 Compilation du chier

regul.c

Vous pouvez compiler votre programme en lanant un compilateur C/C++ partir de l'diteur PFE, menu Execute DOS Command and Capture Output. La commande make ou make -B (quivalente l'opration build) doit tre tape. Si aucune erreur n'est dtecte, le chier objet (regul.obj) est gnr. Dans la ngative, la fentre PFE ouverte indique le message d'erreur.
Rgulateur PID numrique, v.1.6

MEE \pid_num.tex
3 octobre 2007

HEIG-VD

Laboratoire de rgulation numrique

2.2.3 Essai du rgulateur


Lorsque le code temps rel a t compil sans erreur, il faut lancer RTPWatch et utiliser l'outil Enregistreur. Slectionner Autre code temps rel dans le menu et choisir votre DLL se trouvant dans votre rpertoire de travail.

Rgulateur PID numrique, v.1.6

MEE \pid_num.tex
3 octobre 2007

HEIG-VD

Laboratoire de rgulation numrique

3 Canevas du chier regul.c


/ REGUL. C

/
/ Version 1 2 3 4 5 Date 04/05/98 14/08/99 06/09/99 07/02/01 11/03/02 MEE MEE MEE MEE MEE Auteur Regulateur Mi se Labo Labo a jour pour temps reel NT NI numerique numerique avec carte Motif scalaire Regulateur Adaptation PID PID de courant de position PID

#define REGUL_C #include " r e g u l . h" float float float float float float float float float float float

/
/ entte de l ' unit et

/
relatives a la regulation

/ Variables , constantes fonctions

/ out0 , out1 ; / s o r t i e s a n a l o g i q u e s / in0 , in1 , in2 , i n 3 ; / e n t r e e s a n a l o g i q u e s / / d e c a l a g e s a a p p l i q u e r s u r l e s s o r t i e s a n a l o g i q u e s /

offset_out0 , offset_out1 ;
a appliquer sur

decalages

offset_in0 , offset_in1 , offset_in2 , offset_in3 ; w; / c o n s i g n e / w_0 = 0 . 0 ; / d e c a l a g e c o n s i g n e / Te = 0 . 0 1 ; Kp = 0 . 0 ; Gi = 0 . 0 ; Td = 0 . 0 ; a = 0.01;


d ' echantilllonnage

les

entrees

analogiques

periode

/
/ g a i n s du regulateur PID /

/ Declaration des variables accessibles depuis le PC via RTPWatch

t_var var [ ] = { v a r _ f l o a t (w) , var_float ( offset_out0 ) , var_float ( offset_in0 ) , var_float ( offset_in1 ) , v a r _ f l o a t (w_0) , v a r _ f l o a t ( Te ) , var_int (T_u) , v a r _ f l o a t (A_u) , end_var_list };
Regulateur PID

void

regul_PID ( )

/ C a l c u l // M e s u r e s

de

w = generateur_u ( 2 ) + w_0 ;

la

c o n s i g n e /

y = in0 offset_in0 ;
/ A l g o r i t h m e /

out0 = . . . ;
Rgulateur PID numrique, v.1.6

MEE \pid_num.tex
3 octobre 2007

HEIG-VD

Laboratoire de rgulation numrique

}
/ Initialisation du regulateur

void

regulation_init (
de la

void )

/ D e f i n i t i o n

r e g u l a t i o n _ b o u c l e _ i n t e r n e = regul_PID ; mode_boucle_interne = 1 ;
de la fonction effectuant la

fonction

effectuant

la

regulation

de

la

boucle 1 / / mode

no1 / regulation no2 / 2 / regulation

/ R e g u l a t e u r

/ D e f i n i t i o n

regulation_boucle_externe = regul_rien ; mode_boucle_externe = 0 ;


des parametres de la regulation

regulation

de

la

boucle / mode

/ R e g u l a t e u r

/ I n i t i a l i s a t i o n

Kp = 0 . 0 ; Gi = 0 . 0 ; Td = 0 . 0 ; a = 0.01; AW = 0 ; offset_out0 = 0 . 0 ; offset_out1 = 0 . 0 ; offset_in0 offset_in1 offset_in2 offset_in3 = = = = 0.0; 0.0; 0.0; 0.0;

w = 0.0; umax = 1 0 . 0 ;

4 Rgulateur PID numrique


4.A Loi de commande
La loi de commande du rgulateur PID numrique peut tre obtenue par discrtisation de celle d'un rgulateur PID analogique t de 1 u (t) = Kp e (t) + e ( ) d + Td Ti dt
0

o e(t) est le signal d'erreur. Cette loi est discrtise en l'valuant l'instant d'chantillonnage k h (not k par la suite an allger la notation, h tant constante). Pour ce faire, on eectue les substitutions

u (t) u [k ] e (t) e [k ] de e [k ] e [k 1] dt h

Rgulateur PID numrique, v.1.6

MEE \pid_num.tex
3 octobre 2007

HEIG-VD

Laboratoire de rgulation numrique

On voit que la drive de e(t) est approxim par la pente de la droite liant l'chantillon prsent e[k ] au prcdent e[k 1]. La rsolution de l'intgrale passe par le calcul de l'aire comprise entre l'axe t et le signal e(t). Une approximation de cette aire peut tre faite par la mthode des rectangles :
A  A  J  A    A         E C A A

H A ? J =

A  

A 

 D
D

 D

A F

L'intgrale de e(t) l'instant t = k h est donc approxime par une somme de rectangles de largeur h et de hauteur

e[0] e[1] e[2] ... e[k 1]


On a :
0 k h k 1

e ( ) d
l=0

e [l] h

La loi de commande discrte du rgulateur PID numrique devient :

u [k ] = K p

1 e [k ] + Ti

k 1

e [l] h + Td
l=0

e [k ] e [k 1] h

4.B Algorithme selon "textbook"


La forme de la loi de commande obtenue ci-dessus se prte mal la programmation, puisqu'elle ncessite la mmorisation de toutes les valeurs passes e[0], e[1], e[2],. . ., e[k 1] du signal d'erreur numrique e[k ]. An de contourner cette
Rgulateur PID numrique, v.1.6

MEE \pid_num.tex
3 octobre 2007

HEIG-VD

Laboratoire de rgulation numrique

dicult, crivons les lois de commande aux instants prsent k et et prcdent [k 1] et soustrayons membre membre :

u [k ) u [k 1] = Kp

= Kp

1 e [k ] + Ti 1 Ti
k2

k1

e [l] h + Td
l=0

e [k ] e [k 1] h

e [k 1] +

e [l] h + Td
l=0

e [k 1] e [k 2] h

On obtient tout d'abord

u [k ] u [k 1] = Kp [e [k ] e [k 1]) Kp + Ti
k 1 k2

e [l ] h
l=0 l=0 e[k1]h

e [l ] h

+ Kp Td
puis

e [k ] e [k 1] e [k 1] e [k 2] h h

u [k ] u [k 1] Td h 2 Td = Kp 1 + e [k ] + Kp 1 + h Ti h
b0 b1

e [k 1] +

Kp Td e [k 2] h
b2

et nalement :

u [k ] u [k 1] = b0 e [k ] + b1 e [k 1] + b2 e [k 2]
La loi de commande du rgulateur PID numrique s'crit donc :

u [k ] = u [k 1] + b0 e [k ] + b1 e [k 1] + b2 e [k 2]
avec :

Td b0 = K p 1 + h h b1 = Kp 1 + T i Td b2 = K p h

2Td h

4.C Algorithme modi


Pour des raisons pratiques, lies notamment des problmes de limitation, on a souvent intrt calculer les contributions intgrale et drive sparment, i.e. programmer :
i_e [ k ] = i_e [ k 1] + e [ k 1] d_e [ k ] = ( e [ k ]

e [ k 1]) f e

C'est cette forme que l'on propose d'implanter ici dans le code C.
Rgulateur PID numrique, v.1.6

MEE \pid_num.tex
3 octobre 2007

HEIG-VD

Laboratoire de rgulation numrique

Version du document v1.1 v1.2 v1.3 v1.4 v1.5 v1.6 v1.7

Date 12 mars 2002 11 mars 2003 9 mars 2004 3 janvier 2005 10 mars 2005 1er octobre 2007 3 octobre 2007
Tab.

Notes Traduction partir de Word, adaptation RTPWatch et la carte National

1  Versions publies

Rgulateur PID numrique, v.1.6

10

MEE \pid_num.tex
3 octobre 2007