Control de Nivel por Medio de Histéresis

Salvador Macías Hernández, Raúl Luna Alvarado

Última actualización Thursday, 26 de June de 2008

 

 

ANTECEDENTES

 

     Se nos ha encomendado la tarea de diseñar un Control de Nivel por Histéresis para hacer que funcione un Humidificador para un Sistema de HVAC de precisión. Este control debe de ser muy barato, por que va a funcionar durante tres semanas en lo que se consigue la pieza original; además debe de ser confiable puesto que si llega a fallar podría causar que el equipo se dañara o en el peor de los casos se incendiara.

 

 

EL HUMIDIFICADOR

 

     El humidificador es un dispositivo que sirve para humedecer el Aire , en este caso en particular, lo hace inyectando vapor de agua al flujo de aire que circula por la ductería del HVAC (Sistema de Aire Acondicionado). El dispositivo desarmado se muestra en la siguiente fotografía:

 

Humidificador Desarmado

 

    A este humidificador se le conectan dos mangueras que van a conducir el flujo de aire hacia un contenedor (no se muestra en la foto) con agua y que por dentro tiene instalado una resistencia eléctrica que hace que se evapore el agua. Y por arrastre se va mezclando el vapor de agua al flujo del aire acondicionado (HVAC) así como se muestra en el siguiente esquemático:

 

Diagrama del funcionamiento del Humidificador

 

     De aquí se puede deducir que para que la resistencia opere adecuadamente, es necesario que siempre esté sumergida en agua, y por ende es necesario un control de nivel.

 

 

LA LÓGICA DE CONTROL

 

    De puro sentido común podemos plantear las siguientes condiciones:

 

 

Condición Acción
El contenedor está sin agua

Apagar las resistencias

Abrir la válvula para el ingreso de agua

El contenedor está por debajo del nivel mínimo indispensable

Apagar las resistencias

Abrir la válvula para el ingreso de agua

El contenedor está por arriba del nivel mínimo indispensable, pero abajo del límite bajo de operación

Apagar las resistencias

Abrir la válvula para el ingreso de agua

El contenedor está por arriba del límite bajo de operación, pero por debajo del límite alto de operación

Encender las resistencias

La  subrutina de histéresis determinará el estado de la válvula de ingreso de agua

El contenedor está en el límite alto de operación

Encender las resistencias

Cerrar la válvula de ingreso de agua

El contenedor está por arriba del límite alto de operación

Encender las resistencias

Cerrar la válvula de ingreso de agua

 

 

SECUENCIA DE OPERACIÓN

 

      Es razonable plantear una secuencia de operación para analizar el fenómeno y diseñar el dispositivo. Para ello asumiremos que tenemos un sensor de nivel (contacto en cada límite de operación y en el mínimo indispensable). También asumimos que requerimos dos salidas: la válvula que deja pasar el agua y el relevador que activa la resistencia

 

            El contenedor está completamente vacío

ENTRADAS HISTÉRESIS SALIDAS
Límite Superior Límite Inferior Mínimo Indisp. Función de Histéresis Válvula de Agua Resistencia
0 0 0 0 1 0

 

            El contenedor se comienza a llenar

ENTRADAS HISTÉRESIS SALIDAS
Límite Superior Límite Inferior Mínimo Indisp. Función de Histéresis Válvula de Agua Resistencia
0 0 0 0 1 0

 

            El contenedor se alcanza el Nível Mínimo Indispensable

ENTRADAS HISTÉRESIS SALIDAS
Límite Superior Límite Inferior Mínimo Indisp. Función de Histéresis Válvula de Agua Resistencia
0 0 1 0 1 0

 

            El contenedor alcanza el Límite Inferior de Operación

ENTRADAS HISTÉRESIS SALIDAS
Límite Superior Límite Inferior Mínimo Indisp. Función de Histéresis Válvula de Agua Resistencia
0 1 1 0 1 1

 

            El contenedor alcanza el Límite Superior de Operación

ENTRADAS HISTÉRESIS SALIDAS
Límite Superior Límite Inferior Mínimo Indisp. Función de Histéresis Válvula de Agua Resistencia
1 1 1 1 0 1

 

            El contenedor desciende un poco del Límite Superior de Operación

ENTRADAS HISTÉRESIS SALIDAS
Límite Superior Límite Inferior Mínimo Indisp. Función de Histéresis Válvula de Agua Resistencia
0 1 1 1 0 1

 

            El contenedor desciende de nivel hasta pasar el Límite Inferior de Operación

