GOPA KUMAR K C
/
trqrod_pwm
PWN gen code
Fork of trqrod_pwm by
main.cpp@1:c872ad833d2a, 2015-02-13 (annotated)
- 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?
User | Revision | Line number | New 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 | } |