Polybot Grenoble / Asservissement

Dependents:   asservissement_robot2

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers Asservissement.h Source File

Asservissement.h

00001 /**
00002  * @author Thomas Hamain
00003  *
00004  * @section DESCRIPTION
00005  *  [EMPTY]
00006  *
00007  */
00008 
00009 #ifndef ASSERVISSEMENT_H
00010 #define ASSERVISSEMENT_H
00011 
00012 # define M_PI           3.14159265358979323846
00013 
00014 /**
00015  * Includes
00016  */
00017 #include "mbed.h"
00018 #include "QEI.h"
00019 #include "L298.h"
00020 #include "math.h"
00021 
00022 /**
00023  * Class [EMPTY] on parle en mm
00024  */
00025 class Asservissement
00026 {
00027 public:
00028 
00029     typedef enum AUTORISATION {
00030 
00031         OUI,
00032         NON
00033 
00034     }AUTORISATION;
00035 
00036     typedef enum PID {
00037 
00038         LINEIQUE,
00039         ANGULAIRE
00040 
00041     } PID;
00042     /**
00043      * Constructeur.
00044      * [EMPTY]
00045      *
00046      * @param [EMPTY]
00047      */
00048     Asservissement(L298 pontH, QEI encodA, QEI encodB, double freq_asserv);
00049 
00050 
00051     double calculPID(double erreur,PID type);
00052 
00053 
00054     void move(double dist, double or_deg);
00055     
00056     void move(AUTORISATION rep);
00057 
00058 
00059     void setPID(PID type, double P, double I, double D);
00060 
00061 
00062     void setDimensions(int dist_roues, int dimA, int dimB, int ticA, int ticB);
00063 
00064 
00065     void setDimensions(int dist_roues, int dim, int tic);
00066 
00067 
00068     void setCalculateur(double lim_vitesseA, double lim_vitesseB, double accA, double accB, double deccA, double deccB);
00069 
00070 
00071     void setCalculateur(double lim_vitesse, double acc, double decc);
00072 
00073     //[FONCTION] un truc qui defini les trajectoire
00074     // doit inclure une option permettant de choir l'acceleration + decceleration
00075     // et une vitesse limite
00076     // il devra avoir un espece d'interrupt timer et poser un flag pour que la
00077     // boucle dans le move() s'arrete si besoin faudra y penser
00078 
00079     //[FONCTION] un truc pour calibrer automatiquement
00080     //IDEE DE FONCTIONNEMENT, 2 boucles, boucle 1 change de coefficient, boucle 2
00081     //demande à l'utilisateur de combien il veut incrémenter le coefficient
00082 
00083 
00084 
00085 
00086 
00087 
00088 
00089 
00090 
00091 
00092     //Fonctions de set get
00093     //PID Lineique
00094     double getPl()
00095     {
00096         return _Pl;
00097     }
00098     void setPl(double n)
00099     {
00100         _Pl=n;
00101     }
00102 
00103     double getIl()
00104     {
00105         return _Il;
00106     }
00107     void setIl(double n)
00108     {
00109         _Il=n;
00110     }
00111 
00112     double getDl()
00113     {
00114         return _Dl;
00115     }
00116     void setDl(double n)
00117     {
00118         _Dl=n;
00119     }
00120 
00121     //PID Angulaire
00122     double getPa()
00123     {
00124         return _Pa;
00125     }
00126     void setPla(double n)
00127     {
00128         _Pa=n;
00129     }
00130 
00131     double getIa()
00132     {
00133         return _Ia;
00134     }
00135     void setIa(double n)
00136     {
00137         _Ia=n;
00138     }
00139 
00140     double getDa()
00141     {
00142         return _Da;
00143     }
00144     void setDa(double n)
00145     {
00146         _Da=n;
00147     }
00148 
00149     //echantillonnage
00150     double getfreq_correction()
00151     {
00152         return _freq_correction;
00153     }
00154     void setfreq_correction(double n)
00155     {
00156         _freq_correction=n;
00157     }
00158 
00159     //dimensions du système
00160     double getdist_roues()
00161     {
00162         return _dist_roues;
00163     }
00164     void setdist_roues(double n)
00165     {
00166         _dist_roues=n;
00167     }
00168 
00169     double getdimA()
00170     {
00171         return _dimA;
00172     }
00173     void setdimA(double n)
00174     {
00175         _dimA=n;
00176     }
00177 
00178     double getdimB()
00179     {
00180         return _dimB;
00181     }
00182     void setdimB(double n)
00183     {
00184         _dimB=n;
00185     }
00186 
00187     double getticA()
00188     {
00189         return _ticA;
00190     }
00191     void setticA(double n)
00192     {
00193         _ticA=n;
00194     }
00195 
00196     double getticB()
00197     {
00198         return _ticA;
00199     }
00200     void setticB(double n)
00201     {
00202         _ticA=n;
00203     }
00204 
00205     //valeurs pour le calculateur de trajectoires
00206     double getlim_vitesseA()
00207     {
00208         return _lim_vitesseA;
00209     }
00210     void setlim_vitesseA(double n)
00211     {
00212         _lim_vitesseA=n;
00213     }
00214 
00215     double getlim_vitesseB()
00216     {
00217         return _lim_vitesseB;
00218     }
00219     void setlim_vitesseB(double n)
00220     {
00221         _lim_vitesseB=n;
00222     }
00223 
00224     double get_accA()
00225     {
00226         return _accA;
00227     }
00228     void set_accA(double n)
00229     {
00230         _accA=n;
00231     }
00232 
00233     double get_accB()
00234     {
00235         return _accB;
00236     }
00237     void setP_accB(double n)
00238     {
00239         _accB=n;
00240     }
00241 
00242     double getdeccA()
00243     {
00244         return _deccA;
00245     }
00246     void setdeccA(double n)
00247     {
00248         _deccA=n;
00249     }
00250 
00251     double getdeccB()
00252     {
00253         return _deccB;
00254     }
00255     void setdeccB(double n)
00256     {
00257         _deccB=n;
00258     }
00259 
00260 
00261 private:
00262 
00263     //variables importantes
00264     L298 _pontH;
00265     QEI _encodA;
00266     QEI _encodB;
00267     double _dist;
00268     double _or_deg;
00269 
00270     //coeffs pour PID lineique
00271     double _Pl; //0.01
00272     double _Il; //0.0001
00273     double _Dl;
00274 
00275     //coeffs pour PID angulaire
00276     double _Pa; //0.01
00277     double _Ia; //0.0001
00278     double _Da;
00279 
00280     //echantillonnage #BOZ
00281     double _freq_correction; //0.01
00282 
00283     //probablement ballec
00284     //double _err_statique;
00285     //double LIMITE_TEMPS 3/FREQ_CORRECTION (3sec)
00286 
00287     //dimensions du système
00288     int _dist_roues; //distance entre les roues 270
00289     int _dimA; //dimension roue a 70
00290     int _dimB; //dimension roue a 70
00291     int _ticA; //nombre de tic par tour encodeur a (il faudra faire des calculs lors de la déclaration parce que ca correspond pas vraiment par rapport a la datasheet) 1200
00292     int _ticB; //nombre de tic par tour encodeur b 1200
00293     double _resA; //mm/tic calculé par (double)DIMENSION_ROUE_A*3.14/(double)TIC_PAR_TOUR_A
00294     double _resB;
00295 
00296     //valeurs pour le calculateur de trajectoires (valeurs symétriques)
00297     //valeurs modifiées par calculateur de trajectoires
00298     double _lim_vitesseA; //limites de vitesse A et B
00299     double _lim_vitesseB;
00300     double _accA; //acceleration pour A et B (pas étudié)
00301     double _accB;
00302     double _deccA; //decceleration pour A et B (pas étudié)
00303     double _deccB;
00304 
00305 
00306 
00307 
00308 };
00309 
00310 
00311 
00312 #endif /* ASSERVISSEMENT_H */