Horno de Reflujo

Dependencies:   Debounced Pulse1 QEI RTC-DS1307 TextLCD mbed

Files at this revision

API Documentation at this revision

Comitter:
EstebanLage
Date:
Tue Jun 05 17:37:09 2018 +0000
Commit message:
Tarea 4 Horno de Reflujo Ok

Changed in this revision

Debounced.lib Show annotated file Show diff for this revision Revisions of this file
Pulse1.lib Show annotated file Show diff for this revision Revisions of this file
QEI.lib Show annotated file Show diff for this revision Revisions of this file
RTC-DS1307.lib Show annotated file Show diff for this revision Revisions of this file
TextLCD.lib Show annotated file Show diff for this revision Revisions of this file
debug.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
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