Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: asservissement_robot2
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 */
Generated on Fri Aug 26 2022 13:13:08 by
