本文介绍了MAX31856这款热电偶采集芯片的驱动程序设计

1、MAX31856热电偶采集芯片介绍

MAX31856 是 原美信(Maxim Integrated,现被 ADI 收购),生产的一种冷端补偿数字温度传感器,主要用于与热电偶一起使用来测量温度。它支持多种类型的热电偶,并且能够提供高精度的温度测量。MAX31856 集成了冷结补偿、故障检测和一个可配置的看门狗定时器等功能。

这种器件通常用于需要精确温度测量的应用中。它通过 SPI 接口与微控制器或其他主机系统通信,并且可以处理 K、J、N、T、E、R、S、B 和 C 类型的热电偶。

2、不同类型的热电偶简介

热电偶是温度测量中常用的传感器,它基于塞贝克效应(Seebeck effect),即两种不同金属接触时,在温度差异下会产生电压差。根据所使用的材料不同,热电偶可以分为多种类型,每种类型的热电偶都有其特定的温度范围、精度和应用场合。以下是几种常见类型的热电偶介绍:

J型(铁-铜镍)
特点:价格低廉,适合在氧化性或惰性环境中使用,但在还原气氛中不稳定。

K型(镍铬-镍铝)
特点:最常用的一种热电偶,具有较宽的工作温度范围,适用于大多数工业应用。

E型(镍铬-铜镍)
特点:在低温区有较高的灵敏度,适合精确测量。

T型(铜-铜镍)
特点:常用于低温测量,如冷冻设备或超导实验。

R型(铂铑13%-铂)
特点:高温性能良好,适合高精度要求的测量。

S型(铂铑10%-铂)
特点:与R型类似,但对温度变化更敏感,通常用于实验室环境下的精密测量。

B型(铂铑30%-铂铑6%)
特点:适用于极高温度测量,不推荐用于低温,因为其输出信号在低温区域非常低。

N型(镍铬硅-镍硅)
特点:改进了K型在某些温度下的稳定性问题,减少了磁干扰的影响。

选择热电偶类型时,需要考虑测量温度范围、精度需求、环境条件(如是否存在腐蚀性气体)、成本以及安装便利性等因素。此外,不同的热电偶可能需要配对相应的补偿导线以确保准确的温度读数。

类型 负极材料 正极材料 温度范围
B 铂/铑 铂/铑 250°C 到 1820°C
E 铜镍 镍铬 -200°C 到 +1000°C
J 铜镍 -210°C 到 +1200°C
K 铝镍 镍铬 -200°C 到 +1372°C
N 镍硅 镍铬硅 -200°C 到 +1300°C
R 铂/铑 -50°C 到 +1768°C
S 铂/铑 -50°C 到 +1768°C
T 铜镍 -200°C 到 +400°C
类型 灵敏度 冷端温度范围
B 10.086 (+500°C 到 +1500°C) 0°C 到 125°C
E 76.373 (0°C 到 +1000°C) -55°C 到 +125°C
J 57.953 (0°C 到 +750°C) -55°C 到 +125°C
K 41.276 (0°C 到 +1000°C) -55°C 到 +125°C
N 36.256 (0°C 到 +1000°C) -55°C 到 +125°C
R 10.506 (0°C 到 +1000°C) -50°C 到 +125°C
S 9.587 (0°C 到 +1000°C) -50°C 到 +125°C
T 52.18 (0°C 到 +400°C) -55°C 到 +125°C

3、驱动程序实现

在数据手册的表6中列出了该芯片的所有寄存器:


常规应用使用最多的几个寄存器如下:

  • 0x00/0x80 CR0 配置0
  • 0x01/0x80 CR1 配置1
  • 0x02/0x82 FMASK 错误输出配置
  • 0x0C-0x0E 温度值寄存器
  • 0x0F FS 错误状态寄存器

3.1、主要配置功能:

