![](/media/cache/group/default_image.jpg.50x50_q85.jpg)
PID for ramp temperature control using LM35 temperature sensor and two actuators, a bulb and a ventilator.
Dependencies: DebouncedIn QEI TextLCD_encoder mbed
Fork of PID_Encoder by
Diff: main.cpp
- Revision:
- 4:d42fe3777735
- Parent:
- 3:9347b362d33c
- Child:
- 5:ad88703dc6d3
--- a/main.cpp Sun Dec 15 15:57:03 2013 +0000 +++ b/main.cpp Sat May 24 15:05:40 2014 +0000 @@ -3,14 +3,10 @@ #include "TextLCD.h" #include "QEI.h" - -AnalogIn Vin(PTC2); TextLCD lcd(PTB10, PTB11, PTE2, PTE3, PTE4, PTE5); // rs, e, d4-d7 QEI wheel (PTD5, PTD0, NC, 100); - AnalogIn y(PTB1); AnalogOut u(PTE30); - DigitalOut led1(LED1); DigitalOut led2(LED2); DigitalOut led3(LED3); @@ -31,7 +27,8 @@ int i; // indice de la variable int j; //variable controla cambio 4 posiciones -int kp, ki, kd, sp, yr, ap, ai, ad, err, med, err_v, cycle, pid; +int kp, ki, kd, sp; +float yr, ap, ai, ad, err, med, err_v, cycle, pid; int b=0; float pidn; Timer t; @@ -47,8 +44,7 @@ lcd.printf("Ki%d",ki); lcd.locate(8,1); lcd.printf("Kd%d",kd); - - + while(1) { led3 =1; @@ -184,7 +180,7 @@ // CICLO PRINCIPAL CONTROLADOR PID b=0; while(1) { - med=999*y.read(); //leer puerto analogo y asignar a med + med=1000*y.read(); //leer puerto analogo y asignar a med err = (sp-med); ap = kp*err; @@ -203,15 +199,9 @@ // se verifica que pid sea positivo ************************************** - if(pid<=0) - { - pid=0; - } + if(pid<=0){pid=0;} // se verifica que pid sea menor o igual la valor maximo ***************** - if (pid > 5000) - { - pid=5000; - } + if(pid>=1000){pid=1000;} // se actualizan las variables ******************************************* err_v = err; @@ -223,7 +213,7 @@ t.start(); b=1; } - if(t>=0.3) + if(t>=0.01) { wait(0.2); lcd.locate(2,0); @@ -245,15 +235,14 @@ } //Normalizacion de la salida - pidn=pid/999; + pidn=pid/1000; // se envia el valor pid a puerto analogico de salida (D/A) ************** u.write(pidn); // se repite el ciclo - wait(1.5); + wait(0.1); } - - + } \ No newline at end of file