簡介
本教程基于零知標準板(主控芯片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文章
3023瀏覽量
158026 -
MAX31865
+關注
關注
1文章
8瀏覽量
9559 -
stm32f1
+關注
關注
1文章
58瀏覽量
12428
發布評論請先 登錄

評論