miércoles, 9 de marzo de 2011

LM92: Termómetro I2C de 12Bits

LM92 es un sensor de temperatura digital que posee conectividad I2C, una exactitud de hasta 0,33°C en la medición y 12 bits de resolución. Esto representa variaciones de temperatura de tan solo 0,0625°C. Estas cualidades lo transforman en un termómetro ideal para sistemas de alta precisión donde la temperatura es un factor crítico a monitorear. Junto a un sistema de “ventana” de comparación térmica, posee alarmas por baja temperatura, alta y hasta por temperatura crítica. Los ajustes de estos valores son programables de manera muy sencilla y creemos que ya no podemos seguir contándote las bondades de este dispositivo; es momento de que ingreses al artículo y te asombres con este montaje didáctico, sencillo y profesional.

Un medidor de temperatura sencillo puede admitir errores de acuerdo al ámbito donde se utilice y según las necesidades que la aplicación requiera. No será lo mismo un sensor de temperatura para un termómetro domiciliario que para un equipo médico, por ejemplo, una incubadora de bebés. Tampoco será igual el empleado en el letrero luminoso de una esquina de la ciudad que el utilizado en un invernadero, es decir, para cada aplicación las exigencias pueden cambiar de manera radical. National Semiconductor nos ofrece, en el LM92, un producto de la más alta calidad para desarrollos donde las exigencias sean rigurosas, donde los rangos de temperaturas a medir tengan una extensión considerable (-55°C a +150°C) y cuando debamos obtener un desempeño destacado. Muchas características te hemos adelantado en el encabezado del artículo, pero en el desarrollo de este texto podrás comprobar lo sencillo que es acceder a un sistema de control térmico de calidad profesional.

Termómetros de toda clase y calidad

El LM92, como comentamos antes, brinda la posibilidad de trabajar con lo que se llama una “ventana térmica”. El circuito integrado posee un registro (programable) que almacena un valor mínimo de temperatura por debajo del cual, una alarma se activa. Es decir, podemos programar el registro mencionado para que haga sonar una alarma si la temperatura del criadero de aves descendió de una determinada temperatura y los animales corren riesgo. Así, el sistema avisará con un alerta que la temperatura ha descendido por debajo de un nivel prefijado. A este registro se lo conoce como T_LOW y por supuesto, también existe otro registro similar que ofrecerá un aviso al superar un nivel alto de temperatura: el registro T_HIGH. De este modo, por debajo de un valor térmico programable y por encima de otro, las alarmas se activan. Eso es la “ventana térmica”: los valores que quedan comprendidos entre T_LOW y T_HIGH. Asociado a estos niveles existe un tercero que es la lógica histéresis que debe tener la activación o no de las alarmas para evitar situaciones confusas o disparos intermitentes.

Diagrama en bloques del LM92

Las salidas de estas alarmas se presentan al usuario en un mismo pin (5) con el nombre INT. Esto es lógico debido a que la alarma avisará cuando la temperatura esté fuera de los valores de “ventana”. La salida es Open Drain y en consecuencia su habilitación producirá un estado lógico bajo en el mencionado pin del dispositivo. Recordemos que Open Drain es la analogía al Open Colector (Colector Abierto) pero realizado con transistores MOSFET tal como se puede ver en el diagrama superior. Allí se puede observar también que existe un cuarto registro que activa una alarma cuando ya las lecturas térmicas superan un valor crítico. El registro T_CRIT también programable y de manera habitual se ajusta con la finalidad de preservar estructuras físicas, evitar daños al propio sistema electrónico y, como decíamos, se suele ajustar a valores altos de lectura. De todos modos, puedes moverte dentro de lo que el rango de medición que el LM92 te permite. Esto es, puedes ubicar la temperatura crítica por debajo de la ventana térmica y disparar una alarma cuando la temperatura descienda a niveles demasiados peligrosos (congelación). Es importante que tengas en claro este concepto. La temperatura crítica no sólo es aplicable a valores altos sino que también puede actuar a niveles muy bajos. Mientras ubiques ese valor fuera de la ventana térmica, el trabajo de esta alarma tendrá sentido y del mismo modo que la anterior, se presenta como Open Drain en el pin 3.