采集模式相关配置:
MAX31856可以使用单次采样模式,收到指令后采样;也可以设置成连续采样模式,芯片自动每隔一段时间采集一次温度数据并更新到温度寄存器。

  • 连续采集模式,需要将CR0寄存器的bit7置1,使能自动模式
  • 单次采集,每次向CR0寄存器bit6置1,触发芯片进行一次采集,采集完成后bit6自动清零。(如果使能了自动模式,该功能无效)
    多次采集均值,CR1寄存器的bit6-bit4可以配置至多16次采样求平均值;此外,CR1寄存器的bit3-bit0可以配置外接热电偶的类型(K、J…)

开路错误识别的类型:
MAX31856可以自动识别热电偶开路故障,需要配置CR0寄存器的bit5-bi4,配置表如下:

如图,可以关闭开路检测功能,也可以使能,开启的情况有三种,可以根据实际应用选择,通产来讲需要测量一下使用的热电偶的电阻,然后选择配置01和配置10或者11,而配置10和配置11的区别在于对识别准确度的要求,检测时间越长,准确度越高。

冷端补偿相关配置:
MAX31856支持冷端补偿,当然也可以手动关闭,CR0寄存器的bit3可以使能冷端补偿(0:Enable)默认是开启的;冷端补偿的开启会增加每次温度采样转换的时间。

错误输出配置:
FMASK寄存器可以选择哪些错误触发FAULT引脚的输出,默认是全部关闭的;FS状态寄存器指示错误情况;一般只需关注FS寄存器的bit1和bit0,电压错误和开路错误。

实际上在有外部控制器的情况下,MAX芯片自带的一些温度上下限报警,冷端温度上下限报警等功能是使用不到的。我们基于K型热电偶,实现MAX31856的驱动程序设计。

代码初始化:

1
2
3
4
5
6
7
8
9
10
/**
* max31856 init
*/
void spi_max31856_init0(void) {
/* reg_addr: 0x80(write) reg_data:0x91 auto mode, enable CJ, open circuit detect, 50Hz filter */
uint8 reg_addr_data[2] = {0x80, 0x91};
spi_max31856_cs05_low();
spi_max31856_write_bytes0(reg_addr_data, 2);
spi_max31856_cs_high();
}

3.2、读取温度数据:

温度数据的格式如下:


如果以32位数据读取后,需要按位右移5位,确保数据右对齐,32位数据表示的整型数据是实际数据的2的7次方倍,所以整型数据除以128就是实际得到的温度数据,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**  
* Read temperature value from max31856 * @return temperature
*/
float spi_max31856_read_temperature0(void) {
uint8 reg_addr = 0xC;
uint8 reg_data[3] = {0};
spi_max31856_cs05_low();
spi_max31856_write_bytes0(&reg_addr, 1u);
spi_max31856_read_bytes0(reg_data, 3u);
/* reg value = actually value * 128 */
uint32 value = reg_data[0] << 11 | reg_data[1] << 3 | reg_data[2] >> 5;

spi_max31856_cs_high();
return (float) (value) / 128.0f;
}

上述代码中的spi接口依据硬件平台,本例测试用的STM32,可作参考,定义如下:

1
2
3
4
5
6
7
#define spi_max31856_cs_high() HAL_GPIO_WritePin(SENSOR_SPI_A0_GPIO_Port, SENSOR_SPI_A0_Pin | SENSOR_SPI_A1_Pin | SENSOR_SPI_A2_Pin, GPIO_PIN_SET);
#define spi_max31856_cs05_low() HAL_GPIO_WritePin(SENSOR_SPI_A0_GPIO_Port,

#define spi_max31856_write_bytes0(x, y) HAL_SPI_Transmit(&hspi1, x, y, 10)
#define spi_max31856_read_bytes0(x, y) HAL_SPI_Receive(&hspi1, x, y, 10)
#define spi_max31856_write_bytes5(x, y) HAL_SPI_Transmit(&hspi2, x, y, 10)
#define spi_max31856_read_bytes5(x, y) HAL_SPI_Receive(&hspi2, x, y, 10)

4、演示效果:

在室温18℃的环境下,将热电偶移动到茶杯(刚泡不久的茶)上方,可以发现温度立刻上升了;