"

CERRAR VENTANA ✖️

"

CATEGORIAS

Ver Categorias

Cerrar

MLX90614 Sensor Temperatura y Usos

Disponibles: en nuestra tienda 😀

Los MLX90614 forman una familia de termómetros capaces de determinar la temperatura de un objeto a distancia, sin estar en contacto directo con él, midiendo la radiación infrarroja que emite.

Principio de funcionamiento de los termómetros por infrarrojos

La temperatura de un objeto (o de un líquido) se puede estimar conociendo su potencia emisiva, ya que se relaciona con ella según formula la ley de Stefan-Boltzmann. Aunque la radiación se puede producir en un rango amplio de longitudes de onda, el pico de valor de los rangos de temperatura que más comúnmente se desean monitorizar se encuentra en la zona del espectro que corresponde a la radiación infrarroja (es posible calcularla por la ley de desplazamiento de Wien)

Excepto a temperaturas muy altas, medir la luz emitida por un objeto y determinar su temperatura por el color de esta luz (la intensidad en cada longitud de onda) no es muy eficiente, es más óptimo atender solamente a la parte infrarroja, es decir, ignorar, filtrándola, la radiación de menores longitudes de onda.

Aunque sería posible, tampoco es suficientemente eficaz medir la radiación luminosa como lo hacen un fototransistor o un fotodiodo, por lo que estos dispositivos se suelen aplicar solamente a la detección de fuentes de calor pero no a la medición de la temperatura.

En las condiciones explicadas, la forma que se ha demostrado más eficaz para determinar la temperatura midiendo la radiación infrarroja es por medio de una termopila sobre la que se concentra dicha radiación una vez que ha sido filtrada.

La termopila está formada por una batería de termopares conectados entre ellos, normalmente en serie. El principio de funcionamiento de la termopila es, por tanto, el mismo que el del termopar, calculan la temperatura considerando la FEM generada (efecto Seebeck o efecto termoeléctrico).

Para aprovechar el máximo de radiación, las termopilas se disponen sobre sobre superficies negras, que absorben toda la radiación, y se construyen formando una zona caliente, expuesta a la fuente de calor cuya temperatura se mide, y una fría posterior que potencie el efecto Peltier.

Para que la estimación de la temperatura objetivo sea correcta, los termómetros basados en termopilas, como los basados en termopares, necesitan compensar la medida considerando la temperatura ambiente. Este tipo de circuito integrado IC suelen incorporar otro termómetro, frecuentemente termistores o transistores bipolares que aprovechen el efecto «banda prohibida», además de circuitería para amplificar y procesar la señal (de muy baja tensión) entregada por la termopila.

Características de los termómetros de infrarrojos MLX90614

Los circuito integrado IC de la familia MLX90614 comparten formato (TO-39), funcionamiento y la mayoría de las características. La siguiente lista explica las diferencias de los distintos modelos.

Diferencias entre los modelos de MLX90614
  • La temperatura máxima en la serie MLX90614ESFxxx es de 85 °C y en la serie MLX90614KSFxxx de 125 °C

  • La alimentación de la serie MLX90614xSFAxx es de 5 V y la alimentación de las series MLX90614xSFBxx y MLX90614xSFDxx es de 3 V

  • Solamente la serie MLX90614xSFDxx tiene precisión para uso médico

  • El número de termopilas con las que se determina la temperatura varía. En la serie MLX90614xSFxAx dispone de una termopila (una zona), la serie MLX90614xSFxAx tiene dos termopilas (dos zonas) y la serie MLX90614xSFxCx dispone además de compensación del gradiente

  • El campo de visión (FOV) de la lente de los MLX90614 tiene diferentes ángulos dependiendo de la serie

    • MLX90614xSFxxA 70°
    • MLX90614xSFxxC 35°
    • MLX90614xSFxxH 12°
    • MLX90614xSFxxF 10°
    • MLX90614xSFxxI  5°
  • La serie MLX90614xSFxxH dispone de una lente refractiva

Características comunes de los MLX90614

La precisión de los MLX90614 depende principalmente del rango de temperatura. Entre 0 °C y 50 °C de temperatura ambiente y 0 °C y 60 °C de temperatura objetivo, el margen de error es de ±0.5 °C y aumenta progresivamente hasta llegar a los ±4 °C en las condiciones más extremas: una temperatura ambiente superior a 100 °C y una temperatura objetivo superior a 120 °C. Las temperaturas más bajas producen desviaciones algo menores, hasta ±3 °C por debajo de cero tanto en la temperatura ambiente como en la temperatura del objeto monitorizado.

La versión médica del MLX90614, la serie MLX90614xSFDxx tiene, en un rango de temperatura ambiente entre 0 °C y 50 °C, una precisión de ±0.2 °C además de estar diseñado para se alimentado fácilmente con una batería (3 V), más adecuado para este tipo de uso.

En menor medida, la precisión también dependerá de lo centrado que esté el objetivo en el FOV del MLX90614. Aunque la tensión también afecta a la medida de la temperatura, como se conoce, se puede corregir fácilmente.

