Arduino驱动MAX31865读取铂电阻温度

前言

MAX31865是一个易于使用的热敏电阻至数字输出转换器,为铂电阻温度探测器(RTD)作优化。外部电阻设置RTD灵敏度,高精度Δ- Σ ADC将RTD电阻与基准电阻之比转换为数字输出。MAX31865输入具有高达±45V的过压保护,提供可配置的RTD及电缆开路、短路条件检测。

硬件使用

在这里插入图片描述
在这里插入图片描述

电气参数

1.支持100Ω至1kΩ (0°C时)铂电阻RTD (PT100至PT1000);
2.兼容于2线、3线和4线传感器连接;
3.SPI兼容接口;
4.15位ADC分辨率,标称温度分辨率为0.03125°C (随RTD非线性变化);
5.整个工作条件下,总精度保持在0.5°C (0.05%满量程);
6全差分VREF输入;
7.转换时间:21ms (最大值);
8.集成故障检测,增加系统稳定性:(RTD开路、RTD短路到量程范围以外的电压或 RTD元件短路)。

应用电路和时序图

应用电路:
在这里插入图片描述
SPI时序:
在这里插入图片描述
在这里插入图片描述

温度换算

电阻温度检测器(RTD)是传感器, 其电阻随温度而变化。铂是最常见最精确的线材;铂RTD被称为PT-RTD。镍、铜和其他金属也可以用来制造 RTDs。铂金RTD的特点包括 温度范围(超过+800°c),出色的精度 以及合理的线性度。 对于PT-RTD,最常见的标称值 0℃电阻为100Ω和1kΩ,尽管其他值可用。0℃之间的平均斜率 而+100℃称为alpha (α)。该值取决于 铂中的杂质及其浓度。alpha的两个最广泛使用的值是0.00385 和0.00392,对应于IEC 751 (PT100)和 SAMA标准。 电阻对温度的曲线是相当线性的,但是具有一些曲率,如CallendarVan Dusen方程所描述的:
             R(T) = R0(1 + aT + bT2 + c(T - 100)T3)
 其中
在这里插入图片描述

接线图

Arduino MAX31865 LCD 1602
5V VCC VCC
GND GND GND
11 CLK -
10 SDO -
9 SDI -
8 CS -
A4 - SDA
A5 - SCL

程序

#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <Adafruit_MAX31865.h>

LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display

// Use software SPI: CS, DI, DO, CLK
Adafruit_MAX31865 max = Adafruit_MAX31865(8,9,10,11);
// use hardware SPI, just pass in the CS pin
//Adafruit_MAX31865 max = Adafruit_MAX31865(10);

// The value of the Rref resistor. Use 430.0!
#define RREF 430.0


void setup() {
    
    
  Serial.begin(115200);
  Serial.println("Adafruit MAX31865 PT100 Sensor Test!");
  lcd.init(); //初始化LCD
  lcd.backlight();  //打开LCD背光
  max.begin(MAX31865_3WIRE);  // set to 2WIRE or 4WIRE as necessary
}


void loop() {
    
    
  uint16_t rtd = max.readRTD();

  Serial.print("RTD value: "); Serial.println(rtd);
  float ratio = rtd;
  ratio /= 32768;
  Serial.print("Ratio = "); Serial.println(ratio,8);
  Serial.print("Resistance = "); Serial.println(RREF*ratio,8);
  Serial.print("Temperature = "); Serial.println(max.temperature(100, RREF));
  lcd.setCursor(1,0);   
  lcd.print("Res= ");   
  lcd.setCursor(5,0);  
  lcd.print(RREF*ratio,3);     
  lcd.setCursor(1,1);   
  lcd.print("Tem= ");   
  lcd.setCursor(5,1);  
  lcd.print(max.temperature(100, RREF));  
  lcd.setCursor(10,1);   
  lcd.print("C "); 
  // Check and print any faults
  uint8_t fault = max.readFault();
  if (fault) {
    
    
    Serial.print("Fault 0x"); Serial.println(fault, HEX);
    if (fault & MAX31865_FAULT_HIGHTHRESH) {
    
    
      Serial.println("RTD High Threshold"); 
    }
    if (fault & MAX31865_FAULT_LOWTHRESH) {
    
    
      Serial.println("RTD Low Threshold"); 
    }
    if (fault & MAX31865_FAULT_REFINLOW) {
    
    
      Serial.println("REFIN- > 0.85 x Bias"); 
    }
    if (fault & MAX31865_FAULT_REFINHIGH) {
    
    
      Serial.println("REFIN- < 0.85 x Bias - FORCE- open"); 
    }
    if (fault & MAX31865_FAULT_RTDINLOW) {
    
    
      Serial.println("RTDIN- < 0.85 x Bias - FORCE- open"); 
    }
    if (fault & MAX31865_FAULT_OVUV) {
    
    
      Serial.println("Under/Over voltage"); 
    }
    max.clearFault();
  }
  Serial.println();
  delay(1000);
}

结果

串口显示:
在这里插入图片描述

LCD显示:
在这里插入图片描述

总结

注意:使用3线制PT100传感器探头,需要把2/3Wire焊点短接上,同时Rref上方将左侧焊点和中间割开,右侧标有3的焊点和中间焊点短接

猜你喜欢

转载自blog.csdn.net/qq_42250136/article/details/133342472
今日推荐