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

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

3天内不再提示

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

零知实验室 来源:PCB56242069 作者:PCB56242069 2025-06-06 09:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

简介

本教程基于主控芯片为STM32F407VET6的零知增强板,演示如何通过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℃):

wKgZO2hCQxKAKjlXAAAOpK_F-k4043.png

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

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

wKgZO2hCQyKASeHLAAAgGjuQ6C4235.png

(适用于-200℃~850℃)

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

二、硬件准备

1.所需材料

零知增强板(STM32F407VET6)

MAX31865模块(支持三线制PT100)

三线制PT100传感器

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

杜邦线若干

2.PT100特性曲线

温度(℃) | 0 | 100 | 200
电阻(Ω) | 100 | 138.5 | 175.8

3.MAX31865跳线修改

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

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

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

修改后示意图:

wKgZPGgwQR6ASmv-ABF6nB3olgM059.png

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

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

4.接线配置表

MAX31865与零知标准板连接:

MAX31865引脚 零知增强板引脚 功能说明
VCC 3V3 电源正极
GND GND 电源地
CLK 52 SPI时钟线
SDO 50 数据输出
SDI 51 数据输入
CS 53 片选信号

OLED与零知标准板连接:

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

硬件连接图:

wKgZO2g0QOCAHlLGAAZhBCs62Rc413.png

硬件实物图:

wKgZO2g0QLuACnw-ABUDGuCIEB0207.png

三、软件实现

1.核心库说明

#include <  Arduino.h  >
#include <  SPI.h  >
#include <  Wire.h  >
#include <  Adafruit_GFX.h  >
#include <  Adafruit_SSD1306.h  >    //OLED显示驱动库
#include <  Adafruit_MAX31865.h  >   //MAX31865温度传感器库文件

2.硬件初始化

// SSD1306 OLED 显示屏初始化
#define SCREEN_HEIGHT 64
#define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

// MAX31865 初始化
#define RREF 430.0
#define RTD 100.0
Adafruit_MAX31865 max1 = Adafruit_MAX31865(53);//使用硬件SPI,如果是软件SPI则使用: (53,51,50,52)

3. 主程序逻辑

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

void setup() {
  Serial.begin(115200);

  // Initialize SSD1306 display
  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
    Serial.println(F("SSD1306 allocation failed"));
    for(;;); // Don't proceed, loop forever
  }
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.display();

  // Initialize MAX31865
  max1.begin(MAX31865_3WIRE);
}

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

void loop() {
  uint16_t rtd = max1.readRTD();
  float ratio = rtd;
  ratio /= 32768;
  float temp = max1.temperature(RTD, RREF);

  // Prepare display buffer
  display.clearDisplay();
  
  // Display temperature and resistance
  display.setCursor(0, 0);
  display.print(F("MAX31865 PT100 Sensor"));
  
  display.setCursor(0, 15);
  display.print(F("Temp: "));
  display.print(temp);
  display.print(F(" C"));
  
  display.setCursor(0, 30);
  display.print(F("Resistance: "));
  display.print(RREF * ratio);
  display.print(F(" "));
  display.print("Om"); // Omega symbol

  // Check error status
  uint8_t fault = max1.readFault();
  if(fault) {
    display.setCursor(0, 45);
    display.print(F("FAULT DETECTED:"));
    
    if(fault & MAX31865_FAULT_HIGHTHRESH) {
      display.setCursor(0, 55);
      display.print(F("RTD_high"));
    }
    if(fault & MAX31865_FAULT_LOWTHRESH) {
      display.setCursor(0, 55);
      display.print(F("RTD_low"));
    }
    
    max1.clearFault();
  } else {
    display.setCursor(0, 45);
    display.print(F("Status: OK"));
  }

  // Serial output for debugging
  Serial.print(F("RTD value: ")); Serial.println(rtd);
  Serial.print(F("Temperature: ")); Serial.print(temp);
  Serial.println(F(" C"));
  
  // Check and print any faults
  if (fault) {
    Serial.print(F("Fault 0x")); Serial.println(fault, HEX);
    if (fault & MAX31865_FAULT_HIGHTHRESH) {
      Serial.println(F("RTD high threshold"));
    }
    if (fault & MAX31865_FAULT_LOWTHRESH) {
      Serial.println(F("RTD low threshold"));
    }
    max1.clearFault();
  }

  display.display();
  delay(1000);
}

