Version Final

Dependencies:   mbed DS1820

Revision:
9:56bfbc0947af
Parent:
8:53555acc118b
Child:
10:d0d3e0429c6f
--- a/main.cpp	Wed Jun 05 10:56:29 2019 +0000
+++ b/main.cpp	Sun Jun 09 19:11:46 2019 +0000
@@ -67,8 +67,8 @@
 /*MAQUINA DE ESTADOS MEDICION VELOCIDAD*/
 
 #define INCIO_V 0
-#define RISE_1 1
-#define FALL_1 2
+#define V_1 1
+#define V_2 2
 #define ESPERA_V 3
 
 //Interrupciones de deteccion de cambios en pin de medicion de valocidad
@@ -84,33 +84,37 @@
 
 
 
-/*MAQUINA DE ESTADOS CAMBIO DE DUTY (LAZO ABIERTO)*/
+/*MAQUINA DE ESTADOS CAMBIO DE DUTY */
 
 #define INICIO_CM 0
 #define CAMBIO_MAYOR 1
 #define CAMBIO_MENOR 2
 #define INICIO_CAMBIO_MENOR 5
-#define ESPERA_DECREMENTO 3
+#define ESPERA 3
 #define ESPERA_FINAL      4
 
-int tcd = 0;     //Acumulador de tiempo
-int ECM = 0;     //Guardo el estado de la maquina
+void cambio_gradual_duty(float obj);//Funcion que engloba la maquina de modificacion del duty , en especial la zona que no puedo enviar directamente..
+int ty = 0;                         //Acumulador de tiempo
+int FTR  = 0;     //Control de estados de la submaquina
+bool tdm = 0;      //Flag que me notifica cuando termine de cambiar el duty..
+
 float cantv = 0; //Cantidad de veces que debo modificar el duty (funciona como entero)
 char jv = 0;     //Cantidad de veces que modifique el duty
 float D = 1.00f; //Duty Actual
-float DAN = 0.5f;//Duty Anterior
 
 void cambio_duty_pwm(float nuevoDuty); //Funcion que engloa la maquina
 
 
 /*MAQUINA DE ESTADOS LAZO CERRADO (DUTY EN FUNCION DE TEMPERATURA)*/
 
-#define INCIO_LAZOCERRADO 0
-#define MEDICION_TEMPERATURA 1
+#define INICIO_LC 0
+#define TEMPERATURA 1
 #define MEDICION_RPM 2
 #define CAMBIO_PWM 3
-#define ESPERA_CAMBIOS_PWM 4
-#define ESPERA_ENTRE_MODIFICACIONES 5
+#define ESPERA_CPWM 4
+#define ESPERA_LC 5
+
+float NuevoDuty = 0;                //Duty que voy enviando a forma de prueba y error..
 
 void control_PWM_Temp(void); //Funcion que engloba la maquina de estados
 
@@ -118,11 +122,6 @@
 int IM = 0;     //Acumulador de tiempo base
 float duty = 0; //Guardo el duty actual
 
-/*SubMaquina utilizada para modificar el duty*/
-int   FTR  = 0;     //Control de estados de la submaquina
-bool  tdm = 0;      //Flag que me notifica cuando termine de cambiar el duty..
-
-float NuevoDuty = 0;                //Duty que voy enviando a forma de prueba y error..
 
 /*VALORES DE CONFIGURACION LAZO CERRADO*/
 #define DEFINICION_CAMBIO_PWM 0.02f //Resolucion de barrido, valores altos agilizan el cambio pero pueden hacer que nunca se alcance lo pedido..
@@ -135,10 +134,6 @@
                     x ºC ==> x  rpm
 */
 
-void cambio_gradual_duty(float obj);//Funcion que engloba la maquina de modificacion del duty , en especial la zona que no puedo enviar directamente..
-
-int ty = 0;                         //Acumulador de tiempo
-
 
 /*ELEMENTOS GENERALES DEL SISTEMA*/
 void leds(int num);
@@ -190,7 +185,7 @@
             //Mido el Preset y seteo el duty del Cooler en funcion de la lectura
             case  LazoAbierto:
                 float lec = Preset;
-                cambio_duty_pwm(lec);
+                cambio_gradual_duty(lec);
                 break;
 
             //Mido la temperatura y establezco la velocidad del Cooler
@@ -254,7 +249,6 @@
             if((lectura == 1) && (lecant == 0)) {
                 estado = RISING_P;
             }
-            tp = 0;//Reinicio el acumulador de tiempo
             break;
         case RISING_P:
             /*Devuelvo el estado uno , una unica vez (Saco el rebote)*/
@@ -284,7 +278,6 @@
 //Funcion del timmer dos, es llamada cada 0.05 segundos
 void tiempo_rapido()
 {
-    tcd ++;//Acumulador Cambio de Duty(Lazo Abierto)
     ty ++; //Acumulador Cambio de Duty(Lazo Cerrado)
 }
 
