yacine sidhoum
/
mbed_PWM_6moteurs_SY_2017_ver007
generate pwm to control dc motor using lmd18200t like power stage
main.cpp
- Committer:
- exarkun
- Date:
- 2017-10-06
- Revision:
- 0:d550b3f8c46b
File content as of revision 0:d550b3f8c46b:
#include "mbed.h" #include <string> Serial device(p9, p10); // tx, rx DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); DigitalOut led4(LED4); float a=0; float b=0; float c=0; float d=0; float e=0; float f=0; //void init_moteur_1a6() //{ //affectation pin frein moteur DigitalOut frein_moteur1(p5); DigitalOut frein_moteur2(p6); DigitalOut frein_moteur3(p7); DigitalOut frein_moteur4(p8); DigitalOut frein_moteur5(p11); DigitalOut frein_moteur6(p12); //affectation pin sens rotation moteur DigitalOut sens_rotation_moteur1(p13); DigitalOut sens_rotation_moteur2(p14); DigitalOut sens_rotation_moteur3(p27); DigitalOut sens_rotation_moteur4(p28); DigitalOut sens_rotation_moteur5(p29); DigitalOut sens_rotation_moteur6(p30); //affectation pin pwm PwmOut PWM1(p21); PwmOut PWM2(p22); PwmOut PWM3(p23); PwmOut PWM4(p24); PwmOut PWM5(p25); PwmOut PWM6(p26); //}; ///////////////////////////////////////////////////////////////////////////// // declaration de la fonction moteur1 // ///////////////////////////////////////////////////////////////////////////// void motor1_mouve(float Vmax1,int T11,int sens_rotation1,int frein1) { ////////////////////////// //initialisation moteur // ////////////////////////// DigitalOut frein_moteur1(p5); //declaration sortie frein sur p5 DigitalOut sens_rotation_moteur1(p13); //declaration sens de rotation moteur1 sur p13 PwmOut PWM1(p21); //declaration de la sortie pwm sur p21 PWM1.period(0.00005);// initialisation du rapport cyclique fixe la période à 50us----f=20Khz frein_moteur1.write(frein1);//affectation de la valeur du frein moteur1 sens_rotation_moteur1.write(sens_rotation1); //affectation du sens de rotation moteur1 ////////////////////////////////////////////////// // conversion valeur % vers num explotable // ////////////////////////////////////////////////// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // acceleration for(float a=0;a<= Vmax1;a=a+0.001) { wait(0.001); PWM1.write(a);// fixe le rapport cyclique à la valeur a% } // mouvement en Vmax wait(T11); // deceleration for(float a=Vmax1;a>=0;a=a-0.001) { wait(0.001); PWM1.write(a);// fixe le rapport cyclique à la valeur a% } }; ///////////////////////////////////////////////////////////////////////////// // declaration de la fonction moteur2 // ///////////////////////////////////////////////////////////////////////////// void motor2_mouve(float Vmax2,int T12,int sens_rotation2,int frein2) { /////////////////////////// //initialisation moteur2 // /////////////////////////// DigitalOut frein_moteur2(p6); //declaration sortie frein sur p5 DigitalOut sens_rotation_moteur2(p14); //declaration sens de rotation moteur1 sur p13 PwmOut PWM1(p22); //declaration de la sortie pwm sur p21 PWM2.period(0.00005);// initialisation du rapport cyclique fixe la période à 50us----f=20Khz frein_moteur2.write(frein2);//affectation de la valeur du frein moteur1 sens_rotation_moteur2.write(sens_rotation2); //affectation du sens de rotation moteur1 ////////////////////////////////////////////////// // conversion valeur % vers num explotable // ////////////////////////////////////////////////// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // acceleration for(float a=0;a<= Vmax2;a=a+0.001) { wait(0.001); PWM2.write(a);// fixe le rapport cyclique à la valeur a% } // mouvement en Vmax wait(T12); // deceleration for(float a=Vmax2;a>=0;a=a-0.001) { wait(0.001); PWM2.write(a);// fixe le rapport cyclique à la valeur a% } }; ///////////////////////////////////////////////////////////////////////////// // declaration de la fonction moteur3 // ///////////////////////////////////////////////////////////////////////////// void motor3_mouve(float Vmax3,int T13,int sens_rotation3,int frein3) { /////////////////////////// //initialisation moteur3 // /////////////////////////// DigitalOut frein_moteur3(p7); //declaration sortie frein sur p5 DigitalOut sens_rotation_moteur3(p27); //declaration sens de rotation moteur1 sur p13 PwmOut PWM3(p23); //declaration de la sortie pwm sur p21 PWM3.period(0.00005);// initialisation du rapport cyclique fixe la période à 50us----f=20Khz frein_moteur3.write(frein3);//affectation de la valeur du frein moteur1 sens_rotation_moteur3.write(sens_rotation3); //affectation du sens de rotation moteur1 ////////////////////////////////////////////////// // conversion valeur % vers num explotable // ////////////////////////////////////////////////// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // acceleration for(float a=0;a<= Vmax3;a=a+0.001) { wait(0.001); PWM3.write(a);// fixe le rapport cyclique à la valeur a% } // mouvement en Vmax wait(T13); // deceleration for(float a=Vmax3;a>=0;a=a-0.001) { wait(0.001); PWM3.write(a);// fixe le rapport cyclique à la valeur a% } }; ///////////////////////////////////////////////////////////////////////////// // declaration de la fonction moteur4 // ///////////////////////////////////////////////////////////////////////////// void motor4_mouve(float Vmax4,int T14,int sens_rotation4,int frein4) { /////////////////////////// //initialisation moteur4 // /////////////////////////// DigitalOut frein_moteur4(p8); //declaration sortie frein sur p5 DigitalOut sens_rotation_moteur4(p28); //declaration sens de rotation moteur1 sur p13 PwmOut PWM4(p24); //declaration de la sortie pwm sur p21 PWM4.period(0.00005);// initialisation du rapport cyclique fixe la période à 50us----f=20Khz frein_moteur4.write(frein4);//affectation de la valeur du frein moteur4 sens_rotation_moteur4.write(sens_rotation4); //affectation du sens de rotation moteur4 ////////////////////////////////////////////////// // conversion valeur % vers num explotable // ////////////////////////////////////////////////// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // acceleration for(float a=0;a<= Vmax4;a=a+0.001) { wait(0.001); PWM4.write(a);// fixe le rapport cyclique à la valeur a% } // mouvement en Vmax wait(T14); // deceleration for(float a=Vmax4;a>=0;a=a-0.001) { wait(0.001); PWM4.write(a);// fixe le rapport cyclique à la valeur a% } }; ///////////////////////////////////////////////////////////////////////////// // declaration de la fonction moteur5 // ///////////////////////////////////////////////////////////////////////////// void motor5_mouve(float Vmax5,int T15,int sens_rotation5,int frein5) { /////////////////////////// //initialisation moteur5 // /////////////////////////// DigitalOut frein_moteur5(p11); //declaration sortie frein sur p5 DigitalOut sens_rotation_moteur5(p29); //declaration sens de rotation moteur1 sur p13 PwmOut PWM5(p25); //declaration de la sortie pwm sur p21 PWM5.period(0.00005);// initialisation du rapport cyclique fixe la période à 50us----f=20Khz frein_moteur5.write(frein5);//affectation de la valeur du frein moteur4 sens_rotation_moteur5.write(sens_rotation5); //affectation du sens de rotation moteur4 ////////////////////////////////////////////////// // conversion valeur % vers num explotable // ////////////////////////////////////////////////// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // acceleration for(float a=0;a<= Vmax5;a=a+0.001) { wait(0.001); PWM5.write(a);// fixe le rapport cyclique à la valeur a% } // mouvement en Vmax wait(T15); // deceleration for(float a=Vmax5;a>=0;a=a-0.001) { wait(0.001); PWM5.write(a);// fixe le rapport cyclique à la valeur a% } }; ///////////////////////////////////////////////////////////////////////////// // declaration de la fonction moteur6 // ///////////////////////////////////////////////////////////////////////////// void motor6_mouve(float Vmax6,int T16,int sens_rotation6,int frein6) { /////////////////////////// //initialisation moteur6 // /////////////////////////// DigitalOut frein_moteur6(p12); //declaration sortie frein sur p5 DigitalOut sens_rotation_moteur6(p30); //declaration sens de rotation moteur1 sur p13 PwmOut PWM6(p26); //declaration de la sortie pwm sur p21 PWM6.period(0.00005);// initialisation du rapport cyclique fixe la période à 50us----f=20Khz frein_moteur6.write(frein6);//affectation de la valeur du frein moteur4 sens_rotation_moteur6.write(sens_rotation6); //affectation du sens de rotation moteur4 ////////////////////////////////////////////////// // conversion valeur % vers num explotable // ////////////////////////////////////////////////// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // acceleration for(float a=0;a<= Vmax6;a=a+0.001) { wait(0.001); PWM6.write(a);// fixe le rapport cyclique à la valeur a% } // mouvement en Vmax wait(T16); // deceleration for(float a=Vmax6;a>=0;a=a-0.001) { wait(0.001); PWM6.write(a);// fixe le rapport cyclique à la valeur a% } }; int main() { device.baud(38400); device.printf("Hello World\n"); char c; led1=0; led2=0; led3=0; led4=0; while (1) { device.printf("Enter axis to move?\r\n"); device.scanf("%c",&c); switch(c){ case '1': //(float Vmax,int T1,int sens_rotation,int frein) device.printf("moving Robotic Axis 1\r\n"); led1=1; led2=0; led3=0; led4=0; motor1_mouve(1,1,1,0); break; case '2': //(float Vmax,int T1,int sens_rotation,int frein) device.printf("moving Robotic Axis 2\r\n"); led1=0; led2=1; led3=0; led4=0; motor2_mouve(1,1,1,0); break; case '3': //(float Vmax,int T1,int sens_rotation,int frein) device.printf("moving Robotic Axis 3\r\n"); led1=1; led2=1; led3=0; led4=0; motor3_mouve(1,1,1,0); break; case '4': //(float Vmax,int T1,int sens_rotation,int frein) device.printf("moving Robotic Axis 4\r\n"); led1=0; led2=0; led3=1; led4=0; motor4_mouve(1,1,1,0); break; case '5': //(float Vmax,int T1,int sens_rotation,int frein) device.printf("moving Robotic Axis 5\r\n"); led1=1; led2=0; led3=1; led4=0; motor5_mouve(1,1,1,0); break; case '6': //(float Vmax,int T1,int sens_rotation,int frein) device.printf("moving Robotic Axis 6\r\n"); led1=0; led2=1; led3=1; led4=0; motor6_mouve(1,1,1,0); break; case '7': //(float Vmax,int T1,int sens_rotation,int frein) device.printf("moving Robotic 7\r\n"); led1=1; led2=1; led3=1; led4=0; motor1_mouve(1,1,1,0); motor2_mouve(1,1,1,0); motor3_mouve(1,1,1,0); motor4_mouve(1,1,1,0); motor5_mouve(1,1,1,0); motor6_mouve(1,1,1,0); break; case '8': //(float Vmax,int T1,int sens_rotation,int frein) device.printf("music Robotic 8\r\n"); led1=0; led2=0; led3=0; led4=1; PwmOut buzzer(p21); float frequency[]={659,554,659,554,440,494,554,587,494,659,554,440}; float beat[]={1,1,1,1,1,0.5,0.5,1,1,1,1,2}; //beat array for (int i=0;i<=11;i++) { buzzer.period(1/(2*frequency[i])); // set PWM period buzzer=0.5; // set duty cycle wait(0.4*beat[i]); // hold for beat period } break; case '9': //(float Vmax,int T1,int sens_rotation,int frein) device.printf("moving Robotic 9\r\n"); led1=1; led2=0; led3=0; led4=1; motor1_mouve(1,1,1,0); motor1_mouve(1,1,0,0); motor1_mouve(1,1,1,0); motor1_mouve(1,1,0,0); break; case '0': //(float Vmax,int T1,int sens_rotation,int frein) device.printf("moving Robotic 0\r\n"); led1=1; led2=0; led3=1; led4=0; motor1_mouve(1,1,1,0); motor1_mouve(1,1,0,0); motor1_mouve(1,1,1,0); motor1_mouve(1,1,0,0); break; } }; }