簡(jiǎn)介
本教程基于零知標(biāo)準(zhǔn)板(主控芯片STM32F103RBT6),演示如何通過(guò)MAX31865模塊讀取三線制PT100鉑電阻溫度,并通過(guò)I2C OLED實(shí)時(shí)顯示溫度值和電阻值。重點(diǎn)包含硬件接線配置、三線制PT100的特殊跳線修改,以及完整的代碼解析。文中還將解析PT100的溫度計(jì)算原理,并展示實(shí)際運(yùn)行效果。
一、硬件簡(jiǎn)介
1.MAX31865模塊
MAX31865是專(zhuān)用于RTD(電阻溫度檢測(cè)器)的信號(hào)調(diào)理芯片,支持2/3/4線制PT100/PT1000傳感器。其內(nèi)置ADC可將鉑電阻的阻值變化轉(zhuǎn)換為數(shù)字信號(hào),并通過(guò)SPI接口與主控通信。關(guān)鍵特性:
15位分辨率
支持自動(dòng)誤差補(bǔ)償
可配置參考電阻(Rref)
2.PT100鉑電阻
PT100是一種基于鉑材料的溫度傳感器,0℃時(shí)阻值為100Ω,溫度系數(shù)為0.385Ω/℃。其阻值與溫度的關(guān)系可通過(guò)以下方式計(jì)算:
	線性近似公式(適用于0~100℃):
	
	
	其中R0=100Ω,α=0.00385,T為溫度(℃)。
	
	精確計(jì)算(使用Callendar-Van Dusen方程):
	
	
(適用于-200℃~850℃)
	MAX31865的溫度計(jì)算
	芯片內(nèi)部通過(guò)測(cè)量RTD電阻與參考電阻(Rref)的比例,結(jié)合查表法或公式計(jì)算實(shí)際溫度值。本代碼中調(diào)用max.temperature()函數(shù)即自動(dòng)完成此過(guò)程。
二、硬件準(zhǔn)備
1.所需材料
零知標(biāo)準(zhǔn)板(STM32F103RBT6)
MAX31865模塊(支持三線制PT100)
三線制PT100傳感器
0.96寸I2C OLED顯示屏(SSD1306驅(qū)動(dòng))
杜邦線若干
2.MAX31865跳線修改
三線制PT100必須修改模塊電路板跳線!
找到MAX31865模塊上的Rref電阻附近的兩個(gè)跳線(標(biāo)記為2和4的焊盤(pán))。
切斷Rref正上方左側(cè)的跳線(即斷開(kāi)焊盤(pán)2的連接,保留焊盤(pán)3并短接),模塊使用三線制模式。采用三線PT100,其接法如下
修改后示意圖:
	
接線時(shí),請(qǐng)根據(jù)線纜顏色進(jìn)行正確連接:對(duì)于兩紅一藍(lán)的線纜,將藍(lán)線接至RTD-,紅線分別接至RTD+和F+。請(qǐng)參照?qǐng)D示,確保將觸點(diǎn)(2/3 Wire)焊接牢固。若遇到兩藍(lán)一紅的線纜,則需反向連接。
重要提示:若未斷開(kāi)24號(hào)連接,通電測(cè)量時(shí)PT100的電阻值將僅為正常值的一半。未通電時(shí)測(cè)量值約為120Ω,但通電后可能降至60Ω左右。這是由于24號(hào)連接之間存在接地,且存在并聯(lián)電阻,導(dǎo)致整體電阻值降低。
3.硬件接線
MAX31865與零知標(biāo)準(zhǔn)板連接:
| MAX31865引腳 | 零知標(biāo)準(zhǔn)板引腳 | 功能說(shuō)明 | 
|---|---|---|
| VCC | 5V | 電源正極 | 
| GND | GND | 電源地 | 
| CLK | D13 | SPI時(shí)鐘線 | 
| SDO | D12 | SPI數(shù)據(jù)輸出 | 
| SDI | D11 | SPI數(shù)據(jù)輸入 | 
| CS | D10 | 片選信號(hào) | 
OLED與零知標(biāo)準(zhǔn)板連接:
| OLED引腳 | 零知標(biāo)準(zhǔn)板引腳 | 功能說(shuō)明 | 
|---|---|---|
| VCC | 3V3 | 電源正極 | 
| GND | GND | 電源地 | 
| SDA | A4 | I2C數(shù)據(jù)線 | 
| SCL | A5 | I2C時(shí)鐘線 | 
硬件連接圖:
	
實(shí)物連接圖:
	
三、代碼解析
1. 庫(kù)文件引入
?#include ??Arduino.h???> #include ??U8g2lib.h???> // OLED顯示驅(qū)動(dòng)庫(kù) #include ??Adafruit_MAX31865.h???> // MAX31865驅(qū)動(dòng)庫(kù)
2. 初始化OLED和MAX31865
?// OLED初始化(I2C模式) U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, U8X8_PIN_NONE); // MAX31865參數(shù)配置 #define RREF 430.0 // 參考電阻值(根據(jù)模塊實(shí)際Rref電阻填寫(xiě)) #define RTD 100.0 // PT100標(biāo)稱(chēng)阻值 Adafruit_MAX31865 max = Adafruit_MAX31865(10, 11, 12, 13); // CS=10, SDI=11, SDO=12, CLK=13
3. 主程序邏輯
	setup()函數(shù),
	初始化串口、OLED和MAX31865,設(shè)置三線制模式:
