Autor Tema: Problema LM35  (Leído 1816 veces)

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

Desconectado ADY12

  • PIC10
  • *
  • Mensajes: 43
Problema LM35
« en: 19 de Octubre de 2015, 15:07:26 »
Tengo un problema con LM35, lo tengo conectado a la entrada RA2 del micrcontrolador, pero no me mide la temperatura correcta siempre me mide unos 10 grados inferior. Lo tengo alimentado a 5 V (4.63 le llegan para ser mas exactos), a que se puede deber este problema. Ya que lo comparo con la NTC que tengo i la diferencia es grande.

Código: [Seleccionar]
#include <18F4550.h>    //Microcontrolador utilizado PIC18F4550

//ADC
#device adc=10          //Convertidor ADC resolucion 10

//CONFIGURACIÓN
#fuses HSPLL            //Alta velocidad despues de haber utilizado el prescaler
#fuses PLL5             //Divide la frecuencia de entrada entre 5, es decir 20 MHz/5= 4 MHz
#FUSES NOWDT
#fuses MCLR             //Reset

//CRISTAL DE CUARZO 20MHz
#use delay(clock=48000000)       //El cristal que tenemos es de 20 MHz, pero el clock efectivo que tenemos
                                 //despues de realizar los prescaler y PLL es de 48 MHz
#include "C:x\flex_lcd420.c"       //LCD
#include <math.h> 

void main (){
float x;
float LM35;

while(true){
lcd_init();                   //Inicializar LCD
setup_adc_ports(ALL_ANALOG);             
setup_adc(ADC_CLOCK_INTERNAL);   //Reloj del conversor interno
set_adc_channel(2);                             //Obtencion de datos entrada 1
delay_us(20);
x=read_adc();
LM35=5*x/1024.0;
lcd_putc('\f');
lcd_gotoxy(1,1);
printf(lcd_putc,"TEMP_AMB = %4.1f ", LM35);
delay_ms(1000);
}


}

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re:Problema LM35
« Respuesta #1 en: 19 de Octubre de 2015, 15:33:27 »

Compañero varias recomendaciones:

1. Recuerda que el LM35 entrega 10mV/ºC así que debes utilizar esta pendiente para realizar el cálculo de la temperatura así:

10mV/ºC = V/T,   donde V es la tensión de respuesta del LM35 y T es la temperatura en grados Celsius, luego en términos de las variables del programa tenemos

V =   (Vref+*x)/(2^n - 1) donde n es el número de bits de la conversión, para una tensión Vref+ de 5V y n = 10, tenemos
V = (5*x)/(1023)

Combinando ecuaciones se obtiene

T = (5*x)/(1023*0.01)
T = 0.4888*x

Con la ecuación anterior puede decodificar el valor de la temperatura entregado por el LM35

2. Con respecto al programa, realizaría las siguientes modificaciones en el while (true) así


Código: [Seleccionar]
setup_adc_ports(RA0_RA1_RA2_ANALOG_RA3_REF);           
setup_adc(ADC_CLOCK_INTERNAL_32);   //Reloj del conversor interno
while(true){
lcd_init();                   //Inicializar LCD
set_adc_channel(2);                             //Obtencion de datos entrada 1
delay_ms(1);
x=read_adc();
LM35= 0.488*x
lcd_putc('\f');
lcd_gotoxy(1,1);
printf(lcd_putc,"TEMP_AMB = %4.1f ", LM35);
delay_ms(1000);
}

3. Esta es una recomendación personal, a la variable x la definiría como tipo long ya que la conversión A/D no tiene puntos flotantes es un valor discreto.
 
Un saludo desde Pereira - Colombia

Desconectado allennet

  • PIC16
  • ***
  • Mensajes: 108
Re:Problema LM35
« Respuesta #2 en: 19 de Octubre de 2015, 16:32:37 »
También prueba agregando un lm358 en seguidor de voltaje por la corriente(quiescent current 56uA a 5V con 25ºC) del lm 35 es muy baja para el pic directo.
"La curiosidad mato al gato, pero murio sabiendo"

