? 簡介
本教程基于主控芯片為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℃):
其中R0=100Ω,α=0.00385,T為溫度(℃)。
精確計算(使用Callendar-Van Dusen方程):
(適用于-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,其接法如下
修改后示意圖:
接線時,請根據線纜顏色進行正確連接:對于兩紅一藍的線纜,將藍線接至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時鐘線 |
硬件連接圖:
硬件實物圖:
三、軟件實現
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顯示正常狀態
第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:根據公式
計算得出。
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
+關注
關注
1文章
159瀏覽量
28102 -
測溫
+關注
關注
1文章
244瀏覽量
30346 -
STM32F4
+關注
關注
3文章
197瀏覽量
28839 -
MAX31865
+關注
關注
1文章
8瀏覽量
9578
發布評論請先 登錄
零知開源——STM32F4驅動MAX31865實現PT100高精度測溫

零知開源——STM32F1驅動MAX31865讀取三線PT100溫度傳感器
零知開源——STM32F1驅動MAX31865讀取三線PT100溫度傳感器

評論