PID, tarea 3, procesadores

Dependencies:   Debounced TextLCD mbed

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?

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