Show
Ignore:
Timestamp:
04/29/09 20:14:56 (15 years ago)
Author:
smidl
Message:

pmsm experiments for Barcelona
- improved model of voltage
- new Mz experiment

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • applications/pmsm/pmsmDS.h

    r326 r332  
    3535public: 
    3636        //! Constructor with fixed sampling period 
    37         pmsmDS ()   {Dt=125; Drv=RV ( "{o_ua o_ub o_ia o_ib t_ua t_ub }" );} 
     37        pmsmDS ()   {Dt=125; Drv=RV ( "{o_ua o_ub o_ia o_ib t_ua t_ub o_om o_th }" );} 
    3838        void set_parameters ( double Rs0, double Ls0, double Fmag0, double Bf0, double p0, double kp0, double J0, double Uc0, double DT0, double dt0 ) { 
    3939                pmsmsim_set_parameters ( Rs0, Ls0, Fmag0, Bf0, p0, kp0, J0, Uc0, DT0, dt0 ); 
     
    4343                opt_modu = ( opt.find ( "modelu" ) ==string::npos ); 
    4444        } 
    45         void getdata ( vec &dt ) {dt=vec ( KalmanObs,6 );} 
     45        void getdata ( vec &dt ) {dt.set_subvector(0,vec ( KalmanObs,6 ));dt(6)=x[2];dt(7)=x[3];} 
    4646        void write ( vec &ut ) {} 
    4747 
     
    8080                for ( int i=0;i<Dt;i++ ) {      pmsmsim_step ( Ww , Mz);} 
    8181//              for ( int i=0;i<Dt;i++ ) {      pmsmsim_noreg_step ( Ww , Mz);} 
     82                 
     83                //discretization 
     84                double ustep=0.6; 
     85                KalmanObs [ 0 ] = ustep*itpp::round( KalmanObs [ 0 ]/ ustep) ; 
     86                KalmanObs [ 1 ] = ustep*itpp::round(KalmanObs [ 1 ]/ ustep); 
     87                double istep=0.085; 
     88                KalmanObs [ 2 ] = istep*itpp::round( KalmanObs [ 2 ]/ istep) ; 
     89                KalmanObs [ 3 ] = istep*itpp::round(KalmanObs [ 3 ]/ istep); 
     90 
    8291        }; 
    8392 
     
    108117                        double u3=0.5* ( -u1-sq3*KalmanObs[1] ); 
    109118 
    110                         double du1=0.7* ( double ( i1>0.1 ) - double ( i1<-0.1 ) ) +0.05*i1; 
    111                         double du2=0.7* ( double ( i2>0.1 ) - double ( i2<-0.1 ) ) +0.05*i2; 
    112                         double du3=0.7* ( double ( i3>0.1 ) - double ( i3<-0.1 ) ) +0.05*i3; 
     119                        double du1=1.4* ( double ( i1>0.3 ) - double ( i1<-0.3 ) ) +0.2*i1; 
     120                        double du2=1.4* ( double ( i2>0.3 ) - double ( i2<-0.3 ) ) +0.2*i2; 
     121                        double du3=1.4* ( double ( i3>0.3 ) - double ( i3<-0.3 ) ) +0.2*i3; 
    113122                        ua = ( 2.0* ( u1-du1 )- ( u2-du2 )- ( u3-du3 ) ) /3.0; 
    114123                        ub = ( ( u2-du2 )- ( u3-du3 ) ) /sq3; 
     
    135144 
    136145        void bayes(const vec &dt){ 
     146                static vec umin(2); 
     147                vec u(2);  
    137148                //assume we know state exactly: 
    138149                vec true_state=vec(x,4); // read from pmsm 
     
    142153                old_true(4)=KalmanObs[4]; 
    143154                old_true(5)=KalmanObs[5];// add U 
     155                u(0) = KalmanObs[0]; // use the required value for derivatives 
     156                u(1) = KalmanObs[1]; 
    144157                interr = (true_state - pfxu->eval(old_true)); 
    145158                 
    146159                //second derivative 
    147160                IMpmsm2o* pf = dynamic_cast<IMpmsm2o*>(pfxu); 
    148                 if (pf) {secder=pf->eval2o(vec_2(KalmanObs[4],KalmanObs[5]));} 
     161                if (pf) {secder=pf->eval2o(u-umin);} 
    149162                                 
     163                umin =u; 
    150164                EKFfull::bayes(dt); 
    151165                old_true.set_subvector(0,true_state);