PWN gen code

Dependencies:   mbed

Fork of trqrod_pwm by GOPA KUMAR K C

Committer:
gkumar
Date:
Fri Feb 13 16:43:42 2015 +0000
Revision:
1:c872ad833d2a
Parent:
0:85b285794bd5
Torque_rod_pwm

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gkumar 1:c872ad833d2a 1 #include "mbed.h"
gkumar 1:c872ad833d2a 2 #include "math.h"
gkumar 1:c872ad833d2a 3 #include "stdlib.h"
gkumar 1:c872ad833d2a 4 PwmOut PWM1(D2); //Functions used to generate PWM signal
gkumar 1:c872ad833d2a 5 PwmOut PWM2(D3);
gkumar 1:c872ad833d2a 6 PwmOut PWM3(D4); //PWM output comes from pins p6
gkumar 1:c872ad833d2a 7 float M[3];
gkumar 1:c872ad833d2a 8
gkumar 1:c872ad833d2a 9
gkumar 1:c872ad833d2a 10 void main()
gkumar 1:c872ad833d2a 11 {
gkumar 0:85b285794bd5 12 float DCx = 0; //Duty cycle of Moment in x, y, z directions
gkumar 0:85b285794bd5 13 float ix = 0; //Current sent in x, y, z TR's
gkumar 0:85b285794bd5 14 float timep = 0.02 ;
gkumar 0:85b285794bd5 15 float Mx=M[0]; //Time period is set to 0.02s
gkumar 0:85b285794bd5 16 //Moment in x, y, z directions
gkumar 1:c872ad833d2a 17 printf("\n the moment is %f",M[0]);
gkumar 0:85b285794bd5 18
gkumar 0:85b285794bd5 19
gkumar 0:85b285794bd5 20 ix = Mx * 0.3 ; //Moment and Current always have the linear relationship
gkumar 0:85b285794bd5 21
gkumar 0:85b285794bd5 22 if( ix>0&& ix < 0.006 ) //Current and Duty cycle have the linear relationship between 1% and 100%
gkumar 0:85b285794bd5 23 {
gkumar 0:85b285794bd5 24 DCx = 6*1000000*pow(ix,4) - 377291*pow(ix,3) + 4689.6*pow(ix,2) + 149.19*ix - 0.0008;
gkumar 0:85b285794bd5 25 PWM1.period(timep);
gkumar 0:85b285794bd5 26 PWM1 = DCx/100 ;
gkumar 0:85b285794bd5 27 }
gkumar 0:85b285794bd5 28 else if( ix >= 0.006&& ix < 0.0116)
gkumar 0:85b285794bd5 29 {
gkumar 0:85b285794bd5 30 DCx = 1*100000000*pow(ix,4) - 5*1000000*pow(ix,3) + 62603*pow(ix,2) - 199.29*ix + 0.7648;
gkumar 0:85b285794bd5 31 PWM1.period(timep);
gkumar 0:85b285794bd5 32 PWM1 = DCx/100 ;
gkumar 0:85b285794bd5 33 }
gkumar 0:85b285794bd5 34 else if (ix >= 0.0116&& ix < 0.0624)
gkumar 0:85b285794bd5 35 {
gkumar 0:85b285794bd5 36
gkumar 0:85b285794bd5 37 DCx = 212444*pow(ix,4) - 33244*pow(ix,3) + 1778.4*pow(ix,2) + 120.91*ix + 0.3878;
gkumar 0:85b285794bd5 38 PWM1.period(timep);
gkumar 0:85b285794bd5 39 PWM1 = DCx/100 ;
gkumar 0:85b285794bd5 40 }
gkumar 0:85b285794bd5 41 else if(ix >= 0.0624&& ix < 0.555)
gkumar 0:85b285794bd5 42 {
gkumar 0:85b285794bd5 43 printf("\nACS entered if\n");
gkumar 0:85b285794bd5 44 DCx = 331.15*pow(ix,4) - 368.09*pow(ix,3) + 140.43*pow(ix,2) + 158.59*ix + 0.0338;
gkumar 0:85b285794bd5 45 PWM1.period(timep);
gkumar 0:85b285794bd5 46 PWM1 = DCx/100 ;
gkumar 0:85b285794bd5 47 }
gkumar 0:85b285794bd5 48 else if(ix==0)
gkumar 0:85b285794bd5 49 {
gkumar 1:c872ad833d2a 50 DCx = 50;
gkumar 0:85b285794bd5 51 PWM1.period(timep);
gkumar 0:85b285794bd5 52 PWM1 = DCx/100 ;
gkumar 0:85b285794bd5 53 }
gkumar 0:85b285794bd5 54 else
gkumar 0:85b285794bd5 55 {
gkumar 0:85b285794bd5 56 // printf("!!!!!!!!!!Error!!!!!!!!!");
gkumar 0:85b285794bd5 57 }
gkumar 1:c872ad833d2a 58
gkumar 1:c872ad833d2a 59 printf("\n moment :%f\n",DCx);
gkumar 1:c872ad833d2a 60 float DCy = 0; //Duty cycle of Moment in x, y, z directions
gkumar 1:c872ad833d2a 61 float iy = 0; //Current sent in x, y, z TR's
gkumar 1:c872ad833d2a 62
gkumar 1:c872ad833d2a 63 float My=M[1]; //Time period is set to 0.2s
gkumar 1:c872ad833d2a 64 //Moment in x, y, z directions
gkumar 1:c872ad833d2a 65
gkumar 1:c872ad833d2a 66
gkumar 1:c872ad833d2a 67 iy = My * 0.3 ; //Moment and Current always have the linear relationship
gkumar 1:c872ad833d2a 68
gkumar 1:c872ad833d2a 69 if( iy>0&& iy < 0.006 ) //Current and Duty cycle have the linear relationship between 1% and 100%
gkumar 1:c872ad833d2a 70 {
gkumar 1:c872ad833d2a 71 DCy = 6*1000000*pow(iy,4) - 377291*pow(iy,3) + 4689.6*pow(iy,2) + 149.19*iy - 0.0008;
gkumar 1:c872ad833d2a 72 PWM2.period(timep);
gkumar 1:c872ad833d2a 73 PWM2 = DCy/100 ;
gkumar 1:c872ad833d2a 74 }
gkumar 1:c872ad833d2a 75 else if( iy >= 0.006&& iy < 0.0116)
gkumar 1:c872ad833d2a 76 {
gkumar 1:c872ad833d2a 77 DCy = 1*100000000*pow(iy,4) - 5*1000000*pow(iy,3) + 62603*pow(iy,2) - 199.29*iy + 0.7648;
gkumar 1:c872ad833d2a 78 PWM2.period(timep);
gkumar 1:c872ad833d2a 79 PWM2 = DCy/100 ;
gkumar 1:c872ad833d2a 80 }
gkumar 1:c872ad833d2a 81 else if (iy >= 0.0116&& iy < 0.0624)
gkumar 1:c872ad833d2a 82 {
gkumar 1:c872ad833d2a 83
gkumar 1:c872ad833d2a 84 DCy = 212444*pow(iy,4) - 33244*pow(iy,3) + 1778.4*pow(iy,2) + 120.91*iy + 0.3878;
gkumar 1:c872ad833d2a 85 PWM2.period(timep);
gkumar 1:c872ad833d2a 86 PWM2 = DCy/100 ;
gkumar 1:c872ad833d2a 87 }
gkumar 1:c872ad833d2a 88 else if(iy >= 0.0624&& iy < 0.555)
gkumar 1:c872ad833d2a 89 {
gkumar 1:c872ad833d2a 90 printf("\nACS entered if\n");
gkumar 1:c872ad833d2a 91 DCy = 331.15*pow(iy,4) - 368.09*pow(iy,3) + 140.43*pow(iy,2) + 158.59*iy + 0.0338;
gkumar 1:c872ad833d2a 92 PWM2.period(timep);
gkumar 1:c872ad833d2a 93 PWM2 = DCy/100 ;
gkumar 1:c872ad833d2a 94 }
gkumar 1:c872ad833d2a 95 else if(iy==0)
gkumar 1:c872ad833d2a 96 {
gkumar 1:c872ad833d2a 97 DCy = 0;
gkumar 1:c872ad833d2a 98 PWM2.period(timep);
gkumar 1:c872ad833d2a 99 PWM2 = DCy/100 ;
gkumar 1:c872ad833d2a 100 }
gkumar 1:c872ad833d2a 101 else
gkumar 1:c872ad833d2a 102 {
gkumar 1:c872ad833d2a 103 // printf("!!!!!!!!!!Error!!!!!!!!!");
gkumar 1:c872ad833d2a 104 }
gkumar 1:c872ad833d2a 105 float DCz = 0; //Duty cycle of Moment in x, y, z directions
gkumar 1:c872ad833d2a 106 float iz = 0; //Current sent in x, y, z TR's
gkumar 1:c872ad833d2a 107
gkumar 1:c872ad833d2a 108 float Mz=M[2]; //Time period is set to 0.2s
gkumar 1:c872ad833d2a 109 //Moment in x, y, z directions
gkumar 1:c872ad833d2a 110
gkumar 1:c872ad833d2a 111
gkumar 1:c872ad833d2a 112 iz = Mz * 0.3 ; //Moment and Current always have the linear relationship
gkumar 1:c872ad833d2a 113
gkumar 1:c872ad833d2a 114 if( iz>0&& iz < 0.006 ) //Current and Duty cycle have the linear relationship between 1% and 100%
gkumar 1:c872ad833d2a 115 {
gkumar 1:c872ad833d2a 116 DCz = 6*1000000*pow(iz,4) - 377291*pow(iz,3) + 4689.6*pow(iz,2) + 149.19*iz - 0.0008;
gkumar 1:c872ad833d2a 117 PWM3.period(timep);
gkumar 1:c872ad833d2a 118 PWM3 = DCz/100 ;
gkumar 1:c872ad833d2a 119 }
gkumar 1:c872ad833d2a 120 else if( iz >= 0.006&& iz < 0.0116)
gkumar 1:c872ad833d2a 121 {
gkumar 1:c872ad833d2a 122 DCz = 1*100000000*pow(iz,4) - 5*1000000*pow(iz,3) + 62603*pow(iz,2) - 199.29*iz + 0.7648;
gkumar 1:c872ad833d2a 123 PWM3.period(timep);
gkumar 1:c872ad833d2a 124 PWM3 = DCz/100 ;
gkumar 1:c872ad833d2a 125 }
gkumar 1:c872ad833d2a 126 else if (iz >= 0.0116&& iz < 0.0624)
gkumar 1:c872ad833d2a 127 {
gkumar 1:c872ad833d2a 128
gkumar 1:c872ad833d2a 129 DCz = 212444*pow(iz,4) - 33244*pow(iz,3) + 1778.4*pow(iz,2) + 120.91*iz + 0.3878;
gkumar 1:c872ad833d2a 130 PWM3.period(timep);
gkumar 1:c872ad833d2a 131 PWM3 = DCz/100 ;
gkumar 1:c872ad833d2a 132 }
gkumar 1:c872ad833d2a 133 else if(iz >= 0.0624&& iz < 0.555)
gkumar 1:c872ad833d2a 134 {
gkumar 1:c872ad833d2a 135 printf("\nACS entered if\n");
gkumar 1:c872ad833d2a 136 DCz = 331.15*pow(iz,4) - 368.09*pow(iz,3) + 140.43*pow(iz,2) + 158.59*iz + 0.0338;
gkumar 1:c872ad833d2a 137 PWM3.period(timep);
gkumar 1:c872ad833d2a 138 PWM3 = DCz/100 ;
gkumar 1:c872ad833d2a 139 }
gkumar 1:c872ad833d2a 140 else if(iz==0)
gkumar 1:c872ad833d2a 141 {
gkumar 1:c872ad833d2a 142 DCz = 0;
gkumar 1:c872ad833d2a 143 PWM3.period(timep);
gkumar 1:c872ad833d2a 144 PWM3 = DCz/100 ;
gkumar 1:c872ad833d2a 145 }
gkumar 1:c872ad833d2a 146 else
gkumar 1:c872ad833d2a 147 {
gkumar 1:c872ad833d2a 148 // printf("!!!!!!!!!!Error!!!!!!!!!");
gkumar 1:c872ad833d2a 149 }
gkumar 1:c872ad833d2a 150
gkumar 1:c872ad833d2a 151 }