四、运行效果

1.OLED显示正常状态

wKgZO2g0Q1GAazqbABO8gRH6fV458.jpegwKgZO2g0QM2AeFDAABO8gRH6fV4325.png

第1行:标题 "MAX31865 PT100 Sensor"

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

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

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

2.串口输出内容

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

wKgZPGg0Q1GALtR8AARttKAeIKI047.pngwKgZO2g0QVuAZHfrAARttKAeIKI864.png

3.数据关联说明

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

Resistance:根据公式

wKgZPGhCQ1WAJQyBAAAXKKFnTUg086.png

计算得出。

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

4.演示视频

https://live.csdn.net/v/478784?spm=1001.2014.3001.5501

零知增强板驱动MAX31865读取三线PT100温度传感器

5.完整工程获取:

通过网盘分享的文件:F4_MAX31865_PT100.zip
链接: https://pan.baidu.com/s/1eH20AzfXBWHDDwlJ15GRAw?pwd=x6na 提取码: x6na

注意事项:

长距离传输时建议使用屏蔽双绞线

定期使用无水酒精清洁PT100探头

避免在强电磁干扰环境下安装传感器

五、问题排查指南

常见异常处理

显示白屏

检查I2C地址是否为0x3C

确认Wire.begin()是否执行

温度值-245℃

验证begin()参数是否为MAX31865_3WIRE

测量RTD对地阻抗(正常应>10MΩ)

持续报错

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

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

校准建议

冰点校准:将PT100置于0℃环境,调整RREF使显示0±0.3℃

满量程校准:100℃沸水环境,微调RTD参数

线性校准:使用标准温度源进行三点校正

