Autor Tema: Dudas trabajando con AD594 y termopar J  (Leído 1916 veces)

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

Desconectado Alphax

  • PIC10
  • *
  • Mensajes: 1
Dudas trabajando con AD594 y termopar J
« en: 10 de Agosto de 2020, 15:59:11 »
Saludos.

Estoy en pos de realizar un control PID para un horno semi industrial.
Lo primero es que quiero hacer funcionar el termopar J con el ad594, investigando encontre una ecuacion que convierte la señal del AD a grados celcius (mostrado en el código) pero tengo problemas con esa ecuación ya que al simular no muestra la temperatura correcta, andube provando la ecuación con datos de la tabla mostrada en el datasheet del AD sin muy buenos resultados. Monté el circuito en una protoboard para ver y muestra valores de temperatura erroneos, por ejemplo muestra 2 grados luego cambia a 36 luego a 70 sube a mas de 100 y baja nuevamente sin nunca mostrar la temperatura real. Como supuestamente el integrados AD linealiza la señal del termopar trate como si fuese un lm35 y nada, me fue peor.

el código es el siguiente:
Código: [Seleccionar]
#include <16f877A.h>
#device adc=10
#fuses XT,NOWDT,NOPROTECT,NOLVP,NOBROWNOUT,PUT
#use delay(clock=4000000)
#include <math.h>
#include <lcd.c>

void main()
{
//declaracion de variables, activar ADC y luego lcd_init();
//int16 rT;
float temp,rT;
setup_adc_ports(AN0);              //definicion de la entrada analogica
setup_adc(ADC_CLOCK_INTERNAL);     //configuracion del modulo conversor
lcd_init();
lcd_putc("\f");
   for(;;)
   {
      set_adc_channel(0);
      delay_us(20);
      rT=read_adc();
      temp=((rT*(5000/1024))-(0.0030944))/10;       //ecuacion que convierte adc a °C
      printf(lcd_putc,"\nTemp = %01.2f°C",temp);
      delay_ms(1000);
   }
}

Muchas gracias, estare atento a ayuda y sugerencias.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Dudas trabajando con AD594 y termopar J
« Respuesta #1 en: 10 de Agosto de 2020, 16:47:30 »
https://www.sparkfun.com/datasheets/IC/AD595.pdf

No se cuales son las temperaturas que vos queres llegar, pero segun la tabla del datasheet es un aproximado de 10mV/ºC la salida del AD594 para temperaturas desde 0 a 200ºC.

Y vos tenes que con 10 bits (1024 divisiones) y supongo que 5V de referencia positiva, tendrias algo de 4.88mV/bit

De arriba tenemos que 10mV/ºC es lo mismo que 0,1 ºC/mV, juntando con el valor que obtuvimos de la division del ADC nos queda 0,1 ºC/mV  * 4.88 mV / bit = 0.488 ºC/bit

Entonces:
Temperatura medida = Lectura del ADC * 0.488

Código: C
  1. temp = read_adc() * 0.488;

Por lo que tu formula esta BIEN, lo que tiene malo la formula es la ganas de complicarse de mas.
Por ejemplo Una lectura del ADC de 20,en ambas formulas es: 9.76

En esta formula ese extra de restarle 0.0030944 a un numero que es GRANDE, por que leer en el ADC 20 y multiplicarlo por 5000/1024 es casi 100. Restarle eso no tienen sentido.. Y luego dividirlo por 10, te deja exactamente con la formula que te pase. En fin... Es lo mismo.

Si cambiando esto comienza a funcionar, entonces es un tema de no haber casteado algun (float) en (5000/1024). Pero sigo pensando que es excesivo la formula.

Y otras cosas mas,
- la maxima resolucion es de casi 0.5ºC que obtenes de esta forma. Por ahi es mejor reducir la referencia de voltaje positiva a un valor que permita mejor resolucion.
- tal ves ni siquiera se necesite que sea un float temp. que sea un int, te perdes unicamente los valores con coma, de todas formas no vas a ver incrementos de 0.1
- Podes hacer oversampling para aumentar en 1 bit la resolucion.
- No se que temperaturas pensas mejor, pero superando los valores de 200ºC, en la tabla ya no respeta los valores de 10mV/ºC y podria hacerse por tramos o buscar alguna funcion polinomica.


 

anything