Вимірювання температури за допомогою ntc термистора

Оскільки у мене валялося кілька цих самих термісторів від відслужили своє китайських термометрів, то відразу подумав, чому б їх не використовувати ...
Пошуки по інтернету злегка охолодили мій запал, тому що теорії, звичайно, було багато, а ось конкретної реалізації набагато менше ...

Вимірювання температури за допомогою ntc термистора

Картинка з вікі щодо терморезистора і його характеристики.

Після наполегливих пошуків результат був досягнутий у вигляді исходника. Мені з нього потрібна була тільки формула розрахунку опору термістора і обчислення температури. Тут же були приведені коефіцієнти на конкретну модель термистора. В принципі, до моєї задачі ці коефіцієнти підійшли з прийнятною точністю.
Якщо вам відома модель термистора, то коефіцієнти потрібно підставити з даташіта або розрахувати по аппноуту з вкладення.


Підключається термистор за такою схемою:

Перевага цієї схеми в тому, що для точного вимірювання опору досить знати опір резистора, а напруга живлення стабілізувати не потрібно.
Недолік - саморозігрів. Але в моєму випадку це не критично.

Перевіряв я все це справа за таким принципом: підключив до одного микроконтроллеру датчик DS18B20 і термістор, а потім з'єднав їх через термопасту. Розбіжність при кімнатній температурі вийшло близько пів-градуса, при 60-70 - близько двох градусів. Але це не керується за допомогою терморегулятора, тобто, може бути, різниця в корпусах збільшила розбіжність.

Для особливо охочих, у вкладення додав аппноут з розрахунку коефіцієнтів Стеінхарда-Хайта для довільного термистора.

Перевага цієї схеми в тому, що для точного вимірювання опору досить знати опір резистора, а напруга живлення стабілізувати не потрібно. дивна пропозиція
якщо у тебе буде нестабільна напруга, то і на АЦП у тебе буде коливатися незалежно від температури, а саморозігрів тут ніяким боком

скільки у тебе зайняла готова прошивка з цими запитом і чому потрібно було ставити терморезистор замість цифрового?
наскільки хороший цей сонячний колектор?

дивна пропозиція В якості опорного - напруга живлення, на вході - напруга, утворене дільником, припустимо, буде один до одного = 1/2 від напруги живлення. Код отримуємо при 10-бітному АЦП == 512. Збільшиться напруга, код збільшиться чи зменшиться? дільник то той же.
скільки у тебе зайняла готова прошивка Там ще DS18B20, USART і LCD HD44780. Не пам'ятаю, але в Мегу16 влізла.
чому потрібно було ставити терморезистор замість цифрового? Просто так, погратися
наскільки хороший цей сонячний колектор? Не дуже. Бачок літрів 50 якщо не витрачати до вечора приблизно до 60 нагріє в жаркий день. Ми витрачаємо, максимум бачив 48 градусів, як правило, протягом дня близько 40 тримається.

погоджуся що стабілізувати не потрібно. однак потрібно поставити хоча б LC фільтр, тому що часи, коли проводиться вимір і і коли проводиться оцифровка - розрізняються, і якщо маємо високочастотний шум з харчування АЦП - отримаємо відповідний результат

скільки у тебе зайняла готова прошивка Подивився:
Program: 8650 bytes (52.8% Full)
(.text + .data + .bootloader)

сказати вона повинна про зразкову структурі входу з NTC- якщо нічого не говорть я не винен
1.За приводу разводкі- що простіше підвести до терміналів - одну землю або купу опор?
2. За приводу перешкод, як правило на платі контролера земля виконана більш товстими провідниками або полігонами.

зи все це не має особливого значення в аматорських Кострукцій з 1-2 входів

кладу на помехозащищенности і зручність розводки перешкодозахищеності? Допускаю, але ніхто не заважає віддалений терморезистор, підключений до плюса харчування, заекранувати від того ж плюса харчування. Або там поганий джерело живлення? Або що ви мали на увазі під «перешкодозахищеності»?
Зручність розводки? Занадто конкретне питання, щоб обговорювати його за допомогою телепатичного прозріння.

Перешкодозахищеність тут жодним боком. Не треба списувати з рахунків резистор підтяжки. Або через нього перешкода не йде? Друге: Хороший кондерчік виправить ситуацію, оскільки температура - процес тривалий ... ще можна програмне округлення. У мене теж табличний метод використаний. Робив як то програмку по постоенію таблиці в залежності від параметрів самого терморезистора і резистора підтяжки. Таблицею куди зручніше.

Робіть як подобається.

Дуже добре.
Раніше я не знав про апроксимації Штайнхарта - Харта, тепер я можу по таблиці знайти коефіцієнти і навпаки, за коефіцієнтами побудувати таблицю, а використовувати будь-який з двох підходів, який виявиться зручніше.

Колега, за відсилання на модель Стеінхарда-Хайта (Steinhart-Hart equation) Вам однозначно плюс (хоч я б використав менш ресурсомісткі методи лінеаризації типу таблиці або апроксимації). Але ось код, який Ви виклали в якості прикладу - дуже «не фонтан». Дуже дуже ... Вище вже говорили про конструкції типу

Але це тільки одна з небагатьох проблем. Там багато проблем, починаючи з декларації функції: чому double v10bit якщо v10bit - це 10ти бітове значення з АЦП. І якщо це вже дійсно 10ти бітове значення, то до чого перевірка if (v10bit == тисячі двадцять-чотири) і т. Д.

Я так розумію, Ви просто взяли за основу код з цього або докладного проекту. Але крім дуже невдалою реалізації (яку Ви взяли за основу) є ще кілька сумнівних (ИМХО) моментів (які я заміряв тільки у Вашій реалізації).

Я не зрозумів, як Ви отримали формулу

але (навіть якщо вона працює) при v10bit == 0 ми отримаємо «поділ на 0». А отримати це просто, при обриві проводу до терморезистору, R1 підтягне рівень саме до 0.

Це код майже цілком з інтернету, просто я посилання відразу не знайшов. Код дійсно взагалі не оптимізований, я просто хотів швидко отримати результат і я його отримав.
Єдине, що я змінив, це як раз

Колись давно вирішував схоже завдання (хтось в ФИДО «конкурс» влаштував).
Правда зводилася вона не стільки до вимірювання, скільки до термостатування.
Табличка була захардкожена у флеш, крок в 5 градусів (epcos дає такі таблиці до своїх NTC).
Щоб отримати точність в 1 градус я брав виміряний опір, шукав дві найближчі точки (які з кроком в 5 градусів). Якщо точно потрапив в точку, то ок, якщо немає, то визначав дельту == (опір - найближча точка.) І цю дельту примножував на тангенс (== дельта температури / дельта опору), результат додавав до найближчої температура.
У світлі того, що на attiny15 з математикою тяжко, робив хитрість - вирішував завдання «графічно», брав алгоритм Брезенхема і по парі точок шукав найбільш підходящу між ними (якщо Брезенхема малюють прямі на екрані за допомогою додавання і віднімання, то чому б не використати його і в мікроконтролері?).
Сторінка тут: Страх-жах-хардкор
Власне вихідні: zip
Звістка алгоритм перетворення - один екран асемблера.
Див. Функцію ConvertT в файлі Thermostat2.asm в zip-е.

EasyEDA: безкоштовний Хмарний CAD

Прямий ефір