Vista ejemplo de cómo una variación de temperatura atraviesa los límites establecidos por los registros

Los valores que adopta el dispositivo al iniciar su trabajo cada vez que se le aplica energía es el siguiente:

  • Histéresis de temperatura (T_HYST) = 2°C
  • Temperatura Baja (T_LOW) = 10°C
  • Temperatura Alta (T_HIGH) = 64°C
  • Temperatura Crítica (T_CRIT) = 80°C

Luego, estos valores pueden ser cambiados al inicializar el funcionamiento mediante el programa del microcontrolador. De este modo, el LM92 ahorra muchas líneas de código al programador evitando tener que utilizar pines del microcontrolador para las alarmas o para organizar la secuencia de trabajo de la ventana térmica, la temperatura crítica y la histéresis de activación/desactivación. El ahorro del tiempo de programación, al igual que los recursos de hardware han sido muy bien pensados y ejecutados por la gente de National Semiconductor en el diseño del LM92. Eso nos permite utilizar estructuras básicas para trabajar. Por ejemplo, en nuestro caso hemos utilizado nuestro clásico hardware Amicus para llevar a cabo el montaje. Aprovechando el mismo diseño base que hemos empleado para otros montajes, nos apoyamos en el PIC 18F25K20 que es un procesador muy versátil y confiable, ideal para este tipo de desarrollos. El circuito adoptado, por lo tanto, es el siguiente:

Circuito propuesto con el PIC18F25K20 y el LM92

Gracias a que el LM92 permite una alimentación que puede ser de 3,3Volts o de 5Volts (2,7V a 5,5V) aprovecharemos la misma alimentación que el PIC para realizar el trabajo. Las líneas SDA y SCL utilizan resistencias “pull-up” de 1K y las salidas Drain abierto de las alarmas se conectan de manera muy sencilla con un LED y una resistencia limitadora a la línea de tensión de 3,3Volts. El LED amarillo que se observa en el diagrama está colocado para ayudarnos en el trabajo de programación. La idea básica de su uso es hacerlo encender al principio de alguna rutina “importante” y apagarlo al final de la misma. Es una de las mil formas que puedes tener para ayudarte en la programación. Si el LED destella es porque el ciclo de programa se completa, si no lo hace es porque se interrumpe en algún sitio y de acuerdo al estado puedes descubrir donde se detiene la ejecución del programa. En nuestro ejemplo, su funcionamiento se encuentra antes de la toma de datos y al finalizar la presentación en el LCD siguiendo un orden muy sencillo de programa:

  • Declaro las variables a utilizar.
  • Escribo los registros de temperaturas a los valores que voy a utilizar.
  • Comienzo un lazo infinito y enciendo el LED.
  • Leo por Bus I2C el registro de temperatura.
  • Realizo el proceso sobre la información obtenida y la presento en el LCD.
  • Apago el LED y espero un tiempo hasta volver a iniciar el lazo.

Eso es todo el programa necesario para hacer funcionar al LM92 y aprovecharlo en sus funciones más importantes. Luego de observar este video donde hacemos una introducción al funcionamiento de nuestro desarrollo veremos la forma en que se organiza la estructura de los registros y cómo podemos trabajar con ellos.