ENTRADAS HISTÉRESIS SALIDAS
Límite Superior Límite Inferior Mínimo Indisp. Función de Histéresis Válvula de Agua Resistencia
0 0 1 0 1 1

 

 

DIAGRAMA ELECTRICO

 

 

LA SIMULACIÓN

 

   Vamos a generar nuestro código y simular la aplicación usando UMPS, lo primero que vamos a hacer es cargar el CPU 8031

 

 

 

 

 

Enseguida vamos a definir nuestro origen y las entradas y salidas del sistema

 


;----------------------------------------------------------------------------------------------------
; PROGRAMA PARA CONTROL DE NIVEL DEL HUMIDIFICADOR
;                                                                           Salvador Macías Hernández
;                                                                                       Martes, 03 Junio 2008
;----------------------------------------------------------------------------------------------------


LIM_SUP EQU P3.5 ;Entrada del límite Superior de Operación
LIM_INF EQU P3.6 ;Entrada del límite Inferior de Operación
MINIMO EQU P3.7 ;Entrada del nivel Mínimo Indispensable

LED_CLK EQU P1.0 ;Visualización del Reloj del Sistema
LED_SUP EQU P1.1 ;Visualización del Nivel Superior de Operación
LED_INF EQU P1.2 ;Visualización del Nivel Inferior de Operación
LED_MIN EQU P1.3 ;Visualización del Nivel Mínimo Indispensable
 



Ahora hay que definir los recursos, para ello hay que picarle en: configurar y después en Recursos:

 

 

Enseguida aparece una ventana, donde cargaremos todos los recursos que vayamos a necesitar. Para esto hay que picarle en el botón que dice añadir

 

 

Una vez que le demos clic en el botón de ADD, nos aparece una ventana con todos los recursos que UMPS soporta. Los primeros que vamos a necesitar son los LED's

 

 

Selecciona donde dice LED [Red, Green, Yellow] y dale clic en el botón de OK

Nos aparece un LED en la ventana de Recursos, luego hay que darle doble click en él.

 

 

Deseamos que sea Verde y como Nombre Pongale: "Clk" y pongale palomita en Vizualiza el nombre

Después seleccione el LED y piquele en el botón de conexión:

 

 

Nos aparece la siguiente ventana:

 

En esta ventana vamos a conectar el LED al Puerto 1 bit0, para ello hay que seleccionar el Puerto1 en el Selection Tool de la izquierda, inmediatamente después seleccionamos el B0, la Pata Anode y le picamos donde dice Conect. Enseguida hay que conectar el Cathode con "Always 0" y darle OK

 

 

Hay que repetir estos pasos las veces que sea necesario, de modo que tengamos los cuatro LEDs conectados como se indica a continuación:

 

LED Color PIN
LED_CLK Verde P1.0
LED_SUP Amarillo P1.1
LED_INF Amarillo P1.2
LED_MIN Rojo P1.3

 

 

Ahora lo que corresponde es configurar los contactos de nivel, para ello vamos a usar unos switches como sensores.

 

Hay que agregar tres Push Buttons como recursos

 

 

En la pantalla de configuración hay que Visualizarlo como Interruptor, en la Conexión In deberá ir conectada al microprocesador en la conexión OUT y en la conexión in debe ir siempre a cero, la conexión OUT2 queda libre:

 

Switch PIN
Nivel Superior P3.5
Nivel Inferior P3.6
Mínimo Indispensable P3.7

 

 

Para salir de la configuración de recursos, pulse el botón de Exit

 

Para probar que las conexiones estén bien hechas. Hay que visualizar los registros internos del microcontrolador. Para hacer esto hay que picarle en Configuración, y luego en Registros CPU

 

 

Nos aparece una ventana donde vamos a agregar los registros, para ello hay que presionar el botón de Add

 

 

Nos aparece una ventana donde vamos a insertar los registros, hay que buscar el registro P3

 

 

Una vez que le pulses el botón OK, aparecerá el registro en la ventana.

De una vez, repita el proceso para que tengamos P1 también

Para salir de lo que restaría es pulsar el botón de Exit

 

 

Si hacemos clic sobre cualquiera de los switch que acabamos de configurar, podremos observar el cambio en el registro P3, si no observan ningún cambio, revisen la configuración de dicho switch

 

Ahora hay que escribir el siguiente programa que haga lo siguiente:

 

