Code used to find the Transfer function of the turret controller

Dependencies:   QEI mbed

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?

UserRevisionLine numberNew 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 }