![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Horno de Reflujo
Dependencies: Debounced Pulse1 QEI RTC-DS1307 TextLCD mbed
Revision 0:7b257afa105f, committed 2018-06-05
- Comitter:
- EstebanLage
- Date:
- Tue Jun 05 17:37:09 2018 +0000
- Commit message:
- Tarea 4 Horno de Reflujo Ok
Changed in this revision
diff -r 000000000000 -r 7b257afa105f Debounced.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Debounced.lib Tue Jun 05 17:37:09 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/WarwickRacing/code/Debounced/#8992c13bbb9b
diff -r 000000000000 -r 7b257afa105f Pulse1.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Pulse1.lib Tue Jun 05 17:37:09 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/tony63/code/Pulse1/#48651f86a80c
diff -r 000000000000 -r 7b257afa105f QEI.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/QEI.lib Tue Jun 05 17:37:09 2018 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/aberk/code/QEI/#5c2ad81551aa
diff -r 000000000000 -r 7b257afa105f RTC-DS1307.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RTC-DS1307.lib Tue Jun 05 17:37:09 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/leihen/code/RTC-DS1307/#5627b407e097
diff -r 000000000000 -r 7b257afa105f TextLCD.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TextLCD.lib Tue Jun 05 17:37:09 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/amarincan/code/TextLCD/#d692719a4c59
diff -r 000000000000 -r 7b257afa105f debug.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/debug.h Tue Jun 05 17:37:09 2018 +0000 @@ -0,0 +1,16 @@ +#ifndef __DEBUG_H__ +#define __DEBUG_H__ + + +#ifdef DEBUG +#define INFO(x, ...) std::printf("[INFO: %s:%d]"x"\r\n", __FILE__, __LINE__, ##__VA_ARGS__); +#define WARN(x, ...) std::printf("[WARN: %s:%d]"x"\r\n", __FILE__, __LINE__, ##__VA_ARGS__); +#define ERR(x, ...) std::printf("[ERR: %s:%d]"x"\r\n", __FILE__, __LINE__, ##__VA_ARGS__); +#else +#define INFO(x, ...) +#define WARN(x, ...) +#define ERR(x, ...) +#endif + + +#endif \ No newline at end of file
diff -r 000000000000 -r 7b257afa105f main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Jun 05 17:37:09 2018 +0000 @@ -0,0 +1,431 @@ +#include "mbed.h" +#include "DebouncedIn.h" +#include "TextLCD.h" +#include "QEI.h" +#include "Rtc_Ds1307.h" + + +TextLCD lcd(PTB0, PTB1, PTB2, PTB3, PTC2, PTC1); // rs, e, d4, d5, d6, d7 +Rtc_Ds1307 rtc(PTE0, PTE1); +QEI wheel (PTD7, PTD6, NC, 30); +DebouncedIn button_enco(PTC5); +PwmOut PIDWM(PTC9); +PwmOut PIDANAL(PTE24); +DigitalOut Sel(PTE31); +AnalogIn y(PTE16); +float periodo; +float Frecuencia=200; +int C1=0x0C; +int m; +int Conf=0; // +int Lugar=0; // Definen el punto en el cual va el programa +int i=0; +int Ref = 0, Kp = 0, Ti = 0, Td = 0; +float t1 = 0, t2 = 0, t3 = 0, ai = 0, ap = 0, ad = 0, pid = 0, med = 0, RefPID = 0,Taza = 0, o = 0; +float err = 0, err_v = 0; + +int main() +{ + Rtc_Ds1307::Time_rtc tm = {}; + lcd.cls(); + lcd.writeCommand(C1);//escribimos un comando segun el manual del modulo LCD + lcd.locate(0,0); + lcd.printf("--ANALOG --PWM"); + + periodo=(1/Frecuencia); + rtc.getTime(tm); //lee el tiempo del DS1307 + Sel = 1; + while(1) + { + switch (Lugar) + { + case 0: + m=wheel.getPulses(); // m son los datos del encoder + if(m!=0 && Conf==0){ + Conf=1; + wheel.reset(); + m=0; + } + + if(m!=0 && Conf==1){ + Conf=0; + wheel.reset(); + m=0; + } + if(Conf==0){ + + lcd.locate(11,0); + lcd.printf("-"); + lcd.locate(1,0); + lcd.printf(">"); + lcd.locate(0,1); + wait(0.1); + + } + + if(Conf==1){ + + lcd.locate(1,0); + lcd.printf("-"); + lcd.locate(11,0); + lcd.printf(">"); + lcd.locate(0,1); + wait(0.1); + } + + if (button_enco.falling()){ //si se pulsa boton encoder + Lugar++; + m=0; + } + + break; + + case 1: + switch(i) + { + case 0: + + + if(Conf==0) + { + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Parametros"); + wait(1); + i++; + m=0; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Ref: Kp: "); + lcd.locate(0,1); + lcd.printf("Ti: Td: "); + } + + if(Conf==1) + { + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Parametros"); + wait(1); + i++; + m=0; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("Ref: Kp: "); + lcd.locate(0,1); + lcd.printf("Ti: Td: "); + } + + break; + + case 1: + m=wheel.getPulses(); + if (m!=0) + { + Ref=Ref+m; + if(Ref>99) + { + Ref=99; // Configuracion de la ref para analg + } + if(Ref<0) + { + Ref=0; + } + + wheel.reset(); + m=0; + } + lcd.locate(5,0); + lcd.printf("%02d",Ref); + + if (button_enco.falling()) + { + i++; + m=0; + lcd.locate(13,0); + //tm.mon=1; + } + + break; + + case 2: + m=wheel.getPulses(); + if (m!=0) + { + Kp=Kp+m; + if(Kp>99) + { + Kp=99; + } + if(Kp<0) // Configuracion de Kp para analg + { + Kp=0; + } + + wheel.reset(); + m=0; + } + lcd.locate(13,0); + lcd.printf("%02d",Kp); + + if (button_enco.falling()) + { + i++; + m=0; + lcd.locate(4,1); + } + + break; + + case 3: + m=wheel.getPulses(); + if (m!=0) + { + Ti=Ti+m; // Configuracion de Ti para analg + + if(Ti>99) + { + Ti=99; + } + if(Ti<0) + { + Ti=0; + } + + wheel.reset(); + m=0; + } + lcd.locate(4,1); + lcd.printf("%02d",Ti); + + if (button_enco.falling()) + { + i++; + m=0; + lcd.locate(13,1); + + } + + break; + + case 4: + m=wheel.getPulses(); + + if (m!=0) + { + Td=Td+m; // Configuracion de Ti para analg + + if(Td>99) + { + Td=99; + } + if(Td<0) // Configuracion de Td para analg + { + Td=0; + } + + wheel.reset(); + m=0; + } + lcd.locate(13,1); + lcd.printf("%02d",Td); + + if (button_enco.falling()) + { + i++; + m=0; + lcd.cls(); + lcd.locate(0,0); + lcd.printf("t1: t2: "); + lcd.locate(0,1); + lcd.printf("t3: "); + lcd.locate(4,0); + } + break; + + case 5: + m=wheel.getPulses(); + if (m!=0) + { + t1=t1+m; // Configuracion de Ti para analg + if(t1>60) + { + t1=60; + } + if(t1<0) // Configuracion de Td para analg + { + t1=0; + } + + wheel.reset(); + m=0; + } + lcd.locate(4,0); + lcd.printf("%.1f",t1); + + + if (button_enco.falling()) + { + i++; + m=0; + lcd.locate(12,0); + } + + break; + + case 6: + m=wheel.getPulses(); + + if (m!=0) + { + t2=t2+m; // Configuracion de Ti para anal + if(t2>60) + { + t2=60; + } + if(t2<0) // Configuracion de Td para analg + { + t2=0; + } + + wheel.reset(); + m=0; + } + lcd.locate(12,0); + lcd.printf("%.1f",t2); + + + if (button_enco.falling()) + { + i++; + m=0; + lcd.locate(4,1); + } + + break; + + case 7: + m=wheel.getPulses(); + + if (m!=0) + { + t3=t3+m; // Configuracion de Ti para analg + if(t3>60) + { + t3=60; + } + if(t3<0) // Configuracion de Td para analg + { + t3=0; + } + + wheel.reset(); + m=0; + } + lcd.locate(4,1); + lcd.printf("%.1f",t3); + + if (button_enco.falling()) + { + /////////////////// + if(Conf==0 || Conf==1) + { + lcd.cls(); + lcd.locate(0,0); + lcd.printf(" Parametros OK "); + wait(1); + i=0; + m=0; + Lugar++; + lcd.cls(); + tm.sec = 0; + tm.min = 0; + tm.hour = 1; + tm.date = 1; + tm.mon = 1; + tm.year = 2000; + PIDWM.pulsewidth(0); + rtc.setTime(tm,false,false); + rtc.startClock(); + + } + /////////////////// + } + break; + } + break; + case 2: + if (Conf == 1 || Conf == 0){ + +lop1: med = y.read()*100; + rtc.getTime(tm); + if ((tm.sec)<t1) + { + Taza = Ref/t1; + RefPID = tm.sec*Taza; + } + if ((tm.sec)>=t1 && (tm.sec)<=(t2+t1)){ + RefPID = Ref; + } + if ((tm.sec)>(t2+t1)){ + if (RefPID<23){ + RefPID=23; + } + else if (RefPID>23){ + Taza = (23-Ref)/t3/60; + RefPID = RefPID + tm.sec*Taza; + } + } + if ((tm.sec)>(t1+t2+t3) && med < 23){ + RefPID = 23; + } + err = (RefPID-med); //se calcula el error + ap = Kp*err*0.01f; //se calcula la accion proporcinal + ai =(Ti*err*0.01f)+ai; //calculo de la integral del error + ad = Td*(err-err_v)*0.01f; //calculo de la accion derivativa + pid = (ap+ai+ad); + // se verifica que pid sea positivo ************************************** + if(pid<=0) + { + pid=0; + } + + // se verifica que pid sea menor o igual la valor maximo ***************** + if (pid > 100) + { + pid=100; + } + + + //se muestran las variables****************************************** + lcd.locate(1,0); + lcd.printf("err: med:"); + lcd.locate(4,0); + lcd.printf("%3.0f",err); + lcd.locate(13,0); + lcd.printf("%3.0f",med); + lcd.locate(1,1); + lcd.printf("Ref: pid:"); + lcd.locate(4,1); + lcd.printf("%3.0f",RefPID); + lcd.locate(13,1); + lcd.printf("%3.0f",pid); + + + + + //Normalizacion de la salida + // se actualizan las variables ******************************************* + err_v = err; + o = pid/100; + PIDWM.pulsewidth(o*periodo); + // se envia el valor pid a puerto analogico de salida (D/A) ************** + + // se repite el ciclo + wait_ms(100); + goto lop1; + } + } + } + } + \ No newline at end of file
diff -r 000000000000 -r 7b257afa105f mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue Jun 05 17:37:09 2018 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/5aab5a7997ee \ No newline at end of file