新闻  |   论坛  |   博客  |   在线研讨会
通过MAX31865读取PT100温度值
Linux嵌入式 | 2022-12-31 09:09:54    阅读:2280   发布文章

MAX31865说明

MAX31865是美信公司生产的一款简单易用的热敏电阻至数字输出的转换器,优化用于铂电阻温度检测器(RTD)。

特点:

· RTD的灵敏度可以通过外部电阻进行设置

· 具有±45V输入保护、电缆开路、短路条件的故障检测,RTD可配置

· 内置高精度的Δ- Σ ADC转换器标称温度分辨率为0.03125°C (随RTD的非线性变化)

· 兼容连接2线、3线、4线传感器

· 转换时间最大21ms

封装及引脚说明:



硬件电路:

官方参考电路:

1、两线制pt100:


三线制pt100:


四线制pt100:

在这里可能有些人对pt100的两线制、三线制、四线制不太明白,下面简单介绍一下:

二线制就是在热电阻的两端各连接一根导线来引出的方式叫二线制,但是这种方式接线比较简单,在引线上存在电阻,会对测量带来一定的误差,因此用在测量精度比较低的情况下。

三线制是在热电阻的一端连接一根引线,另一端连接两根引线,这种方式通常,这种方式可以较好的消除线电阻的影响,通常会与电桥相互配合使用,也是工业中比较常用的使用方式。

四线制是在热电阻的两端各连接两根导线其中的两根引线在使用是会加入恒流源为热电阻电流,然后通过热电阻将电流信号转换为电压信号,通过另外两根线将电压引出进行测量。这种引线方式可以完全消除线电阻的影响,常使用在对温度精度较高的场合下。

程序编写

在写程序之前我们一要阅读芯片手册,从芯片手册上可知,MAX31856采用SPI通信支持模式已和模式三,通信时的频率不要超过5Mz,芯片内部有16个寄存器堆芯片的操作主要是对寄存器进行读或写存取寄存器时,使用地址0Xh为读操作,地址8Xh为写操作。主要寄存器如下图所示:


在进行编程时要注意寄存器的配置这里我们主要注意以下几个寄存器

1.configuration寄存器




2、 RTD电阻寄存器(01-02H)

RTD MSB和RTD LSB两个8位寄存器包含RTD电阻数据,数据格式如下,数据格式为RTD电阻与参考电阻的比值,包含15位有效数据。RTD LSB寄存器的D0为故障位,表示是否检测到任意RTD故障。


温度转换:

对于PT热敏电阻,最常见的阻值时:0摄氏度下标称值为100欧姆和1K欧姆,0-100摄氏度直之间的平均斜率两个常见的值是:0.00385和0.00392,分别对应IEC751和SMA标准阻值与温度的关系曲线接近线性,但由一定的弯曲,可有Kellendar-Van Dusen方程表示:

温度转换主程序如下:

float MAX31865_GetTemp(void)

{

unsigned int data;

float Rt;

float Rt0 = 100; //PT100 0度对应的阻值 0-850时c=0;

float Z1,Z2,Z3,Z4,temp;

float a = 3.9083e-3;

float b = -5.775e-7;

float rpoly; //

MAX31865_Write(0x80, 0xD3);

data=MAX31865_Read(0x01)<<8;//从寄存器RTD电阻寄存器读出阻值

data|=MAX31865_Read(0x02);

data>>=1; //去掉Fault位

Rt=(float)data/32768.0*RREF; //阻值转换

/*解一元二次方程*/

Z1 = -a;

Z2 = a*a-4*b;

Z3 = 4*b/Rt0;

Z4 = 2*b;

temp = Z2+Z3*Rt;

temp = (sqrt(temp)+Z1)/Z4;

if(temp>=0) return temp;

rpoly = Rt;

temp = -242.02;

temp += 2.2228 * rpoly;

rpoly *= Rt; // square

temp += 2.5859e-3 * rpoly;

rpoly *= Rt; // ^3

temp -= 4.8260e-6 * rpoly;

rpoly *= Rt; // ^4

temp -= 2.8183e-8 * rpoly;

rpoly *= Rt; // ^5

temp += 1.5243e-10 * rpoly;

return temp;

}


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
工科男,多年嵌入式工作者,每日分享工作中常遇到的一些“坑”
推荐文章
最近访客