审核编辑 黄宇

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

    关注

    1

    文章

    163

    浏览量

    29404
  • 测温
    +关注

    关注

    1

    文章

    278

    浏览量

    33171
  • STM32F4
    +关注

    关注

    3

    文章

    204

    浏览量

    30321
  • MAX31865
    +关注

    关注

    1

    文章

    10

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深入解析MAX31865:RTD到数字转换器的卓越之选

    深入解析MAX31865:RTD到数字转换器的卓越之选 在电子工程领域,准确测量温度是许多应用的关键需求。而MAX31865作为一款专为铂电阻温度探测器(RTD)优化的电阻到数字转换器,凭借其出色
    的头像 发表于 04-03 12:45 381次阅读

    基于 LES30-PT100-RS485 的水务水厂管道防冻测温智能监控解决方案

    通道可选,可在水厂管道关键点位部署 PT100 传感器,实现全域多点同步测温;兼容 2/3 线制 PT100,安装灵活、适配各种管道工况。 2.2
    发表于 03-25 09:39

    Lesminer LES30-PT100-RS485 PT100 温度采集模块:工业宽温高精度测温的硬核之选

    的 Lesminer LES30-PT100-RS485 PT100 温度采集模块 ,以 - 200℃~850℃超宽测温量程、±0.3℃高精度、1~16 路灵活通道配置为核心优势,搭配
    的头像 发表于 02-27 11:43 354次阅读

    工业测温PT100还是PT1000?

    电机过热是工业现场设备失效的主因之一。面对PT100PT1000两种主流热电阻探头,究竟该如何选择?本文为您解析其中的关键考量。工业电机过热保护:PT100/PT1000
    的头像 发表于 01-21 11:39 1034次阅读
    工业<b class='flag-5'>测温</b>选<b class='flag-5'>PT100</b>还是<b class='flag-5'>PT</b>1000?

    STM32F407ZGT6驱动MAX31865获取PT100温度数据

    MAX31865 是 RTD 数字转换器,内置 15 位模/数转换器(ADC)、输入保护、数字控制器、SPI 兼容接口以及相关的控制逻辑电路。
    的头像 发表于 10-14 17:17 15.1w次阅读
    <b class='flag-5'>STM32F</b>407ZGT6<b class='flag-5'>驱动</b><b class='flag-5'>MAX31865</b>获取<b class='flag-5'>PT100</b>温度数据

    开源——STM32F407VET6驱动SHT41温湿度传感器完整教程

    目基于STM32F407VET6增强板,实现SHT41高精度温湿度传感器的驱动和数据采集。S
    发表于 07-10 12:01

    开源——STM32F407VET6驱动SHT41温湿度传感器完整教程

    摘要:本项目基于STM32F407VET6增强板驱动SHT41高精度温湿度传感器,实现±0.
    的头像 发表于 07-09 18:53 1956次阅读
    <b class='flag-5'>零</b><b class='flag-5'>知</b><b class='flag-5'>开源</b>——<b class='flag-5'>STM32F</b>407VET6<b class='flag-5'>驱动</b>SHT41温湿度传感器完整教程

    开源——STM32F4实现ILI9486显示屏UI界面系列教程(三):记事本功能实现

    功能。 ​ 一、硬件连接(同电子书教程)硬件连接方式与电子书阅读器完全一致,请参考系列教程(一)的硬件连接部分。显示屏直接插入增强板专用接口,无需额外连线。系列教程直达:
    发表于 06-27 09:51

    开源——STM32F4实现ILI9486显示屏UI界面系列教程(二):日历功能实现

    本教程详细介绍了基于STM32F4和ILI9486触摸屏的日历应用开发,涵盖硬件连接、软件实现IDE配置。核心功能包括月份视图展示、滑动切换和日期标记,通过LVGL库
    的头像 发表于 06-25 17:34 867次阅读
    <b class='flag-5'>零</b><b class='flag-5'>知</b><b class='flag-5'>开源</b>——<b class='flag-5'>STM32F4</b><b class='flag-5'>实现</b>ILI9486显示屏UI界面系列教程(二):日历功能<b class='flag-5'>实现</b>

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

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

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

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

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

    简介本教程基于标准板(主控芯片STM32F103RBT6),演示如何通过MAX31865模块读取三线制PT100铂电阻温度,并通过I2C
    发表于 05-23 18:27

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

    本教程详细介绍了如何使用标准板(STM32F103RBT6)通过MAX31865模块读取三线制PT100铂电阻温度,并通过I2C OLE
    的头像 发表于 05-23 18:05 3390次阅读
    <b class='flag-5'>零</b><b class='flag-5'>知</b><b class='flag-5'>开源</b>——<b class='flag-5'>STM32F</b>1<b class='flag-5'>驱动</b><b class='flag-5'>MAX31865</b>读取三线<b class='flag-5'>PT100</b>温度传感器

    PT100温度采集模块:数字滤波、线阻修正

    PT100温度采集模块是一种基于铂电阻(Pt100)的高精度温度检测装置,凭借其稳定性、抗干扰能力和宽温度范围(-200℃~+850℃),广泛应用于需要精确温度监测与控制的场景。 一、产品参数 1.
    的头像 发表于 05-16 15:06 1377次阅读

    pt100热电阻采集模块:0.01℃精度,10HZ高速率

    ,0℃时电阻为100Ω,测温范围广(-200℃~+850℃)。采集模块通过精密电路测量其微小电阻变化,转换为标准电信号输出。 二、技术特性 - 测量精度高精度24位AD转换,默认采样
    的头像 发表于 05-06 16:41 1612次阅读