Jacob Dodge
/
TransferFunction
Code used to find the Transfer function of the turret controller
main.cpp@0:8d8b86dca8a7, 2015-04-19 (annotated)
- Committer:
- m161650
- Date:
- Sun Apr 19 14:34:26 2015 +0000
- Revision:
- 0:8d8b86dca8a7
Code for Controlling the Turret;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
m161650 | 0:8d8b86dca8a7 | 1 | //#include "mbed.h" |
m161650 | 0:8d8b86dca8a7 | 2 | #include "QEI.h" |
m161650 | 0:8d8b86dca8a7 | 3 | #include "time.h" |
m161650 | 0:8d8b86dca8a7 | 4 | |
m161650 | 0:8d8b86dca8a7 | 5 | QEI encoder(p25,p24,NC,1600); |
m161650 | 0:8d8b86dca8a7 | 6 | |
m161650 | 0:8d8b86dca8a7 | 7 | DigitalOut direction(p21); |
m161650 | 0:8d8b86dca8a7 | 8 | PwmOut speed(p22); |
m161650 | 0:8d8b86dca8a7 | 9 | |
m161650 | 0:8d8b86dca8a7 | 10 | int main() { |
m161650 | 0:8d8b86dca8a7 | 11 | float CurrentTheta; |
m161650 | 0:8d8b86dca8a7 | 12 | int location; |
m161650 | 0:8d8b86dca8a7 | 13 | float CurrentTime = 0.0; |
m161650 | 0:8d8b86dca8a7 | 14 | int i = 0; |
m161650 | 0:8d8b86dca8a7 | 15 | int p = 0; |
m161650 | 0:8d8b86dca8a7 | 16 | float Angle[500]; //Radians |
m161650 | 0:8d8b86dca8a7 | 17 | float Time[500]; //Seconds |
m161650 | 0:8d8b86dca8a7 | 18 | float w[500]; //Radians/second |
m161650 | 0:8d8b86dca8a7 | 19 | Angle[0] = 0.0; |
m161650 | 0:8d8b86dca8a7 | 20 | Time[0] = 0.0; |
m161650 | 0:8d8b86dca8a7 | 21 | w[0] = 0.0; |
m161650 | 0:8d8b86dca8a7 | 22 | i =1; |
m161650 | 0:8d8b86dca8a7 | 23 | |
m161650 | 0:8d8b86dca8a7 | 24 | Timer t; |
m161650 | 0:8d8b86dca8a7 | 25 | |
m161650 | 0:8d8b86dca8a7 | 26 | |
m161650 | 0:8d8b86dca8a7 | 27 | //Motor Initialize |
m161650 | 0:8d8b86dca8a7 | 28 | float dc; |
m161650 | 0:8d8b86dca8a7 | 29 | int dir; |
m161650 | 0:8d8b86dca8a7 | 30 | speed.period(1.0/20.0e3); |
m161650 | 0:8d8b86dca8a7 | 31 | |
m161650 | 0:8d8b86dca8a7 | 32 | |
m161650 | 0:8d8b86dca8a7 | 33 | //For Direction 1 = CW and 0 =CCW |
m161650 | 0:8d8b86dca8a7 | 34 | printf("Enter duty cycle between 0 and 100. Enter Direction 1 or 0.\n"); |
m161650 | 0:8d8b86dca8a7 | 35 | scanf("%f %d", &dc, &dir); |
m161650 | 0:8d8b86dca8a7 | 36 | dc = (dc/100); |
m161650 | 0:8d8b86dca8a7 | 37 | speed = dc; |
m161650 | 0:8d8b86dca8a7 | 38 | direction = dir; |
m161650 | 0:8d8b86dca8a7 | 39 | |
m161650 | 0:8d8b86dca8a7 | 40 | |
m161650 | 0:8d8b86dca8a7 | 41 | |
m161650 | 0:8d8b86dca8a7 | 42 | |
m161650 | 0:8d8b86dca8a7 | 43 | t.start(); |
m161650 | 0:8d8b86dca8a7 | 44 | while(i < 500) |
m161650 | 0:8d8b86dca8a7 | 45 | { |
m161650 | 0:8d8b86dca8a7 | 46 | CurrentTime = t.read(); |
m161650 | 0:8d8b86dca8a7 | 47 | location = encoder.getPulses(); |
m161650 | 0:8d8b86dca8a7 | 48 | CurrentTheta = (location/(1600.0*2.0)*2.0*3.14); //in Radians |
m161650 | 0:8d8b86dca8a7 | 49 | Angle[i] = CurrentTheta; |
m161650 | 0:8d8b86dca8a7 | 50 | Time[i] = CurrentTime; |
m161650 | 0:8d8b86dca8a7 | 51 | w[i]=(Angle[i]-Angle[i-1])/(Time[i]-Time[i-1]); //Radians/Second |
m161650 | 0:8d8b86dca8a7 | 52 | wait(0.01); //Setting the interval so we have 5 seconds of data |
m161650 | 0:8d8b86dca8a7 | 53 | |
m161650 | 0:8d8b86dca8a7 | 54 | i++; |
m161650 | 0:8d8b86dca8a7 | 55 | } |
m161650 | 0:8d8b86dca8a7 | 56 | |
m161650 | 0:8d8b86dca8a7 | 57 | speed = 0; |
m161650 | 0:8d8b86dca8a7 | 58 | |
m161650 | 0:8d8b86dca8a7 | 59 | for(p=0; p < 500; p++) |
m161650 | 0:8d8b86dca8a7 | 60 | { |
m161650 | 0:8d8b86dca8a7 | 61 | printf("%f,%f, %f\n\r", Angle[p], Time[p], w[p]); //Print the time and the current angle and angular velocity |
m161650 | 0:8d8b86dca8a7 | 62 | } |
m161650 | 0:8d8b86dca8a7 | 63 | printf("Complete"); |
m161650 | 0:8d8b86dca8a7 | 64 | |
m161650 | 0:8d8b86dca8a7 | 65 | |
m161650 | 0:8d8b86dca8a7 | 66 | } |