Desconectado ADY12

  • PIC10
  • *
  • Mensajes: 43
Re:Problema LM35
« Respuesta #3 en: 20 de Octubre de 2015, 16:37:24 »
Tengo una pregunta, se podria hacer de alguna manera que el LM35 trabajara en una resolucion de 8 bits, pero el microcontrolador funcionara a 10 bits (ya que otros sensores necesito que funcionen a 10 bits, y como no he hecho la etapa amplificadora pierdo muchos bits poniendolo a 10 en el LM35 y no mide correctamente con lo que me habeis dicho, y no tengo opcion de poner nada mas)

Desconectado allennet

  • PIC16
  • ***
  • Mensajes: 108
Re:Problema LM35
« Respuesta #4 en: 20 de Octubre de 2015, 17:10:02 »
para que sea mas estable puede hacer promedio y tambien usar 100nf en paralelo al pic lo mas serca posible,porque Vref+ es Vdd.

y compensar el offset del Lm358.
Código: C
  1. #include <18F4550.h>    //Microcontrolador utilizado PIC18F4550
  2.  
  3. //ADC
  4. #device adc=10          //Convertidor ADC resolucion 10
  5.  
  6. //CONFIGURACIÓN
  7. #fuses HSPLL            //Alta velocidad despues de haber utilizado el prescaler
  8. #fuses PLL5             //Divide la frecuencia de entrada entre 5, es decir 20 MHz/5= 4 MHz
  9. #FUSES NOWDT
  10. #fuses MCLR             //Reset
  11.  
  12. //CRISTAL DE CUARZO 20MHz
  13. #use delay(clock=48000000)       //El cristal que tenemos es de 20 MHz, pero el clock efectivo que tenemos
  14.                                  //despues de realizar los prescaler y PLL es de 48 MHz
  15. #include "C:x\flex_lcd420.c"       //LCD
  16. #include <math.h>  
  17.  
  18. float x;
  19. float LM35;
  20. int conta=0;
  21. long sumando=0;
  22.  
  23. void main ()
  24. {
  25. lcd_init();                   //Inicializar LCD
  26. setup_adc_ports(AN0|VSS_VREF);            
  27. setup_adc(ADC_CLOCK_DIV_64);       //64 es en 48mhz
  28.  
  29. while(true){
  30. set_adc_channel(0);                             //Obtencion de datos entrada 1
  31. delay_ms(10);
  32. sumando=sumando + read_adc();
  33. conta++;
  34. if(conta>65)
  35. {
  36.   x=sumando/65;
  37.   LM35= 0.488*x
  38.   lcd_putc('\f');
  39.   lcd_gotoxy(1,1);
  40.   printf(lcd_putc,"TEMP_AMB = %4.1f ", LM35);
  41.   sumando=0;
  42.   conta=0;
  43.   }
  44. }
« Última modificación: 20 de Octubre de 2015, 18:16:12 por allennet »
"La curiosidad mato al gato, pero murio sabiendo"

Desconectado Chenao

  • PIC18
  • ****
  • Mensajes: 414
Re:Problema LM35
« Respuesta #5 en: 21 de Octubre de 2015, 01:25:17 »
Código: [Seleccionar]
Tengo una pregunta, se podria hacer de alguna manera que el LM35 trabajara en una resolucion de 8 bits, pero el microcontrolador funcionara a 10 bits (ya que otros sensores necesito que funcionen a 10 bits, y como no he hecho la etapa amplificadora pierdo muchos bits poniendolo a 10 en el LM35 y no mide correctamente con lo que me habeis dicho, y no tengo opcion de poner nada mas)
No entiendo ha que te refieres cuando dice que el LM35 trabaje a 8 bits, recuerda que este sensor entrega una respuesta lineal entre voltaje y temperatura las cuales en teoría son señales análogas.

 
Citar
para que sea mas estable puede hacer promedio y tambien usar 100nf en paralelo al pic lo mas serca posible,porque Vref+ es Vdd.

Ummm, lo de promediar puede llegar a ser peligroso si el fenómeno que se esta estudiando posee alta dinámica.
Un saludo desde Pereira - Colombia

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema LM35
« Respuesta #6 en: 21 de Octubre de 2015, 03:48:09 »
Citar
Ummm, lo de promediar puede llegar a ser peligroso si el fenómeno que se esta estudiando posee alta dinámica.

Normalmente en los casos temperatura hay una gran inercia y promediar 8/16 con el ADC debe estar en el orden de los milisegundos o menos hacer TODO, captura + promediado, ejemplo el minimo especificado esta en 0.7us el TAD y 1us maximo con el RC del ADC en ese PIC + 1.4us de adquisicion ( a FULL escala, cambio total de voltaje). creo que totalmente factible. No se cual es el la precision que busca , pero algo que cambie 0.1º en 20us supongamos (una lectura tras otra * 8), estamos hablando de algo que pueda subir 50000 ºC/s si mantiene ese ritmo.
El promediar no es malo.. al menos en el micro, si usas un capacitor externo como el que dijeron ya es otro tema, es tanto asi que hay un capitulo del datasheet de TI sobre el LM35 manejar una carga con gran capacidad.

Citar
Tengo una pregunta, se podria hacer de alguna manera que el LM35 trabajara en una resolucion de 8 bits, pero el microcontrolador funcionara a 10 bits (ya que otros sensores necesito que funcionen a 10 bits, y como no he hecho la etapa amplificadora pierdo muchos bits poniendolo a 10 en el LM35 y no mide correctamente con lo que me habeis dicho, y no tengo opcion de poner nada mas)

Como dijo Chenao, El LM tiene una salida analogica y lineal, ademas en centigrado full-range tiene un error de hasta 0.8ºC (testeado y 1.5ºC en los limites) a 25ºC ( lo tipico es +/- 0.4ºC a 25º ) - hablo del LM35 no el LM35A C o lo que sea.
El otro tema es si esta un poco lejos el LM es la caida de tension que tengas en el conductor. Ya que la tension en el conductor es importante ( es lo que medis ),

Volviendo al tema, el microcontrolador tiene 10bits, con eso el minimo step que podes medir es de 5V-0V/1024 = aprox 5mV (4.88mV) , esto es 0.5ºC del LM, podes mejorar esto "artificialmente" en la cual oversamplees y dividis, Toma 4 muestras y dividilo por 2 y vas a conseguir 1 bit mas. Obviamente "fabricado". Y aunque no quiera tambien tenes los siguientes problemas:

- Hacer el tema de oversampleo y promediado tiene algunas exigencias tales como que la variacion sea producida por "ruido blanco"
- El ADC tiene errores, sea cual sea tu metodo de obtencion.
- La representacion de 0.488 no es exacta.. pero sorprendentemente esta BASTANTE cerca 0.4880000054836273 ( en 32 bits )
- La representacion en flotante de otro numero puede que no sea TAN exacta como uno quisiera tambien.
- La tension de referencia puede no ser exacta tmb.

y vas sumando errores. Y tal ves tengas un error de unos 1ºC acumulado facilmente a 25ºC y empeoraria a fondo de escala.
Pero antes de entrar en todo esto, mediste a la salida del LM la tension que posee ? para verifica que correctamente es lo que recibe el ADC ? Y que es tambien lo que correctamente deberia salir del LM ?

Lo pregunto por que si haces eso vamos a separar y ubicar donde esta el error. Si es el LM, si es el ADC, si es el camino del LM al ADC o si es el programa quien lo esta arruinando.
(Intenta leer el LM35 con y sin la salida conectada al ADC, para ver si cambia tambien)