Y el programa que hace eso es el siguiente:


;-----------------------------------------------------------------------
; PROGRAMA PARA CONTROL DE NIVEL DEL HUMIDIFICADOR
; Salvador Macías Hernández
; Martes, 03 Junio 2008
;-----------------------------------------------------------------------


LIM_SUP EQU P3.5 ;Entrada del límite Superior de Operación
LIM_INF EQU P3.6 ;Entrada del límite Inferior de Operación
MINIMO  EQU P3.7 ;Entrada del Mínimo Indispensable

LED_CLK EQU P1.0 ;Visualización del Reloj del Sistema
LED_SUP EQU P1.1 ;Visualización del Nivel Superior de Operación
LED_INF EQU P1.2 ;Visualización del Nivel Inferior de Operación
LED_MIN EQU P1.3 ;Visualización del Nivel Mínimo Indispensable

AGUA   EQU P1.6 ;Al relevador del agua, se habilita con 1
RESIST EQU P1.7 ;Al relevador de las resistencias, se habilita con 1



org 0000h
   mov P1, #00h
   PRINCIPAL:

      ABAJO_MINIMO:
      jnb MINIMO,ARRIBA_MINIMO ;Si está por debajo del mínimo
         setb AGUA             ;abre el agua y apaga las resistencias
         clr RESIST
         mov R6,#00h
         clr LED_MIN
         clr LED_INF
         setb LED_CLK
         call MIENTRAS
         clr LED_CLK
         sjmp PRINCIPAL

      ARRIBA_MINIMO:
      jnb LIM_INF,ARRIBA_INFERIOR;Si está por debajo del Lim. Inferior
         setb AGUA               ;abre el agua y apaga las resistencias
         setb RESIST
         mov R6,#00h
         setb LED_MIN
         clr LED_INF
         setb LED_CLK
         call MIENTRAS
         clr LED_CLK
         sjmp PRINCIPAL

      ARRIBA_INFERIOR:
      jnb LIM_SUP,ARRIBA_SUPERIOR

         cjne R6,#00h,VACIANDOSE ;Verifica si el contenedor se está
            setb AGUA            ;vaciando o llenando
            setb RESIST
            sjmp ARRIBA_INFERIOR_01
          VACIANDOSE:
            clr AGUA
            setb RESIST
            sjmp ARRIBA_INFERIOR_01

      ARRIBA_INFERIOR_01:
         setb LED_INF
         clr LED_SUP
         setb LED_CLK
         call MIENTRAS
         clr LED_CLK
         sjmp PRINCIPAL


      ARRIBA_SUPERIOR: ;Si está por arriba del límite Superior
         clr AGUA        ;cierra el agua y prende las resistencias
         setb RESIST
         mov R6,#0FFh
         setb LED_CLK
         call MIENTRAS
         clr LED_CLK
         setb LED_SUP

   jmp PRINCIPAL

MIENTRAS:
   mov R7,#0FFh
   MIENTRAS_01:
      nop
      nop
      nop
      nop
      nop
   djnz R7, MIENTRAS_01
ret

end

 


 

Ya que estábamos por terminar este programa nos pidieron que incorporáramos un display que muestre el nivel de agua en el contenedor, el controlador tendrá los siguientes niveles 0%, 25%, 50%, 75% y 100%

 

 

Tabla para decodificar a 7 seg.
LSB 0 1 2 3 4 5 6 7 MSB
  a b c d e f g p Valor
1 1 1 1 1 1 0 0 3F
0 1 1 0 0 0 0 0 06
1 1 0 1 1 0 1 0 5B
1 0 1 1 0 1 1 0 6D
1 1 1 0 0 0 0 0 07

 


 

;-----------------------------------------------------------------------
; PROGRAMA PARA CONTROL DE NIVEL DEL HUMIDIFICADOR
; Salvador Macías Hernández
; Martes, 03 Junio 2008
;-----------------------------------------------------------------------


LIM_100 EQU P0.0 ;Límite al 100%
LIM_75  EQU P0.1 ;Límite al 75%
LIM_50  EQU P0.2 ;Límite al 50%
LIM_25  EQU P0.3 ;Límite al 25%

LED_CLK EQU P1.0 ;Visualización del Reloj del Sistema
LED_SUP EQU P1.1 ;Visualización del Nivel Superior de Operación
LED_INF EQU P1.2 ;Visualización del Nivel Inferior de Operación
LED_MIN EQU P1.3 ;Visualización del Nivel Mínimo Indispensable

