domingo, 10 de febrero de 2013

Web-Server de Temperatura con TC77 mediante Labview

En la siguiente entrada la vamos a destinar a explicar un pequeño proyecto que se nos ha encargado al equipo formado por Míguel, Hector y yo. 



El objetivo es mediante un sensor de temperatura medir la Ta y via Rs232 recibirlo en Labview con nuestro ordenador. Una vez obtenidos los datos, los subiremos via protocolo TCP-IP para que mediante un VI existente en otro ordenador, cualquier usuario con el Socket de ese segundo Pc, pueda acceder en tiempo real al servidor y ver la medición de temperatura en tiempo Real.

Mas en detalle, explicaremos un pequeño resumen de como vamos a dividir el proyecto,que será en 3 partes:

1º- Lectura de temperatura ambiente con el Sensor TC77
La primera parte será la lectura en tiempo real de la Ta, para ello vamos a utilizar el sensor de temperatura TC77, integrado en una PICDEM. La lectura la vamos a realizar mediante el PIC 18F4550 y el acceso al sensor de temperatura mediante el protocolo SPI.
Los datos obtenidos serán enviados a través de cable RS232.

2º- Recepción de datos en el Pc1 y UpLoad de los mismos
Los datos que hemos obtenido de Ta, serán recibidos mediante RS232 en el Pc1, el cual los obtendrá mediante un VI creado en Labview, que procese los datos RS232 y deje los datos disponibles para que puedan ser escuchados por el Pc2.

3º- Diseño de VI como Web-Server para acceso a los datos por cualquier usuario
El Pc2, creará un VI para poder escuchar los datos obtenidos por el Pc1 en tiempo real. Este VI permitirá a cualquier usuario con el Socket del Pc2, pueda acceder a un entorno Visual desde cualquier navegador y observar la lectura actual de Temperatura ambiente.

Explicado el funcionamiento y la estructura del proyecto pasamos a centrarnos en sus fases.


1º- Lectura de temperatura ambiente con el Sensor TC77

Como cité anteriormente, para realizar la medición emplearemos una tarjeta PICDEM, que es una tarjeta de aplicación didáctica gobernada por el Microcontrolador PIC18F4550 y una serie de periféricos que se comunican con el mismo mediante el procotolo SPI.
La tarjeta empleada es la que se muestra en la siguiente Imagen, donde podemos apreciar la localización tanto del Sensor de temperatura como el PIC.



En este caso no es necesario que realicemos ningún tipo de conexión vía Hardware ya que todo esta integrado en Placa, asi que simplemente habilitaremos el jumper del sensor TC77 y pasaremos a la creación de nuestro Programa en C mediante MPLab.


TC77

Antes de nada vamos a explicar un poco este pequeñin, tanto su Hardware, como el software que emplearemos.
El TC77 es un Sensor de temperatura digital creado por Microchip, accesible vía serie. Su bajo costo y pequeño tamaño permite su aplicación en múltiples sistemas. La comunicación con el integrado se realiza mediante el interfaz SPI y Microwire.
El dispositivo cuenta con una resolución de 12 Bits, 0,0625 º C por cada bit menos significativo(LSB). 

Precisión:
+/- 1ºC(max) sobre el rango de temperatura de 25º y 65 ºC.
+/- 2ºC(max) sobre el rango de temperatura de -40º y 85 ºC.
+/- 3ºC(max) sobre el rango de temperatura de -55º y 125 ºC.

Alimentación y consumos
-Desde 2,7 a 5,5 Voltios.
-Tiene un consumo típico de 250uA en Continuos conversion mode.
-Tiene un consumo típico de 0,1uA Shutdown mode.

 Estructura externa 

Dentro de su estructura externa podemos ver que se trata de un encapsulado tipo SMD, específicamente SOT-23.
Los pines que dispone son:
CS: Chip Select, corresponde al chip de selección necesario para utilizar el protocolo SPI.
VSS:Ground
SCK:Serial Clock, este pin corresponde a la lina de reloj empleada en SPI.
VDD:Power
SI/O: Serial Data Pin, es la linea de datos.



Estructura interna 

En esta imagen obtenida de su datasheet podemos comprender de una forma sencilla el funcionamiento interno del dispositivo mediante un diagrama de bloques.


En primer lugar nos encontramos el diodo interno que actúa como sensor de temperatura, los datos del mismo son convertidos mediante un conversor Analógico-Digital de 13 bits.
Posteriormente los bits de información son procesados mediante el registro de temperatura, el registro del fabricante y el registro de configuración.
Por último los datos son transmitidos mediante un Interface de puerto serie, vía SPI

La estructura interna de registro del TC77 como hemos especificado esta formada por 3 registros.
El registro de temperatura(TEMP) e identificación del fabricante(M_ID), que son solo de lectura, y el registro de configuración(CONFIG) que es solo escritura.



Este seria un ejemplo del proceso de escritura de datos, en primer lugar la lectura de temperatura.

 Posteriormente una escritura en el registro de configuración


