MAX31865模块温度测量

0 前言

本文主要介绍MAX31865 测温注意事项,并写出读取温度的示例代码,模块详细参数可以查阅相关手册,

1 注意事项

1.1 参考电阻

电阻温度检测器(RTD)是一种阻值随温度变化的电阻。铂是最常见、精度最高的测温金属丝材料。铂RTD称为PT-RTD,镍、铜和其它金属亦可用来制造RTD。RTD具有较宽的测温范围,最高达+800°C,具有较高精度和较好的可重复性,线性度适中。

为测量RTD阻值,接入参考电阻(RREF),该电阻与RTD串联,偏置电压作用在RREF上端,3线制典型应用电路如下图所示,

在这里插入图片描述
参考电阻的电流同样流过RTD。参考电阻两端的电压为ADC基准电压。RTD电压连接至ADC差分输入(RTDIN+和RTDIN-)。所以ADC产生的数字输出等于RTD电阻与参考电阻的比值。对于铂电阻RTD,选择阻值等于RTD 0°C阻值的4倍的参考电阻最为合适。因此,针对PT100选用400Ω参考电阻;针对PT1000则选用4kΩ参考电阻

1.2 SPI时序图

读取寄存器数据,先写入要读的地址,再读取数据,时序图如下,
在这里插入图读时序片描述

写数据到寄存器,先写入要写的地址,再写入数据, 如下图所示,
在这里插入图片描述
时钟极性和相位

在这里插入图片描述

1.3 寄存器

MAX3186主要有8个寄存器,如下表所示,
在这里插入图片描述
0x00:配置寄存器,需要配置2/3/4线,故障检测周期等
0x01-0x02:RTD电阻寄存器,由两个8位的寄存器组成,包含15位有效数据,RTD LBS 的bit0为故障位,表示检测到任意RTD故障,应用软件中需要做故障判断处理
0x03-0x06:故障上限和故障下限寄存器用于选择RTD故障检测的触发门限。
0x07:故障状态寄存器锁存所有检测到的故障位;向配置寄存器中的故障状态清除位写1时,将全部故障状态位清零。

2 将RTD数据寄存器值转换为温度

首先,利用下面公式确定RTD的阻值,
在这里插入图片描述
ADC编码 = RTD数据寄存器(01h – 02h)中的15位ADC转换结果,RREF = 基准电阻的阻值
如果RTD的阻值已知、电阻特性定义良好,则可通过计算或查找表确定温度值。

2.1 线性化温度数据

对于-100°C至+100°C温度范围,简单利用RTD数据可以很好地实现温度逼近,如下所示:
温度(°C) ≈  (ADC编码/32) – 256
从该式可以得出:0°C时,误差为0°C; -100°C时,误差为-1.75°C; +100°C时,误差为-1.4°C (假 设采用IEC751RTD,RREF等于0°C RTD电阻的四倍)。

PT100实际测量发现,50°环境中,计算值和实际值相差1.8°左右,这样无法直接用到项目中,那就看看第2种转换方式

2.2 RTD温度计算(PT100)

查阅了网上大量资料,都是用线性化处理的方式,最后在Github项目中,发现采用下面公式转化温度和实际测量值保持一致
在这里插入图片描述
更多详细说明请参考芯片手册《AN-709 APPLICATION NOTE》

3 示例代码

下图是某个项目中的MAX31865的设计图,这里参考电阻为402欧/1%,采用3线制接入PT100,主控芯片是STM32F107
在这里插入图片描述
温度采集的示例代码

// 定义结构体,用于读取整个模块数据
struct rtd_max31865
{
   
   
    uint8_t config_reg;
    uint16_t rtd_reg;
    uint16_t hft_reg;
    uint16_t lft_reg;
    uint8_t  status_reg;
};

void spi_delay( uint32_t delay )
{
   
   
	while( delay--);
}

void send_byte( uint8_t data )
{
   
   
    uint8_t i;
	uint32_t delay = 0xff
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值