Прошу помощи с Max31865+Pt100

Тема в разделе "Arduino & Shields", создана пользователем DLS74, 15 май 2019.

  1. DLS74

    DLS74 Гик

    Спасибо Большое!!! Вот теперь все понятно.... буду заказывать MAX31865 оригинал из Штатов, а PT100 нашел у нас в России делают под заказ с поверкой. Только предварительно позвоню, узнаю, что они между проволокой и трубкой засыпают или заливают...
     
  2. parovoZZ

    parovoZZ Гуру

    !
     
  3. !@#$

    !@#$ Нерд

    Сам модернизируй. Разбери, замени тальк на термопасту, собери, приклей трубочку эпоксидкой обратно.
     
  4. DLS74

    DLS74 Гик

    Класс!!!. Спасибо за совет!
     
  5. !@#$

    !@#$ Нерд

    Только лишнее это всё. Зачем тебе быстродействие? Температурные процессы сами по себе инерционные ... если только ты не собрался мерить температуру внутри камеры сгорания мотора Формулы-1.
    Допустим инкубатор ... точность должна быть высокой, если не хочешь одних петушков высидеть. А быстродействие ... так мощность ТЭН подбери такой, что бы Pt100 успевал.
    Нагрев воды ... так надо предусмотреть постоянное присутствие датчика в среде (или вваренной гильзе, заполненной маслом если гигиена не разрешает прямой контакт с датчиком). Ну и так далее.
    Как сказал Великий Дима ... конструирование - это всего лишь оптимизация компромиссов и обход ограничений.
     
  6. DLS74

    DLS74 Гик

    Мне нужно мерить нагрев воды.... и контролировать до десятых долей.... А диапазон примерно от +5 до +60 С. Сегодня попробую сначала без разборки датчика.... потом на модернизированном...... может и хватит его возможностей...
     
  7. ИгорьК

    ИгорьК Гуру

    А что такой
    Неправда! Дима так не говорил. Или вы запамятовали, или приписываете ему.
     
  8. !@#$

    !@#$ Нерд

    Ну так всё совсем просто ... контролировать - не регулировать. Каструлку в каструлку (водяная баня называется), процессы замедлятся. И мерить в двух контурах. Двумя термометрами. В первом от огня контуре регулировать +/-1 градус, тогда во втором колебания будут +/- 0,1 градуса. И огонь минимально-достаточный. Можно хоть самогон гнать.
     
  9. parovoZZ

    parovoZZ Гуру

    это с проволочкой, которая тоньше волоса?
     
  10. parovoZZ

    parovoZZ Гуру

    Подправь Rref в программе.
     
  11. DLS74

    DLS74 Гик

    При 40 С.... показывает более менее точно.... при 28 С завышает примерно на 4 градуса.... поэтому изменением Rref не получается откорректировать... кто-то из китайских "игрушек" глючит.... либо Pt100 либо MAX31865.....
     
  12. !@#$

    !@#$ Нерд

    По 4-х проводной подключил?
    Терпеливо померяй температуру в разных точках. Если показания не совсем точные, но стабильные ... тогда всё отлично. Просто ты не тот коэффициент ТКС датчика применил. Этот коэффициент должен быть учтён в библиотеке или скетче. Можешь хоть функцией map исправить.
    Как сказал Козьма Прутков "Учтённая погрешность - уже не погрешность".
    Если показания плавают - плохой контакт в соединениях,
    И не обижай китайцев ... их полтора миллиарда ... хоть кто то да умеет делать датчики.
     
  13. DLS74

    DLS74 Гик

    Датчик 3-х проводной.... но так не работает... в начале поста я описывал проблему..
    Поэтому сконфигурировал по 2-х проводке... и вот такой получил результат....
     
  14. !@#$

    !@#$ Нерд

    Почитай вот это http://www.symmetron.ru/articles/resistance-thermometers.pdf
    Внимательно. Станет понятно, для чего трёхпроводная схема, и третий провод должен быть точно таким же.
    Перемычка - это временно только для проверки работоспособности схемы в принципе.
     
  15. parovoZZ

    parovoZZ Гуру

    У датчиков Pt один ТКС, если я правильно помню. Это у Cu их целая таблица.

    Это точная инфа? Мне сейчас дашик лень читать, но микросхема вроде сама все делает.

    Датчик 2-х проводной. Третий провод для компенсации сопротивления проводов.

    я посмотрю у себя - вроде я болта забил на третий провод и показания с рядом стоящим термистором разнятся всего на 1 градус.
     
  16. DLS74

    DLS74 Гик

    Я знаю что 3 лучше.... но на 3 он вообще отказывается работать.... видимо что-то не так с MAX31865.
     
  17. Nikolai1972

    Nikolai1972 Нуб

    приобрел точно такие же платы. подключил согласно схеме. поставил две перемычки, разрезал дорожку, как предложенно в руководстве.
    использую тот же скетч, что в заголовке данной темы. все работает, температуру сообщает верную.
    вопрос
    что то затупил, не могу переделать вывод данных с 2-х значений после запятой(23,28) на вывод значений с 1 знаком(23,3),
    а так же как получать значения с двух плат одновременно. хотя и переделал скетч, под два Max31865, но может быть кто предложит другой вариант.
    Код (C++):
    #include <Adafruit_MAX31865.h>
    #include <LiquidCrystal.h>
    LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
    // Use software SPI: CS, DI, DO, CLK
    Adafruit_MAX31865 thermo1 = Adafruit_MAX31865(10, 11, 12, 13);
    Adafruit_MAX31865 thermo2 = Adafruit_MAX31865(3, 11, 12, 13);
    // use hardware SPI, just pass in the CS pin
    //Adafruit_MAX31865 thermo = Adafruit_MAX31865(10);

    // The value of the Rref resistor. Use 430.0 for PT100 and 4300.0 for PT1000
    #define RREF      430.0
    // The 'nominal' 0-degrees-C resistance of the sensor
    // 100.0 for PT100, 1000.0 for PT1000
    #define RNOMINAL  100.0

    void setup() {
      Serial.begin(115200);
      Serial.println("Adafruit MAX31865 PT100 Sensor Test!");
      lcd.begin(16, 2);
      lcd.clear();
      thermo1.begin(MAX31865_3WIRE);  // set to 2WIRE or 4WIRE as necessary
      thermo2.begin(MAX31865_3WIRE);
    }


    void loop() {
    //TERMOPAR 1
      uint16_t rtd1 = thermo1.readRTD();

      Serial.print("RTD value_1: "); Serial.println(rtd1);
      float ratio1 = rtd1;
      ratio1 /= 32768;
      Serial.print("Ratio_1 = "); Serial.println(ratio1,8);
      Serial.print("Resistance_1 = "); Serial.println(RREF*ratio1,8);
      Serial.print("Temperature_1 = "); Serial.println(thermo1.temperature(RNOMINAL, RREF));
      lcd.setCursor(0, 0);
          lcd.print("Temp1:");
          lcd.setCursor(7, 0);
          lcd.print(thermo1.temperature(RNOMINAL, RREF));
          lcd.print("C ");
    //TERMOPAR 2
      uint16_t rtd2 = thermo2.readRTD();

      Serial.print("RTD value_2: "); Serial.println(rtd1);
      float ratio2 = rtd2;
      ratio2 /= 32768;
      Serial.print("Ratio_2 = "); Serial.println(ratio2,8);
      Serial.print("Resistance_2 = "); Serial.println(RREF*ratio2,8);
      Serial.print("Temperature_2 = "); Serial.println(thermo2.temperature(RNOMINAL, RREF));
      lcd.setCursor(0, 2);
          lcd.print("Temp2:");
          lcd.setCursor(7, 2);
          lcd.print(thermo2.temperature(RNOMINAL, RREF));
          lcd.print("C ");
      Serial.println();
      // Check and print any faults
      uint8_t fault = thermo1.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");
        }
        thermo1.clearFault();
      }
      Serial.println();
      delay(1000);
    }

    а по поводу автора данной темы, возможно вы не прорезали дорожку между 2-4.
     
    Последнее редактирование: 31 мар 2020