DISP1 EQU P3.0   ;Cátodo cómún del Display Centenas, se habilita con 0
DISP2 EQU P3.1   ;Cátodo cómún del Display Decenas, se habilita con 0
DISP3 EQU P3.2   ;Cátodo cómún del Display Unidades, se habilita con 0

AGUA   EQU P3.6  ;Al relevador de la válvula del agua, se habilita con 1
RESIST EQU P3.7  ;Al relevador que de las resistencias, se habilita con 1



org 0000h

PRINCIPAL:
   LIM0:

   jnb LIM_25, LIM25      ;Si el agua está entre 0 y 25% 1111
       setb AGUA          ;Apagamos Resistencias y Abrimos la llave
      
clr RESIST
       mov R6, #00h

       mov P1, #03Fh
       clr DISP3
       call ESPERA_255
       setb DISP3
   sjmp PRINCIPAL
 

   LIM25:
   jnb LIM_50, LIM50      ;Si el agua está entre 25 y 50% 1110
       setb AGUA          ;Apagamos Resistencias y Abrimos la llave
       clr RESIST
       mov R6, #00h

       mov P1, #05Bh         
       clr DISP2
       call ESPERA_255
       setb DISP2

       mov P1, #06Dh
       clr DISP3
       call ESPERA_255
       setb DISP3
   sjmp PRINCIPAL
 

   LIM50:
   jnb LIM_75, LIM75             ;Si el agua está entre 50 y 75% 1100
       cjne R6, #00h, VACIANDO50 ;Verificamos si viene de 25%
            setb AGUA            ;Viene de 25% y Abrimos la llave
            setb RESIST
            sjmp LIM50_1
       VACIANDO50:
            clr AGUA             ;Viene de 75% y cerramos la llave
           
setb RESIST
            sjmp LIM50_1

       LIM50_1:
            mov P1, #06Dh
            clr DISP2
            call ESPERA_255
            setb DISP2

            mov P1, #03Fh
            clr DISP3
            call ESPERA_255
            setb DISP3
            sjmp PRINCIPAL
 

   LIM75:
   jnb LIM_100, LIM100           ;Si el agua está entre 75 y 100% 1000
       cjne R6, #00h, VACIANDO75 ;Verificamos si viene de 25%
            setb AGUA            ;Viene de 25% y Abrimos la llave
            setb RESIST
            sjmp LIM75_1
       VACIANDO75:
            clr AGUA             ;Viene de 75% y cerramos la llave
            setb RESIST
            sjmp LIM75_1

       LIM75_1:
            mov P1, #07h
            clr DISP2
            call ESPERA_255
            setb DISP2

            mov P1, #06Dh
            clr DISP3
            call ESPERA_255
            setb DISP3
            jmp PRINCIPAL

   LIM100:               ;Si el agua sobrepasa el 100% 0000
      clr AGUA            ;Prendemos Resistencias y Cerramos la llave
      setb RESIST
      mov R6, #0FFh

      mov P1, #06h
      clr DISP1
      call ESPERA_255
      setb DISP1

      mov P1, #03Fh
      clr DISP2
      call ESPERA_255
      setb DISP2

      mov P1, #03Fh
      clr DISP3
      call ESPERA_255
      setb DISP3
      jmp PRINCIPAL

  jmp PRINCIPAL


ESPERA_255:
   mov R7, #0Fh
   ESPERA_255_1:
   djnz R7, ESPERA_255_1
ret

end


FOTOGRAFÍAS DEL SISTEMA FUNCIONANDO

Vista frontal del Humidificador reestablecidoVista del Humidificador reestablecido mostrando el controlador de Humedad

El montaje del controlador de nivel en el HumidificadorSe observa la interacción entre el controlador de nivel y el controlador de humedad que comanda las resistencias

Fotografía del  controlador de nivel por histéresis, en su versión que incorpora un display para indicar el nivel

Gráfica de Humedad Relativa durante la primera noche que se reestableció el equipo

Gráfica desde el día anterior al reestablecimiento, se observa el incremento en la humedad del cuarto

 

 

Bibliografía y Referencias

[1] Intel; 80C31BH/80C51BH/87C51 MCS  51 CHMOS SINGLE-CHIP 8-BIT MICROCONTROLLER; Hoja de Datos [2] Intel; MCS 51 MICROCONTROLLER FAMILY USER'S MANUAL