Измерение температуры с max31865 и pt100
- Войдите на сайт для отправки комментариев
Втр, 08/03/2016 - 22:19
Доброго времени суток.
Приобрел плату max31865 и RTD pt100.
При измерении температур холодной и горячей воды, разница по времени между точным измерением около 7 секунд. Примерно такое же время мы получим при измерении температуры датчиком ds18b20, только стоит он в 10 раз дешевле, чем max31865.
В чем же может быть причина, что такая высокая продолжительность времени измерения температуры? В чем смысл дорогостоющей платы, если она измеряет температуру с такой же скоростью, что и обычный ds18b20? Может, причина в некачественном RTD pt100?
Скетч можно глянуть?
Даташит , сразу в начале "21ms (max) Conversion Time" .Или я ошибаюсь?
DS18B20 - до 125С . а PT100 - диапазон намного больше.
Скетч можно глянуть?
Даташит , сразу в начале "21ms (max) Conversion Time" .Или я ошибаюсь?
DS18B20 - до 125С . а PT100 - диапазон намного больше.
Так в этом то и дело, в даташите одно - по факту другое.
Очень надеюсь что проблема в дешевой гильзе, тоесть во всем pt100 (170 рублей на алиэкспрессе: http://ru.aliexpress.com/item/Three-wire-precision-platinum-resistance-temperature-probe-pt100-4-30-500-thermocouple-Free-Shipping/2039115279.html?detailNewVersion=1)
Диапазон мне не так важен, за пределы 5 - 100 * C я не выйду.
/* BEFORE DOWNLOAD SKETCH TO BOARD PLEASE FILL-OUT CONFIGURATION DEFINITIONS BELOW!!! * MAX31865 RTD to digital converter sample code, v1.01 * contact: mendresz at gmail dot com */ // CONFIGURATION #define CPU "AVR" // CPU="AVR" for UNO, NANO, MEGA boards, CPU="DUE" for Arduino Due #define Rref 400 // Rfef = 400 if PT100 used, Rref = 4000 if PT1000 used #define WIRE 3 // PT100/1000 has 2 or 3 or 4 wire connection //#define DEBUG // if defined, all register values printed out after every reading // END OF CONFIGURATION #define CS 10 #include <SPI.h> void configureMAX31865(){ digitalWrite(CS, LOW); SPI.transfer(0x80); if (WIRE==2 || WIRE==4) SPI.transfer(0xC2); if (WIRE==3) SPI.transfer(0xD2); digitalWrite(CS, HIGH); delay(50); } double CallendarVanDusen(double R){ double a = 3.9083E-03; double b = -5.7750E-07; signed long R0=Rref/4; // double t; return (-R0*a+sqrt(R0*R0*a*a-4*R0*b*(R0-R)))/(2*R0*b); } void printRegs(unsigned char *reg){ Serial.println("Register values (all values in HEX format):"); Serial.print("Configuration: "); Serial.println(reg[0], HEX); Serial.print("RTD MSBs: "); Serial.println(reg[1], HEX); Serial.print("RTD LSBs: "); Serial.println(reg[2], HEX); Serial.print("High Fault Treshold MSB: "); Serial.println(reg[3], HEX); Serial.print("High Fault Treshold LSB: "); Serial.println(reg[4], HEX); Serial.print("Low Fault Treshold MSB: "); Serial.println(reg[5]), HEX; Serial.print("Low Fault Treshold LSB: "); Serial.println(reg[6]), HEX; Serial.print("Fault Status: "); Serial.println(reg[7], HEX); Serial.println(); } void setup(){ Serial.begin(9600); SPI.begin(); if (CPU=="AVR") SPI.setClockDivider(SPI_CLOCK_DIV128); if (CPU=="DUE") SPI.setClockDivider(200); SPI.setDataMode(SPI_MODE3); pinMode(CS, OUTPUT); digitalWrite(CS, HIGH); delay(100); configureMAX31865(); } void loop(){ unsigned char reg[8]; // array for all the 8 registers unsigned int i; unsigned int RTDdata; // 16 bit value of RTD MSB & RTD LSB, reg[1] & reg[2] unsigned int ADCcode; // 15 bit value of ADC, RTDdata >> 1, 0th bit of RTDdata is RTD connection fault detection bit double R; // actual resistance of PT100(0) sensor digitalWrite(CS, LOW); delay(10); SPI.transfer(0); // start reading from address=0 for (i=0; i<8; i++) reg[i]=SPI.transfer(0); // read all the 8 registers delay(10); digitalWrite(CS, HIGH); RTDdata = reg[1] << 8 | reg[2]; // Serial.print("RTD data: 0x"); // Serial.println(RTDdata,HEX); if (RTDdata & 1) { if (Rref==400) Serial.println("PT100 sensor connenction fault!"); if (Rref==4000) Serial.println("PT1000 sensor connenction fault!"); Serial.println(); configureMAX31865(); } else{ // Serial.print("ADC code (decimal): "); ADCcode=RTDdata>>1; // Serial.println(ADCcode,DEC); //Serial.print("Resistance: "); R=(double)ADCcode*Rref/32768; //Serial.print(R); //Serial.println(" Ohms"); // Serial.print("Temperature: "); Serial.print(CallendarVanDusen(R)); //Serial.println(" deg. C"); Serial.println(); } #ifdef DEBUG printRegs(reg); #endif delay(100); }лишние выводы сообщений убрал (//), чтоб ничего не отвлекало от цифр температуры
Исключите гильзу , подключив резистор на 100 Ом..
Попробуйте пример из библиотеки на этой странице
правда там используется делей в 1,5 сек в цикле.
Исключите гильзу , подключив резистор на 100 Ом..
Попробуйте пример из библиотеки на этой странице
правда там используется делей в 1,5 сек в цикле.
Хорошо, другой код я конечно попробую.
Однако, что мне даст подключенный резистор на 100 Ом? Он же не подстроечный, у меня будет одна постоянная температура. А мне не столько важна точность (1-2 градуса погрешности не критичны), сколько скорость измерения температуры.
Честно говоря, я сильно сомневаюсь что код от PWF как то исправит ситуацию. Завтра протестирую, по результатам отпишусь. Спасибо.
1. 130 Ом
2. 510 Ом параллельно к нему через кнопку.
Нажимаем кнопку- ваша темперамура "мгновенно" скакнула с +80 на +10, и балуйтесь, балуйтесь, балуйтесь....
1. 130 Ом
2. 510 Ом параллельно к нему через кнопку.
Нажимаем кнопку- ваша темперамура "мгновенно" скакнула с +80 на +10, и балуйтесь, балуйтесь, балуйтесь....
Это нужно чтоб исключить фактор нагревания гильзы и быть уверенным в скорости измерении сопротивления микросхемой?
Приподыму тему с теоретическим вопросом (все картинки после текста кликабельны).
Вот есть в интернетах два типа модуля MAX31865 - от Adafruit и широко известного бренда Noname. Отличия вижу, как минимум, в Ref-резисторе. На Adafruit - 4300 (430 Ом с допуском в 0.1% (?)), на Noname - 431 (430 Ом с допуском в ХЗ%).
Вопрос - Noname модуль с таким рефренсом будет измерять лучше, чем схема на LM324, приведенная в этом посте форума или покупка его - деньги на ветер?
Вообще-то это две разные вещи. Ковертер( с 15-бит) и ОУ к Ардуино с 10-бит АЦП. В теории на МАХ31865 точность и стабильность показаний должна быть лучше. Но цена первого на порядок выше второго варианта. Да и время доставки.Но все зависит от того какая точность вам нужна. Да и схему на ЛМ324 нужно доработать немного.
Да я понимаю, что это разные вещи. Мне интересно - будет ли конвертор с фиговым резистором работать лучше, чем схема на рассыпухе. Будет тот же самый плюс-минус лапоть или всё же получше.
Да я понимаю, что это разные вещи. Мне интересно - будет ли конвертор с фиговым резистором работать лучше, чем схема на рассыпухе. Будет тот же самый плюс-минус лапоть или всё же получше.
Мне кажется в любом случае будет лучше. А резистор Vref можно заменить на 1процентный.Но лично я делаю на лм324.
а реально мерять до -100С ??
max31865 и pt100