Módulo sensor de temperatura MAX6675 con termopar tipo K de amplio rangoEl
MAX6675 es un integrado bastante sencillo de manejar y muy adecuado para experimentar con termopares. Está diseñado específicamente para
termopares tipo K y realiza internamente la amplificación, compensación de unión fría y conversión A/D.
Es ideal para iniciarse en el manejo de la comunicación serie SPI debido a la simplicidad de la comunicación con el MAX6675.
Características principales| Característica | MAX6675 |
| Sensor | Termopar tipo K |
| Rango de medida | 0 a +1024 °C |
| Resolución | 0,25 °C |
| Conversión | 12 bits |
| Interfaz | Serie compatible con SPI, solo lectura |
| Alimentación | 3,0 a 5,5 V |
| Consumo típico | 0,7 mA |
| Tiempo de conversión | 170 ms típico, 220 ms máx. |
| Frecuencia SCK máxima | 4,3 MHz |
| Detección de termopar abierto | Sí |
| Temperatura de funcionamiento del IC | −20 a +85 °C |
Un detalle importante es distinguir
resolución de precisión. Aunque entrega pasos de 0,25 °C, eso no significa una precisión de ±0,25 °C.
Por ejemplo, para 0...700 °C, a 25 °C de temperatura ambiente, la hoja de datos especifica un error del termopar/conversión de hasta ±8 LSB a 3,3 V, equivalente a unos
±2 °C; además existe el error asociado a la compensación de unión fría.
FuncionamientoUn termopar K genera una tensión muy pequeña dependiente de la diferencia de temperatura entre la unión de medida y sus conexiones. El MAX6675 mide esa señal y además mide internamente la temperatura de la denominada
unión fría, realizando la compensación necesaria antes de proporcionar el resultado digital.
Esto simplifica muchísimo el circuito: básicamente tenemos:
Termopar K → MAX6675 → SPI → PICEl fabricante recomienda además un condensador de
0,1 µF entre VCC y GND, próximo al integrado.
Interfaz con el microcontroladorSolo intervienen tres señales digitales:
- CS — Chip Select.
- SCK — Reloj generado por el PIC.
- SO — Salida de datos del MAX6675 hacia el PIC.
No existe MOSI porque
el MAX6675 no recibe comandos. Es esencialmente un dispositivo SPI de solo lectura.
Cuando
CS pasa a 0, desde el MAX6675 al PIC se desplaza una palabra de
16 bits.
Cuando se realiza la lectura serie del
MAX6675, el chip entrega una trama única y fija de
16 bits de datos a través del pin SO (Serial Output). Esta lectura se realiza desde el bit más significativo (MSB) hasta el bit menos significativo (LSB) de manera consecutiva.
El formato es:
D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
| |------------------------------------| | | |
| temperatura 12 bits | | +-- tri-state
| | +----- Device ID
| +-------- termopar abierto
+---------------------------------------------------- 0
A continuación, se detalla la función de cada uno de los bits que componen los 2 bytes transferidos:
| Bits | Nombre | Descripción / Función |
| Bit 15 | Bit Dummy | Bit de relleno. Siempre tiene un valor de 0. No contiene información de temperatura. |
| Bits 14 al 3 | Datos de temperatura | Los 12 bits útiles. Contienen el valor entero de la medición de temperatura en formato binario directo (MSB en Bit 14, LSB en Bit 3). Su resolución es de 0,25 °C por unidad. |
| Bit 2 | Entrada del termopar abierto | Bit de estado (fallo). 0: El termopar está correctamente conectado. 1: El termopar está suelto o desconectado. |
| Bit 1 | ID del dispositivo | Bit de identificación. Generalmente se lee como 0, aunque la hoja de datos especifica que puede ser utilizado como identificador del chip. No afecta a la lectura de temperatura. |
| Bit 0 | Tri-State | Bit de estado del bus. El chip lo sitúa en alta impedancia inmediatamente antes de finalizar la comunicación cuando el pin CS vuelve a nivel alto. |
En la práctica, la información de temperatura ocupa
D14...D3. Por tanto, una vez leídos los 16 bits hay que realizar un desplazamiento para eliminar los bits de estado del MAX6675:
Temperatura = ((Dato >> 3) & 0x0FFF) × 0.25
Por ejemplo, si obtenemos:
Valor temperatura = 400
entonces:
T = 400 × 0.25 = 100.00 °C
Siendo realistas, teniendo en cuenta la precisión aproximada de
±2 °C del MAX6675 y su amplio rango de medida, en esta práctica se ha optado por expresar la temperatura en grados Celsius enteros, sin decimales.
Aunque el dispositivo proporciona una resolución de 0,25 °C, mostrar esta resolución puede dar una falsa sensación de precisión y hace más evidentes las pequeñas variaciones entre lecturas consecutivas. Así que, para aplicaciones donde no es necesaria una precisión inferior al grado y se necesita un amplio rango de temperaturas, es una opción muy aceptable.
Quedando el cálculo de la lectura como sigue:
Temperatura = ((Dato >> 3) & 0x0FFF) / 4
Esto permite utilizar prácticamente cualquier PIC para realizar la lectura.
Un detalle importante para la libreríaLa conversión se realiza mientras
CS está a nivel alto. Al llevar CS a nivel bajo se detiene la conversión y comienza la lectura serie. Por eso no conviene realizar lecturas demasiado rápidamente.
Con un tiempo máximo de conversión de
220 ms, para una aplicación normal podríamos actualizar la temperatura cada
250 ms, por ejemplo.
Hay que tener en cuenta que el MAX6675 solamente mide temperaturas del termopar
a partir de 0 °C.
El módulo usado es el de HailegeEstos módulos suelen sacar directamente las señales necesarias para el microcontrolador, por lo que encontrarás algo parecido a:
VCC
GND
SCK
CS
SO
y una bornera con dos bornes marcados con polaridad para conectar el termopar tipo K:
T+
T-
La alimentación del propio MAX6675 puede ser de
3,0 a 5,5 V, por lo que para las pruebas con PIC a
5 V encaja perfectamente.
Este tipo de módulos básicos están pensados principalmente para realizar prácticas con un mínimo de componentes. Dependiendo de la aplicación real y del entorno donde se instalen, puede ser necesario añadir componentes adicionales para mejorar la estabilidad y fiabilidad de la lectura.
Para un diseño definitivo es recomendable consultar las hojas de características y las notas de aplicación facilitadas por el fabricante.
Lectura del MAX6675La lectura del MAX6675 es relativamente sencilla, ya que el dispositivo no recibe comandos ni necesita que el PIC le envíe datos. La comunicación es únicamente de salida desde el MAX6675 hacia el microcontrolador.
El MAX6675 entrega una palabra de
16 bits, comenzando por el bit más significativo (
MSB). En este ejemplo la lectura se realiza por software, utilizando una variable de 16 bits como registro de desplazamiento.
El procedimiento utilizado es el siguiente:
1. Inicio de la comunicaciónSe selecciona el MAX6675 poniendo
CS = 0 y se mantiene inicialmente la señal de reloj a nivel bajo (
SCK = 0). Ambas señales son controladas por el PIC.
Se introduce además una pequeña pausa antes de comenzar la lectura.
Low MAX6675_CS
Low MAX6675_SCK
WaitUs 2
2. Lectura de los 16 bitsSe ejecuta un bucle de 16 ciclos, uno por cada bit recibido desde el MAX6675:
CFor (i = 0; i < 16; i++)
En cada ciclo se pone la señal de reloj a nivel alto:
High MAX6675_SCK
Se introduce una pequeña pausa para asegurar que la señal de datos se encuentre estable:
WaitUs 1
A continuación se lee el estado de la salida serie
SO del MAX6675:
input_SO.0 = MAX6675_SO
El MAX6675 transmite primero el bit más significativo, por lo que los bits recibidos se van introduciendo en
data_raw mediante desplazamientos hacia la izquierda.
Antes de incorporar el nuevo bit, se desplaza el contenido de
data_raw una posición y se añade el estado recibido:
data_raw = (data_raw << 1) Or input_SO
De esta forma, después de los 16 ciclos,
data_raw contiene la palabra completa recibida desde el MAX6675.
Durante la lectura también se comprueba el bit utilizado por el MAX6675 para indicar que el termopar está desconectado. En este bucle corresponde a
i = 2:
If i = 2 Then thermocouple_error = input_SO
Después de leer cada bit se devuelve la señal de reloj a nivel bajo:
Low MAX6675_SCK
WaitUs 1
y se continúa con el siguiente ciclo:
Cnext
3. Finalización de la lecturaUna vez recibidos los 16 bits, se pone
CS = 1 para finalizar la comunicación. Esta transición también permite al MAX6675 iniciar una nueva conversión de temperatura, que puede necesitar hasta aproximadamente
220 ms para estar lista para una nueva lectura:
High MAX6675_CS
Por tanto, el funcionamiento puede resumirse de forma sencilla como:
Seleccionar el MAX6675 → generar 16 pulsos de reloj → leer un bit en cada ciclo → formar la palabra de 16 bits → deseleccionar el MAX6675.Posteriormente, a partir de
data_raw, pueden extraerse por separado el valor de temperatura y el indicador de termopar desconectado.
Para una lectura de 61.00ºC se han obtenido las siguientes lecturas: