Jump to content

Как правильно измерить температуру NTC термистором?


Ушик
 Share

Recommended Posts

Доброго здоровья вам, уважаемые. По сложившейся традиции лезу к вам снова с вопросами :) Вопрос довольно детский, даже странный, однако вот.

Есть у меня небольшой станочек по вытяжке филамента для ДДД-принтера из ПЭТ-полторашек. Я давже выкладывал его прошиыку как-то, если не ошибаюсь. Вот сейчас потихоньку переписываю его, причесываю, нашпиговываю всяким нужностями и вообще делаю "еще более улучшенное" - по результатам эксперимента, так сказать. Многое стало понятно, но вот уперся в одну засаду и дальше никак. Ну и пристаю теперь к умным дядькам и теткам :) 

Заморрочка с измерением температуры нагревателя с помощью NTC термистора. Купил парочку, вроде бы специально "для 3D принтеров", по виду похож на оное, реагирует на прикосновение руки и паяльника. А вот получить значение температуры - не получается. Смешно, согласен, весь инет пухнет от примеров, но... В общем, при комнатной температуре у меня или получается 190 градусов, или -60. Наверное я стал капризен, как сами-знаете-кто, но ни первое, ни второе значение меня не устраивает. 

Схема обычная, без наворотов:

Спойлер

image.png.1a8495dc2fd01de4946484cda4b9e9cb.png

Код с измерением температуры: 

Спойлер

// к какому аналоговому пину мы подключены
#define THERMISTORPIN A1
// сопротивление при 25 градусах по Цельсию
#define THERMISTORNOMINAL 112000
// temp. для номинального сопротивления (практически всегда равна 25 C)
#define TEMPERATURENOMINAL 25
// сколько показаний используем для определения среднего значения
#define NUMSAMPLES 10
// бета коэффициент термистора (обычно 3000-4000)
#define BCOEFFICIENT 3950
// сопротивление второго резистора
#define SERIESRESISTOR 5100
int samples[NUMSAMPLES];

void setup(void) {
  Serial.begin(9600);
}

void loop(void) {
  uint8_t i;
  float average;
  // сводим показания в вектор с небольшой задержкой между снятием показаний
  for (i = 0; i < NUMSAMPLES; i++) {
    samples[i] = analogRead(THERMISTORPIN);
    delay(10);
  }

  // рассчитываем среднее значение
  average = 0;
  for (i = 0; i < NUMSAMPLES; i++) {
    average += samples[i];
  }
  average /= NUMSAMPLES;
  Serial.print("Average analog reading ");
  Serial.println(average);

  // конвертируем значение в сопротивление
  average = 1023 / average - 1;
  average = SERIESRESISTOR / average;
  Serial.print("Thermistor resistance ");
  Serial.println(average);
  float steinhart;
  steinhart = average / THERMISTORNOMINAL; // (R/Ro)
  steinhart = log(steinhart); // ln(R/Ro)
  steinhart /= BCOEFFICIENT; // 1/B * ln(R/Ro)
  steinhart += 1.0 / (TEMPERATURENOMINAL + 273.15); // + (1/To)
  steinhart = 1.0 / steinhart; // инвертируем
  steinhart -= 273.15; // конвертируем в градусы по Цельсию
  Serial.print("Temperature ");
  Serial.print(steinhart);
  Serial.println(" *C");
  Serial.println(" ");  
  delay(1000);
}

Добавочное сопротивление 5100 Ом, термистор 112 килоом. Uref берется с шины питания +5В (в ардуинском скетче напрямую нчиего не указываю). Тот кусок кода, что вроде бы работает сейчас - тоже показывает явную брехню. В общем, прошу подсказки, что же я упускаю? Спасибо :) 

На RAMPS термисторы подключаются примерно так же: 

Спойлер

image.png.7e7d7b679611f9900d56c256382acf5e.png

 

Link to comment
Share on other sites

Увы, не помогло. Эту ссылочку я уже пробовал, вот буквально только что код из нее показал 179 градусов. При такой комнатной температуре вообще от нагрева ленты можно было бы отказаться :) 

