Sensor de temperatura I2C LM75

publicado en: Portada | 0

LM75 I2C Sensor temperatura Termómetro bus I2C

Principio de funcionamiento

El IC LM75 es un sensor de temperatura de banda prohibida (band gap) de semiconductor de silicio.

En los semiconductores, la banda prohibida es la zona de energía de los electrones que no puede verse incrementada con un incremento del campo eléctrico al no existir estados disponibles para moverse más rápidamente. Esta banda prohibida está comprendida entre la banda de valencia (de menor energía) y la banda de conducción (de mayor energía). La excitación térmica (el incremento de temperatura, a los efectos que nos interesan) puede hacer que algunos electrones adquieran suficiente energía como para pasar a la banda de conducción.

Como explicaba en el anterior artículo sobre la medida electrónica de la temperatura, en los metales, si bien el número de portadores no depende de la temperatura (todos los electrones están disponibles siempre) su movilidad sí que se ve afectada por la temperatura, de forma que la resistencia en los metales aumenta con la temperatura por la disminución de la velocidad de los electrones debida al aumento de su agitación térmica y a la dispersión de electrones que produce.

En el caso de los semiconductores, debido a la presencia de esta banda prohibida el número de portadores sí que depende de la temperatura (según la distribución de Fermi-Dirac) haciendo que aumente la conductividad con la temperatura. En los semiconductores, el aumento de la temperatura produce un aumento de la resistencia pero también produce un (mayor) aumento de la conductividad.

Los sensores de temperatura de banda prohibida (band gap) de semiconductor de silicio, como es el caso del LM75, funcionan según este principio, permitiendo determinar la temperatura cuantificando su influencia en la tensión en un diodo de silicio.

Componentes del hardware del LM75

El LM75 también dispone de un conversor analógico-digital por modulación Sigma-Delta que se encarga de obtener el valor numérico (digital) de la temperatura, valor que posteriormente se almacena (cada 100 ms) en uno de sus registros desde el que puede leerse por medio del bus I2C.

Sensor de temperatura LM75 I2C. Esquema simplificado de los bloques de funcionamiento

Además del registro que contiene la temperatura medida, el LM75 dispone de un registro en el que se puede almacenar una temperatura máxima así como de un comparador que es capaz de generar una señal si la temperatura medida supera la almacenada en este segundo registro. Para no volver a lanzar el aviso hasta que la temperatura medida no baje de cierto nivel, un tercer registro permite almacenar un valor para la temperatura de histéresis.

La configuración del funcionamiento del LM75 se almacena en un cuarto registro con el que se determinan las condiciones según las cuales se genera el aviso, la forma de lanzar esta señal de aviso (modo interrupción o modo comparación) así como la activación del dispositivo (modo de funcionamiento normal o de bajo consumo) entre otros parámetros.

Especificaciones técnicas e implementación del LM75

El rango de temperaturas que el LM75 es capaz de medir varía desde los −55 °C hasta los +125 °C y la resolución numérica es de 0.125 °C aunque la precisión es solamente de ±2 °C en el mejor caso, cuando la temperatura está comprendida entre los −25 °C y los +100 °C y una precisión de ±3 °C con las temperaturas más extremas, entre los −55 °C y los +125 °C.

LM75. Sensor de temperatura I2C. Pinout

La implementación (hardware) del LM75 en un circuito es muy sencilla, no necesita más componentes que las resistencias pull-up del bus I2C y puede alimentarse con una tensión entre 2,8 V y 5,5 V. En el mismo bus I2C se pueden disponer hasta ocho termómetros LM75 configurando su dirección con las tres patillas A0, A1 y A2 a nivel alto o bajo, como suele ser habitual en estos casos.

LM75. Sensor de temperatura I2C. Circuito de aplicación

