前言
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的焊点和中间焊点短接