generate pwm to control dc motor using lmd18200t like power stage

Dependencies:   mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

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