Меню

Блок для измерения температуры термистором



Измерение температуры при помощи NTC термистора и микроконтроллера AVR

Автор: Погребняк Дмитрий

Click here to read this article in English.

Одним из вариантов для измерения температуры является использование термисторов. Среди преимуществ термистора можно выделить большое значение температурного коэффициента, то есть значительное изменение сопротивления в зависимости от температуры (порядка 2-10% на Кельвин). Термисторы бывают двух типов: с положительным температурным коэффициентом (PTC, Positive Temperature Coefficient), то есть увеличивающие своё сопротивление с увеличением температуры, и с отрицательным (NTC, Negative Temperature Coefficient) – уменьшающие сопротивление с возрастанием температуры. Речь в данной статье пойдёт про вторые, и про их использования для измерения температуры в сочетании с микроконтроллерами AVR

Характеристика NTC термистора

Термисторы характеризуются рядом параметров, такими, как максимальный допустимый ток, точность, сопротивление при определённой температуре (как правило, при 25°С). Одним из параметров, характеризующим степень изменения сопротивления в зависимости от температуры является коэффициент температурной чувствительности, обозначаемый B. Этот коэффициент рассчитывается на основе значений сопротивления при двух конкретных значениях температур. Во многих случаях этими температурами выбираются 25°С и 100°С. Обычно температуры, использованные при вычислении коэффициента указываются после буквы, например B25/100. Коэффициент B измеряется в Кельвинах и вычисляется по следующей формуле:

где R1 и R2 — значения сопротивлений при температурах соответственно T1 и T2, выраженных в Кельвинах.

Из этой формулы следуют и обратные:

Вычисление температуры

Термисторы обладают высокой степенью нелинейности параметров, и термисторы различных моделей, даже при одинаковых значениях параметра B25/100 могут по разному изменять сопротивление в зависимости от температуры. Поэтому формула [3] может лишь приблизительно оценить температуру. Кроме того, такая формула подразумевает сложные вычисления, которые требуют много процессорного времени, что часто является неприемлемым. Более простым и эффективным подходом является хранение таблицы, в которую заносятся предварительно рассчитанные значения, возвращаемые АЦП при тех, или иных температурах. Для экономии памяти можно хранить значения только для некоторых точек, искать их в таблице двоичным поиском, а промежуточные значения получать линейной интерполяцией. Для измерений температуры окружающего воздуха с точностью до 0.3°C, достаточно хранить значения с шагом 5°C. Если значения лежат в пределах 16 бит (и занимают 2 байта), то для хранения такой таблицы для диапазона измеряемых температур от -30 до 70 градусов потребуется всего 40 байт. Точность измерений можно повысить, уменьшив шаг таблицы. Так при шаге 2°C можно добиться точности до 0.1°C на широком диапазоне измерений.

Производители термисторов, как правило, приводят таблицы показывающие изменение сопротивления в зависимости от температур. Значения в этих таблицах также привязаны к сетке температур с некоторым шагом (например, 5°C). Используя формулы [1] и [2] можно с достаточной точностью интерполировать табличные значения.

Схемы подключения


Подключение термистора

Схема A
Схема B
Схема C
Схема D

Наиболее простым вариантом подключения является схема A. При выборе номинала резистора RA примерно равным сопротивлению термистора в районе измеряемых температур, значения U будут изменяться ближе к линейным, что обеспечит большую точность при интерполяции табличных значений.

Выбирая номиналы RA и термистора, следует учесть, что протекающий через термистор ток вызывает его нагрев и, как следствие, искажение показаний. Желательно чтобы мощность на термисторе не превышала 1 мВт. А значит, при напряжении U = 5В, RA должен быть как минимум, 10 килоОм. Сопротивление термистора в измеряемом диапазоне должно иметь примерно тот же порядок.

Схема B призвана ограничить мощность, рассеиваемую на термисторе.