@@ -299,10 +292,11 @@
             Modo = 1;
             printf("Lazo Abierto!!\r\n");
         }
+        FTR = 0;
     }
 }
 
-/*///////////////////////////////////////////////////////////////////////////ETAPAS DE MEDICION DE VELOCIDAD///////////////////////////////////////////////////////////////////////////*/
+///////////////////////////////////////////////////////////////////////////ETAPAS DE MEDICION DE VELOCIDAD///////////////////////////////////////////////////////////////////////////
 
 /*
 UN PERIODO ==> RISE - FALL - RISE
@@ -322,14 +316,14 @@
             ap.start();     //Inicio la cuenta
             em = 1;         //Aviso que estoy midiendo
             tmv = 0;        //Aviso que no termine de medir
-            EMV = RISE_1;
+            EMV = V_1;
             break;
 
-        case RISE_1:
+        case V_1:
             printf("ERROR MIDIENDO VELOCIDAD, EMV = %d!!\r\n", EMV);
             break;
 
-        case FALL_1:
+        case V_2:
             ap.stop();    //Freno el timmer
             tmv = 1;      //Aviso que termine de medir
             em = 0;       //Ya no estoy midiendo
@@ -349,10 +343,10 @@
             case INCIO_V:
                 printf("ERROR MIDIENDO VELOCIDAD, EMV = %d!!\r\n", EMV);
                 break;
-            case RISE_1:
-                EMV = FALL_1;
+            case V_1:
+                EMV = V_2;
                 break;
-            case FALL_1:
+            case V_2:
                 printf("ERROR MIDIENDO VELOCIDAD, EMV = %d!!\r\n", EMV);
                 break;
         }
@@ -378,97 +372,7 @@
     }
 }
 
-/*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////*/
-
-
-
-void cambio_duty_pwm(float nuevoDuty)
-{
-    static float ND = 0;
-
-    switch(ECM) {
-        case INICIO_CM:
-
-            ND = nuevoDuty;
-            Azul = 1;               //Apago el indicador de LazoCerrado
-
-            //Me fijo si estoy por poner mas o menos el mismo duty para evitar el proceso
-            if(abs(ND * 100.00f - DAN * 100.00f ) < 2) {
-                //printf("El duty es el mismo del ciclo previo...\r\n");
-                tcd = 0;
-                ECM = ESPERA_FINAL;
-                break;
-            }
-
-            printf("Inicio el cambio de duty....\r\n");
-            Rojo = 0;
-            tcd = 0;
-            if(ND < 0.07f) {
-                Cooler.write(0);
-                duty = 0;
-                printf("Cooler APAGADO!\r\n");
-                tcd = 0;
-                DAN = 0.5f;
-                ECM = ESPERA_FINAL;
-                Rojo = 1;
-                break;
-            }
-            if(ND >= 0.5f) {
-                ECM = CAMBIO_MAYOR;
-            } else
-                ECM = INICIO_CAMBIO_MENOR;
-            break;
-        case CAMBIO_MAYOR:
-            Cooler.write(ND);
-            printf("\tNuevo Duty = %f%\r\n", floor(ND* 100.0f));
-            DAN = ND;
-            tcd = 0;
-            ECM = ESPERA_FINAL;
-            break;
-        case INICIO_CAMBIO_MENOR:
-            cantv = abs( (int(DAN*100)) - (int(ND*100)));
-            //printf("\tVoy a hacer %.0f pasos intermedios desde %.0f para llegar a %.0f%\r\n", cantv, DAN*100, ND * 100);
-            ECM = CAMBIO_MENOR;
-            jv = 0;
-            D = DAN;
-            break;
-        case CAMBIO_MENOR:
-            if(cantv >= jv) {
-                Cooler.write(D);
-                //printf("\t\tEtapa intermedia en %.0f%\r\n", D * 100.00f);
-                /*Si quiero alcanzar un duty inferior*/
-                if(ND < DAN)
-                    D -= 0.01f;                                             //Decremeto 1%
-                /*Si quiero alcanzar un duty superior*/
-                if(ND > DAN)
-                    D += 0.01f;                                             //Incremento 1%
-                tcd = 0;
-                ECM = ESPERA_DECREMENTO;
-                jv++;
-                break;
-            } else {
-                tcd = 0;
-                ECM = ESPERA_FINAL;
-                printf("\t\tNuevo Duty = %.0f\r\n", floor(ND*100.00f));
-                DAN = ND;
-            }
-            break;
-        case ESPERA_DECREMENTO:
-            if(tcd >= 2) {
-                ECM = CAMBIO_MENOR;
-                tcd = 0;
-            }
-            break;
-        case ESPERA_FINAL:
-            Rojo = 1;
-            if(tcd >= 100) {
-                ECM = INICIO_CM;
-                tcd = 0;
-            }
-            break;
-    }
-
-}
+////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
 //Maquina LazoCerrado
 void control_PWM_Temp(void)
