简介
本教程基于零知标准板(主控芯片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引脚 | 零知标准板引脚 | 功能说明 |
---|---|---|
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时钟线 |
硬件连接图:
实物连接图:
三、代码解析
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); // 三线制模式 }
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显示内容
第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温度传感器】 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
发布评论请先 登录

零知开源——STM32F1驱动MAX31865读取三线PT100温度传感器
max31865测温跳变大
RK3562开发板使用SPI挂载RTD温度传感器
ADS1247使用三线制PT100,如何判定PT100是否接入?
PT100温度采集模块
ADS1220用于三线制PT100测温,温度波动较大是什么原因导致的?
ADS1220用于三线制PT100温度采样,温度变化缓慢的原因?怎么解决?
ADS1120接的PT100三线,校准应该如何做?
具有低侧基准和一个IDAC电流源的三线PT100 RTD测量电路

评论