Datasheet:
http://ww1.microchip.com/downloads/en/DeviceDoc/20092a.pdf


Elaboración del código
El entorno que vamos a utilizar para la elaboración del código será MPLab.

Este es el código que hemos utilizado para la lectura de temperatura y su envío a través de RS232.

////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// CABECERA   ///////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
#include<18f4550.h>
#FUSES INTHS,MCLR,PUT,BROWNOUT
#use delay(INTERNAL=8MHZ)
#define CS PIN_D2  // definimos el pin D2 como Chip Select
#use rs232 (BAUD=9600 , XMIT=PIN_C6 , RCV=PIN_C7)  //configuracion RS232
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
// VARIABLES GLOBALES   ////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////////
int TempMen=0, TempMay=0;  // variables para los bits de mayor y menor peso
signed int16 Reg16Bits=0;  // variable para el registro de 16 bits
float valordec=0;
float valorent=0;
boolean Tempnegativa=0;
float Temperatura, volt=0;
////////////////////////////////////////////////////////////////////////////////////////////////////////////
// FUNCIONES ////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////
void lectura_spi()
{
Tempnegativa=0;
output_low(CS); // pone el Chip select a low
TempMay=spi_read(0);//Lectura Spi del bit de mayor peso (8bits)
TempMen=spi_read(0);//Lectura Spi del bit de menor peso (8bits)
output_high(CS); // pone el Chip select a high
Reg16Bits=make16(TempMay,TempMen); //convertimos a un registro de 16Bits con la funcion make16
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
// PRINCIPAL /////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////
void main()
{
setup_spi(spi_master|spi_l_to_h| spi_ss_disabled);   //configuracion de SPI Maestro-Esclavo

delay_ms(1000);
do
{
lectura_spi();
if (Reg16Bits<0)    //si el registro de 16bits es negativo 
{
Tempnegativa=1;
Reg16Bits=~Reg16Bits+8; //es negativo y lo complementamos a 2 y le sumamos 8
}

Reg16Bits=Reg16Bits>>3; //descartamos los 3 bits menos significativos
valordec=(float)(Reg16Bits&0b000000000001111)*0.0625;//damos formato a los decimales
valorent=(float)(Reg16Bits>>4); //damos formato a los enteros, descartando los decimales

if (Tempnegativa) // si tempnegativa es 1 almacena valor negativo en la variable Temperatura
{
Temperatura=-1*(valorent+valordec);
}
else
{
Temperatura=(valorent+valordec);
}
printf("\nTemperatura:%1.2f",Temperatura); // printf a Rs232
delay_ms(1000);
}
while(1);
}

2º-Recepción de datos en el Pc1 y UpLoad de los mismos

Una vez que hemos completado la primera parte, pasamos a crear el VI para la recepción de los datos en el Pc1 vía RS232. Hemos empleado un cable null modem y nuestro cable conversor RS232 a Usb.

En la imagen se puede ver el VI con todas las explicaciones de su funcionamiento. En la primera parte tenemos los parámetros de configuración del puerto RS232.
Después hemos añadido dos bucles while, uno para el programa principal donde se devuelven los datos procedentes del puerto RS232 al buffer de lectura y su posterior escritura en el protocolo TCP.
Y el segundo bucle while que corresponde a la función de Stop.



Esta es la visualización del Front Panel.





3º- Diseño de VI como Web-Server para acceso a los datos por cualquier usuario

En esta última parte como citamos al comienzo, crearemos un VI desde el cual podremos escuchar los datos que el Pc1 escribe en el protocolo TCP. Este VI va a permitir a cualquier usuario que desde su navegador se conecte a este mismo server, empleando el socket.

En la siguiente Imagen podemos ver el diagrama de bloques de nuestro VI. Como se explica en la imagen, simplemente estamos abriendo la conexion TCP en el socket del Pc1 para poder acceder a la lectura de temperatura ambiente en tiempo real.

Diagrama de bloques


En la siguiente imagen podemos ver el resultado del Front Panel, esto es lo que visualizaremos en el navegador Web.



Pot último comprobaremos que se encuentra activo el Web server en Tools-> Options..., y pasaremos a utilizar la herramienta Web Publishing Tool, para crear nuestro servidor Web dentro de Tools-> Web Publishing Tool.



En el momento que terminemos el Wizard guardamos y ya tenemos preparado nuestro Web server.
Funcionamiento

Una vez que hemos acabado, pasaremos a poner en marcha el proyecto. Caragamos el programa en El PIC y la ponemos en modo Run conectada al Pc1 a través de RS232, mediante otro ordenador accedemos al navegador, e introducimos el socket del Pc2. http://192.168.100.133:8000/server_temperatura.html

Puede que nos cargue unos segundos en cargar
Una vez que termine podemos observar el resultado en el navegador.


En el momento que se hizo la captura se puede observar una lectura de temperatura ambiente de 21.50 º C.

No hay comentarios:

Publicar un comentario