PID, tarea 3, procesadores
Dependencies: Debounced TextLCD mbed
main.cpp@1:80f82aa3d0ec, 2013-12-04 (annotated)
- Committer:
- mandres7
- Date:
- Wed Dec 04 19:45:39 2013 +0000
- Revision:
- 1:80f82aa3d0ec
- Parent:
- 0:6ef000c1b903
PID con parametros KP, KI, KD, SP definidos desde la programaci?n
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mandres7 | 0:6ef000c1b903 | 1 | #include "mbed.h" |
mandres7 | 0:6ef000c1b903 | 2 | #include "TextLCD.h" |
mandres7 | 0:6ef000c1b903 | 3 | #include "DebouncedIn.h" |
mandres7 | 0:6ef000c1b903 | 4 | |
mandres7 | 0:6ef000c1b903 | 5 | |
mandres7 | 0:6ef000c1b903 | 6 | TextLCD lcd(PTC10, PTC11, PTC12, PTC13, PTC16, PTC17); // rs, e, d4-d7TextLCD lcd(PTC10, PTC11, PTC12, PTC13, PTC16, PTC17); // rs, e, d4-d7 |
mandres7 | 0:6ef000c1b903 | 7 | DigitalOut myled(LED1); |
mandres7 | 0:6ef000c1b903 | 8 | AnalogOut Aout(PTE30); |
mandres7 | 0:6ef000c1b903 | 9 | AnalogIn Ain(PTC2); |
mandres7 | 0:6ef000c1b903 | 10 | DebouncedIn up(PTE3); |
mandres7 | 0:6ef000c1b903 | 11 | DebouncedIn down(PTE4); |
mandres7 | 0:6ef000c1b903 | 12 | DebouncedIn Gain(PTE2); |
mandres7 | 0:6ef000c1b903 | 13 | int ap,n,ai,ad; |
mandres7 | 0:6ef000c1b903 | 14 | |
mandres7 | 1:80f82aa3d0ec | 15 | float i; // set point |
mandres7 | 0:6ef000c1b903 | 16 | float j=0; // salida planta |
mandres7 | 1:80f82aa3d0ec | 17 | float ji=0; //variable proceso interno |
mandres7 | 1:80f82aa3d0ec | 18 | float spi=0; //variable proceso interno |
mandres7 | 0:6ef000c1b903 | 19 | float h=0; // entrada planta |
mandres7 | 0:6ef000c1b903 | 20 | float m=0; // Error |
mandres7 | 0:6ef000c1b903 | 21 | float mv=0; |
mandres7 | 0:6ef000c1b903 | 22 | float g=0; |
mandres7 | 1:80f82aa3d0ec | 23 | |
mandres7 | 1:80f82aa3d0ec | 24 | int sp=500; |
mandres7 | 0:6ef000c1b903 | 25 | int kp=3; |
mandres7 | 0:6ef000c1b903 | 26 | int ki=15; |
mandres7 | 0:6ef000c1b903 | 27 | int kd=1; |
mandres7 | 0:6ef000c1b903 | 28 | |
mandres7 | 0:6ef000c1b903 | 29 | |
mandres7 | 0:6ef000c1b903 | 30 | int main(){ |
mandres7 | 0:6ef000c1b903 | 31 | |
mandres7 | 0:6ef000c1b903 | 32 | //float Setpoint=0.6; |
mandres7 | 0:6ef000c1b903 | 33 | |
mandres7 | 1:80f82aa3d0ec | 34 | i=sp/999; |
mandres7 | 1:80f82aa3d0ec | 35 | lcd.cls(); |
mandres7 | 1:80f82aa3d0ec | 36 | lcd.printf("Er:%.2f",m); |
mandres7 | 1:80f82aa3d0ec | 37 | lcd.locate(8,0); |
mandres7 | 1:80f82aa3d0ec | 38 | lcd.printf("Me:%.2f",j); |
mandres7 | 1:80f82aa3d0ec | 39 | lcd.locate(0,1); |
mandres7 | 1:80f82aa3d0ec | 40 | lcd.printf("Sp:%d",sp); |
mandres7 | 1:80f82aa3d0ec | 41 | lcd.locate(8,1); |
mandres7 | 1:80f82aa3d0ec | 42 | lcd.printf("Co:%.1f",h); |
mandres7 | 1:80f82aa3d0ec | 43 | wait(2); |
mandres7 | 1:80f82aa3d0ec | 44 | |
mandres7 | 1:80f82aa3d0ec | 45 | // |
mandres7 | 1:80f82aa3d0ec | 46 | while(1) { |
mandres7 | 1:80f82aa3d0ec | 47 | |
mandres7 | 1:80f82aa3d0ec | 48 | spi=sp*(3.3/999); |
mandres7 | 1:80f82aa3d0ec | 49 | |
mandres7 | 1:80f82aa3d0ec | 50 | //wait(0.3); |
mandres7 | 1:80f82aa3d0ec | 51 | i=sp/999; |
mandres7 | 1:80f82aa3d0ec | 52 | if(i<=1){ |
mandres7 | 0:6ef000c1b903 | 53 | |
mandres7 | 0:6ef000c1b903 | 54 | j=Ain; |
mandres7 | 1:80f82aa3d0ec | 55 | ji=j*3.3; |
mandres7 | 1:80f82aa3d0ec | 56 | m=(spi-ji); |
mandres7 | 0:6ef000c1b903 | 57 | //n=m*100; |
mandres7 | 0:6ef000c1b903 | 58 | ap=kp*m; |
mandres7 | 0:6ef000c1b903 | 59 | ai=(ki*m)+ai; |
mandres7 | 0:6ef000c1b903 | 60 | |
mandres7 | 0:6ef000c1b903 | 61 | ad=kd*(m-mv); |
mandres7 | 0:6ef000c1b903 | 62 | h=ap+ai+ad; |
mandres7 | 1:80f82aa3d0ec | 63 | |
mandres7 | 1:80f82aa3d0ec | 64 | if (h>999){ |
mandres7 | 1:80f82aa3d0ec | 65 | h=999; |
mandres7 | 1:80f82aa3d0ec | 66 | } |
mandres7 | 0:6ef000c1b903 | 67 | if (h<0){ |
mandres7 | 1:80f82aa3d0ec | 68 | h=0; |
mandres7 | 1:80f82aa3d0ec | 69 | } |
mandres7 | 1:80f82aa3d0ec | 70 | |
mandres7 | 1:80f82aa3d0ec | 71 | g=(h/999); |
mandres7 | 1:80f82aa3d0ec | 72 | |
mandres7 | 0:6ef000c1b903 | 73 | Aout=g; |
mandres7 | 0:6ef000c1b903 | 74 | wait(0.22); |
mandres7 | 0:6ef000c1b903 | 75 | |
mandres7 | 0:6ef000c1b903 | 76 | |
mandres7 | 0:6ef000c1b903 | 77 | lcd.cls(); |
mandres7 | 1:80f82aa3d0ec | 78 | lcd.printf("Er:%.2f",m); |
mandres7 | 0:6ef000c1b903 | 79 | lcd.locate(8,0); |
mandres7 | 1:80f82aa3d0ec | 80 | lcd.printf("Me:%.2f",j); |
mandres7 | 0:6ef000c1b903 | 81 | lcd.locate(0,1); |
mandres7 | 1:80f82aa3d0ec | 82 | lcd.printf("Sp:%d",sp); |
mandres7 | 0:6ef000c1b903 | 83 | lcd.locate(8,1); |
mandres7 | 1:80f82aa3d0ec | 84 | lcd.printf("Co:%.1f",h); |
mandres7 | 0:6ef000c1b903 | 85 | } |
mandres7 | 0:6ef000c1b903 | 86 | |
mandres7 | 0:6ef000c1b903 | 87 | |
mandres7 | 0:6ef000c1b903 | 88 | mv=m; |
mandres7 | 1:80f82aa3d0ec | 89 | } //While |
mandres7 | 0:6ef000c1b903 | 90 | |
mandres7 | 0:6ef000c1b903 | 91 | } |