Link to comment
Share on other sites

Выгодные LED-драйверы MOSO для индустриальных приложений

Компэл представляет выгодные светодиодные драйверы MOSO для промышленных решений с высоким классом защиты от внешних воздействующих факторов, хорошей устойчивостью к импульсным помехам и высокой надежностью. В ряде серий реализована возможность дистанционного контроля, кроме того, отдельные версии драйверов могут программироваться на работу в автономном режиме по заранее заданному сценарию. Рассмотрим подробнее их характеристики. 

Читать статью>>

Возможно проблема с делителем напряжения. Даже в том примере верхний резистор взят номиналом 102 кОм, а у вас всего 5,1. Посчитайте в онлайн калькуляторах насколько изменится выходное напряжение делителя, при изменении сопротивления терморезистора. У меня получились десятые доли вольта.

Link to comment
Share on other sites

ER10450 – литий-тионилхлоридная батарейка FANSO EVE Energy формата ААА
Компания FANSO EVE Energy расширила номенклатуру продукции, разработав новый химический источник тока (ХИТ) – батарейку литий-тионилхлоридной электрохимической системы (Li-SOCl2; номинальное напряжение 3,6 В) типоразмера ААА – ER10450. Батарейка имеет бобинную конструкцию (тип Energy) и предназначена для долговременной работы при малых токах.
Батарейка может применяться в приборах учета ресурсов, в различных датчиках, устройствах IoT и в других приборах и устройствах, в которых требуется компактный ХИТ соответствующей емкости.
Подробнее >>

58 минут назад, andrusha152 сказал:

Возможно проблема с делителем напряжения. Даже в том примере верхний резистор взят номиналом 102 кОм, а у вас всего 5,1. Посчитайте в онлайн калькуляторах насколько изменится выходное напряжение делителя, при изменении сопротивления терморезистора. У меня получились десятые доли вольта.

Все верно, на выходе очень малое напряжение. Однако, на схеме RAMPS, с которой я беру пример, имеет примерно такое же сопростивление (4К7). 

 

Кажется, я нашел, где собака порылась. Для проверки эксперимента подключил эту конструкцию к сборке Mega2560+RAMPS в разъем T0 (сигнал приходит на А13). Скетч влил вышеприведенный. В таком включении показания вполне себе ожидаемые, в комнате показывает +22. А на плате "Станок ревизия 2" - показывает ахинею, +180! Догадались? Ага, верно, плата ЛГБТ328. КУпил для посмотреть. Сначала с частотами "не то" было, потом не работала шина I2C, теперь вот с ADC сложности вылазят на ровном месте. Интриги, скандалы, расследования :) А наших, православных ардуин больше нету в доступности (по 1к рублей доступным не считаю).

 

Вердикт: плата на базе LGT8F328 суть лажа кетайская, не люблю ее больше :( 

Link to comment
Share on other sites

Новое семейство HRP/N3 от MEAN WELL – ИП с 350% перегрузкой для промышленных приложений

В промышленных устройствах и установках с электроприводом на двигателях постоянного тока в момент пуска требуется обеспечить повышенный ток. Для решения этой задачи MEAN WELL предлагает вместо ИП с повышенной избыточной мощностью, более оптимальное решение - источник питания с необходимой перегрузочной способностью семейства HRP/N3. 

Новое семейство, представленное в Компэл, экономичнее и расширяет уже существующее HRP/N в увеличении кратности перегрузки. Подробнее>>

18 часов назад, Ушик сказал:

Схема обычная, без наворотов:

Чересчур обычная. Ничего хорошего вы с ней не получите. Почитайте про трехпроводные схемы подключения резистивных датчиков температуры.

Link to comment
Share on other sites

Спасибо, почитаю. Согласен, выбранная схема не самая высокоточная, пусть на ней гуляет +/-10 градусов (это я так выдвигаю смелые предположения, не обоснованные). А впринтере эта схема, как ни крути, работает :) Для проверки же идеи реализации не самого ответственного узла, ИМХО, вполне достаточно. Но комнатная температура 180 градусов - это уже чересчур  :) И потом. Для моего применения такой точностии (даже +/-10 градусов) было бы более чем достаточно. Я тут на днях приложил к нагревателю датчик от мультиметра - и мягко говоря, охренел. Там, где мне адруина бодро рапортует 235 градусов - сультиметр показывает жалких 190 градусов. А я еще удивляюсь, что так натужно мотор кряхтит :) Задрал (по датчику) 260 - совсем другое дело! Но это опять же частности и детали, которые будут (надеюсь :))  учтены в v2. Похоже, что просто не хватает мощности керамического нагревателя. Нужно или добавить еще один нагреватель, или замотать в шубу - опять же, пунктик для v2.

