0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

零知开源——STM32F1驱动MAX31865读取三线PT100温度传感器

PCB56242069 ? 来源:PCB56242069 ? 作者:PCB56242069 ? 2025-05-23 18:05 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

简介

教程基于零知标准板(主控芯片STM32F103RBT6),演示如何通过MAX31865模块读取三线制PT100铂电阻温度,并通过I2C OLED实时显示温度值和电阻值。重点包含硬件接线配置、三线制PT100的特殊跳线修改,以及完整的代码解析。文中还将解析PT100的温度计算原理,并展示实际运行效果。

一、硬件简介

1.MAX31865模块

MAX31865是专用于RTD(电阻温度检测器)的信号调理芯片,支持2/3/4线制PT100/PT1000传感器。其内置ADC可将铂电阻的阻值变化转换为数字信号,并通过SPI接口与主控通信。关键特性:

15位分辨率

支持自动误差补偿

可配置参考电阻(Rref)

2.PT100铂电阻

PT100是一种基于铂材料的温度传感器,0℃时阻值为100Ω,温度系数为0.385Ω/℃。其阻值与温度的关系可通过以下方式计算:

线性近似公式(适用于0~100℃):

chaijie_default.png

其中R0=100Ω,α=0.00385,T为温度(℃)。

精确计算(使用Callendar-Van Dusen方程):

chaijie_default.png

(适用于-200℃~850℃)

MAX31865的温度计算
芯片内部通过测量RTD电阻与参考电阻(Rref)的比例,结合查表法或公式计算实际温度值。本代码中调用max.temperature()函数即自动完成此过程。

二、硬件准备

1.所需材料

零知标准板(STM32F103RBT6)

MAX31865模块(支持三线制PT100)

三线制PT100传感器

0.96寸I2C OLED显示屏(SSD1306驱动)

杜邦线若干

2.MAX31865跳线修改

三线制PT100必须修改模块电路板跳线!

找到MAX31865模块上的Rref电阻附近的两个跳线(标记为2和4的焊盘)。

切断Rref正上方左侧的跳线(即断开焊盘2的连接,保留焊盘3并短接),模块使用三线制模式。采用三线PT100,其接法如下

修改后示意图:

wKgZPGgwQR6ASmv-ABF6nB3olgM059.png

接线时,请根据线缆颜色进行正确连接:对于两红一蓝的线缆,将蓝线接至RTD-,红线分别接至RTD+和F+。请参照图示,确保将触点(2/3 Wire)焊接牢固。若遇到两蓝一红的线缆,则需反向连接。

重要提示:若未断开24号连接,通电测量时PT100的电阻值将仅为正常值的一半。未通电时测量值约为120Ω,但通电后可能降至60Ω左右。这是由于24号连接之间存在接地,且存在并联电阻,导致整体电阻值降低。

3.硬件接线

MAX31865与零知标准板连接:

MAX31865引脚 零知标准板引脚 功能说明
VCC 5V 电源正极
GND GND 电源地
CLK D13 SPI时钟线
SDO D12 SPI数据输出
SDI D11 SPI数据输入
CS D10 片选信号

OLED与零知标准板连接:

OLED引脚 零知标准板引脚 功能说明
VCC 3V3 电源正极
GND GND 电源地
SDA A4 I2C数据线
SCL A5 I2C时钟线

硬件连接图:

wKgZO2gwQWGAeEobAAlNVh3EXIw640.png

实物连接图:

wKgZO2gwQXyAAwkOABNME1lApZk010.png

三、代码解析

1. 库文件引入

?#include 
#include           // OLED显示驱动库
#include  // MAX31865驱动库

2. 初始化OLED和MAX31865

?// OLED初始化(I2C模式)
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE);

// MAX31865参数配置
#define RREF 430.0   // 参考电阻值(根据模块实际Rref电阻填写)
#define RTD 100.0    // PT100标称阻值
Adafruit_MAX31865 max = Adafruit_MAX31865(10, 11, 12, 13); // CS=10, SDI=11, SDO=12, CLK=13

3. 主程序逻辑

setup()函数,
初始化串口、OLED和MAX31865,设置三线制模式:

?void setup() {
  Serial.begin(115200);
  u8g2.begin();                // 启动OLED
  max.begin(MAX31865_3WIRE);   // 三线制模式
}