@@ -476,19 +380,19 @@
     static float temperatura = 0;
     float val = 0;
     static bool suptempmax = 0; //Flag que me indica si ya puse al maximo el duty
+    
     switch(CPT) {
-        case INCIO_LAZOCERRADO:
-            ECM = 0; //Reincio la maquina de cambio de duty de lazo abierto..
+        case INICIO_LC:
             Rojo = 1;//Apago el Led rojo..
             Azul = 0;//Prendo el Led azuil...
             /*Fijo el duty en 50%*/
             Cooler.write(0.5f);
             duty = 0.5f;
             printf("Lazo Cerrado!!\r\n");
-            CPT = MEDICION_TEMPERATURA;
+            CPT = TEMPERATURA;
             break;
 
-        case MEDICION_TEMPERATURA:
+        case TEMPERATURA:
             probe.convertTemperature(false, DS1820::all_devices);   //Le digo que convierta la temperatura del sensor, false ==> No retiene || True ==> Retiene
             temperatura = probe.temperature();                      //Guardo la temperatura
             printf("La temperatura es de %3.1foC\r\n",temperatura );
@@ -502,7 +406,7 @@
                 duty = 1.00f;       //Registro el cambio de duty al maximo
                 Cooler.write(1);    //Ejecuto el cambio de duty al maximo
                 IM = 0;             //Reinicio el acumulador para tener el tiempo entre modificaciones..
-                CPT = ESPERA_ENTRE_MODIFICACIONES;
+                CPT = ESPERA_LC;
                 break;
             } else {
                 /*Aviso que baje de los 70ºC*/
@@ -511,13 +415,12 @@
                    suptempmax = 0;     //Reinicio el flag de superar los 70ºC
                 }
                 /*Reinicio la medicion de RPM*/
-                tv = 0;         //Reinicio el acumulador de tiempo de la maquina de estados que mide velocidad
-                EMV = INCIO_V;  //Pongo en el estado inicial la maquina de medicion de velocidad
-                IM = 0; //Pongo en cero el acumulador para darle un TimeOut a la medicion de velocidad
+                tv = 0;             //Reinicio el acumulador de tiempo de la maquina de estados que mide velocidad
+                EMV = INCIO_V;      //Pongo en el estado inicial la maquina de medicion de velocidad
+                IM = 0;             //Pongo en cero el acumulador para darle un TimeOut a la medicion de velocidad
                 CPT = MEDICION_RPM; //Paso a medir la velocidad del Cooler
                 break;
             }
-            break;
 
         case MEDICION_RPM:
             /*Si termine de medir la velocidad...*/
@@ -546,8 +449,8 @@
                     } else {
                         printf("EL duty es correcto! Estoy en %0.1f% :D\r\n", floor(duty * 100.0f));
                         IM = 0;
-                        CPT = ESPERA_ENTRE_MODIFICACIONES;
-                        break;
+                        CPT = ESPERA_LC;
+                        break; 
 
                     }
 
@@ -556,7 +459,7 @@
             /*Verifico que no se me apago el motor...*/
             if(IM > 10) {
                 printf("El cooler estaba apagadoo!!..Reiniciando Lazo cerrado..\r\n");
-                EMV = INCIO_LAZOCERRADO;
+                EMV = INICIO_LC;
                 IM = 0;
             }
 
@@ -567,11 +470,11 @@
             /*Si termine de modificar el duty*/
             if(tdm) {
                 IM = 0;
-                CPT = ESPERA_CAMBIOS_PWM;
+                CPT = ESPERA_CPWM;
             }
             break;
 
-        case ESPERA_CAMBIOS_PWM:
+        case ESPERA_CPWM:
             /*Si se cumplio un tiempo prudencial.. El motor se debe adecuar a la nueva velocidad*/
             if(IM >= 2) {
                 tdm = 0;            //Reinicio el flag de cambio de duty
@@ -583,10 +486,10 @@
 
             break;
 
-        case ESPERA_ENTRE_MODIFICACIONES:
+        case ESPERA_LC:
             /*Si se cumplio el tiempo..*/
             if(IM >= 1)
-                CPT = MEDICION_TEMPERATURA;
+                CPT = TEMPERATURA;
             break;
     }
 }
@@ -659,7 +562,7 @@
 
                 jv++;                                                       //Acumulo el paso realizo en la variable(Lo cuento)..
                 ty = 0;                                                     //Reinicio el acumulador de tiempo
-                FTR = ESPERA_DECREMENTO;                                    //Espero un tiempo para que se ajuste la salida..
+                FTR = ESPERA;                                    //Espero un tiempo para que se ajuste la salida..
                 break;
             }
             /*Si termine con las modificaciones de duty..*/
@@ -671,7 +574,7 @@
             }
             break;
 
-        case ESPERA_DECREMENTO:
+        case ESPERA:
             /*Si se cumplio el tiempo*/
             if(ty >= 1) {
                 ty = 0;            //Reinico el acumulador de tiempo