Так что сейчас стою перед дилемой: или разодрать кряхтящий, но рабочий станок, или же городить на имеющейсся меге2560. Мега там нафиг не нужна, а станок жалко :) В общем, развлекаюсь помаленьку :) 

 

А какой способ измерять температуру, чтобы дешево и сердито, Вы можете порекомендовать?

Link to comment
Share on other sites

19 часов назад, Ушик сказал:

В общем, прошу подсказки, что же я упускаю?

Изучите вот это https://aterlux.ru/article/ntcresistor , затем вбейте параметры своего терморезистора и возьмите код, который сгенерится.

 

1 час назад, musa56 сказал:

Ничего хорошего вы с ней не получите

Это еще почему? А у меня работает и не врет.

 

1 час назад, musa56 сказал:

трехпроводные схемы подключения резистивных датчиков температуры

При малой длине проводов это неактуально.

 

17 часов назад, Ушик сказал:

плата на базе LGT8F328 суть лажа кетайская

Или руки кривые. 100% если программить ее по даташиту, а не пихать ардухрень, то работать она будет отлично.

 

37 минут назад, Ушик сказал:

Там, где мне адруина бодро рапортует 235 градусов - сультиметр показывает жалких 190 градусов.

Сравнивать температуры при прикладывании термопар к больным местам - бессмысленно. При таких измерениях разница в 30-40 градусов вполне нормальное явление.

 

39 минут назад, Ушик сказал:

Нужно или добавить еще один нагреватель, или замотать в шубу - опять же, пунктик для v2.

А что мешает взять грелку от того же 3D принтера?

 

39 минут назад, Ушик сказал:

способ измерять температуру, чтобы дешево и сердито,

Взять датчик pt100 или термопару.

Link to comment
Share on other sites

1 час назад, BARS_ сказал:

При малой длине проводов это неактуально.

Актуально при любой. Во первых используются микросхема прецезионный источник тока а непонятно какой источник напряжения. Потом компенсируется сопротивление самого резистора. И можно просто выбрать диапазон измерения. По pt100 поддерживаю. Работал с ними.

Link to comment
Share on other sites

8 минут назад, musa56 сказал:

Во первых используются микросхема прецезионный источник тока а непонятно какой источник напряжения. Потом компенсируется сопротивление самого резистора.

Для точности +/- градус достаточно простого стабилизатора и двух проводов. А если используется тот же STM32 (или любой другой МК, который может определить какое напряжение ему подано на Ref), то даже с паршивым питанием точность можно получить не хуже, чем с ИОН.

Edited by BARS_
Link to comment
Share on other sites

Руки кривые, спору нет. И заточены не под эти штуки. И торчат под неправильным углом. Это исторический факт и тут ничего уже не поделать. А душа-то просит, хочет прекрасного, да еще и как-нибудь побесплатней :) 

Немного не понял фразу "Сравнивать температуры при прикладывании термопар к больным местам - бессмысленно" У меня нагреватель ный блок - кусок алюминия, самолично выплавленного из пивных банок и с помощью какой-то матери обточенный напильником. Та еще была эпопея, я вам скажу :) Это сейчас у меня уже есть стандартный принтеровский хотэнд, а когда занялся станочком - такого добра у меня еще не было в наличии. Однако, что это меняет? Датчик в болванке находится в небольшом углублении и замазан красным термостойким автогерметиком, чтобы не выпадал - сверлить отверстие под болтик фиксации датчика оказалось выше моих сил :) Датчик мультиметра я примерно туда же прикладывал и прижимал тряпкой. Для того, собственно, переделкой и занялся, чтобы исправить выявленные недочеты :) 

 

