This is the end of 3.1 and corresponds to ElevatorLab_part3.m in Matlab

Dependencies:   Motor mbed

Committer:
marinacaroline
Date:
Thu Mar 10 19:52:42 2016 +0000
Revision:
1:38c836c4bc0f
Parent:
0:19db2de32450
this code covers the elevator lab through section 4, and has the logic, proportional, and integral controllers all inside and labelled. to use one, just comment out the other two;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
marinacaroline 0:19db2de32450 1 #include "mbed.h" //includes a library of basic c commands
marinacaroline 0:19db2de32450 2 #include "Motor.h"
marinacaroline 0:19db2de32450 3
marinacaroline 0:19db2de32450 4 Serial pc(USBTX,USBRX); //enables Serial connection between the mbed and teraterm
marinacaroline 0:19db2de32450 5 AnalogIn dale(p18); //declares input
marinacaroline 0:19db2de32450 6 Motor RickyBobby(p25,p27,p28); //declares output to motor
marinacaroline 0:19db2de32450 7
marinacaroline 0:19db2de32450 8 int go,cnt,pwm; //These two variables are integers
marinacaroline 1:38c836c4bc0f 9 float number,counter,x,mesHeight,desHeight,err,Kp,dutyCyc,intErr,Ki;
marinacaroline 0:19db2de32450 10 int main()
marinacaroline 0:19db2de32450 11 {
marinacaroline 0:19db2de32450 12 pc.baud(115200); //sets baud rate
marinacaroline 0:19db2de32450 13
marinacaroline 0:19db2de32450 14 while(1) { //Infinite loop
marinacaroline 0:19db2de32450 15 cnt=0;
marinacaroline 1:38c836c4bc0f 16 number=100;
marinacaroline 0:19db2de32450 17
marinacaroline 0:19db2de32450 18 //these two lines communicate from the mbed to the teraterm window to collect
marinacaroline 0:19db2de32450 19 //desired values
marinacaroline 0:19db2de32450 20
marinacaroline 0:19db2de32450 21 pc.printf("Enter one to start, along with the desired height.\r\n");
marinacaroline 0:19db2de32450 22 pc.scanf("%d,%f",&go,&desHeight);
marinacaroline 0:19db2de32450 23
marinacaroline 0:19db2de32450 24 while(go==1) { //after the loop has been initialized
marinacaroline 0:19db2de32450 25
marinacaroline 0:19db2de32450 26 while(cnt<number) //this while loop reads the data from the sensor that corresponds to dale
marinacaroline 0:19db2de32450 27 //and then prints each iteration into the teraterm window
marinacaroline 0:19db2de32450 28 {
marinacaroline 0:19db2de32450 29 x=dale.read();
marinacaroline 0:19db2de32450 30 mesHeight = ((267.3918*x*x*x) + (-431.3231*x*x) + 236.6525*x + -22.2608);
marinacaroline 0:19db2de32450 31 err = desHeight-mesHeight;
marinacaroline 1:38c836c4bc0f 32 Kp = 1.8;
marinacaroline 1:38c836c4bc0f 33
marinacaroline 1:38c836c4bc0f 34 /*
marinacaroline 1:38c836c4bc0f 35 //This is the Integral Controller
marinacaroline 1:38c836c4bc0f 36 intErr = err*cnt;
marinacaroline 1:38c836c4bc0f 37 dutyCyc = Kp*err + Ki*intErr;
marinacaroline 1:38c836c4bc0f 38 pwm = dutyCyc;
marinacaroline 1:38c836c4bc0f 39 RickyBobby.speed(dutyCyc);
marinacaroline 1:38c836c4bc0f 40 wait(.05);
marinacaroline 1:38c836c4bc0f 41 */
marinacaroline 1:38c836c4bc0f 42
marinacaroline 1:38c836c4bc0f 43 //This is the Proportional Controller
marinacaroline 1:38c836c4bc0f 44
marinacaroline 1:38c836c4bc0f 45 dutyCyc = (Kp*err);
marinacaroline 1:38c836c4bc0f 46 RickyBobby.speed(dutyCyc);
marinacaroline 1:38c836c4bc0f 47 wait(.05);
marinacaroline 1:38c836c4bc0f 48 pwm = dutyCyc;
marinacaroline 1:38c836c4bc0f 49
marinacaroline 1:38c836c4bc0f 50
marinacaroline 1:38c836c4bc0f 51 if (pwm > 1) {
marinacaroline 1:38c836c4bc0f 52 pwm = 1;
marinacaroline 1:38c836c4bc0f 53 //dutyCyc = 1;
marinacaroline 1:38c836c4bc0f 54 }
marinacaroline 1:38c836c4bc0f 55
marinacaroline 1:38c836c4bc0f 56 else if (pwm < -1) {
marinacaroline 1:38c836c4bc0f 57 pwm = -1;
marinacaroline 1:38c836c4bc0f 58 //dutyCyc = -1;
marinacaroline 1:38c836c4bc0f 59 }
marinacaroline 1:38c836c4bc0f 60
marinacaroline 1:38c836c4bc0f 61
marinacaroline 0:19db2de32450 62 //pc.printf("mesHeight = %f\r\n", mesHeight);
marinacaroline 0:19db2de32450 63
marinacaroline 1:38c836c4bc0f 64 //This is the Logic Controller
marinacaroline 1:38c836c4bc0f 65 /* if (err > 0) {
marinacaroline 0:19db2de32450 66 RickyBobby.speed(1);
marinacaroline 0:19db2de32450 67 pwm = 1;
marinacaroline 0:19db2de32450 68 wait(.05);
marinacaroline 1:38c836c4bc0f 69 }
marinacaroline 0:19db2de32450 70 else if (err < 0) {
marinacaroline 0:19db2de32450 71 RickyBobby.speed(-1);
marinacaroline 0:19db2de32450 72 pwm = -1;
marinacaroline 0:19db2de32450 73 wait(.05);
marinacaroline 0:19db2de32450 74 }
marinacaroline 0:19db2de32450 75 else {
marinacaroline 0:19db2de32450 76 RickyBobby.speed(0);
marinacaroline 0:19db2de32450 77 pwm = 0;
marinacaroline 0:19db2de32450 78 }
marinacaroline 1:38c836c4bc0f 79 */
marinacaroline 0:19db2de32450 80 cnt=cnt+1;
marinacaroline 0:19db2de32450 81 wait(.05);
marinacaroline 0:19db2de32450 82 pc.printf("%d,%f,%d\r\n",cnt,mesHeight,pwm);
marinacaroline 1:38c836c4bc0f 83
marinacaroline 0:19db2de32450 84 }
marinacaroline 0:19db2de32450 85 RickyBobby.speed(0);
marinacaroline 0:19db2de32450 86 go = 0;
marinacaroline 0:19db2de32450 87 }
marinacaroline 0:19db2de32450 88 }
marinacaroline 0:19db2de32450 89 }