El gestiona las comunicaciones utilizando el bus SMB (SMBus), un subconjunto del bus I2C al que, a los efectos de implementación y funcionamiento que interesan este artículo, se puede equiparar. Trabajando en este modo (que está configurado por defecto) se obtiene una temperatura expresada por dos bytes con una resolución numérica de 0.02 °C

Opcionalmente, en lugar de leer los registros de temperatura del MLX90614, también puede realizarse una lectura continua de la temperatura en formato PWM con una resolución de 10 bits; 0.14 °C en un rango de temperatura entre -20 °C y 120 °C.

Implementación hardware del MLX90614

Como la familia de termómetros sin contacto MLX90614 incorpora todo lo necesario para conectarse al sistema que lo explota, su implementación hardware es muy sencilla, solamente necesita los componentes pasivos que acompañen al bus que se utilice.

Además de su inclusión en circuitos microcontrolados, los que interesan a este artículo, los termómetros de infrarrojos MLX90614 están bien preparados para utilizarse sin programación, normalmente como termostatos que pueden configurarse previamente utilizando la EEPROM interna que incorporan

Básicamente hay dos tipos de montajes con los que se pueden utilizar los sensores de temperatura MLX90614 controlándolos desde un microcontrolador: accediendo cuando sea necesario a sus registros de temperatura por SMBus / bus I2C o realizando una lectura continua de la temperatura por PWM.

Al circuito de aplicación para usar un MLX90614 con el bus I2C del esquema del ejemplo anterior habría que añadir los condensadores que conectan ambas líneas a masa para «terminar» el bus (para filtrar las frecuencias más altas que la de la señal) y opcionalmente sustituir por fuentes de corriente las resistencias pull-up.

La conexión para la lectura de la temperatura por PWM es aún más sencilla, ya que solamente necesita la línea que soporta el pulso modulado y que conecta el termómetro MLX90614 con el MCU.

Como puede verse en el siguiente diagrama, que muestra un circuito de aplicación de ejemplo, en el que el MLX90614 se comunica por PWM, también debe conectarse VZ/SCL a la alimentación (VCC).

Implementación software del MLX90614

Utilizando SMBus o I2C, frente a la lectura por PWM, la explotación del termómetro por infrarrojos MLX90614 se realiza utilizando una memoria memoria EEPROM en la que se almacena principalmente la configuración y una memoria RAM, de solo lectura para el usuario, en la que el dispositivo almacena los diferentes valores de temperatura obtenidos.

Por su diseño hardware compacto, el MLX90614 no dispone de patillaje con el que establecer una dirección (o parte de ella) en el bus. En su lugar, la dirección del MLX90614 se almacena en la memoria EEPROM, concretamente en la dirección 0B00001110 (0x0E) de esta memoria. La dirección por defecto del MLX90614 en el bus es 0B01011010 (0x5A). Para poder utilizar varios termómetros MLX90614 en el mismo bus es necesario primero cambiar su dirección almacenándola en la EEPROM y después resetear el dispositivo o, para las series de 5 V, retirar la alimentación antes de usarlos con la nueva dirección.

Conforme al protocolo definido para el bus SMB, el sensor de temperatura MLX90614 envía a cada lectura y espera de cada escritura que se añada a los datos un código de verificación PEC que permite comprobar que la información transmitida es correcta. Como en otras ocasiones, buscando que el código de ejemplo de aplicación se entienda por la mayoría de lectores, se utiliza Arduino y su librería Wire para las comunicaciones I2C.

Como esta librería, por trabajar a alto nivel, oculta parte de la trama I2C, si se decide verificar que los datos recibidos son correctos deberá calcularse «manualmente» añadiendo, cuando corresponda, por ejemplo, los bytes SA_W y SA_R, transparentes para el usuario, además de las órdenes y los datos enviados, de los que el usuario sí es consciente.

El método de cálculo del CRC8 que se utiliza con el bus SMB para obtener el PEC utiliza un desarrollo polinómico de grado 8, que le da nombre, con la forma: C(x)=x8+x2+x1+x0 que se representa con el valor binario 0B100000111.


Como se ve en el ejemplo anterior, el problema de este algoritmo puede ser el tiempo de cálculo que consume. Si el uso del sensor de temperatura MLX90614 requiere optimizarlo, se puede utilizar una tabla de búsqueda (LuT). Para los siguientes ejemplos se utiliza esta función de cálculo del PEC con el algoritmo CRC-8 del SMBus, dado que los tiempos de acceso serán más largos que el tiempo de cálculo.

Lectura de la temperatura del MLX90614 por I2C

Las temperaturas calculadas por el MLX90614 se almacenan en la memoria RAM. La primera temperatura del objetivo en la dirección 0x07, la segunda, si el modelo de la familia MLX90614 tiene dos termopilas, en la 0x08 y la temperatura ambiente en la 0x06.