На счет пихания ардухрени. Вопрос, на самом деле, не такой однозначный. Пихать в процессор что-то, что заточено под него - это правильно, наверное. Только я не владею специальными средствами для разработки под этот процессор, который, по заявлениям, полностью аналогичен оригинальному процессору и даже еще лучше. По заявлениям продавцов, это важно. Так-то да, полистал немного гуляющий в сети перевод даташита на проц - ой вкусно пишут! 

 

Про датчик pt100. Наверное, хороший датчик. Но он бессовестно дорого стоит или приедет в конце июня. Подумаю, может быть и прикуплю для "v3" :) 

 

Спасибо за отклики :) 

 

 

Link to comment
Share on other sites

14 часов назад, Ушик сказал:

Датчик мультиметра я примерно туда же прикладывал и прижимал тряпкой.

Примерно, да не туда же. Измерения проводились на поверхности, плюс с паршивым тепловым контактом. Так что тут никак нельзя говорить о правильности измерений. А терморезистор надо было еще и термопастой обмазать.

 

14 часов назад, Ушик сказал:

Пихать в процессор что-то, что заточено под него - это правильно, наверное.

Вся проблема в том, что ардуйня не заточена под процессоры, она заточена под школьников, чтобы они, не зная программирования, могли мигать диодами.

 

14 часов назад, Ушик сказал:

полностью аналогичен оригинальному процессору и даже еще лучше

Так полностью аналогичен или лучше?

 

14 часов назад, Ушик сказал:

ой вкусно пишут! 

Чтобы было вкусно надо писать без использования ардуйни.

 

14 часов назад, Ушик сказал:

бессовестно дорого стоит или приедет в конце июня

На алике можно найти с доставкой из России и за недорого.

Link to comment
Share on other sites

4 часа назад, BARS_ сказал:

она заточена под школьников,

Даже и в этом случае она может многое только ей нужно правильно пользоваться. Вы пытаетесь решить задачу тупо в лоб. Если чуть усложнить схему то может получиться вполне красиво и не сильно ударит по бюджету. Например поставить операционик который приведет напряжение схемы к уровню удобному Ардуинке

Link to comment
Share on other sites

13 минут назад, musa56 сказал:

Например поставить операционик который приведет напряжение схемы к уровню удобному Ардуинке

Ну вот уже какие-то танцы с бубном нужны. К той же STM32  я цепляю NTC/PTC по схеме автора и все прекрасно работает.

 

14 минут назад, musa56 сказал:

может многое

Ну да. Глючить, виснуть, медленно работать xD

Link to comment
Share on other sites

Уважаемые, не спорьте, оставьте ссаные тапки для тех, кому это необходимо :) Танцы с бубнами нужны всегда, таковы суровые законы этого несовершенного мира. О недооцененности и порочности ардуины уже набрызгано немало мегабайт слюней на форумах. Лично я придерживаюсь золотой середины - любая платформа это инструмент, которым надо уметь пользоваться. Не важно, что это: пик, авр, атмега, стм или _______________ (вписать нужное). Обычно, когда собираются разработать хорошее устройство, под него выбирают подходящие мозги. Каковы критерии выбора - это уже другой вопрос. Когда я городил свою адскую машинку, я исходил из тех скудных и разномастных запасов, которые были в наличии на тот момент. И скажу прямо - были задействованы не самые идельные варианты. По причине вышеупомянутого наличия, по моей некомпетенции, отсутствию каких либо компонент или тупо по незнанию, что "так можно было". Станочек стоит в гараже, тарахтит целыми днями, мыши уже в ужасе свалили к соседям. Дополнительно выяснилось, что запасы мала-мала поюзанных бутылок в гараже совсем не безграничные, скоро пойду по помойкам побираться 

