Marina Muenster
/
ES20_ElevatorControl
This is the end of 3.1 and corresponds to ElevatorLab_part3.m in Matlab
main.cpp@1:38c836c4bc0f, 2016-03-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |