电子说
在精密温度传感领域,铂电阻温度探测器(RTD)是无可比拟的选择。RTD是一种温度传感器,其内部电阻会随温度变化而改变,本质上类似于热敏电阻。在这类传感器中,电阻是一小条铂,在0°C时电阻值为100或1000欧姆,因此被称为PT100/PT1000。与大多数NTC/PTC热敏电阻相比,PT类型的RTD更加稳定和精确,但价格也更高。多年来,PT RTD一直用于实验室和工业过程中的温度测量,以其高精度、可重复性和稳定性而闻名。
文件下载:3328.pdf
要充分发挥PT100x RTD的精度,需要使用专门设计的放大器来读取低电阻,甚至能自动调整和补偿连接线的电阻。Adafruit推出的带有MAX31865传感器的RTD传感器放大器就是这样一款出色的产品。它能满足各种RTD需求,甚至可以补偿3线或4线RTD以提高精度。通过SPI与任何微控制器连接,即可读取内部ADC的电阻比。
所有进入扩展板的引脚都有电平转换电路,确保3 - 5V逻辑电平安全。可使用Vin上的任何逻辑电平。
用于连接RTD传感器,有四个触点,可使用2线、3线或4线传感器。根据使用的线数,可能需要焊接或跳线某些焊盘。也可将3线或4线传感器当作3线或2线传感器使用(不连接多余的线)。
默认情况下,传感器为4线RTD使用方式,但可轻松设置为2线或3线。
如有必要,将排针剪至合适长度。将其插入面包板,长引脚朝下,这样焊接会更方便。
确保焊接所有引脚,以实现可靠的电气连接。若需要焊接技巧,可查看Adafruit的《优秀焊接指南》(https://adafru.it/aTk)。
将用于连接电源和电机的两个3.5mm端子块焊接到扩展板上。确保端子的开口部分朝外,以便轻松连接电线。可使用胶带或粘性粘土固定端子块,焊接完成后移除胶带。
4线RTD是最复杂的一种。对于低电阻电阻器的精确测量,需要考虑连接线的电阻。4线RTD的每一侧都有两根线连接,放大器会测量RTD两端的电压以及线对两端的电压,通过计算消除连接线电阻的影响。例如,在0°C时,4线PT100 RTD的中间电阻为102Ω(PT1000为1002Ω),连接线电阻约为2Ω。放大器测量时,会分别测量一组红、蓝线之间的电阻,以及红、蓝线之间的电阻,然后将这些电阻值除以2,最终得到准确的RTD电阻值。
与4线RTD类似,但只有一对连接线。由于RTD的电线规格和长度基本相同,放大器只需读取一对线的电阻,并将其作为两根线的电阻。
最简单的接线方式,每侧只有一根线。可能需要将传感器放入冰浴中进行校准,以确定0°C时的电阻(如102Ω),然后减去100Ω,得到连接线的总电阻。
使用“软件”SPI进行接线,以下引脚可用于连接:
从Arduino库管理器中搜索并安装Adafruit MAX31865库。也可参考Adafruit的Arduino库安装教程(http://learn.adafruit.com/adafruit-all-about-arduino-libraries-install-use )。
连接RTD传感器,根据实际情况调整跳线和接线。
打开File -> Examples -> Adafruit_MAX31865 -> max31865,上传到连接了传感器的Arduino。必要时调整max.begin(MAX31865_3WIRE) 行。上传后,以115200波特率打开串行控制台,查看传感器数据。MAX31865返回的是测量电阻与Rref参考电阻的比值,可据此计算电阻和温度。
Adafruit的库使用算法计算温度,虽效果良好,但并非最精确。可参考DrHaney的符合ITS - 90标准的库(https://adafru.it/Cbo),该库使用查找表以提高精度。
可使用软件SPI创建MAX31865对象:
// 使用软件SPI: CS, DI, DO, CLK
Adafruit_MAX31865 max = Adafruit_MAX31865(10, 11, 12, 13);
也可使用硬件SPI,但需使用Arduino的硬件SPI引脚:
// 使用硬件SPI,只需传入CS引脚
Adafruit_MAX31865 max = Adafruit_MAX31865(10);
根据连接的RTD类型初始化传感器:
max.begin(MAX31865_2WIRE);
max.begin(MAX31865_3WIRE);
max.begin(MAX31865_4WIRE);
使用max.readRTD()读取原始的16位无符号值,将其转换为电阻的代码示例如下:
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);
需定义RREF,PT100为430.0,PT1000为4300.0。
可使用max.temperature(100, RREF)函数计算温度,第一个参数是RTD在0°C时的电阻(PT100为100),第二个参数是参考电阻值,该函数返回温度值(单位:°C)。
使用max.readFault()读取故障信息,返回一个uint8_t类型的值,每个位表示一种故障类型。可使用以下代码检测并打印故障信息:
// 检查并打印任何故障
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();
}
sudo pip3 install adafruit - circuitpython - max31865(若默认Python为版本3,可能只需运行pip)。import board
import adafruit_max31865
import digitalio
spi = board.SPI()
cs = digitalio.DigitalInOut(board.D5) # MAX31865板的芯片选择
sensor = adafruit_max31865.MAX31865(spi, cs)
# 可设置传感器的线数、标称电阻和参考电阻
# sensor = adafruit_max31865.MAX31865(spi, cs, wires=3, rtd_nominal=1000.0, ref_resistor=4300.0)
print('Temperature: {0:0.3f}C'.format(sensor.temperature))
print('Resistance: {0:0.3f} Ohms'.format(sensor.resistance))
Adafruit的扩展板有两种版本,分别使用不同的参考电阻。PID 3328(https://adafru.it/Scm)使用430Ω参考电阻,适用于100ohm RTD;PID 3648(https://adafru.it/Scn)使用4.3kΩ参考电阻,适用于1kohm RTD。可通过读取参考电阻的标签来确定,标记为4300或431是PT100,标记为4301或432是PT1000。同时,需在代码中更改RREF的值以匹配。
总之,Adafruit MAX31865 RTD PT100/PT1000放大器为电子工程师提供了一个高精度、易于使用的温度传感解决方案。无论是在实验室还是工业应用中,都能帮助工程师准确测量温度。你在使用过程中遇到过哪些问题呢?欢迎分享交流。
全部0条评论
快来发表一下你的评论吧 !