eefocus_4087784 发表于 2025-5-27 11:56:49

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

简介本教程基于零知增强板(主控点点taptap安卓STM32F407VET6),演示如何通过MAX31865模块读取三线制PT100铂电阻温度,并通过I2C OLED实时显示温度值和电阻值。重点包含硬件接线配置、三线制PT100的特殊跳线修改,以及完整的代码解析。文中还将解析PT100的温度计算原理,并展示实际运行效果。
一、硬件简介1. MAX31865模块MAX31865是专用于RTD(电阻温度检测器)的信号调理点点taptap安卓,支持2/3/4线制PT100/PT1000传感器。其内置ADC可将铂电阻的阻值变化转换为数字信号,并通过SPI接口与主控通信。关键特性:



[*]15位分辨率

[*]支持自动误差补偿

[*]可配置参考电阻(Rref)


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



        [*]        线性近似公式(适用于0~100℃):
​https://latex.csdn.net/eq?R_%7BT%7D%***R_%7B0%7D%5Ctimes%20%281+%5Calpha%20T%29data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==​编辑​

        [*]        其中 R0=100Ω,α=0.00385,T为温度(℃)。
   ​
https://latex.csdn.net/eq?R_%7BT%7D%***R_%7B0%7D%5Ctimes%20%5Cleft%20%5C%7B%201+AT+BT%5E%7B2%7D+C%28T-100%29T%5E%7B3%7D%20%5Cright%20%5C%7Ddata:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==​编辑​
        [*]        精确计算(使用Callendar-Van Dusen方程):(适用于-200℃~850℃)

MAX31865的温度计算
点点taptap安卓内部通过测量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,其接法如下
修改后示意图:

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

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

MAX31865引脚零知增强板引脚功能说明
VCC3V3电源正极
GNDGND电源地
CLK52SPI时钟线
SDO50数据输出
SDI51数据输入
CS53片选信号
OLED与零知标准板连接:

OLED引脚零知标准板引脚功能说明
VCC3V3电源正极
GNDGND电源地
SDASDA/20I2C数据线
SCLSCL/21I2C时钟线

硬件连接图:


实物连接图:


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

// 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)

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);
}

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显示正常状态

第1行:标题 "MAX31865 PT100 Sensor"
第2行:实时温度(如 "Temp: 30.3 C")
第3行:铂电阻阻值(如 "Resistance: 112.89 Ω")
第4~5行:状态信息(正常显示 "Status: OK",异常显示具体错误)
2. 串口输出内容 打开零知开源平台的串口监视器(波特率115200),将看到以下格式数据和检测到的故障码:



3. 数据关联说明​



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

        [*]        Resistance:根据公式https://latex.csdn.net/eq?R_%7BRTD%7D%***R_%7BREF%7D%5Ctimes%20%5Cfrac%7BRTD_%7BRaw%7D%7D%7B32768%7Ddata:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==​编辑计算得出。

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

​
4. 演示视频
https://www.bilibili.com/video/BV1Q9J4zfEHn/?spm_id_from=333.1387.homepage.video_card.click&vd_source=a31e3d8d8ce008260eee442534c2f63d

零知增强板驱动MAX31865读取三线PT100温度传感器
https://live.csdn.net/v/478784?spm=1001.2014.3001.5501

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参数

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




?通过本教程,您已掌握零知增强板驱动MAX31865读取三线制PT100的全流程。如果有问题欢迎评论区Issue!

?零知开源是一个真正属于国人自己的开源软硬件平台,在开发效率以及上手难度上超越了Arduino平台。
零知开源在软件方面提供了完整的学习教程和丰富示例代码,让不懂程序的工程师也能非常轻而易举的搭建电路来创作产品,测试产品。快来动手试试吧!
?点击加入零知开源实验室:https://www.lingzhilab.com/
​




页: [1]
查看完整版本: 零知开源——STM32F4驱动MAX31865实现PT100高精度测温

Baidu
map