Como todo dispositivo I2C, el LM92 posee un protocolo de comunicaciones que, mediante una estructura determinada, se comunica con el PIC intercambiando todos los datos necesarios para un funcionamiento apropiado. En este caso, la estructura está explicada en la hoja de datos del LM92 (Pág. 13, Fig.6) y haremos un pequeño repaso de cómo es el funcionamiento que hemos utilizado para ayudarte a que comprendas de manera más rápida los pasos a seguir y no pierdas el tiempo valioso que puedes emplear en el desarrollo del resto de la aplicación. Comenzamos entonces con “abrir” el bus I2C mediante la instrucción HBSTART. En Amicus, este formato de instrucción indica que utilizaremos el módulo MSSP del PIC para realizar la comunicación. Dicho de otro modo, usaremos los pines dedicados por hardware para facilitar el trabajo del PIC. Luego de abrir el canal de diálogo, nos abocaremos a escribir los registros internos del LM92, si es que deseamos cambiar los límites de trabajo de las alarmas respecto a los valores que el dispositivo trae programado por defecto al momento de inicializar su funcionamiento. Por este motivo, si deseamos trabajar con valores diferentes a los que trae el LM92 por “default”, dentro de la estructura de nuestro programa en el PIC, debemos escribir nuestros valores de trabajo.

Estructura de cómo se lee o escribe utilizando el "puntero" y los bytes de datos

La escritura es muy sencilla y se divide en dos partes. Primero se le indica al “puntero” (Pointer) del LM92 el registro sobre el cual vamos a trabajar. Este trabajo se realiza “escribiendo” con la instrucción HBUSOUT seguida de la dirección (Address Byte) del LM92 dentro del bus y posteriormente del número de registro. Por ejemplo: para indicarle al puntero que trabajaremos sobre el registro T_LOW, escribiremos una instrucción {HBUSOUT Address Byte, [N° de Registro]}. De este modo, el LM92 se prepara para recibir una actividad en ese registro que puede ser de escritura o de lectura. En este caso será de escritura, pero del mismo modo podemos proceder para tomar lectura del valor almacenado en el registro cuando realicemos desarrollos más complejos con ventanas dinámicas de trabajo. Es decir, cuando el sistema se encargue de adecuar en forma automática los valores de la “ventana térmica” en función de las necesidades del diseño y del desarrollo del programa ejecutado por el PIC.

Fragmento donde se programan los registros

Luego, escribimos el valor adecuado con el siguiente formato: {HBUSOUT Address Byte, N° de Registro, [Dato a escribir]}. De este modo, y como puedes ver en la imagen superior, se modifican los registros internos del LM92. Al descargar y leer el listado que forma el programa observarás que donde dice “Escribo” en la imagen superior significa que el programa está indicando la dirección del LM92 dentro del Bus con el último bit (R/W) en cero para indicar escritura. Luego, cuando realicemos una lectura este bit cambiará a un uno lógico y la etiqueta cambiará de nombre. Por último, cuando todos los registros sean escritos, según nuestro criterio, cerraremos la comunicación I2C mediante la instrucción HBSTOP. De este modo, ya estamos en condiciones de comenzar a leer la temperatura obtenida mediante el LM92 y presentarla en un LCD o procesarla de acuerdo a las necesidades del hardware que estamos desarrollando. Este trabajo es tan sencillo como el anterior. La estructura es la misma y pasamos a leer el registro donde se almacena el valor obtenido mediante la instrucción HBUSIN. En el ejemplo mostrado abajo, “LEO” es la dirección (Address Byte) con el último bit habilitando el proceso de lectura.

Así de sencillo es el protocolo I2C para leer el LM92

Veamos ahora como se organizan los dos bytes de datos y cómo haremos para extraer la información de temperatura o, en el proceso inverso, como hacemos para escribir un valor útil en cualquiera de los registros. Los datos vienen organizados en una palabra de dos bytes que vistos en forma lineal se presentan de la siguiente manera:

La palabra de dos Bytes que contienen la información intercambiada entre el 18F25K20 y el LM92