loop()函数,
循环读取温度并显示:

?
void loop() {
  uint16_t rtd = max.readRTD();      // 读取原始RTD值
  float ratio = rtd / 32768.0;       // 计算电阻比例(RTD阻值 = RREF × ratio)
  float temp = max.temperature(RTD, RREF); // 转换为温度值

  // OLED显示温度、电阻及状态
  u8g2.clearBuffer();
  u8g2.setCursor(0, 0);
  u8g2.print("MAX31865 PT100 Sensor");
  u8g2.setCursor(0, 15);
  u8g2.print("Temp: "); u8g2.print(temp); u8g2.print(" C");
  u8g2.setCursor(0, 30);
  u8g2.print("Resistance: "); u8g2.print(RREF * ratio); u8g2.print(" Ω");

  // 错误检测处理
  uint8_t fault = max.readFault();
  if (fault) {
    u8g2.setCursor(0, 45);
    u8g2.print("FAULT DETECTED:");
    if (fault & MAX31865_FAULT_HIGHTHRESH) u8g2.print("RTD High");
    if (fault & MAX31865_FAULT_LOWTHRESH) u8g2.print("RTD Low");
    max.clearFault();
  } else {
    u8g2.setCursor(0, 45);
    u8g2.print("Status: OK");
  }
  u8g2.sendBuffer();

  // 串口打印数据(调试用)
  Serial.print("RTD Raw: "); Serial.print(rtd);
  Serial.print(", Temp: "); Serial.print(temp);
  Serial.print(" C, Resistance: "); Serial.print(RREF * ratio);
  Serial.println(" Ω");
  if (fault) Serial.println("Fault Code: 0x" + String(fault, HEX));

  delay(1000);
}

?

四、运行结果

将完整代码上传到零知开源平台 ,完整工程如下:

通过网盘分享的文件:MAX31865_PT100.zip
链接: https://pan.baidu.com/s/1Huuuh6DqjP7cz0hpwn0c8g?pwd=22pg 提取码: 22pg

1.OLED显示内容

wKgZO2gwQgaAeZAWABcHbIWSYe8134.png

第1行:标题 "MAX31865 PT100 Sensor"

第2行:实时温度(如 "Temp: 25.3 C")

第3行:铂电阻阻值(如 "Resistance: 110.5 Ω")

第4~5行:状态信息(正常显示 "Status: OK",异常显示具体错误)

2.串口输出内容

打开零知开源平台的串口监视器(波特率115200),将看到以下格式数据和检测到的故障码:

wKgZO2gwQieALz1bAAQ2R8aKvik370.png

3.数据关联说明

RTD Raw值:MAX31865直接读取的16位ADC原始数据(范围0~32768)。

Resistance:根据公式

chaijie_default.png

计算得出。

Temperature:调用库函数自动转换的温度值,内部使用Callendar-Van Dusen方程计算。

4.演示视频

【STM32F1驱动MAX31865读取三线PT100温度传感器】 https://www.bilibili.com/video/BV1Q9J4zfEHn/?share_source=copy_web&vd_source=75d3b293c1933aa8dc6757ac429e12da

五、常见问题

1.OLED无显示

检查A4/A5接线是否接触不良。

确认OLED的I2C地址是否匹配(默认0x3C)。

2.温度读数异常

检查MAX31865的RREF电阻值是否与代码中#define RREF一致。

确认PT100接线正确(三线制需连接RTD+、RTD-、F+)。

3.持续报错

检查MAX31865的24焊盘跳线是否已切断左侧焊盘、2/3 Wire焊盘和43焊盘焊锡短接。

