Programme MAST du moteur synchrone sur SABER


################################################################################
#                                                                              #
#                             Modele du MOTEUR                                 #
#                                                                              #
#               incluant l'equation mecanique de la machine                    #
#     et le calcul des valeurs "moyennes instantanees" des couples moteurs     #
#                                                                              #
################################################################################
#                                                                              #
#                       p = nbre de paires de poles                            #
#                                                                              #
################################################################################

template moteur t1 t2 t3 omega = r,l,ke,Cfric,Fv,kr,j,p,a1,a3,a5,a7,a9,\
                                 a11,a13,a15,a17,a19,vitesse_initiale,\
                                 ias_initial,ibs_initial,ics_initial

#Declaration des points de connection :
electrical      t1,t2,t3
rotational_vel  omega

#Declaration des parametres (d'entree) du moteur :
#- parametres electriques :
number r=100m,l=100u,ke=1,p=1
#- parametres mecaniques :
number Cfric=0,Fv=0,kr=0,j=0
#- coefficients de Fourier de la fcem :
number a1=1,a3=0,a5=0,a7=0,a9=0,a11=0,a13=0,a15=0,a17=0,a19=0
#- conditions initiales (avec leurs valeurs par defaut) :
number vitesse_initiale=0,ias_initial=0,ibs_initial=0,ics_initial=0