Схемы C и D являются обратными к A и B. Их имеет смысл использовать, если требуется измерять низкие температуры, когда референтное значение АЦП (Uref) ниже U.

Читайте также:  Расстояние измерения магнитной индукции

Подключение к АЦП микроконтроллера ATmega

Подключение АЦП микроконтроллеров ATmega

У контроллеров ATmega для снижения шумов используется отдельная линия питания для модуля АЦП. Инструкция рекомендует подключать эти входы через фильтр: индуктивность L = 10мкГн, и конденсатор C2 = 0,1мкФ.

Микроконтроллер может использовать либо внешнее референтное напряжение для АЦП, либо внутреннее (2,56В или 1,1В), либо, в качестве такового, использовать напряжение питания АЦП: AVCC. При использовании внешнего напряжения, оно должно быть подано на вход AREF. При использовании AVCC, или внутреннего напряжения 2,56В, между этим входом и землёй должен быть размещён конденсатор (на схеме C1). Инструкция не даёт чёткого указания для выбора ёмкости конденсатора, рекомендую использовать керамический конденсатор 0,1мкФ и более.

Для снижения измеряемых шумов, рекомендую термистор также подключать к фильтрованному напряжению параллельно AVCC, и настроить на использование этого напряжения в качестве референтного.

Дополнительно, для подавления шумов возникающих на линиях, можно установить конденсатор C3 в диапазоне 1-100нФ.

Следует учесть, что помимо модуля АЦП, вход AVCC запитывает также некоторые из портов ввода/вывода (как правило, на тех же выводах, что используются для АЦП). Использование этих портов на вывод и подключение к ним нагрузки может создать дополнительные шумы в работе АЦП.

Чтобы нивелировать шумы, возникающие на АЦП, рекомендую провести замеры несколько раз подряд и просуммировать полученные значения. В микроконтроллерах ATmega АЦП – 10-разрядный. Просуммировав результаты 64 подряд идущих измерений, результат остаётся в пределах 16-битного беззнакового целого, что не потребует дополнительной памяти для сохранения таблицы значений. При большем числе измерений также можно оставаться в пределах 16 бит, соответствующим образом сдвигая или деля результат.

Расчёт таблицы значений

Вашему вниманию предлагаю скрипт для онлайн расчёта таблицы значений АЦП.

Расчёт значений ведётся либо по двум значениям температур и сопротивлений, либо вводится списком, либо используется одна из предзагруженных R/T характеристик. В настоящее время загружены R/T характеристики термисторов фирмы Siemens/EPCOS. Выберите подходящую из списка.

Загруженные характеристики даны с шагом 5°С, при выборе меньшего шага сетки, значения получаются путём интерполяции по формулам [1] и [2] двух ближайших значений из таблицы.

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

Внимание! Так как параметры термисторов в значительной мере нелинейны, расчёт по двум значениям сопротивлений, либо по значению и коэффициенту будет очень приблизительным. Вычисленное значение температуры при измерении высоких, или низких температур в таком случае может значительно (на десятки градусов) отличаться от актуальной.

Чтобы узнать подходящий тип R/T характеристики для вашего термистора, скачайте документацию, данную заводом изготовителем.

Сводная таблица для некоторых моделей термисторов Siemens/Epcos приведена ниже. Нажмите на код R/T характеристики, чтобы подгрузить параметры в форму ниже:

