yacine sidhoum
/
mbed_PWM_6moteurs_SY_2017_ver007
generate pwm to control dc motor using lmd18200t like power stage
Embed:
(wiki syntax)
Show/hide line numbers
main.cpp
00001 #include "mbed.h" 00002 #include <string> 00003 00004 00005 Serial device(p9, p10); // tx, rx 00006 DigitalOut led1(LED1); 00007 DigitalOut led2(LED2); 00008 DigitalOut led3(LED3); 00009 DigitalOut led4(LED4); 00010 00011 float a=0; 00012 float b=0; 00013 float c=0; 00014 float d=0; 00015 float e=0; 00016 float f=0; 00017 00018 //void init_moteur_1a6() 00019 //{ 00020 00021 //affectation pin frein moteur 00022 DigitalOut frein_moteur1(p5); 00023 DigitalOut frein_moteur2(p6); 00024 DigitalOut frein_moteur3(p7); 00025 DigitalOut frein_moteur4(p8); 00026 DigitalOut frein_moteur5(p11); 00027 DigitalOut frein_moteur6(p12); 00028 00029 //affectation pin sens rotation moteur 00030 DigitalOut sens_rotation_moteur1(p13); 00031 DigitalOut sens_rotation_moteur2(p14); 00032 DigitalOut sens_rotation_moteur3(p27); 00033 DigitalOut sens_rotation_moteur4(p28); 00034 DigitalOut sens_rotation_moteur5(p29); 00035 DigitalOut sens_rotation_moteur6(p30); 00036 00037 //affectation pin pwm 00038 PwmOut PWM1(p21); 00039 PwmOut PWM2(p22); 00040 PwmOut PWM3(p23); 00041 PwmOut PWM4(p24); 00042 PwmOut PWM5(p25); 00043 PwmOut PWM6(p26); 00044 00045 00046 00047 //}; 00048 00049 ///////////////////////////////////////////////////////////////////////////// 00050 // declaration de la fonction moteur1 // 00051 ///////////////////////////////////////////////////////////////////////////// 00052 00053 void motor1_mouve(float Vmax1,int T11,int sens_rotation1,int frein1) 00054 { 00055 00056 ////////////////////////// 00057 //initialisation moteur // 00058 ////////////////////////// 00059 00060 DigitalOut frein_moteur1(p5); //declaration sortie frein sur p5 00061 DigitalOut sens_rotation_moteur1(p13); //declaration sens de rotation moteur1 sur p13 00062 PwmOut PWM1(p21); //declaration de la sortie pwm sur p21 00063 PWM1.period(0.00005);// initialisation du rapport cyclique fixe la période à 50us----f=20Khz 00064 00065 frein_moteur1.write(frein1);//affectation de la valeur du frein moteur1 00066 sens_rotation_moteur1.write(sens_rotation1); //affectation du sens de rotation moteur1 00067 00068 ////////////////////////////////////////////////// 00069 // conversion valeur % vers num explotable // 00070 ////////////////////////////////////////////////// 00071 00072 // // // // // // // // // // // // // // // // // 00073 // // // // // // // // // // // // // // // // // 00074 // // // // // // // // // // // // // // // // // 00075 // // // // // // // // // // // // // // // // // 00076 00077 // acceleration 00078 for(float a=0;a<= Vmax1;a=a+0.001) 00079 { 00080 wait(0.001); 00081 PWM1.write(a);// fixe le rapport cyclique à la valeur a% 00082 } 00083 00084 // mouvement en Vmax 00085 wait(T11); 00086 00087 // deceleration 00088 for(float a=Vmax1;a>=0;a=a-0.001) 00089 { 00090 wait(0.001); 00091 PWM1.write(a);// fixe le rapport cyclique à la valeur a% 00092 } 00093 00094 }; 00095 00096 ///////////////////////////////////////////////////////////////////////////// 00097 // declaration de la fonction moteur2 // 00098 ///////////////////////////////////////////////////////////////////////////// 00099 00100 void motor2_mouve(float Vmax2,int T12,int sens_rotation2,int frein2) 00101 { 00102 00103 /////////////////////////// 00104 //initialisation moteur2 // 00105 /////////////////////////// 00106 00107 DigitalOut frein_moteur2(p6); //declaration sortie frein sur p5 00108 DigitalOut sens_rotation_moteur2(p14); //declaration sens de rotation moteur1 sur p13 00109 PwmOut PWM1(p22); //declaration de la sortie pwm sur p21 00110 PWM2.period(0.00005);// initialisation du rapport cyclique fixe la période à 50us----f=20Khz 00111 00112 frein_moteur2.write(frein2);//affectation de la valeur du frein moteur1 00113 sens_rotation_moteur2.write(sens_rotation2); //affectation du sens de rotation moteur1 00114 00115 ////////////////////////////////////////////////// 00116 // conversion valeur % vers num explotable // 00117 ////////////////////////////////////////////////// 00118 00119 // // // // // // // // // // // // // // // // // 00120 // // // // // // // // // // // // // // // // // 00121 // // // // // // // // // // // // // // // // // 00122 // // // // // // // // // // // // // // // // // 00123 00124 // acceleration 00125 for(float a=0;a<= Vmax2;a=a+0.001) 00126 { 00127 wait(0.001); 00128 PWM2.write(a);// fixe le rapport cyclique à la valeur a% 00129 } 00130 00131 // mouvement en Vmax 00132 wait(T12); 00133 00134 // deceleration 00135 for(float a=Vmax2;a>=0;a=a-0.001) 00136 { 00137 wait(0.001); 00138 PWM2.write(a);// fixe le rapport cyclique à la valeur a% 00139 } 00140 00141 }; 00142 00143 ///////////////////////////////////////////////////////////////////////////// 00144 // declaration de la fonction moteur3 // 00145 ///////////////////////////////////////////////////////////////////////////// 00146 00147 void motor3_mouve(float Vmax3,int T13,int sens_rotation3,int frein3) 00148 { 00149 00150 /////////////////////////// 00151 //initialisation moteur3 // 00152 /////////////////////////// 00153 00154 DigitalOut frein_moteur3(p7); //declaration sortie frein sur p5 00155 DigitalOut sens_rotation_moteur3(p27); //declaration sens de rotation moteur1 sur p13 00156 PwmOut PWM3(p23); //declaration de la sortie pwm sur p21 00157 PWM3.period(0.00005);// initialisation du rapport cyclique fixe la période à 50us----f=20Khz 00158 00159 frein_moteur3.write(frein3);//affectation de la valeur du frein moteur1 00160 sens_rotation_moteur3.write(sens_rotation3); //affectation du sens de rotation moteur1 00161 00162 ////////////////////////////////////////////////// 00163 // conversion valeur % vers num explotable // 00164 ////////////////////////////////////////////////// 00165 00166 // // // // // // // // // // // // // // // // // 00167 // // // // // // // // // // // // // // // // // 00168 // // // // // // // // // // // // // // // // // 00169 // // // // // // // // // // // // // // // // // 00170 00171 // acceleration 00172 for(float a=0;a<= Vmax3;a=a+0.001) 00173 { 00174 wait(0.001); 00175 PWM3.write(a);// fixe le rapport cyclique à la valeur a% 00176 } 00177 00178 // mouvement en Vmax 00179 wait(T13); 00180 00181 // deceleration 00182 for(float a=Vmax3;a>=0;a=a-0.001) 00183 { 00184 wait(0.001); 00185 PWM3.write(a);// fixe le rapport cyclique à la valeur a% 00186 } 00187 00188 }; 00189 00190 ///////////////////////////////////////////////////////////////////////////// 00191 // declaration de la fonction moteur4 // 00192 ///////////////////////////////////////////////////////////////////////////// 00193 00194 void motor4_mouve(float Vmax4,int T14,int sens_rotation4,int frein4) 00195 { 00196 00197 /////////////////////////// 00198 //initialisation moteur4 // 00199 /////////////////////////// 00200 00201 DigitalOut frein_moteur4(p8); //declaration sortie frein sur p5 00202 DigitalOut sens_rotation_moteur4(p28); //declaration sens de rotation moteur1 sur p13 00203 PwmOut PWM4(p24); //declaration de la sortie pwm sur p21 00204 PWM4.period(0.00005);// initialisation du rapport cyclique fixe la période à 50us----f=20Khz 00205 00206 frein_moteur4.write(frein4);//affectation de la valeur du frein moteur4 00207 sens_rotation_moteur4.write(sens_rotation4); //affectation du sens de rotation moteur4 00208 00209 ////////////////////////////////////////////////// 00210 // conversion valeur % vers num explotable // 00211 ////////////////////////////////////////////////// 00212 00213 // // // // // // // // // // // // // // // // // 00214 // // // // // // // // // // // // // // // // // 00215 // // // // // // // // // // // // // // // // // 00216 // // // // // // // // // // // // // // // // // 00217 00218 // acceleration 00219 for(float a=0;a<= Vmax4;a=a+0.001) 00220 { 00221 wait(0.001); 00222 PWM4.write(a);// fixe le rapport cyclique à la valeur a% 00223 } 00224 00225 // mouvement en Vmax 00226 wait(T14); 00227 00228 // deceleration 00229 for(float a=Vmax4;a>=0;a=a-0.001) 00230 { 00231 wait(0.001); 00232 PWM4.write(a);// fixe le rapport cyclique à la valeur a% 00233 } 00234 00235 }; 00236 00237 00238 ///////////////////////////////////////////////////////////////////////////// 00239 // declaration de la fonction moteur5 // 00240 ///////////////////////////////////////////////////////////////////////////// 00241 00242 void motor5_mouve(float Vmax5,int T15,int sens_rotation5,int frein5) 00243 { 00244 00245 /////////////////////////// 00246 //initialisation moteur5 // 00247 /////////////////////////// 00248 00249 DigitalOut frein_moteur5(p11); //declaration sortie frein sur p5 00250 DigitalOut sens_rotation_moteur5(p29); //declaration sens de rotation moteur1 sur p13 00251 PwmOut PWM5(p25); //declaration de la sortie pwm sur p21 00252 PWM5.period(0.00005);// initialisation du rapport cyclique fixe la période à 50us----f=20Khz 00253 00254 frein_moteur5.write(frein5);//affectation de la valeur du frein moteur4 00255 sens_rotation_moteur5.write(sens_rotation5); //affectation du sens de rotation moteur4 00256 00257 ////////////////////////////////////////////////// 00258 // conversion valeur % vers num explotable // 00259 ////////////////////////////////////////////////// 00260 00261 // // // // // // // // // // // // // // // // // 00262 // // // // // // // // // // // // // // // // // 00263 // // // // // // // // // // // // // // // // // 00264 // // // // // // // // // // // // // // // // // 00265 00266 // acceleration 00267 for(float a=0;a<= Vmax5;a=a+0.001) 00268 { 00269 wait(0.001); 00270 PWM5.write(a);// fixe le rapport cyclique à la valeur a% 00271 } 00272 00273 // mouvement en Vmax 00274 wait(T15); 00275 00276 // deceleration 00277 for(float a=Vmax5;a>=0;a=a-0.001) 00278 { 00279 wait(0.001); 00280 PWM5.write(a);// fixe le rapport cyclique à la valeur a% 00281 } 00282 00283 }; 00284 00285 00286 ///////////////////////////////////////////////////////////////////////////// 00287 // declaration de la fonction moteur6 // 00288 ///////////////////////////////////////////////////////////////////////////// 00289 00290 void motor6_mouve(float Vmax6,int T16,int sens_rotation6,int frein6) 00291 { 00292 00293 /////////////////////////// 00294 //initialisation moteur6 // 00295 /////////////////////////// 00296 00297 DigitalOut frein_moteur6(p12); //declaration sortie frein sur p5 00298 DigitalOut sens_rotation_moteur6(p30); //declaration sens de rotation moteur1 sur p13 00299 PwmOut PWM6(p26); //declaration de la sortie pwm sur p21 00300 PWM6.period(0.00005);// initialisation du rapport cyclique fixe la période à 50us----f=20Khz 00301 00302 frein_moteur6.write(frein6);//affectation de la valeur du frein moteur4 00303 sens_rotation_moteur6.write(sens_rotation6); //affectation du sens de rotation moteur4 00304 00305 ////////////////////////////////////////////////// 00306 // conversion valeur % vers num explotable // 00307 ////////////////////////////////////////////////// 00308 00309 // // // // // // // // // // // // // // // // // 00310 // // // // // // // // // // // // // // // // // 00311 // // // // // // // // // // // // // // // // // 00312 // // // // // // // // // // // // // // // // // 00313 00314 // acceleration 00315 for(float a=0;a<= Vmax6;a=a+0.001) 00316 { 00317 wait(0.001); 00318 PWM6.write(a);// fixe le rapport cyclique à la valeur a% 00319 } 00320 00321 // mouvement en Vmax 00322 wait(T16); 00323 00324 // deceleration 00325 for(float a=Vmax6;a>=0;a=a-0.001) 00326 { 00327 wait(0.001); 00328 PWM6.write(a);// fixe le rapport cyclique à la valeur a% 00329 } 00330 00331 }; 00332 00333 int main() 00334 { 00335 device.baud(38400); 00336 device.printf("Hello World\n"); 00337 00338 00339 char c; 00340 00341 led1=0; 00342 led2=0; 00343 led3=0; 00344 led4=0; 00345 00346 while (1) 00347 { 00348 00349 device.printf("Enter axis to move?\r\n"); 00350 device.scanf("%c",&c); 00351 switch(c){ 00352 case '1': 00353 //(float Vmax,int T1,int sens_rotation,int frein) 00354 device.printf("moving Robotic Axis 1\r\n"); 00355 led1=1; 00356 led2=0; 00357 led3=0; 00358 led4=0; 00359 motor1_mouve(1,1,1,0); 00360 break; 00361 00362 case '2': 00363 //(float Vmax,int T1,int sens_rotation,int frein) 00364 device.printf("moving Robotic Axis 2\r\n"); 00365 led1=0; 00366 led2=1; 00367 led3=0; 00368 led4=0; 00369 motor2_mouve(1,1,1,0); 00370 break; 00371 00372 case '3': 00373 //(float Vmax,int T1,int sens_rotation,int frein) 00374 device.printf("moving Robotic Axis 3\r\n"); 00375 led1=1; 00376 led2=1; 00377 led3=0; 00378 led4=0; 00379 motor3_mouve(1,1,1,0); 00380 break; 00381 00382 case '4': 00383 //(float Vmax,int T1,int sens_rotation,int frein) 00384 device.printf("moving Robotic Axis 4\r\n"); 00385 led1=0; 00386 led2=0; 00387 led3=1; 00388 led4=0; 00389 motor4_mouve(1,1,1,0); 00390 break; 00391 00392 case '5': 00393 //(float Vmax,int T1,int sens_rotation,int frein) 00394 device.printf("moving Robotic Axis 5\r\n"); 00395 led1=1; 00396 led2=0; 00397 led3=1; 00398 led4=0; 00399 motor5_mouve(1,1,1,0); 00400 break; 00401 00402 case '6': 00403 //(float Vmax,int T1,int sens_rotation,int frein) 00404 device.printf("moving Robotic Axis 6\r\n"); 00405 led1=0; 00406 led2=1; 00407 led3=1; 00408 led4=0; 00409 motor6_mouve(1,1,1,0); 00410 break; 00411 00412 case '7': 00413 //(float Vmax,int T1,int sens_rotation,int frein) 00414 device.printf("moving Robotic 7\r\n"); 00415 led1=1; 00416 led2=1; 00417 led3=1; 00418 led4=0; 00419 motor1_mouve(1,1,1,0); 00420 motor2_mouve(1,1,1,0); 00421 motor3_mouve(1,1,1,0); 00422 motor4_mouve(1,1,1,0); 00423 motor5_mouve(1,1,1,0); 00424 motor6_mouve(1,1,1,0); 00425 00426 break; 00427 00428 00429 case '8': 00430 //(float Vmax,int T1,int sens_rotation,int frein) 00431 device.printf("music Robotic 8\r\n"); 00432 led1=0; 00433 led2=0; 00434 led3=0; 00435 led4=1; 00436 00437 PwmOut buzzer(p21); 00438 float frequency[]={659,554,659,554,440,494,554,587,494,659,554,440}; 00439 float beat[]={1,1,1,1,1,0.5,0.5,1,1,1,1,2}; //beat array 00440 00441 00442 for (int i=0;i<=11;i++) { 00443 buzzer.period(1/(2*frequency[i])); // set PWM period 00444 buzzer=0.5; // set duty cycle 00445 wait(0.4*beat[i]); // hold for beat period 00446 } 00447 break; 00448 00449 case '9': 00450 //(float Vmax,int T1,int sens_rotation,int frein) 00451 device.printf("moving Robotic 9\r\n"); 00452 00453 led1=1; 00454 led2=0; 00455 led3=0; 00456 led4=1; 00457 00458 motor1_mouve(1,1,1,0); 00459 motor1_mouve(1,1,0,0); 00460 motor1_mouve(1,1,1,0); 00461 motor1_mouve(1,1,0,0); 00462 00463 break; 00464 00465 case '0': 00466 //(float Vmax,int T1,int sens_rotation,int frein) 00467 device.printf("moving Robotic 0\r\n"); 00468 00469 led1=1; 00470 led2=0; 00471 led3=1; 00472 led4=0; 00473 00474 motor1_mouve(1,1,1,0); 00475 motor1_mouve(1,1,0,0); 00476 motor1_mouve(1,1,1,0); 00477 motor1_mouve(1,1,0,0); 00478 00479 break; 00480 00481 } 00482 00483 00484 00485 00486 00487 00488 }; 00489 00490 } 00491
Generated on Sat Aug 27 2022 04:54:10 by 1.7.2