Changeset 63 for tests/pmsm.h

Show
Ignore:
Timestamp:
04/09/08 15:29:53 (16 years ago)
Author:
smidl
Message:

odstraneni net a drobne upravy

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • tests/pmsm.h

    r62 r63  
    1212//! State evolution model for a PMSM drive and its derivative with respect to \$x\$ 
    1313class IMpmsm : public diffbifn { 
     14protected: 
    1415        double Rs, Ls, dt, Ypm, kp, p,  J, Mz; 
    1516 
    1617public: 
    1718        IMpmsm() :diffbifn (rx.count(), rx, ru ) {}; 
     19        //! Set mechanical and electrical variables 
     20        void set_parameters ( double Rs0, double Ls0, double dt0, double Ypm0, double kp0, double p0, double J0, double Mz0 ) {Rs=Rs0; Ls=Ls0; dt=dt0; Ypm=Ypm0; kp=kp0; p=p0; J=J0; Mz=Mz0;} 
     21 
     22        vec eval ( const vec &x0, const vec &u0 ) { 
     23                // last state 
     24                double iam = x0 ( 0 ); 
     25                double ibm = x0 ( 1 ); 
     26                double omm = x0 ( 2 ); 
     27                double thm = x0 ( 3 ); 
     28                double uam = u0 ( 0 ); 
     29                double ubm = u0 ( 1 ); 
     30 
     31                vec xk=zeros ( 4 ); 
     32                //ia 
     33                xk ( 0 ) = ( 1.0- Rs/Ls*dt ) * iam + Ypm/Ls*dt*omm * sin ( thm ) + uam*dt/Ls; 
     34                //ib 
     35                xk ( 1 ) = ( 1.0- Rs/Ls*dt ) * ibm - Ypm/Ls*dt*omm * cos ( thm ) + ubm*dt/Ls; 
     36                //om 
     37                xk ( 2 ) = omm + kp*p*p * Ypm/J*dt* ( ibm * cos ( thm )-iam * sin ( thm ) ) - p/J*dt*Mz; 
     38                //th 
     39                xk ( 3 ) = rem(thm + omm*dt,2*pi); // <0..2pi> 
     40                return xk; 
     41        } 
     42 
     43        void dfdx_cond ( const vec &x0, const vec &u0, mat &A, bool full=true ) { 
     44                double iam = x0 ( 0 ); 
     45                double ibm = x0 ( 1 ); 
     46                double omm = x0 ( 2 ); 
     47                double thm = x0 ( 3 ); 
     48                // d ia 
     49                A ( 0,0 ) = ( 1.0- Rs/Ls*dt ); A ( 0,1 ) = 0.0; 
     50                A ( 0,2 ) = Ypm/Ls*dt* sin ( thm ); A ( 0,3 ) = Ypm/Ls*dt*omm * ( cos ( thm ) ); 
     51                // d ib 
     52                A ( 1,0 ) = 0.0 ; A ( 1,1 ) = ( 1.0- Rs/Ls*dt ); 
     53                A ( 1,2 ) = -Ypm/Ls*dt* cos ( thm ); A ( 1,3 ) = Ypm/Ls*dt*omm * ( sin ( thm ) ); 
     54                // d om 
     55                A ( 2,0 ) = kp*p*p * Ypm/J*dt* ( - sin ( thm ) ); 
     56                A ( 2,1 ) = kp*p*p * Ypm/J*dt* ( cos ( thm ) ); 
     57                A ( 2,2 ) = 1.0; 
     58                A ( 2,3 ) = kp*p*p * Ypm/J*dt* ( -ibm * sin ( thm )-iam * cos ( thm ) ); 
     59                // d th 
     60                A ( 3,0 ) = 0.0; A ( 3,1 ) = 0.0; A ( 3,2 ) = dt; A ( 3,3 ) = 1.0; 
     61        } 
     62 
     63        void dfdu_cond ( const vec &x0, const vec &u0, mat &A, bool full=true ) {it_error ( "not needed" );}; 
     64 
     65}; 
     66 
     67class IMpmsmStat : public IMpmsm { 
     68        IMpmsmStat() :IMpmsm() {}; 
    1869        //! Set mechanical and electrical variables 
    1970        void set_parameters ( double Rs0, double Ls0, double dt0, double Ypm0, double kp0, double p0, double J0, double Mz0 ) {Rs=Rs0; Ls=Ls0; dt=dt0; Ypm=Ypm0; kp=kp0; p=p0; J=J0; Mz=Mz0;}