control planta térmica

Dependencies:   KeyPad LCDLib PID mbed

Committer:
davroina
Date:
Wed May 10 00:51:24 2017 +0000
Revision:
0:4ab7407d5d98
Programa de control de la planta t?rmica

Who changed what in which revision?

UserRevisionLine numberNew contents of line
davroina 0:4ab7407d5d98 1 #include "mbed.h"
davroina 0:4ab7407d5d98 2 #include "TextLCD.h"
davroina 0:4ab7407d5d98 3 //#include "PID.h"
davroina 0:4ab7407d5d98 4 #define RATE 0.1
davroina 0:4ab7407d5d98 5
davroina 0:4ab7407d5d98 6 Ticker tick;
davroina 0:4ab7407d5d98 7 AnalogIn pv(A0);
davroina 0:4ab7407d5d98 8 PwmOut co(PTE21);
davroina 0:4ab7407d5d98 9 DigitalIn PVMAS(PTC13);
davroina 0:4ab7407d5d98 10 DigitalIn PVMENOS(PTC12);
davroina 0:4ab7407d5d98 11 TextLCD lcd(D11,D10,D9,D5,D4,D3,D2);
davroina 0:4ab7407d5d98 12 DigitalOut led2(LED_GREEN);
davroina 0:4ab7407d5d98 13
davroina 0:4ab7407d5d98 14 float SP = 0.7;
davroina 0:4ab7407d5d98 15 float val;
davroina 0:4ab7407d5d98 16 float M, MA, C; //muestra , muestra anterior y control
davroina 0:4ab7407d5d98 17 float P, I, D;
davroina 0:4ab7407d5d98 18 float a = 15, b = 13 ;
davroina 0:4ab7407d5d98 19 float tempCi, tempCo;
davroina 0:4ab7407d5d98 20
davroina 0:4ab7407d5d98 21 void visualizacion(){
davroina 0:4ab7407d5d98 22
davroina 0:4ab7407d5d98 23 tempCi=(pv.read()*3.685503686*100);
davroina 0:4ab7407d5d98 24 tempCo=((SP/5.00)*3.685503686*100);
davroina 0:4ab7407d5d98 25
davroina 0:4ab7407d5d98 26 lcd.gotoxy(1,1);
davroina 0:4ab7407d5d98 27 lcd.printf("PV = %2.2f C ",tempCi);
davroina 0:4ab7407d5d98 28 lcd.gotoxy(1,2);
davroina 0:4ab7407d5d98 29 lcd.printf("SP = %2.2f C ",tempCo);
davroina 0:4ab7407d5d98 30
davroina 0:4ab7407d5d98 31 if(PVMAS==1){
davroina 0:4ab7407d5d98 32 SP += 0.01;
davroina 0:4ab7407d5d98 33 //controller.setSetPoint(SP);
davroina 0:4ab7407d5d98 34 }
davroina 0:4ab7407d5d98 35 if(PVMENOS==1){
davroina 0:4ab7407d5d98 36 SP -= 0.01;
davroina 0:4ab7407d5d98 37 //controller.setSetPoint(SP);
davroina 0:4ab7407d5d98 38 }
davroina 0:4ab7407d5d98 39 wait(RATE);
davroina 0:4ab7407d5d98 40 }
davroina 0:4ab7407d5d98 41
davroina 0:4ab7407d5d98 42 void control() {
davroina 0:4ab7407d5d98 43
davroina 0:4ab7407d5d98 44 led2 = !led2;
davroina 0:4ab7407d5d98 45 val = pv.read()*5.00;
davroina 0:4ab7407d5d98 46
davroina 0:4ab7407d5d98 47 if(SP >= val){
davroina 0:4ab7407d5d98 48
davroina 0:4ab7407d5d98 49 M = val;
davroina 0:4ab7407d5d98 50 P = a*M;
davroina 0:4ab7407d5d98 51 D = MA + b*M;
davroina 0:4ab7407d5d98 52 I = P + a*M;
davroina 0:4ab7407d5d98 53 MA = M;
davroina 0:4ab7407d5d98 54 C = P + I + D;
davroina 0:4ab7407d5d98 55 C = C/5.00;
davroina 0:4ab7407d5d98 56 co = C;
davroina 0:4ab7407d5d98 57
davroina 0:4ab7407d5d98 58 }else{
davroina 0:4ab7407d5d98 59 //co = 0;
davroina 0:4ab7407d5d98 60 M = val;
davroina 0:4ab7407d5d98 61 P = a*M;
davroina 0:4ab7407d5d98 62 D = MA + b*M;
davroina 0:4ab7407d5d98 63 I = P + a*M;
davroina 0:4ab7407d5d98 64 MA = M;
davroina 0:4ab7407d5d98 65 C = P + I + D;
davroina 0:4ab7407d5d98 66 C = C/5.00;
davroina 0:4ab7407d5d98 67 co = -C;
davroina 0:4ab7407d5d98 68 }
davroina 0:4ab7407d5d98 69 }
davroina 0:4ab7407d5d98 70
davroina 0:4ab7407d5d98 71 int main(){
davroina 0:4ab7407d5d98 72
davroina 0:4ab7407d5d98 73 tick.attach(&control, 0.1); // setup ticker to call flip led2 after 0.7 seconds
davroina 0:4ab7407d5d98 74 lcd.gotoxy(1,1);
davroina 0:4ab7407d5d98 75 lcd.printf("CONTROL PID");
davroina 0:4ab7407d5d98 76 lcd.gotoxy(1,2);
davroina 0:4ab7407d5d98 77 lcd.printf("PLANTA TERMICA");
davroina 0:4ab7407d5d98 78 wait(1.5);
davroina 0:4ab7407d5d98 79 lcd.gotoxy(1,1);
davroina 0:4ab7407d5d98 80 lcd.printf("");
davroina 0:4ab7407d5d98 81 lcd.printf("MARISOL ");
davroina 0:4ab7407d5d98 82 lcd.gotoxy(1,2);
davroina 0:4ab7407d5d98 83 lcd.printf("MESA ");
davroina 0:4ab7407d5d98 84 wait(1.5);
davroina 0:4ab7407d5d98 85
davroina 0:4ab7407d5d98 86 while(1){
davroina 0:4ab7407d5d98 87
davroina 0:4ab7407d5d98 88 visualizacion();
davroina 0:4ab7407d5d98 89
davroina 0:4ab7407d5d98 90 }
davroina 0:4ab7407d5d98 91
davroina 0:4ab7407d5d98 92 }