{
#Declaration du point neutre electrique de la machine :
electrical   Neutre

#Declaration des variables continues :
var ang_rad  theta_elec
var i        ias,ibs,ics
var p        pelecrtm,pemagrtm,pmecartm
var tq_Nm    couple_resultant,crtm,tertm

val w_rpm    N
val tq_Nm    te
val nu       e1,e2,e3
val v        vas,vbs,vcs,cemfa,cemfb,cemfc
val p        pertes_emag_moyen,pertes_meca_moyen,pertes_totales_moyen
val p        p_elec,p_emag,p_meca,pertes_emag,pertes_meca,pertes_totales

#Declaration des variables discretes :
state time   t0
state nu     enable
state tq_Nm  couple_moyen,te_moyen
state p      p_elec_moyen,p_emag_moyen,p_meca_moyen

#Declaration des constantes :
number       ang,kon,omega_initial
<consts.sin

parameters {
           #Definition des constantes :
           ang=2*math_pi/3         #Dephasage des fem dans un moteur triphase
           kon=30/math_pi          #Coefficient de conversion rad/s ==> tr/min
           omega_initial=vitesse_initiale/kon        #Vitesse initial en rad/s
           }

when (dc_init|time_init)  {
                          #Initialisation des variables discretes :
                          schedule_event(time,t0,0)             
                          schedule_event(time,enable,1)
                          schedule_event(time,te_moyen,0)
                          schedule_event(time,couple_moyen,0)
                          schedule_event(time,p_elec_moyen,0)
                          schedule_event(time,p_emag_moyen,0)
                          schedule_event(time,p_meca_moyen,0)
                          schedule_next_time(time)
                          }

when (threshold(cemfa,0)) {
                          #A chaque demi-periode de cemfa :
                          schedule_event(time,t0,time)
                          schedule_event(time,enable,0)
                          schedule_event(time,te_moyen,tertm)
                          schedule_event(time,couple_moyen,crtm)
                          schedule_event(time,p_elec_moyen,pelecrtm)
                          schedule_event(time,p_emag_moyen,pemagrtm)
                          schedule_event(time,p_meca_moyen,pmecartm)
                          schedule_next_time(time)
                          }

when (event_on(enable))   {
                          #Lorsqu'il y a un changement d'etat de "enable" :
                          if (enable==0) {
                                         schedule_event(time+1n,enable,1)
                                         schedule_next_time(time+1n)
                                         }
                          }                  
     
values {
       #Definition de la vitesse de rotation en tours/minute "N" :
       N=kon*w_radps(omega)

       #Definition des tensions simples aux bornes des differentes phases :
       vas=v(t1)-v(Neutre)
       vbs=v(t2)-v(Neutre)
       vcs=v(t3)-v(Neutre)

       #Definition de la forme des fcem aux bornes des differentes phases :
       e1=a1*cos(theta_elec)+a3*cos(3*theta_elec)+a5*cos(5*theta_elec)\
         +a7*cos(7*theta_elec)+a9*cos(9*theta_elec)+a11*cos(11*theta_elec)\
         +a13*cos(13*theta_elec)+a15*cos(15*theta_elec)+a17*cos(17*theta_elec)\
         +a19*cos(19*theta_elec)
       e2=a1*cos(theta_elec-ang)+a3*cos(3*(theta_elec-ang))\
         +a5*cos(5*(theta_elec-ang))+a7*cos(7*(theta_elec-ang))\
         +a9*cos(9*(theta_elec-ang))+a11*cos(11*(theta_elec-ang))\
         +a13*cos(13*(theta_elec-ang))+a15*cos(15*(theta_elec-ang))\
         +a17*cos(17*(theta_elec-ang))+a19*cos(19*(theta_elec-ang))
       e3=a1*cos(theta_elec+ang)+a3*cos(3*(theta_elec+ang))\
         +a5*cos(5*(theta_elec+ang))+a7*cos(7*(theta_elec+ang))\
         +a9*cos(9*(theta_elec+ang))+a11*cos(11*(theta_elec+ang))\
         +a13*cos(13*(theta_elec+ang))+a15*cos(15*(theta_elec+ang))\
         +a17*cos(17*(theta_elec+ang))+a19*cos(19*(theta_elec+ang))

       #Definition des fcem simples aux bornes des differentes phases :
       cemfa=ke*e1*w_radps(omega)
       cemfb=ke*e2*w_radps(omega)
       cemfc=ke*e3*w_radps(omega)

       #Definition du couple electromagnetique du moteur :
       te=ke*(ias*e1+ibs*e2+ics*e3)

       #Definition des puissances :
       #- puissance electromagnetique delivree par le moteur :
       p_emag=te*w_radps(omega)
       #- puissance electrique consommee par le moteur :
       p_elec=vas*ias+vbs*ibs+vcs*ics
       #- puissance mecanique delivree par le moteur :
       p_meca=couple_resultant*w_radps(omega)

       #Definition des pertes :
       #- pertes electro-magnetiques dans le moteur :
       pertes_emag=p_elec-p_emag
       pertes_emag_moyen=p_elec_moyen-p_emag_moyen
       #- pertes mecaniques du moteur :
       pertes_meca=p_emag-p_meca
       pertes_meca_moyen=p_emag_moyen-p_meca_moyen
       #- pertes totales du moteur :
       pertes_totales=p_elec-p_meca
       pertes_totales_moyen=p_elec_moyen-p_meca_moyen
       }

control_section { 
                #Definition des conditions initiales :
                initial_condition(crtm,0)
                initial_condition(tertm,0)
                initial_condition(pelecrtm,0)
                initial_condition(pemagrtm,0)
                initial_condition(pmecartm,0)
                initial_condition(v(Neutre),0)
                initial_condition(theta_elec,0)
                initial_condition(ias,ias_initial)
                initial_condition(ibs,ibs_initial)
                initial_condition(ics,ics_initial)
                initial_condition(w_radps(omega),omega_initial)
                }

equations {
          #Definition des courants dans les differentes phases :
          i(t1->Neutre)+=ias
          i(t2->Neutre)+=ibs
          i(t3->Neutre)+=ics
          ias: vas=r*ias+d_by_dt(l*ias)+cemfa
          ibs: vbs=r*ibs+d_by_dt(l*ibs)+cemfb
          ics: vcs=r*ics+d_by_dt(l*ics)+cemfc

          #Definition du couple resultant sur l'arbre du moteur :
          couple_resultant: couple_resultant=te-Cfric-Fv*w_radps(omega)\
                                            -kr*w_radps(omega)*w_radps(omega)\
                                            -d_by_dt(j*w_radps(omega))
          tq_Nm(omega)+=couple_resultant

          #Definition de "theta_meca" :
          theta_elec: p*w_radps(omega)=d_by_dt(theta_elec)


          #Definition des "valeurs moyennes instantanees" :

          #- couple electromagnetique moyen :
          tertm: d_by_dt(tertm*(time-t0))=enable*te
          tertm: tertm=enable*tertm

          #- couple resultant moyen :
          crtm: d_by_dt(crtm*(time-t0))=enable*couple_resultant
          crtm: crtm=enable*crtm

          #- puissance electrique moyenne absorbee :
          pelecrtm: d_by_dt(pelecrtm*(time-t0))=enable*p_elec
          pelecrtm: pelecrtm=enable*pelecrtm

          #- puissance electromagnetique moyenne :
          pemagrtm: d_by_dt(pemagrtm*(time-t0))=enable*p_emag
          pemagrtm: pemagrtm=enable*pemagrtm

          #- puissance mecanique moyenne transmise :
          pmecartm: d_by_dt(pmecartm*(time-t0))=enable*p_meca
          pmecartm: pmecartm=enable*pmecartm
          }
}



guillaume 2008-11-17