Когда появился некоторый опыт использования этого станочка, мне захотелось его модернизировать: добавить автостоп, спайку кусков, переделать редуктор, вентилятор обдува поставить, может быть что-то еще придумаю по ходу пъесы. Порылся в коробках и увидел, что микроконтроллеров уже почти что и нет в запасниках. Поэтому и начал перебирать варианты. Есть эта ЛГБТ платка (уж простите, но такое название само просится), а с ней вон какие засады. Есть несколько пиков, которые невозможно программировать. Есть даже кучка спектрумов, но их потрошить низя :) 

----------------------------------------------------------------------------------------------------------------------------------------------

 

Уважаемый Барс, я так понял, Вы имели с LGT8F328  непосредственный контакт? Можете поделиться, какой софт/железо использовали? Если это не тайна импортозамещения, конечно :) 

2 часа назад, musa56 сказал:

Например поставить операционик который приведет напряжение схемы к уровню удобному Ардуинке

Если я верно понял тот перевод даташита, что гуляет в сети, то у LGT8F328 есть встроенный операционный усилитель, даже с несколькими коэффициентами усиления. У ATMega16, кстати, тоже что-то подобное есть в одном из исполнений. Осталось научиться, как это использовать :) 

Link to comment
Share on other sites

3 часа назад, Ушик сказал:

Осталось научиться, как это использовать

В идеале использовать трехполюсную схему включения. Ну а так. У терморезистора есть график или таблица зависимости сопротивления от температуры. Если подать напряжение на него через резистор то получится делитель ток через который на термодатчике создаст определенное напряжение. Меняется температура, меняется сопротивление делителя и ток через него. Соответственно меняется и напряжение на нем. Так строится кривая зависимости напряжения на терморезисторе от температуры. При выборе номинала резистора через который подается питание на терморезистор нужно учитывать что ток протекающий через цепь неизбежно будет нагревать терморезистор и менять его сопротивление. Тоесть ток нужен такой чтобы резистор минимально нагревался. Но если ток будет слишком маленький то напряжение на терморезисторе тоже будет малеьким и тогда мерять его будет сложнее. Тоесть должен быть определенный компромис. Так что все элементарно считается по закону Ома. Добавив смешение на вход операционника можно попытаться убрать лишнее напряжение. Добавив усиление увеличим напряжение на входе АЦП.

Скачайте себе МИКРОКАП. В сети есть и книго по нему. Решит наглядно многие ваши проблемы

Link to comment
Share on other sites

Спасибо, уважаемый, Вы хорошо описали работу с терморезистором. Лакончино, доходчиво, все верно. Правда, есть один небольшой нюанс: говоря "Осталось научиться, как это использовать", я имел в виду встроенные операционные усилители микроконтроллеров - с этим узлом у меня как-то исторически не получается :) Наверное, просто мало пытался. Впрочем, у меня много чего не получается, тут не поспоришь :) 

Микрокап, говорите... Ну, не знаю, не знаю... Как-то я предвзято отношусь к симуляторам электроники: у них вечно что-то не так, то нет нужных элементов, то не умеет чего-то, то интерфейс идиотский... В общем, вредничаю :) Попробую его, вдруг случится чудо :) 

А, стоп. Не буду пробовать. Есть он у меня. Так ведь фирма, что его тащила, уж лет 10 как закрылась. Они даже выложили эту софтинку в свободный доступ. Для "посмотреть базовые кирпичики" вполне неплох, согласен. Жаль, что не поддерживает  никаких микроконтроллеров, это было бы весьма удобно. Тот же протеус, в частности, имеет замечательную фишку. Если нужен какой-то узел (назовем это так), но его нет в библиотеках, то пишешь на его эмулятор на той же ардуине. Затем подключаешь кекс к этому элементу и задираешь частоту виртуального микроконтроллера до величины, которую позволяет совесть. В итоге получаем универсальный механизм добавлять свои функциональные блоки без создания моделей :) Ему бы еще HDL какой-либо - вообще в виртуальный космос улететь можно было бы :) 

 

Link to comment
Share on other sites

10 часов назад, Ушик сказал:

Вы хорошо описали работу с терморезистором.