En cualquiera de los registros encontramos que el bit de la posición D15 nos indicará el signo de la temperatura observada. Es decir, si es sobre cero D15 tendrá un valor bajo y si es bajo cero el LM92 nos devolverá en esa posición un uno lógico. Por otro lado, las posiciones D0, D1 y D2 nos devuelven el estado (Status) de las alarmas al momento de la lectura mientras que no intervienen al momento de la escritura de cualquiera de los demás registros. Luego de utilizar y descartar estos tres bits iniciales observamos que los bits útiles nos quedan comprendidos entre D3 (Bit 0) y D14 (Bit 11) y de esta manera queda alojada en 12 Bits la información de temperatura. Dentro de esta estructura, los cuatro bits de menos peso (LSB) se procesan de manera separada obteniendo de ellos los decimales de la medición. Recordemos que el LM92 ofrece “pasos” de 0,0625°C y por este motivo 15 pasos (4 bits) significarán 0,9375°C. Esto te permite apreciar la calidad de medición que nos ofrece el LM92. Finalmente, sobreviven las posiciones D7-D14 las que se tratan como un byte convencional y su valor expresado en decimal será el valor entero de la temperatura. Combinando la parte decimal con la entera llegamos al resultado final que mostramos en el LCD.

Manejo de los datos obtenidos para leer un valor útili en el LCD

Los términos TEMP, T6, T3, T1, T4 y T5 son las variables usadas para cargar los valores que el programa necesita y se declaran al inicio del mismo. Observando la imagen encontramos que existe un condicional IF que se encarga de determinar el valor que toma D15 (el bit del signo). Por su peso, D15 equivale a un decimal igual a 256, por lo tanto, si la variable supera el valor 255 será indicación de que el LM92 está registrando temperaturas bajo cero. Recuerda: si D15 adopta un valor igual a uno, la temperatura es bajo cero. A partir de esto, la presentación se transforma a lo que se conoce como “complemento a dos”. Al ver la hoja de datos puede parecer que todo el sistema enloquece y hay que reprogramar todo de diferente manera, sin embargo, la forma de manejar un “complemento a dos” es invirtiendo el valor obtenido y sumándole una unidad. Por ejemplo, si el byte 11100111 está expresado en “complemento a dos”, debemos invertirlo (00011000) y sumarle una unidad obteniendo el número 00011001. En lenguaje BASIC esto es muy sencillo de realizar con una única instrucción (T6 = ~T6 + 1). De este modo entonces, el LM92 nos ofrece los valores de temperatura bajo cero.

La temperatura "bajo cero" se ofrece en formato "complemento a dos"

Esta es la manera en que podemos escribir y leer los registros en el LM92. Sólo debemos comprender y aprovechar el uso de las herramientas que nos ofrece el lenguaje de programación utilizado y de este modo, sacaremos el mejor provecho del sistema. La última aclaración que vale indicar, y que es importante a la hora de realizar un proyecto con este dispositivo es saber que, mientras el microcontrolador “lee” el registro de temperatura, los indicadores de alarmas dejan de funcionar. Por más rápido que sea el bus I2C, o el lenguaje compilador utilizado, existe un vacío de indicación durante la adquisición del dato de temperatura. Para evidenciar este fenómeno, en nuestro programa de ejemplo, asignamos al LED amarillo una duración de encendido/apagado para que, contrastándola con la duración de la interrupción en la indicación de la/las alarma/s del LM92, se note la diferencia. Es decir, se observe este proceso de manera clara y se interprete mejor el funcionamiento. De este modo llegamos al fin al video donde te mostramos al LM92 en acción activando todas las alarmas y haciendo gala de sus características. No te lo pierdas:





Existen muchos circuitos integrados en el mercado que ofrecen la posibilidad de brindarnos su funcionamiento como medidores de temperatura, pero muy pocos ofrecen tantas funciones en un mismo encapsulado como lo hace el LM92. Un dispositivo muy útil para infinitas aplicaciones donde la precisión, exactitud y el control estricto de la temperatura deben ser los factores fundamentales del diseño. Te esperamos en el Foro de Electrónica de NeoTeo para que nos cuentes tus experiencias con el LM92. ¡Visítanos!

No hay comentarios: