TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: beto1234 en 02 de Octubre de 2011, 16:12:57

Título: Thermocouple tipo K - OP07 - CCS -PIC16F873A- Rango 0 - 1200ºC
Publicado por: beto1234 en 02 de Octubre de 2011, 16:12:57
Código: C
  1. /*
  2. ++++++++++Conectando una Thermocouple tipo K al PIC16f873++++++++++++++++++++++
  3. +++++++++++ By Alberto Roobledo Sánches - estudia en UTN FRRE ++++++++++++++++++
  4. ++++++++++++++++++++++WWW.CHACOELECNOR.COM.AR+++++++++++++++++++++++++++++++++++
  5. */
  6. #include <16F873a.h>
  7. /* ********************* Conversor A/D de 10 bits *************************** */
  8. #device adc=10
  9. #FUSES NOWDT, XT, PUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT  
  10. #use delay(clock=4000000)
  11. #define use_portb_lcd TRUE
  12. #include <LCD.c>
  13.  
  14.  
  15. //VARIABLED GLOBALES
  16. int16 TE,LM;
  17. float Tc,Tlm,mVO,Vm,Vlm;
  18. float a1=2.508355E+01  ,a2=7.860106E-02  ,a3=-2.503131E-01  ,a4=8.315270E-02  ,a5=-1.228034E-02  ,a6=9.804036E-04 ,a7=-4.413030E-05  ,a8=1.057734E-06  ,a9=-1.052755E-08 ;
  19.    //0ºa a 500 ºc - 0.000 to 20.644mv
  20. float a11=-1.318058E+02 ,a12=4.830222E+01  ,a13=-1.646031E+00  ,a14=5.464731E-02  ,a15=-9.650715E-04  ,a16=8.802193E-06  ,a17=-3.110810E-08 ;
  21.    //500ºc a 1372 ºc    20.644 to 54.886
  22. void main(void){
  23.   setup_adc_ports(AN0_AN1_AN3);
  24.   setup_adc(ADC_CLOCK_INTERNAL);
  25. lcd_init();
  26. lcd_putc("\f");
  27. lcd_gotoxy(1,1);
  28. lcd_putc("Tc[oC] Tlm[oC]");
  29.    while(true){
  30.    set_adc_channel(0);
  31.    delay_us(20);
  32.    TE=read_adc();
  33.    //setup_adc (adc_off);   //Apaga ADC
  34.    delay_us(50);
  35.    set_adc_channel(1);
  36.    delay_us(20);
  37.    LM=read_adc();
  38.    Vlm = (float) 5000 * LM / 1024 ; // tencion de entrada en mV
  39.    Tlm= (float)Vlm/10;
  40.    //Comienso de la conversion de los valores
  41.    mVO =(float) 5000 * TE / 1024 ; // tencion de entrada en mV
  42.    Vm =(float) mVO / (1+(100000/1000)); // Tencion en la salida de la termocupla
  43.    // Pasamos la tencion medida Vm a temperatura gracias a la ecuacion con los coeficientes de la tabla
  44.  
  45.    //formula tipo:   t_90 = a_0 + a_1*E + a_2*E^2 + ...+ a_n*E^n,
  46.  
  47.    if(Vm<20.6)
  48.    {
  49.     Tc =(float) Vm * (a1+ Vm* (a2 +Vm*(a3+Vm*(a4+Vm*(a5+Vm*(a6+Vm*(a7+Vm*((a8+Vm*(a9))))))))));
  50.    }
  51.  
  52.    else if(Vm>20.6)
  53.    {
  54.  
  55.     Tc=(float)(a11 + Vm*(a12+Vm*(a13+Vm*(a14+Vm*(a15+Vm*(a16+Vm*(a17)))))));
  56.  
  57.    }
  58.    //  mostrar en el lcd
  59.    lcd_gotoxy(10,2);
  60.    printf(lcd_putc,"%f",Tlm);
  61.    delay_us(20);
  62.    lcd_gotoxy(1,2);
  63.    printf(lcd_putc,"%f",TC+Tlm);
  64.  
  65.    }
  66. }

 Me pregunto un amigo que no podía ver los archivos del circuito simulado - los archivos solo lo podes ver si te registras
Título: Re: Thermocouple tipo K - OP07 - CCS -PIC16F873A- Rango 0 - 1200ºC
Publicado por: ceci_lamorocha en 28 de Mayo de 2015, 09:56:56
Hola, antes que nada perdon por reavivar este post pero tengo una consulta al respecto que le puede servir a alguien mas.
En el programa figura esta ecuacion:
 
Tc =(float) Vm * (a1+ Vm* (a2 +Vm*(a3+Vm*(a4+Vm*(a5+Vm*(a6+Vm*(a7+Vm*((a8+Vm*(a9))))))))));

pero como se llegó a eso a partir de esto? :

//formula tipo:   t_90 = a_0 + a_1*E + a_2*E^2 + ...+ a_n*E^n,

gracias de antemano

Laura
Título: Re: Thermocouple tipo K - OP07 - CCS -PIC16F873A- Rango 0 - 1200ºC
Publicado por: beto1234 en 28 de Mayo de 2015, 10:54:33
 Esa formula se saco del archivo type_k.tab.txt que muestra los polinomios y las tablas de los valores de tensión de la termocupla tipo k. Los demás datos son coeficientes que se saco del mismo archivo.
Este polinomio cambia dependiendo del rango de temperatura para bajas y altas.

Título: Re: Thermocouple tipo K - OP07 - CCS -PIC16F873A- Rango 0 - 1200ºC
Publicado por: ceci_lamorocha en 28 de Mayo de 2015, 11:09:11
Hola gracias por la respuesta, eso si sabia pero lo que no entiendo es como llegaste al polinomio del programa porque
el polinomio del archivo.txt me parece muuy diferente, lo tenes desarrollado para ver como se llega de un polinomio al otro ?

gracias!
Título: Re: Thermocouple tipo K - OP07 - CCS -PIC16F873A- Rango 0 - 1200ºC
Publicado por: beto1234 en 28 de Mayo de 2015, 11:26:14
es esa ecuación esta simplificada   t_90 = a_0 + a_n*E^n      donde n=1,2,3,4,5,6,7,9... osea de 1 en adelante, trata de armar la ecuación entera  t_90 = a_0 + a_n*E^n  y ponele los 9 coeficientes y trata de ir simplificando por ahí simplificas mejor que yo que no me quedo muy entendida la ecuación  ((:-)) o usas el elevado con pow de la libreria math.h. Mostrame los resultados no te las guarde :) así lo vemos todos.
Título: Re: Thermocouple tipo K - OP07 - CCS -PIC16F873A- Rango 0 - 1200ºC
Publicado por: ceci_lamorocha en 28 de Mayo de 2015, 11:39:08
Ahhhh gracias ! de cada termino son 9 terminos en realidad !  bueno voy a intentar hacerlo de 0 a 500 grados a ver si coincidimos! gracias :)