Код Сопротивление при 25°С, кОм R/T характеристика B25/100, К
B57891S , выводной 4,5мм (datasheet, pdf)
B57891S0222+008 2,2 1008 3560
B57891S0502+008 5 2003 3980
B57891S0103+008 10 4901 3950
B57891S0203+008 20 2904 4300
B57891S0104+008 100 4003 4450
B57891M , выводной 3,5мм (datasheet, pdf)
B57891M0102+000 1 1009 3930
B57891M0152+000 1,5 1008 3560
B57891M0222+000 2,2 1013 3900
B57891M0332+000 3,3 2003 3980
B57891M0472+000 4,7 2003 3980
B57891M0682+000 6,8 2003 3980
B57891M0103+000 10 4901 3950
B57891M0153+000 15 2004 4100
B57891M0223+000 22 2904 4300
B57891M0333+000 33 2904 4300
B57891M0473+000 47 4012 4355
B57891M0683+000 68 4012 4355
B57891M0104+000 100 4003 4450
B57891M0154+000 150 2005 4600
B57891M0224+000 220 2005 4600
B57891M0334+000 330 2007 4830
B57891M0474+000 470 2006 5000
B57164K , выводной 5,5мм (datasheet, pdf)
B57164K0471+000 0,47 1306 3450
B57164K0681+000 0,68 1307 3560
B57164K0102+000 1 1011 3730
B57164K0152+000 1,5 1013 3900
B57164K0222+000 2,2 1013 3900
B57164K0332+000 3,3 4001 3950
B57164K0472+000 4,7 4001 3950
B57164K0682+000 6,8 2903 4200
B57164K0103+000 10 2904 4300
B57164K0153+000 15 1014 4250
B57164K0223+000 22 1012 4300
B57164K0333+000 33 1012 4300
B57164K0473+000 47 4003 4450
B57164K0683+000 68 2005 4600
B57164K0104+000 100 2005 4600
B57164K0154+000 150 2005 4600
B57164K0224+000 220 2007 4830
B57164K0334+000 330 2006 5000
B57164K0474+000 470 2006 5000
B57540G , выводной, стеклянный «капля» 0,8мм (datasheet, pdf)
B57540G0502+000, +002 5 8402 3497
B57540G1103+000, +002 10 8307 3492
B57540G1103+005, +007 10 7003 3625
B57540G0203+000, +002 20 8415 4006
B57540G1303+005, +007 30 7002 3988
B57540G0503+000, +002 50 8403 4006
B57540G1104+000, +002 100 8304 4092
B57540G0234+000, +002 230 8405 4264
B57540G0145+000, +002 1400 8406 4581
B57551G , выводной, стеклянный «капля» 1,8мм (datasheet, pdf)
B57551G0202+000, +002 2 8401 3436
B57551G1103+000, +002 10 8307 3492
B57551G1103+005, +007 10 7003 3625
B57551G1303+005, +007 30 7002 3988
B57551G1104+000, +002 100 8304 4092
B57621С5 , SMD 3,2х1,6мм (datasheet, pdf)
B57621C5102+062 1,0 3206 3450
B57621C5472+062 4,7 1309 3520
B57621C5103+062 10 1010 3530
B57621C5153+062 15 1008 3560
B57621С0 , SMD 3,2х1,6мм (datasheet, pdf)
B57621C0222+062 2,2 1308 3060
B57621C0332+062 3,3 1309 3520
B57621C0472+062 4,7 1309 3520
B57621C0103+062 10 1010 3530
B57621C0153+062 15 1008 3560
B57621C0223+062 22 1008 3560
B57621C0333+062 33 2003 3980
B57621C0473+062 47 2001 3920
B57621C0683+062 68 2001 3920
B57621C0104+062 100 4901 3950
B57621C0154+162 150 2903 4200
B57621C0224+062 220 2903 4200
B57621C0334+062 330 1014 4250
B57621C0474+062 470 1014 4250
B57703M , выводной 10мм, с «ухом» 8,5×3,7мм (datasheet, pdf)
B57703M0502G040 5 8016 3988
B57703M0103G040 10 8016 3988
B57703M0303G040 30 8018 3964
Читайте также:  Чем измерить уровень заряда батареи

Форма для он-лайн расчёта значений АЦП