El valor de la temperatura se expresa como un entero de 16 bits que representa los incrementos de 0,2 °C empezando en el cero absoluto (−273,15 °C). Para calcular la temperatura, por tanto, habrá que multiplicar por 0,2 el valor que devuelve el MLX90614 y restarle −273,15 lo que resulta en un valor expresado en °C.

Como en otras ocasiones, para no complicar inicialmente el código, no se incluye un tiempo de espera máximo para la recepción de los datos que el MLX90614 enviará por I2C. Pese a esa omisión, lo más probable es que el programa funcione sin problemas

El código de lectura de temperatura del ejemplo anterior se puede generalizar y disponer en funciones para reutilizarlo en la lectura de ambas termopilas y de la temperatura ambiente. Como el cálculo sobre la temperatura para expresarla en °C y ya se ha visto cómo calcular el valor del PEC con el algoritmo del CRC8 del bus SMB, solamente queda separar el código que lee la memoria RAM.

En la función para la lectura de la RAM del código anterior ya se implementa un tiempo de espera máximo (en las líneas 7, 8, 13 y 14) con el que detener la ejecución hasta la llegada de los datos pero sin bloquear indefinidamente el programa.

El código de abajo es un ejemplo de uso de la función anterior en el que se leen los tres valores de temperatura del MLX90614. Se ha utilizado el valor cero como código de temperatura incorrecta (correspondería al cero absoluto, que el termómetro MLX90614 no es capaz de medir). Si el dispositivo no dispone de dos termopilas el segundo valor de temperatura objetivo aparecerá como incorrecta.

Tanto el ejemplo como los dos documentos de las funciones deben estar (en este caso) en la misma carpeta. Para hacer pruebas con un dispositivo físico, se pueden descargar el ejemplo y las funciones de gestión del termómetro de infrarrojos MLX90614.

Acceder a la EEPROM del MLX90614

Como decía al principio, el sensor de temperatura MLX90614 utiliza una memoria EEPROM para almacenar la configuración; parámetros como la corrección de la emisividad, el periodo del PWM o las temperaturas máxima y mínima. En la dirección 0x0E de la EEPROM se almacena el byte más significativo de la dirección en el bus SMB o en el I2C.

Para acceder a la memoria EEPROM se usa como orden su dirección como en el caso de la RAM, estableciendo además el bit 5 a nivel alto. Por ejemplo, para acceder a leer o escribir la dirección 0x04 (que contiene el coeficiente de corrección de la emisividad) habría que usar como comando 0x24 (0B00000100|0B00100000 en binario o 0x04|0x20 en hexadecimal). .

En el siguiente código se muestra una función de lectura de la memoria EEPROM del termómetro MLX90614. Aunque esta función se encarga de la obtención del código de la orden a partir de la dirección de la memoria, se puede conseguir lo mismo con la función de lectura de la RAM si se definen las direcciones de los registros de la EEPROM añadiéndoles 0x20, en cualquier caso, también puedes descargar aquí la función de lectura de la EEPROM si además de como ejemplo te parece útil.

El código de abajo muestra cómo probar la función del ejemplo anterior. Para usarla se accede al valor de la temperatura mínima con la que se calcula el valor de temperatura cuando se lee usando PWM, que tiene diferente resolución al de la memoria del MLX90614.

La función del siguiente código de ejemplo permite grabar un valor de 16 bits en un registro de la EEPROM del termómetro. En la página 9 de la hoja de datos del MLX90614 del fabricante se indica que es necesario borrar (escribiendo el valor cero) antes de grabar el valor definitivo en la EEPROM y que hay que esperar al menos 5 ms después de grabar o borrar la EEPROM.

En el siguiente ejemplo se utilizan las funciones de lectura y escritura en la EEPROM.

En el siguiente enlace se puede descargar el código de las funciones de lectura y escritura de la EEPROM y el ejemplo, pero recuerda que es posible ahorrar unos bytes usando la función de lectura de la RAM y expresando las direcciones de los registros de la EEPROM añadiendo 0x20. Además de no ser necesaria una función diferente para leer cada tipo de memoria, la función de escritura en la EEPROM ya no necesitará reconvertir las direcciones con direccion_eeprom|=0x20; y deberá suprimirse.

Usar varios MLX90614 en el mismo bus SMB o I2C

Como el MLX90614 usa la EEPROM también para almacenar la dirección del bus (no dispone de patillas para modificar la dirección), es necesario cambiar este valor (borrarlo y almacenar uno nuevo) para poder usar varios termómetros MLX90614 en el mismo bus.

Con el método que ilustra el código del ejemplo anterior (la función para grabar en la EEPROM) es muy sencillo cambiar la dirección en el bus del MLX90614, sin embargo no es frecuente hacerlo en diseños para tiradas grandes, donde suele se suele recurrir a hardware para conmutar entre uno y otro, ya que, hacerlo por software, implicaría cierto posprocesado manual para cambiar las direcciones de algunos de los dispositivos y disponerlos posteriormente en el circuito.

0
    0
    Tu carrito
    Tu carrito está vacíoRegresar