?void setup() {
  Serial.begin(115200);
  u8g2.begin();                // 啟動(dòng)OLED
  max.begin(MAX31865_3WIRE);   // 三線制模式
}
	loop()函數(shù),
	循環(huán)讀取溫度并顯示:
?
void loop() {
  uint16_t rtd = max.readRTD();      // 讀取原始RTD值
  float ratio = rtd / 32768.0;       // 計(jì)算電阻比例(RTD阻值 = RREF × ratio)
  float temp = max.temperature(RTD, RREF); // 轉(zhuǎn)換為溫度值
  // OLED顯示溫度、電阻及狀態(tài)
  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(" Ω");
  // 錯(cuò)誤檢測(cè)處理
  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();
  // 串口打印數(shù)據(jù)(調(diào)試用)
  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);
}
?
四、運(yùn)行結(jié)果
將完整代碼上傳到零知開(kāi)源平臺(tái) ,完整工程如下:
	通過(guò)網(wǎng)盤(pán)分享的文件:MAX31865_PT100.zip
	鏈接: https://pan.baidu.com/s/1Huuuh6DqjP7cz0hpwn0c8g?pwd=22pg 提取碼: 22pg
1.OLED顯示內(nèi)容
	
第1行:標(biāo)題 "MAX31865 PT100 Sensor"
第2行:實(shí)時(shí)溫度(如 "Temp: 25.3 C")
第3行:鉑電阻阻值(如 "Resistance: 110.5 Ω")
第4~5行:狀態(tài)信息(正常顯示 "Status: OK",異常顯示具體錯(cuò)誤)
2.串口輸出內(nèi)容
打開(kāi)零知開(kāi)源平臺(tái)的串口監(jiān)視器(波特率115200),將看到以下格式數(shù)據(jù)和檢測(cè)到的故障碼:
	
3.數(shù)據(jù)關(guān)聯(lián)說(shuō)明
RTD Raw值:MAX31865直接讀取的16位ADC原始數(shù)據(jù)(范圍0~32768)。
Resistance:根據(jù)公式
	
計(jì)算得出。
Temperature:調(diào)用庫(kù)函數(shù)自動(dòng)轉(zhuǎn)換的溫度值,內(nèi)部使用Callendar-Van Dusen方程計(jì)算。
4.演示視頻
【STM32F1驅(qū)動(dòng)MAX31865讀取三線PT100溫度傳感器】 https://www.bilibili.com/video/BV1Q9J4zfEHn/?share_source=copy_web&vd_source=75d3b293c1933aa8dc6757ac429e12da
五、常見(jiàn)問(wèn)題
1.OLED無(wú)顯示
檢查A4/A5接線是否接觸不良。
確認(rèn)OLED的I2C地址是否匹配(默認(rèn)0x3C)。
2.溫度讀數(shù)異常
檢查MAX31865的RREF電阻值是否與代碼中#define RREF一致。
確認(rèn)PT100接線正確(三線制需連接RTD+、RTD-、F+)。
3.持續(xù)報(bào)錯(cuò)
檢查MAX31865的24焊盤(pán)跳線是否已切斷左側(cè)焊盤(pán)、2/3 Wire焊盤(pán)和43焊盤(pán)焊錫短接。
用萬(wàn)用表測(cè)量PT100阻值是否正常(0℃時(shí)約100Ω,室溫30℃時(shí)約120Ω)。
審核編輯 黃宇
- 
                                溫度傳感器
                                +關(guān)注關(guān)注 48文章 3076瀏覽量 162053
- 
                                MAX31865
                                +關(guān)注關(guān)注 1文章 9瀏覽量 9776
- 
                                stm32f1
                                +關(guān)注關(guān)注 1文章 60瀏覽量 12779
發(fā)布評(píng)論請(qǐng)先 登錄
STM32F407ZGT6驅(qū)動(dòng)MAX31865獲取PT100溫度數(shù)據(jù)
 
    
零知開(kāi)源——STM32F407VET6驅(qū)動(dòng)SHT41溫濕度傳感器完整教程
 
    
零知開(kāi)源——STM32F4驅(qū)動(dòng)MAX31865實(shí)現(xiàn)PT100高精度測(cè)溫
 
    
零知開(kāi)源——STM32F4驅(qū)動(dòng)MAX31865實(shí)現(xiàn)PT100高精度測(cè)溫
 
     
           
        
 
         零知開(kāi)源——STM32F1驅(qū)動(dòng)MAX31865讀取三線PT100溫度傳感器
零知開(kāi)源——STM32F1驅(qū)動(dòng)MAX31865讀取三線PT100溫度傳感器 
                 
  
            
             
             
                 
             工商網(wǎng)監(jiān)
工商網(wǎng)監(jiān)
        
評(píng)論