martes, 25 de septiembre de 2012

Control de Temperatura con ATmega8a

Este circuito se implementa para mantener un ambiente dentro de un rango de temperatura, el caso más práctico es una incubadora. El controlador se encargará de hacer las correcciones necesarias cuando el sistema no cumpla las condiciones deseadas.

En este caso, el controlador de temperatura tendrá el papel de calefactor; ya que cuando el ambiente disminuya su temperatura respecto de la mínima del rango, el controlador se activará y lo calentará hasta que la temperatura regrese al intervalo. Ahora, cuando el sector aumente su temperatura respecto de la máxima del rango, el circuito se desactivará dejando de calentarlo para que éste se enfríe con el ambiente.

Para proveer de calor el sector mencionado se utilizará un bombillo incandescente el cuál se encenderá y apagará según sea el caso.

Etapas

Sensor de temperatura y acondicionamiento:


El LM35 es un sensor de temperatura que, según la configuración utilizada, entrega en su salida 10mV/oC; es decir, si la temperatura es de 25oC entonces la salida será 0.25 V.

El ADC del microcontrolador trabaja en el rango 0 – 5V, por lo tanto, para aprovechar mejor su sensibilidad, debemos amplificar la señal del LM35 10 veces. Es por ello que se utiliza el amplificador activo que puede implementarse en la configuración mostrada o utilizar la configuración básica con un LM741.

Referencia


Este potenciómetro se utilizará para elegir la temperatura de referencia que se requiera mantener. También irá conectado a uno de los pines ADC del microcontrolador.

Control


El esquema muestra las conexiones de los pines del microcontrolador.

Circuito de potencia

El diodo D1 se utiliza para proteger al microcontrolador. El MOC3031 es un optotriac que enviará una señal de activación al triac U6 cuando la salida del circuito de control sea 1 lógico (5 V), lo cual hará que el bombillo se encienda; caso contrario, si la salida del circuito de control es 0 lógico (0 V), el bombillo no se encenderá.

Circuito Completo


Programa en Basic


'configuracion de microcontrolador
$regfile = "m8def.dat"                                      'Microcontrolador a utilizar
$crystal = 8000000                                          'Frecuencia de oscilador interno =8 MHz
$hwstack = 32                                               'Hardware stack
$swstack = 10                                               'Software stack
Config Timer1 = Timer , Prescale = 64                       'Configuracion de TIMER1 F=Fosc/64
Config Portb = Output                                       'Puerto B como salida
Config Adc = Single , Prescaler = Auto                      'Configuracion de ADC

'Definicion de variables
Dim Vsensor As Word
Dim Vref As Word
Dim Tmin As Single
Dim Tmax As Single
Dim Tempref As Single
Dim Temp As Single

'Habilitacion de interrupcion por comparacion
Enable Interrupts
On Compare1a Interrupcion
Enable Compare1a

'Inicializacion de registros para comparacion
Timer1 = 0
Compare1a = 62500

'Programa principal
Do
   nop                                                      'Ninguna operacion
Loop

'Rutina de interrupcion
Interrupcion:

 'Rutina de ADC
 Start Adc                                                  'Iniciar ADC
 Vsensor = Getadc(1)                                        'Vsensor= Canal 1 de ADC
 Vref = Getadc(0)                                           'Vref= Canal 0 de ADC
 Stop Adc

 'Convertir valor obtenido de ADC a valor de temperatura
 Temp = Vsensor / 1023
 Temp = Temp * 50
 Tempref = Vref / 1023
 Tempref = Tempref * 50

 'Establecimiento de rango de temperatura
 Tmin = Tempref - .5
 Tmax = Tempref + .5

 'Control de temperatura en rango Tempref +/- 2
 If Temp < Tmin Then                                        'Si Temp<Tmin encender foco
   Portb.6 = 1
   Portb.5 = 0
 Elseif Temp > Tmax Then                                    'Si Temp>Tmax apagar foco
   Portb.6 = 0
   Portb.5 = 0
   If Temp > 32 Then
      Portb.5 = 1
   End If
 End If

 'Reinicializacion de registros para comparacion
 Timer1 = 0
 Return                                                     'Retorno de interrupción

End                                                         'Fin de programa


Funcionamiento

El funcionamiento del programa es el siguiente:


  • Se establece una temperatura de referencia mediante el potenciómetro RV2.
  • la temperatura se mantendrá en el rango Trmpref +/- 0.1ºC.
  • La rutina principal no realiza ninguna operación, en este caso, pero si se desea se podría mantener al microcontrolador realizando alguna tarea y el control de temperatura sólo será una rutina de interrupción que no lo mantendrá ocupado todo el tiempo.
  • La rutina de interrupción se ejcutará cada 0.5s, hace falta calcular el valor en Comapare1a:  
                   Se requiere que la rutina de interrupción se ejecute cada 0.5 s.             

                               La frecuencia del TIMER1 es:

                                                       f=fosc/64=8 MHz / 64 = 125 KHz

         La cuenta en el TIMER1debe llegar hasta un cierto valor, inicializado en COMPARE1A,en 0.5 s 
         para  que se ejecute la rutina de interrupción.

                                                              N·T = N / f = 0.5 s
                                                                 N = 0.5 · f=0.5 · 125000
                                                                 N = 62500 
  • Se sensa la temperatura de referencia y de salida del sistema. El ADC lo convierte a un valor digital de 0 - 1023. Es necesario llevarlo al rango 0 - 50ºC:
                    El ADC entrega un valor 0 – 1023d correspondiente a 0 – 5 V respectivamente, entonces:

                                                               Vadc=Vin · 1023 / 5
                                                                 Vin = 5·Vadc / 1023

                      En este caso el valor numérico de temperatura es 10 veces el valor numérico de voltaje, 
                es decir: 
         
                                                                   Temp = 10· Vin

           
                               Por lo tanto para obtener el valor numérico de temperatura  se realizan las operaciones:

                                                               Temp=50·Vadc/1023
  • En la rutina de interrupción se observa  que se crea un rango Tmin - Tmax. en el que se quiere mantener al sistema. 

             Si Temp<Tmin entonces se enciende el bombillo para que actúe como calefactor.
             Si Temp>Tmax entonces se apaga el bombillo para que el ambiente baje de temperatura.

El proceso se repite indefinidamente, pero si por alguna razón se sobrepasara una temperatura máxima, en este caso 32ºC, se activará una alarma en el pin 5 del Puerto B.

6 comentarios:

  1. Hola !! tu proyecto esta genial lo armare y promto te dire que tal me funciono !!!!!

    ResponderEliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  3. Como lo utilizo con el atmega 8515?

    ResponderEliminar
  4. Como lo utilizo con el atmega 8515?

    ResponderEliminar
  5. Este comentario ha sido eliminado por el autor.

    ResponderEliminar
  6. Que programa utilizas para realizar los graficos de los circuitos?

    ResponderEliminar