control planta térmica
Dependencies: KeyPad LCDLib PID mbed
main.cpp@0:4ab7407d5d98, 2017-05-10 (annotated)
- 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?
User | Revision | Line number | New 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 | } |