Данные для таблицы
T1 °С
R1, cопротивление при T1 килоОм
T2 °С
R2, сопротивление при T2 килоОм
Данные для таблицы:R/R1
начиная с T2, с выбранным шагом сетки.
Разделитель значений — запятая.
BT1/T2 K
Схема включения термистора
Номинал резистора RA килоОм
Номинал резистора RB килоОм
Разрядность АЦП
Множитель результата АЦП
U, напряжение на входе В
Uref, референтное напряжение АЦП В
Рассчитать с °С по °С
Шаг сетки
Построить таблицу
T,°С R/R1 R,килоОм U,В I,мкА P,мВт U/Uref ADC E,°С

Пояснения к таблице:

жирным выделены значения R/R1 и R, полученные на основе табличных. Обычным шрифтом обозначены значения полученные интерполяцией или экстраполяцией по формулам.

ADC – округлённое значение на выходе АЦП, с учётом множителя. Значения, выходящие за предел измерений АЦП, не отображаются.

I,мкА — ток в цепи.

P,мВт — мощность, рассеиваемая на термисторе.

E – эвристическая оценка возможной погрешности вычисленной температуры, вызванной использованием линейной интерполяции табличных значений, и ограниченной точностью АЦП. Позволяет выбрать параметры и схему включения таким образом, чтобы в области измеряемых значений погрешность была минимальна. Эта оценка не учитывает возможный шум, возникающий на АЦП, а также погрешность, вызванную нагревом термистора из-за протекающих токов. Погрешность можно уменьшить выбрав меньший шаг таблицы, используя АЦП большей разрядности, или путём усреднения большего числа измерений, а также подбором номиналов сопротивлений в цепи.

Код, соответствующий таблице

Пример использования

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

Описание работы с индикатором смотрите в другой моей статье.

Источник

Измерение температуры с помощью NTC термистора

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

Поскольку у меня валялось несколько этих самых термисторов от отслуживших свое китайских термометров, то сразу подумал, почему бы их не использовать…
Поиски по интернету слегка охладили мой пыл, потому что теории, конечно, было много, а вот конкретной реализации гораздо меньше…


Картинка из вики насчет терморезистора и его характеристики.

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

Подключается термистор по такой схеме:

Преимущество этой схемы в том, что для точного измерения сопротивления достаточно знать сопротивление резистора, а напряжение питания стабилизировать не нужно.
Недостаток — саморазогрев. Но в моем случае это не критично.

Проверял я все это дело по такому принципу: подключил к одному микроконтроллеру датчик DS18B20 и термистор, а потом соединил их через термопасту. Расхождение при комнатной температуре получилось около пол-градуса, при 60-70 — около двух градусов. Но это не термостатировано, то есть, может быть, разница в корпусах увеличила расхождение.

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

  • NTC,
  • термистор,
  • измерение,
  • температура,
  • датчик
  • +2
  • 11 августа 2013, 21:57
  • antonluba
  • 1

Комментарии ( 47 )

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

странное предложение
если у тебя будет нестабильное напряжение, то и на ацп у тебя будет колебаться независимо от температуры, а саморазогрев тут никаким боком

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

сколько у тебя заняла готовая прошивка

почему нужно было ставить терморезистор вместо цифрового?

насколько хорош этот солнечный коллектор?

сколько у тебя заняла готовая прошивка

Посмотрел:
Program: 8650 bytes (52.8% Full)
(.text + .data + .bootloader)

Data: 159 bytes (15.5% Full)
(.data + .bss + .noinit)

не проще было сразу взять какой-нибудь линейный датчик?
у термисторов еще и разброс огромный, придется калибровать каждый.

не проще было сразу взять какой-нибудь линейный датчик?

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

Вы сказали, что точность Вас не напрягает, и что 1-2 градуса роли не играют. Поэтому возникает вопрос — а зачем так сложно?

Табличный вариант перевода ADC-значений в градусы Вы не рассматривали?

При таком подходе можно будет отказаться от ресурсоёмких библиотек с плавучкой. Тем более, что Вы используете еще и функции log и pow. Следовательно уменьшаться требования к размеру стека (RAM) и размеру кода (flash). Кроме того, функция перевода попугаев в градусы будет выполняться быстрее.

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

Источник