Por contra, el uso del LM75 como sonda es incómodo debido a los encapsulados en los que se presenta, TSSOP (TSSOP8) o SOIC (SO8) y normalmente se utiliza para medir temperatura ambiente o para medir la temperatura de componentes dispuestos en el entorno de la PCB en la que se ubique el termómetro LM75.

Al inicio, el LM75 está configurado para detectar una temperatura máxima de +80 °C, una temperatura de histéresis de +75 °C y el modo de funcionamiento de comparador, es decir, el modo que emula el funcionamiento de un termostato: activa el aviso al alcanzar la temperatura máxima y sólo si baja de la de histéresis vuelve a generar el aviso.

Explotación del LM75 desde un microcontrolador por medio del bus I2C

Gracias al uso del bus I2C la explotación del LM75 es muy sencilla, basta con acceder a la dirección que ocupe en el bus para almacenar o leer la configuración y para obtener el valor de la temperatura medida.

La dirección I2C base del LM75 es 0B01001XXX y se complementa, como se explica más arriba, con los últimos tres bits de dirección que se establecen por hardware con las patillas A0, A1 y A2 a nivel alto (valor uno) o bajo (valor cero).

El LM75 como termómetro

El registro que almacena la última temperatura medida (TEMP) se encuentra en la dirección 0x00, el de la configuración (CONF) en la dirección 0x01, el registro que almacena la temperatura de histéresis en la dirección 0x02 y el de la temperatura máxima o sobre-temperatura (TOS) tiene la dirección 0x03. Excepto el de la temperatura actual (TEMP) todos funcionan como lectura y escritura.

Utilizando algunos ejemplos de código desarrollado para Arduino (que se ha convertido casi en referencia universal) se puede aclarar más el funcionamiento del LM75. El ejemplo útil más básico consiste en usar el LM75 como termómetro leyendo el registro de la última temperatura medida.

El proceso es el habitual cuando se trabaja con un dispositivo I2C:

  1. Añadir la librería I2C al código con #include <Wire.h>
  2. Inicializar la librería I2C usando Wire.begin();
  3. Acceder al sensor de temperatura LM75 mediante Wire.beginTransmission(DIRECCION_LM75)
  4. Enviar la dirección del registro al que se accede usando Wire.write(REGISTRO)
  5. Liberar el bus I2C con Wire.endTransmission()
  6. Volver a acceder al LM75
  7. Pedir el valor del registro con Wire.requestFrom(DIRECCION,CANTIDAD)
  8. Verificar que se han recibido datos usando Wire.available()
  9. Leer el valor solicitado Wire.read() (tantas veces como bytes lo formen)
  10. Aunque no es imprescindible, al terminar, liberar el bus I2C

Además del protocolo habitual para obtener o almacenar información en los registros del dispositivo utilizando el bus I2C, para explotar los datos que el el LM75 proporciona hay que considerar el formato en el que representa internamente la temperatura.

Obtención del valor almacenado en los registros de temperatura del LM75

En la línea 22 del código del ejemplo anterior puede verse cómo cargar la información que almacenan los tres registros de temperatura del LM75. Utiliza dos bytes (16 bits) de los cuales solamente son válidos los 11 bits más significativos. Para leer la temperatura como un entero (con el signo codificado en complemento a dos) primero se carga el byte más significativo sobre una variable int de Arduino y se rota 8 bits a la izquierda, con lo que queda en la parte más significativa del int. Posteriormente se lee el segundo byte y se añade a la variable int con una operación OR

Interpretación del valor de temperatura cargado del LM75

En la línea 24 se puede ver cómo interpretar el valor de la temperatura. En primer lugar es necesario dividir entre 32 como un entero (rotar los 11 bits relevantes sin perder el signo) y dividir entre 8, que es el número de «pasos» con que se representa la temperatura (octavos de grado) para obtener un valor de tipo float con los correspondientes decimales. Como los compiladores (incluyendo el del toolchain de Arduino) optimizan la división entera entre 32, no es necesario preservar el signo y rotar «manualmente» los bits, ya que la operación no es (apreciablemente) más rápida.