Ну это чисто теория. Чтобы все это реализовать нужны какие то знания и опыт. В первую очередь чтобы получить более менее линейную характеристику изменения сопротивления от температуры нужно запитывать терморезистор от прецезионного источника тока. При запитки через резистор получается совсем не линейная зависимость которую потом процессором придется апроксимировать чтобы получить правильные значения . Всякие смещения тоже нужно правильно делать. Про встроенные в микроконтроллер операционики что то не слышал. Ставьте обычные, но лучше прецезионные. Стоят они копейки Микрокап да уже давно не поддерживается. Но это не страшно. Он до сих пор востребован так как базовые принципа всегда актуальны. Важный плюс у ноего обширная собственная библиотека плюс в нете можно найти дополнительные.

Вот пример грамотной реализации вашей задачи. Компоненты вполне доступны и цены вполне гуманные. Плюс в Микрокапе есть доступные модели. Здесь можно компенсировать все лишнее и усилить до нужного. На выходе получите линейное изменение напряжения от температуры в нужном диапазоне. Это сильно облегчит задачу микроконтроллеру

 

ref200_1.pdf

Edited by musa56
Link to comment
Share on other sites

Пересмотрел даташит на ATMega16, много думал. Действительно нет операционного усилителя. Видимо, я все эти годы за ОУ принимал "2 Differential Channels with Programmable Gain at 1x, 10x, or 200x" - так написано на первой странице рекламного листка :D:blush: Не удивительно, что не удавалось включить режим ОУ там, где его нет :rtfm: Видимо, эти "программируемое зерно" я уперто воспринимал как усиление входного сигнала в х раз :) Ну чтож, нету и ладно, не очень-то и хотелось, у меня есть еще запасец 140УД7. Нас так просто не свернуть с верной дороги, товарищь :) 

 

Поиграюсь с ОУ в симуляторе, авось что-то да получится :) Спасибо :) 

Link to comment
Share on other sites

  • 3 weeks later...

Со всём почтением, а случаем у Вас терморезисторы током зондирующим не греются? 

Вполне мб весьма забавные всякие характеристики температура-сопротивление. Вплоть до перегибов и изменения знака. 

Как бы Вы на это не нарвались. 

Попробуйте уменьшить его на порядок где-нить/просто поиграться. Или резко увеличить теплоёмкость/охлаждаемую площадь резисторов. 

ЗЫ здесь посмотрите типичный пример

http://www.155la3.ru/tsh2.htm

Правда это СВЧ термистор, но характеристика оч хорошо иллюстрирует. 

:)

Edited by bravissimo
Link to comment
Share on other sites

Я Вас понял, уважаемый bravissimo. Может быть наш NTC и разогревается проходящим током. Рылся недавно в этом приборе и обнаружил удивительную штуку: оказывается сопротивление термистора при комнатной температуре составляет 10К, а вовсе не 100К, как я был уверен. И резистор во втором плече делителя тоже исеет эти самые 10К. Плюс имеется мелкий конденсатор. Конденсатор, скорее всего, прилеплен параллельно NTC - куда же еще его цеплять? 

Так вот. Если проходящий ток будет иметь величину I=U/R => 5/20000=0.00025А, то это слишком мало, чтобы разогреть такую болванку. 

В целом я уже подзабил на этот закидон. Точнее, оставил как есть, все равно следующая версия ПО не за горами. Сейчас пытаюсь поженить такие непоженибельные вещи как Arduino и ATMega128L. Мы живем в перманентно непростые времена, а тут у меня целый проц валяется без дела. Как-то не комильфо это :)  Ну а поскольку ардуины в принципе не понимают ничего, кроме узкого круга поддерживаемых процессоров, то приходится или учить мат. часть, или выяживаться. Второе, знате ли, завсегда как-то проще выходит ;)  Ну или использовать какой-то другой инструментарий, кроме пресловутой ардуины. Честно говоря, уже поуши нажрался ею - то одно, то другое всегда как-то не так. Однако халява, простота и привычка - вот наши три кита.

 

В общем, развлекаюсь помаленьку :) Спасибо за ссылочку, с удовльствием пороюсь ;) 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...