Autor Tema: termoestato  (Leído 3320 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Tempus

  • PIC10
  • *
  • Mensajes: 37
termoestato
« en: 09 de Mayo de 2009, 21:08:05 »
hola amigos estoy haciendo un termoestato con 16f876 y un lm35 mi problema es el siguiente kiero k cuando el lm baje por debajo de 18 se active la salida rc0 y cuando suba por encima de 22se apague  RCo hice lo siguiente pero no me funciona bien, aver si me podeis ayudar gracias a todos.

adjunto mi proteus, c.

#include <16F876.h>
#device adc=8
#FUSES NOWDT                       //No Watch Dog Timer
#FUSES XT                         //Crystal osc <= 4mhz
#FUSES PUT                       //Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading


#use delay(clock=4000000)
#define use_portb_lcd TRUE
#include <lcd.c>
int temperatura;
 
void main(void)
{
   setup_adc_ports(RA0_ANALOG);// configura RA0 como entrada analogica
   set_tris_a(0xff);
   setup_adc(ADC_CLOCK_INTERNAL);
   lcd_init();                            // inicializa el LCD
   set_adc_channel(0);
   delay_us(20);
   
   while(true)
   {
      temperatura=read_adc();           //lee valor analogico
      if(temperatura<17)
      output_high(pin_c0);
      delay_us(10);
      if(temperatura>22)
      output_low(pin_c0);
      delay_us(10);
      printf (lcd_putc,"\f  Temp:%d%cC" temperatura*2,0xdf);
      delay_ms(100);
   }
   
}
« Última modificación: 09 de Mayo de 2009, 21:46:17 por Tempus »

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: termoestato
« Respuesta #1 en: 09 de Mayo de 2009, 21:40:58 »
Y cual es el problema que tienes? es decir porque dices que no fuciona bien?  :?
El papel lo aguanta todo

Desconectado Tempus

  • PIC10
  • *
  • Mensajes: 37
Re: termoestato
« Respuesta #2 en: 09 de Mayo de 2009, 21:43:03 »
Y cual es el problema que tienes? es decir porque dices que no fuciona bien?  :?


mi Problema es que  cuando bajo por debajo de 17 grados no se activa la salida y k cuando subo por encima de 22 no se apaga la salida

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: termoestato
« Respuesta #3 en: 09 de Mayo de 2009, 21:48:55 »
Hola.

Pues hay varias cosas.

1. El valor leido del ADC no es temperatura, es un valor entre 0 y 255.
2. El ADC de los PIC presentan oscilaciones en los 2 LSBs, por lo que es mejor hacer un filtrado digital antes de evaluar los datos.

Saludos
El papel lo aguanta todo

Desconectado Tempus

  • PIC10
  • *
  • Mensajes: 37
Re: termoestato
« Respuesta #4 en: 09 de Mayo de 2009, 21:49:42 »
y como corrigo eso

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: termoestato
« Respuesta #5 en: 09 de Mayo de 2009, 21:52:18 »
El 2 punto ya te dije.

Para el 1. se debe sacar una curva que relacione la salida del sensor con el valor de temperatura. Ese dato esta en el datasheet del sensor de temperatura, para el LM35 tenemos: 100 mV/°C.

Perdon lo corregi yo... :lol:
« Última modificación: 11 de Mayo de 2009, 15:11:54 por MGLSOFT »
El papel lo aguanta todo

Desconectado Tempus

  • PIC10
  • *
  • Mensajes: 37
Re: termoestato
« Respuesta #6 en: 09 de Mayo de 2009, 21:54:10 »
pero mi duda es xk esta parte del programa esta mal

temperatura=read_adc();           //lee valor analogico
      if(temperatura<17)
      output_high(pin_c0);
      delay_us(10);
      if(temperatura>22)
      output_low(pin_c0);
      delay_us(10)

que tengo k poner en vez de eso?

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: termoestato
« Respuesta #7 en: 10 de Mayo de 2009, 12:11:38 »
como te dijo MLO__ quizá un pequeño filtrado digital, esto nose muy bien como hacerlo, pero seguramente que encuentras algo en el foro.

No te funciona porque el A/D del micro y el sensor funcionan así:

Supongamos que la máxima tensión del sensor sea 5V a la temperatura máxima que puede sensar, y 0V la mínima. Para el resto de valores de temperatura la tensión varía analógicamente en la salida del sensor,d e 0 a 5V según la temperatura que se sensa.

Supongamos también que usaremos un ADC de 8 bits, entonces lo máximo que el conversor de 8bits puede darte será 255 y lo mínimo será 0

Entonces ahí tienes los primero valores, cuando el ADC tenga como resultado la conversión 255 la tensión será 5V en la salida del sensor y por tanto se estará sensando la máxima temperatura. Por el otro lado cuando el resultado de la conversión A/D sea 0 la tensión de la salida del sensor será 0V y se está sensando la mínima temperatura.

Para valores intermedios de tensión, temperatura y conversión A/D tenes que hacer una relación matemática, o quizá una regla de 3 por ahí, o el mejor método que creas conveniente, e implementarlo en ecuaciones o funciones en el micro para obtener el resultado de temperatura correcto, o en tu caso obtener el valor de conversión aproximado para tus valores de temperatura y cambiarlos por el 17 y 22 que colocaste "arbitrariamente" en tu programa.

Y si existe muchas variaciones en tu lectura, tendrás que usar algun filtro por hard y soft, que si no me equivoco ya se hablaron en el foro.

un saludo
.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: termoestato
« Respuesta #8 en: 10 de Mayo de 2009, 12:50:10 »
Exacto Cryn.

El codigo en escencia no esta mal. Lo que pasa es que falta un paso, falta convertir el valor leido en el ADC a temperatura.

En si, son dos conversiones las que hay que hacer:

1. Valor leido del ADC a voltaje analogico.
2. Voltaje analogico a Temperatura.

El 1. se hace con una regla de tres directa, los parametros son Vref y el valor leido del ADC:

V_{analogico} = \frac{read-adc() \times V_{ref}}{2^{n}}

El 2. se hace con una regla de tres directa tambien, los parametros son Temperatura y Resolucion del Sensor [10mV/°C]. Si tengo una temperatura de 50°C, tendre un voltaje a la salida del sensor de:

50 \times 10m = 2.5 V

Saludos
El papel lo aguanta todo

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: termoestato
« Respuesta #9 en: 10 de Mayo de 2009, 14:46:32 »
estas en lo cierto MLO__ :mrgreen:

ahora sola falta lo del filtrado por hard y soft:

1. Por Hard un filtro RC, o quizá solo un Condensador a gnd en la entrada del pin analógico del micro.

2. Por Soft, se me ocurre (en realidad si mal no recuerdo lo leí en un otro hilo hace tiempo) leer el resultado del conversor una determinada cantidad de veces en un determinado tiempo y sacar un promedio de las medidas, ese valor promedio será el resultado de "una lectura" y será el dato analizado o mostrado.
.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: termoestato
« Respuesta #10 en: 11 de Mayo de 2009, 01:55:07 »
Si.

Ese es el famoso filtro Moving average, es un promediador.
El papel lo aguanta todo

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: termoestato
« Respuesta #11 en: 11 de Mayo de 2009, 02:50:11 »
conoces algunos otros?
.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: termoestato
« Respuesta #12 en: 11 de Mayo de 2009, 03:14:56 »
Hola.

La idea es que dependiendo de los pesos -valor que multipica a la variable leida- y del numero de sumandos varia el filtro. Para el caso del moving average, todos los pesos son iguales a 1.

Pero se puede colocar cualquier valor -logicamente, estos valores son calculados en el diseño de los filtros- con lo cual puede haber Filtros Pasa-Altas, Pasa-Bajas, de Rechazo de Banda....y los hay de diferente orden tambien. En el filtrado digital hay dos clases de filtros: FIR y IIR -pues la verdad son los que yo conozco, de pronto hay mas-.

saludos
El papel lo aguanta todo


 

anything