• 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)
     其中
    在这里插入图片描述

    接线图

    ArduinoMAX31865LCD 1602
    5VVCCVCC
    GNDGNDGND
    11CLK-
    10SDO-
    9SDI-
    8CS-
    A4-SDA
    A5-SCL

    程序

    #include  
    #include 
    #include 
    
    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);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70

    结果

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

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

    总结

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

  • 相关阅读:
    Docker 安装 LogStash
    想进大厂?这些TCP协议知识你应该知道
    数据可视化项目基础知识
    【LVGL】弹性布局(Flex)学习
    传统语音增强——基于小波分解的语音降噪算法
    linux 工作队列之schedule_delayed_work用法
    c++模板的概念全新解释
    java数据结构与算法刷题-----LeetCode27:移除元素
    Microsoft Edge 开启 IE 模式
    站长号词库:今日热门长尾关键词挖掘 20221129
  • 原文地址:https://blog.csdn.net/qq_42250136/article/details/133342472