万用表测量PT100阻值是否正常(0℃时约100Ω,室温30℃时约120Ω)。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 温度传感器
    +关注

    关注

    48

    文章

    3047

    浏览量

    159203
  • MAX31865
    +关注

    关注

    1

    文章

    8

    浏览量

    9668
  • stm32f1
    +关注

    关注

    1

    文章

    60

    浏览量

    12550
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    开源——STM32F4驱动MAX31865实现PT100高精度测温

    本教程详细介绍了增强板(STM32F407VET6)通过MAX31865模块读取三线
    的头像 发表于 06-06 09:27 ?701次阅读
    <b class='flag-5'>零</b><b class='flag-5'>知</b><b class='flag-5'>开源</b>——<b class='flag-5'>STM32F</b>4<b class='flag-5'>驱动</b><b class='flag-5'>MAX31865</b>实现<b class='flag-5'>PT100</b>高精度测温

    开源——STM32F4驱动MAX31865实现PT100高精度测温

    材料增强板(STM32F407VET6) MAX31865模块(支持三线PT100
    发表于 05-26 18:52

    开源——STM32F4驱动MAX31865实现PT100高精度测温

    STM32F
    PCB56242069
    发布于 :2025年05月26日 18:25:17

    开源——STM32F1驱动MAX31865读取三线PT100温度传感器

    使用Callendar-Van Dusen方程计算。 4.演示视频STM32F1驱动MAX31865读取三线
    发表于 05-23 18:27

    max31865测温跳变大

    pt100max31865测室温跳变比较大,会从23.04跳到23.47,23.75反复跳变超过了0.5的误差范围,在VDD和GND之间加上0.1和10的滤波电容也不行,该怎么解决
    发表于 04-30 23:34

    RK3562开发板使用SPI挂载RTD温度传感器

    MAX31865数字式RTD温度传感器。开发者可以根据读取到的ADC原始值,开发自己的应用来对应当前测量的温度。????????
    发表于 04-15 15:45

    ADS1247使用三线PT100,如何判定PT100是否接入?

    ADS1247使用三线PT100的时候,我发现一个问题,就是不接PT100的话,仍然有温度显示,这个温度可能是固定不变的,也可能是随机跳
    发表于 01-24 07:34

    PT100温度采集模块性能特点

    ,基于PT100铂电阻的阻值随温度变化的特性。PT100是一种由铂制成的电阻温度传感器,其名称中的“10
    的头像 发表于 01-17 16:04 ?677次阅读

    PT100温度采集模块

    PT100温度采集模块,作为现代工业自动化和远程监控系统中的重要组成部分,作为一种高精度、稳定性强的温度传感器,在工业自动化、环境监测以及远程监控系统等领域中发挥着至关重要的作用。 一
    的头像 发表于 01-15 16:26 ?845次阅读

    ADS1220用于三线PT100测温,温度波动较大是什么原因导致的?

    最近开发产品,用了TI的ADS1220作为三线PT100温度采样,电路图和PCB布局如下,程序里的参考电压设置在1.65V,但是五块电路板布局一模一样,元器件参数和程序也一模一样,用同一个
    发表于 12-23 07:17

    ADS1220用于三线PT100温度采样,温度变化缓慢的原因?怎么解决?

    最近开发产品,用了TI的ADS1220作为三线PT100温度采样,电路图和PCB布局如下,程序里的参考电压设置在1.65V,但是如果当前环温是20℃的话,用手捏一下PT100
    发表于 12-20 06:07

    ADS1120接的PT100三线,校准应该如何做?

    使用ADS1120,接的PT100三线,想问下这个的校准应该如何做。查询有资料说两线的可以在PT100短接,三线的是不是
    发表于 11-28 07:07

    具有低侧基准和一个IDAC电流源的三线PT100 RTD测量电路

    电子发烧友网站提供《具有低侧基准和一个IDAC电流源的三线PT100 RTD测量电路.pdf》资料免费下载
    发表于 09-23 12:35 ?2次下载
    具有低侧基准和一个IDAC电流源的<b class='flag-5'>三线</b><b class='flag-5'>PT100</b> RTD测量电路

    具有低侧基准的三线PT100 RTD测量电路

    电子发烧友网站提供《具有低侧基准的三线PT100 RTD测量电路.pdf》资料免费下载
    发表于 09-23 12:25 ?4次下载
    具有低侧基准的<b class='flag-5'>三线</b><b class='flag-5'>PT100</b> RTD测量电路

    RK3562J的SPI挂载数字式温度传感器

    OK3562J-C开发板上使用SPI2挂载MAX31865(数字式RTD温度传感器)芯片的方法。 1. 修改思路 添加一个SPI设备的思路为: 在设备树中添加描述 → 设备树描述中对
    发表于 08-28 16:41