Changeset 332 for applications/pmsm/pmsmDS.h
- Timestamp:
- 04/29/09 20:14:56 (15 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
applications/pmsm/pmsmDS.h
r326 r332 35 35 public: 36 36 //! 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 }" );} 38 38 void set_parameters ( double Rs0, double Ls0, double Fmag0, double Bf0, double p0, double kp0, double J0, double Uc0, double DT0, double dt0 ) { 39 39 pmsmsim_set_parameters ( Rs0, Ls0, Fmag0, Bf0, p0, kp0, J0, Uc0, DT0, dt0 ); … … 43 43 opt_modu = ( opt.find ( "modelu" ) ==string::npos ); 44 44 } 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];} 46 46 void write ( vec &ut ) {} 47 47 … … 80 80 for ( int i=0;i<Dt;i++ ) { pmsmsim_step ( Ww , Mz);} 81 81 // 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 82 91 }; 83 92 … … 108 117 double u3=0.5* ( -u1-sq3*KalmanObs[1] ); 109 118 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; 113 122 ua = ( 2.0* ( u1-du1 )- ( u2-du2 )- ( u3-du3 ) ) /3.0; 114 123 ub = ( ( u2-du2 )- ( u3-du3 ) ) /sq3; … … 135 144 136 145 void bayes(const vec &dt){ 146 static vec umin(2); 147 vec u(2); 137 148 //assume we know state exactly: 138 149 vec true_state=vec(x,4); // read from pmsm … … 142 153 old_true(4)=KalmanObs[4]; 143 154 old_true(5)=KalmanObs[5];// add U 155 u(0) = KalmanObs[0]; // use the required value for derivatives 156 u(1) = KalmanObs[1]; 144 157 interr = (true_state - pfxu->eval(old_true)); 145 158 146 159 //second derivative 147 160 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);} 149 162 163 umin =u; 150 164 EKFfull::bayes(dt); 151 165 old_true.set_subvector(0,true_state);