Conclusion
Au cours de la manipulation (expérimentation) de a
commande vectorielle, on a constaté que la machine avait un
problème d'autopilotage (orientation du repère
(d , q )
et
calage l'axe d sur le flux) pour la constante de temps
rotorique ô r 0,1 6 s. Et ce à travers la
dynamique du courant Isq lors de l'échelon de
charge.
Une meilleure dynamique du courant Isq a
ainsi été obtenue pour une constante de
temps ô r 0,4 s
Rs = 2,5 7 Ù ; Ls
= 0,5 3 H ; ô r = 0,4 s; ó =
0,03 9
J = 0, 0162 kg.m2 ;
rad
f = 0,00 1 N . m . s
Les paramètres retenus sont :
ANNEXE 2 : EXTRAITS DE PROGRAMMES ET FONCTIONS
1- Bibliotheque VAR.H : Declaration des constantes et
variables
/* Machine (une partie des données) */
//#define Trconst 0.55
#define Trconst 0.4 // Constante de temps rotorique #define P
1
/* constantes */
#define trm2rds 0.10471975511965977461542144610932
#define PI 3.14159265358979323846
#define TWOPI 6.283185307179586
//#define IdsrefBase 0.8 //-- //8.944
#define IdsrefBase 1.0 // Valeur par défaut du courant de
la référence Isd*
double IqsrefMax=8.5; // Maximum du courant Isq
// Correcteur de courant volatile double Kpq=36.65; volatile
double Kiq=0.92;
// Correcteur de vitesse
volatile double KpW=0.5;
volatile double KiW=0.005;
volatile double KTiW=1.0;
2- Fonction ACQUI.C : Acquisition de courants et vitesse
mesurés
#define Aquisition_Courants( i1, i2) \
{ \
i1 = 0.03+20.0*( ds1104_adc_read_conv(2) ); \
i2 = 20.0*( ds1104_adc_read_conv(3) ); \
}
#define inputWm \
{ \
/* read incremental encoder counter */ \
inc_k = ds1104_inc_position_read(1, DS1104_INC_LINE_SUBDIV_4);
\
/*inc_k = ds1104_inc_counter_read(1); */\
\
/* calculate mechanical angle rd _ avec inversion _*/ \
mpos=POStoRD*(float)inc_k; \
\
/* calculate mechanical speed rd/s */ \
FIR_Wm[0]=POStoRD_S*(float)( inc_k - inc_kOld ); \
inc_kOld = inc_k; \
3- Fonction TRANS.0 : Transformations de Clarke et de
Park
#define C32( Xalpha, Xbeta, Xa, Xb, Xc ) \ { \
Xa=Xalpha; \
Xb=0.8660254038*Xbeta-0.5*Xalpha; \
Xc=-0.5*Xalpha-0.8660254038*Xbeta; \
}
#define 2t( Xa, Xb, Xalpha, Xbeta ) \ { \
Xalpha=Xa; \
Xbeta=0.5773502692*Xa+1.154700538*Xb; \
}
#define Park( Xd, Xq, sin_th, cos_th, Xalpha, Xbeta) \
{ \
Xalpha=Xd*cos_th-Xq*sin_th; \ Xbeta=Xd*sin_th+Xq*cos_th; \
}
4- Fonction REGUL.0 : Regulations de courants et
vitesse
/* calcul de thetas, Wsl, Ws et du flux */
#define Calc_thetas \
{ \
Wsl= Iqsref / Tr / Idsref; \
Phidr+=DT*( M*(Ids1+Ids2)-Phidr)/ Tr; \
if (Control_Type==1) Ws=P*Wm+Wsl; \
if (Control_Type!=1) Ws=Wsref; \
th+=DT*Ws; /* 200 us */ \
if ( th > PI) th-=TWOPI; \
if ( th < -PI) th+=TWOPI; \
}
//
void Boucle_PI_Id() {
e=Idsref-Ids;
Vdsref = Kpd*e + xed;
if ( fabs(Vdsref)<=VdsrefMax ) xed += Kid*e;
/* decouplage */
// non valable en MASDE Vdsref-=sigma*Ls*Ws*Iqs;
/* limiteur de tension */
if ( Vdsref>VdsrefMax) Vdsref=VdsrefMax; if (
Vdsref<-VdsrefMax) Vdsref=-VdsrefMax;
}
|