零知开源——STM32F1驱动MAX31865读取三线PT100温度传感器
 
 
TA的每日心情  | 奋斗 2025-7-11 08:33 | 
|---|
 
  签到天数: 2 天 连续签到: 1 天 [LV.1]初来乍到 
举人 
 
 
	- 积分
 - 511
 
 
 
 
 | 
 
 
简介本教程基于零知标准板(主控芯片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℃): 
![]()  
其中 R0=100Ω,α=0.00385,T为温度(℃)。 
精确计算(使用Callendar-Van Dusen方程): 
 (适用于-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,其接法如下  
  修改后示意图: 
 
 
接线时,请根据线缆颜色进行正确连接:对于两红一蓝的线缆,将蓝线接至RTD-,红线分别接至RTD+和F+。请参照图示,确保将触点(2/3 Wire)焊接牢固。若遇到两蓝一红的线缆,则需反向连接。 
 
重要提示:若未断开24号连接,通电测量时PT100的电阻值将仅为正常值的一半。未通电时测量值约为120Ω,但通电后可能降至60Ω左右。这是由于24号连接之间存在接地,且存在并联电阻,导致整体电阻值降低。  
3.硬件接线 
MAX31865与零知标准板连接: 
MAX31865引脚零知标准板引脚功能说明 
VCC5V电源正极 
GNDGND电源地 
CLKD13SPI时钟线 
SDOD12SPI数据输出 
SDID11SPI数据输入 
CSD10片选信号OLED与零知标准板连接: 
OLED引脚零知标准板引脚功能说明 
VCC3V3电源正极 
GNDGND电源地 
SDAA4I2C数据线 
SCLA5I2C时钟线 
硬件连接图: 
 
 
实物连接图: 
 
 
三、代码解析1. 库文件引入  
- ?#include <Arduino.h>
 
 - #include <U8g2lib.h>          // OLED显示驱动库
 
 - #include <Adafruit_MAX31865.h> // 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);   // 三线制模式
 
 - }
 
  复制代码 
- ?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);
 
 - }
 
  复制代码 
四、运行结果将完整代码上传到零知开源平台 ,完整工程如下: 
 
  
1. OLED显示内容
  
 
 
 
第1行:标题 "MAX31865 PT100 Sensor" 
 
第2行:实时温度(如 "Temp: 25.3 C") 
 
第3行:铂电阻阻值(如 "Resistance: 110.5 Ω") 
 
第4~5行:状态信息(正常显示 "Status: OK",异常显示具体错误)  
 
2. 串口输出内容  打开零知开源平台的串口监视器(波特率115200),将看到以下格式数据和检测到的故障码: 
 
 
 
3. 数据关联说明RTD Raw值:MAX31865直接读取的16位ADC原始数据(范围0~32768)。 
Resistance:根据公式   计算得出。Temperature:调用库函数自动转换的温度值,内部使用Callendar-Van Dusen方程计算。  
4.演示视频 
 
 
 
STM32F1驱动MAX31865读取三线PT100温度传感器 
 
? 五、常见问题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Ω)。
 
 
 
  
 
 
  
 
?通过本教程,您已掌握零知标准板驱动MAX31865读取三线制PT100的全流程。如果有问题欢迎评论区Issue!  
 
?零知开源是一个真正属于国人自己的开源软硬件平台,在开发效率以及上手难度上超越了Arduino平台。 
零知开源在软件方面提供了完整的学习教程和丰富示例代码,让不懂程序的工程师也能非常轻而易举的搭建电路来创作产品,测试产品。快来动手试试吧!   
 
?点击加入零知开源实验室:https://www.lingzhilab.com/ 
 ??零知标准板技术手册:
 
 
 |   
 
  
  
  
 
 
 | 
| 
 | 
| 
 | 
| 
 | 
 |