Verificar la recepción de datos desde el bus I2C

Aunque el código anterior funcionará sin problemas pese a no verificar si han llegado los datos solicitados al dispositivo por el bus I2C, lo más ortodoxo (y recomendable) es esperar a que lleguen los datos en el número adecuado. Como la velocidad de transmisión y la resistencia a errores son más que suficientes, es frecuente encontrar código en el que simplemente se solicitan los datos y se leen sin esperar. Para los ejemplos es útil hacerlo así puesto que no distraen de la intención principal pero para el código de producción lo recomendable es hacerlo tal como se sugiere en el séptimo punto de la lista del proceso de comunicación I2C. En el código del siguiente ejemplo se resaltan los cambios recomendables para usar el LM75 en la fase de explotación.

Configurar el funcionamiento del LM75

La configuración más básica del LM75 consiste en establecer la temperatura máxima para generar el aviso y la de histéresis, que determinará cuando se desactiva y puede repetirse. Para configurar estos valores solamente hay que almacenarlos en los registros correspondientes.

Al igual que el registro de la temperatura actual, los registros de temperatura máxima (de aviso) y de temperatura de histéresis utilizan dos bytes pero a diferencia del primero no consideran 11 bits (un octavo de grado) sino 9 (medio grado) de forma que, aunque se almacenara un valor menor, solamente se considerarían intervalos de esta resolución.

Puesto que en el anterior código solamente se cambia la configuración de las temperaturas relacionadas con el aviso, el resto del funcionamiento corresponde con la configuración por defecto.

En esta configuración por defecto hay dos características que son relevantes, en primer lugar el modo de aviso, por defecto el que se denomina «modo termostato» que consiste en activar el aviso al alcanzar la temperatura máxima (o de aviso) y no desactivarlo hasta bajar hasta la temperatura de histéresis. La alternativa es el «modo interrupción», en el que la señal se activa al superar la máxima o al alcanzar un valor menor al de la de histéresis y se resetea con la lectura de cualquier registro, normalmente el de temperatura actual.

La segunda característica es que la señal de aviso se activa a nivel bajo, es decir, el pin OS está a nivel alto hasta llegar a la temperatura máxima de aviso. Dado que la polaridad de la señal de aviso (el nivel a que se activa) es configurable, en algunos montajes sencillos será suficiente utilizar esta señal (hardware) para explotar el LM75, por ejemplo, conectando o desconectando un ventilador al alcanzar el sistema cierta temperatura.

También es posible configurar el funcionamiento del LM75 de manera que no avise inmediatamente después de alcanzar la temperatura de aviso sino hacerlo después de varias incidencias. Este comportamiento es muy útil cuando se trabaja en el límite de temperatura o cuando varía muy rápidamente. El LM75 se puede configurar para avisar después de rebasar una, dos, cuatro o seis veces la temperatura máxima.

En el registro de configuración también existe un bit para desactivar («apagar») el LM75 y entrar en un modo de bajo consumo del que se sale volviendo a cambiar este bit o simplemente al realizar la próxima lectura de un registro.

Víctor Ventura

Desarrollando aplicaciones para la web conocí el potencial de internet de las cosas, encontré la excusa perfecta para satisfacer la inquietud de aprender electrónica que había tenido desde siempre. Ahora puedo darme el gusto de programar las cosas que yo mismo diseño y fabrico.

Más entradas - Página web

Sígueme:
TwitterLinkedIn

Seguir Víctor Ventura:

Programador multimedia y web + IoT. Mejor con software libre.

Desarrollando aplicaciones para la web conocí el potencial de internet de las cosas, encontré la excusa perfecta para satisfacer la inquietud de aprender electrónica que había tenido desde siempre. Ahora puedo darme el gusto de programar las cosas que yo mismo diseño y fabrico.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *