Перейти к содержанию

Датчики температуры для микроконтроллера: как выбрать

Термистор, платиновый термометр сопротивления, термопара, аналоговая или цифровая микросхема и встроенный датчик микроконтроллера измеряют температуру по-разному — и врут по-разному. Сравниваем их по даташитам Vishay, TI, Analog Devices, Sensirion, Bosch и ST: диапазон, точность в том виде, в каком её гарантирует производитель, интерфейс, самонагрев и отклик, а потом разбираем подключение, размещение на плате, усреднение и калибровку.

Обновлено Редакция GAW

Датчик температуры для микроконтроллера выбирают по четырём вопросам: какой нужен диапазон, какая точность без калибровки, что есть у микроконтроллера — свободный вход АЦП, I²C, SPI или одна линия — и что именно надо измерить: воздух, корпус, жидкость или пламя горелки. Физических принципов немного: сопротивление (термистор, платиновый термометр), термо-ЭДС (термопара) и зависимость напряжения перехода от температуры (кремниевые микросхемы, в том числе датчик внутри самого микроконтроллера).

Сравнение

Точность в таблице — в том виде, в каком её даёт производитель: «тип.» — типичное значение, «макс.» — гарантированный предел. Сравнивать типичное одного датчика с максимальным другого нельзя. Для термистора и Pt100 точность задаётся допуском элемента, а погрешность измерения добавляют делитель, источник тока и АЦП.

Датчик (пример)ДиапазонТочность по даташитуВыходСамонагревОткликЦена
NTC 10 кОм, B = 3977 К (Vishay NTCLE100E3)−40…+125 °Cдопуск R25 ±2, ±3 или ±5 %, B25/85 ±0,75 %сопротивление → делитель и АЦП7 мВт/К (коэффициент рассеяния)тепловая постоянная 15 ссамый дешёвый
Pt100, Pt1000 (Vishay PTS)−55…+155 °Cкласс F0.3: ±(0,30 + 0,005·|T|) °C; F0.6: ±(0,60 + 0,010·|T|) °Cсопротивление → источник тока и точный АЦПне более 0,7–0,9 К/мВт в неподвижном воздухеt0,9 не более 2–5 с в потоке воздуха 3 м/ссредняя
Термопара K + MAX31855K−270…+1372 °C±2 °C при −200…+700 °C (макс.), не включая ошибку холодного спая (±2 °C) и нелинейностьSPI, только чтениенетзависит от зондасредняя
Термопара + MAX31856по типу термопары: K −200…+1372 °C, всего от −210 °C (J) до +1820 °C (B)±0,15 % шкалы и линейности, холодный спай ±0,7 °C (макс., −20…+85 °C)SPIнетзависит от зондавыше средней
LM35 (TI)−55…+150 °Cпри 25 °C: ±0,4 °C тип., ±1 °C макс.; LM35A — ±0,2 / ±0,5 °C10 мВ/°C0,08 °C в неподвижном воздухе—дешёвый
TMP36 (ADI)−40…+125 °Cпри 25 °C ±1 тип. / ±2 °C макс.; в диапазоне ±2 / ±3 °C (исполнение F)750 мВ при 25 °C, 10 мВ/°Cменьше 0,1 °C—дешёвый
LMT86 (TI)−50…+150 °C±0,4 °C тип., ±2,7 °C макс.около −10,9 мВ/°C5,4 мкА — практически нет10 с (TO-92S, обдув 1,2 м/с)дешёвый
DS18B20 (ADI)−55…+125 °C±0,5 °C при −10…+85 °C, ±2 °C во всём диапазоне (макс., 3σ)1-Wireток 1–1,5 мА в момент преобразования—дешёвый
TMP117 (TI)−55…+150 °C±0,1 °C при −20…+50 °C, ±0,3 °C при −55…+150 °C (макс.)I²C, 0x48–0x4Bоколо 40 м°C в непрерывном режиме—средняя
SHT40 / SHT45 (Sensirion)−40…+125 °C±0,2 / ±0,1 °C тип. (максимум — на графиках)I²C, 0x44—2 с (63 %)средняя
BME280 (Bosch)−40…+85 °C±0,5 °C тип. при 0…65 °CI²C или SPIобычно показывает выше окружающей—средняя
Датчик STM32F407температура кристаллалинейность ±1 тип. / ±2 °C макс., смещение между экземплярами до 45 °Cканал АЦП——бесплатно

Прочерк — производитель значения в даташите не нормирует. Короткая подсказка по выбору:

  • Комната, улица, холодильник, несколько точек на одном проводе — DS18B20.
  • Гарантированно точнее 0,2 °C без калибровки — TMP117 (±0,1 °C макс. при −20…+50 °C, при усреднении по 8 и цикле 1 с). В паре с влажностью — SHT45, но его ±0,1 °C — типичное значение, максимум Sensirion даёт только графиком.
  • Только АЦП и копейки — термистор NTC в делителе или аналоговая микросхема LMT86, TMP36, LM35.
  • Широкий диапазон и стандартизованная характеристика — Pt100 или Pt1000; плёночные Vishay PTS работают при −55…+155 °C, а класс F0.3 держит допуск лучше 1 °C до +140 °C.
  • Печь, двигатель, пламя — выше, чем выдерживают кремниевые микросхемы — термопара с преобразователем.
  • Перегрев самого микроконтроллера — встроенный датчик.

Термистор NTC

NTC-термистор — полупроводниковый резистор, сопротивление которого падает с ростом температуры, и падает сильно: у термистора 10 кОм с B = 3977 К из линейки Vishay NTCLE100E3 температурный коэффициент −4,38 %/К при 25 °C и −5,09 %/К при 0 °C. Это в десять раз больше, чем у платины, поэтому термистор легко читать обычным АЦП.

B-параметр и формула Стейнхарта — Харта

Простейшая модель — с коэффициентом B, который производитель задаёт по двум точкам, обычно 25 и 85 °C (B25/85):

R(T)=R25 exp⁡ ⁣[B(1T−1T25)],T25=298,15 КR(T) = R_{25}\,\exp\!\left[B\left(\frac{1}{T} - \frac{1}{T_{25}}\right)\right], \qquad T_{25} = 298{,}15\ \text{К}

Она точна в этих двух точках, а между и за ними расходится с реальной кривой. Точнее уравнение Стейнхарта — Харта: 1/T=a+bln⁡R+c (ln⁡R)31/T = a + b\ln R + c\,(\ln R)^3 с тремя коэффициентами, подобранными по трём точкам. Vishay для NTCLE100E3 даёт расширенный вариант с четырьмя коэффициентами на каждый материал — и в прямую, и в обратную сторону; две формы расходятся не больше чем на 0,005 °C при 25–125 °C и на 0,015 °C при −40…+25 °C.

Насколько велика разница, видно на примере 10 кОм, B = 3977 К. По таблице Vishay при 0 °C сопротивление 32 554 Ом, а модель с B даёт 33 900 Ом. Если обратить её для 32 554 Ом, получится +0,76 °C вместо 0 °C; при −20 °C (96 358 Ом по таблице) ошибка модели уже 1,7 °C. Для точности лучше 1 °C в широком диапазоне берите коэффициенты Стейнхарта — Харта или таблицу производителя. Обе модели считает калькулятор NTC-термистора.

Допуск

Разброс складывается из двух частей: допуска R25 и отклонения из-за допуска B, которое растёт с удалением от 25 °C. Vishay приводит пример: термистор 10 кОм ±5 % при 0 °C имеет отклонение сопротивления около 5,97 %, а при температурном коэффициенте 5,09 %/К это ±1,17 °C. Допуск B вносит тем больше, чем дальше температура от 25 °C, поэтому даже термистор с узким допуском R25 вдали от 25 °C без калибровки теряет точность.

Делитель, АЦП и самонагрев

Термистор включают в делитель с постоянным резистором того же номинала и питают делитель от опорного напряжения АЦП — тогда код не зависит от точного значения питания: это логометрическое измерение. При 3,3 В и паре 10 кОм / 10 кОм напряжение около 25 °C меняется примерно на 36 мВ/°C — 45 шагов 12-битного АЦП на градус.

Через термистор течёт ток, и он греется. Коэффициент рассеяния NTCLE100E3 — 7 мВт/К: на каждые 7 мВт мощности термистор нагревается на 1 К выше среды (Vishay даёт значение справочно и не указывает условия; у номиналов до 680 Ом — 8,5 мВт/К). В делителе 10 кОм / 10 кОм от 3,3 В при 25 °C на термисторе выделяется 0,27 мВт — перегрев около 0,04 °C. Если взять делитель 1 кОм / 1 кОм, мощность и перегрев вырастут в десять раз. Можно подавать питание на делитель с вывода микроконтроллера только на время измерения.

Тепловая постоянная времени NTCLE100E3 — 15 с (справочно, условия не указаны): за это время термистор проходит 63 % скачка температуры; время отклика в масле, по Vishay, около 1,2 с.

Платиновый термометр Pt100 и Pt1000

Платиновый термометр сопротивления (RTD) — тонкая плёнка или проволока из платины с нормированной по IEC 60751 характеристикой: Pt100 имеет 100 Ом при 0 °C, Pt1000 — 1000 Ом. Средний температурный коэффициент между 0 и 100 °C — 3850 ppm/К. Характеристику описывает уравнение Каллендара — Ван Дюзена; его коэффициенты по IEC 60751 воспроизводит, например, даташит Vishay PTS:

R(T)=R0(1+A T+B T2),0≤T≤155 ∘CR(T) = R_0\left(1 + A\,T + B\,T^2\right), \quad 0 \le T \le 155\ ^\circ\text{C}
R(T)=R0(1+A T+B T2+C (T−100) T3),T<0 ∘CR(T) = R_0\left(1 + A\,T + B\,T^2 + C\,(T - 100)\,T^3\right), \quad T < 0\ ^\circ\text{C}

где A=3,9083⋅10−3 ∘C−1A = 3{,}9083 \cdot 10^{-3}\ ^\circ\text{C}^{-1}, B=−5,775⋅10−7 ∘C−2B = -5{,}775 \cdot 10^{-7}\ ^\circ\text{C}^{-2}, C=−4,183⋅10−12 ∘C−4C = -4{,}183 \cdot 10^{-12}\ ^\circ\text{C}^{-4}. При 100 °C Pt100 имеет 138,51 Ом. Чувствительность около 0 °C — R0A = 0,39 Ом/°C у Pt100 и 3,9 Ом/°C у Pt1000. Расчёт в обе стороны — в калькуляторе Pt100.

Допуск задают классы: F0.3 — ±(0,30 + 0,005·|T|) °C, F0.6 — ±(0,60 + 0,010·|T|) °C. При 100 °C это ±0,8 и ±1,6 °C.

Провода и схема включения

Сопротивление соединительных проводов складывается с сопротивлением датчика. Два провода по 0,5 Ом добавляют к Pt100 1 Ом — это 1 / 0,39 ≈ 2,6 °C ошибки. Поэтому Pt100 подключают трёхпроводной схемой, в которой схема вычитает сопротивление проводов (такую схему разбирает Microchip AN687), или четырёхпроводной: по одной паре течёт ток, по другой только измеряют напряжение. У Pt1000 тот же 1 Ом даёт в десять раз меньшую ошибку, поэтому на коротких проводах его можно включать двумя проводами.

Измерительный ток

Самонагрев PTS в неподвижном воздухе — не более 0,9 К/мВт у корпуса 0603, 0,8 К/мВт у 0805 и 0,7 К/мВт у 1206. Ток 1 мА через Pt100 рассеивает 0,1 мВт: у 0805 и 1206 перегрев не больше 0,08 и 0,07 °C (для 0603 ток 1 мА уже выше допустимого). Vishay указывает токи, при которых самонагрев меньше 0,1 °C: для 100 Ом — 0,1–0,5 мА (0603) и 0,1–1,0 мА (0805, 1206), для 1000 Ом в корпусе 1206 — 0,1–0,25 мА. При 1 мА сигнал Pt100 — всего 0,39 мВ/°C, поэтому для RTD берут точный АЦП с усилителем или специализированный преобразователь, а не встроенный АЦП микроконтроллера.

Термопара

Термопара — две проволоки из разных сплавов, сваренные на конце (рабочий спай). На свободных концах появляется ЭДС, которая зависит от разности температур рабочего спая и места, где проволоки переходят в медь, — холодного спая. Чтобы узнать температуру рабочего спая, нужно измерить температуру холодного спая и прибавить к ЭДС термопары ЭДС, соответствующую этой температуре, — это компенсация холодного спая.

Термопара типа K (хромель — алюмель) даёт около 41 мкВ/°C. Шаг 10-битного АЦП с опорой 3,3 В — 3,2 мВ, около 78 °C на отсчёт, поэтому термопару подключают через специализированный преобразователь. Таблицы ЭДС для всех стандартных типов — в калькуляторе термопары.

MAX31855 и MAX31856

MAX31855 — простой вариант: сам измеряет холодный спай встроенным датчиком и отдаёт по SPI 14-битное число с шагом 0,25 °C. Для типа K (MAX31855K) производитель гарантирует ±2 °C при температуре термопары −200…+700 °C и температуре микросхемы −20…+85 °C, ±6 °C во всём диапазоне −270…+1372 °C. Но в эти цифры не входят ошибка измерения холодного спая (ещё ±2 °C) и нелинейность термопары: MAX31855 считает характеристику прямой с наклоном 41,276 мкВ/°C и прямо советует поправлять результат. Для этого из числа MAX31855 восстанавливают напряжение термопары, прибавляют ЭДС, соответствующую температуре холодного спая, и пересчитывают сумму по таблице NIST. Питание — 3,0–3,6 В, преобразование занимает до 100 мс.

MAX31856 линеаризует характеристику сам — по встроенной таблице для типов K, J, N, R, S, T, E и B. Шаг — 0,0078125 °C (19 бит), погрешность измерения напряжения термопары — ±0,15 % полной шкалы, холодного спая — ±0,7 °C при −20…+85 °C. Ещё в нём есть фильтр сетевой помехи 50 или 60 Гц, усреднение до 16 отсчётов и защита входов до ±45 В. Однократное преобразование с фильтром 60 Гц длится до 155 мс.

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

  • Изотермичность. Холодный спай — это выводы микросхемы, поэтому она должна иметь ту же температуру, что и разъём термопары. ADI советует не ставить рядом с MAX31855 нагревающиеся компоненты.
  • Фильтр. Для MAX31855 производитель настоятельно рекомендует керамический конденсатор 10 нФ между T+ и T− рядом с выводами.
  • Земля. Вывод T− MAX31855 нельзя соединять с GND. Термопару с открытым спаем, приваренную к заземлённому металлу, лучше заменить изолированной.
  • Провода. Удлиняют термопару только термокомпенсационным проводом того же типа, витой парой; медный провод в разрыве создаёт новый спай.

Аналоговые микросхемы

Кремниевый датчик с аналоговым выходом — это откалиброванный на заводе источник напряжения, пропорционального температуре. Его подключают прямо к входу АЦП без делителя.

  • LM35 (TI) выдаёт 10 мВ/°C с нулём при 0 °C, но требует питания от 4 до 30 В и без отрицательного источника не измеряет ниже нуля. Точность при 25 °C — ±0,4 °C типично и ±1 °C гарантированно, у исполнения LM35A — ±0,2 / ±0,5 °C. Подробно — в статье «LM35».
  • TMP36 (ADI) работает при питании 2,7–5,5 В, а его выход сдвинут на 500 мВ: 750 мВ при 25 °C, 10 мВ/°C, поэтому от одного источника питания он измеряет от −40 °C (100 мВ). Точность исполнения F — ±2 °C гарантированно при 25 °C и ±3 °C во всём диапазоне.
  • LMT86 (TI) работает от 2,2 В (но ниже 0 °C точность нормирована только при питании от 3,0–3,6 В: выходное напряжение там больше 2,2 В), потребляет 5,4 мкА, а напряжение у него падает с ростом температуры — в среднем на 10,9 мВ/°C. Характеристика слегка параболическая; TI даёт для неё уравнение:
U=1777,3 мВ−10,888 мВ∘C (T−30)−0,00347 мВ∘C2 (T−30)2U = 1777{,}3\ \text{мВ} - 10{,}888\ \frac{\text{мВ}}{^\circ\text{C}}\,(T - 30) - 0{,}00347\ \frac{\text{мВ}}{^\circ\text{C}^2}\,(T - 30)^2

Аналоговый датчик удобен, если АЦП и опора точные: у 10-битного АЦП с опорой 3,3 В шаг 3,2 мВ — 0,32 °C у датчика 10 мВ/°C, а ошибка опоры на 1 % при 750 мВ даёт 7,5 мВ, то есть 0,75 °C. Как считать код и выбирать опору — в статье «АЦП».

Цифровые микросхемы

Цифровой датчик сам оцифровывает сигнал и гарантирует погрешность для всего тракта. Не нужны ни опора, ни расчёт делителя — только интерфейс.

DS18B20: 1-Wire

DS18B20 — самый распространённый термометр для самодельных устройств: −55…+125 °C, ±0,5 °C при −10…+85 °C, ±1 °C при −30…+100 °C и ±2 °C во всём диапазоне. Пределы, по примечанию к даташиту, — 3σ. Разрешение задаётся от 9 до 12 бит (шаг от 0,5 до 0,0625 °C), и от него зависит время преобразования: до 93,75 мс при 9 битах и до 750 мс при 12.

Линию DQ подтягивают к питанию резистором 4,7 кОм, на одну линию вешают много датчиков — у каждого свой 64-битный код. Датчик может питаться от самой линии (паразитное питание), но выше +100 °C ADI это не рекомендует: из-за роста утечек связь может пропасть. Тайм-слоты, команды, поиск и длинные линии — в статье «Интерфейс 1-Wire», расчёт подтяжки и CRC — в калькуляторе 1-Wire.

TMP117: ±0,1 °C по I²C

TMP117 — один из самых точных цифровых датчиков: ±0,1 °C (макс.) при −20…+50 °C, ±0,2 °C при −40…+100 °C и ±0,3 °C при −55…+150 °C без калибровки — при условиях таблицы TI: усреднение по 8 отсчётам, цикл 1 с, тепловая площадка не припаяна. TI сравнивает его с платиновым термометром класса AA. Шаг — 0,0078125 °C, питание 1,7–5,5 В до +70 °C и 1,8–5,5 В во всём диапазоне, преобразование 15,5 мс (до 17,5 мс), есть встроенное усреднение, регистр смещения для калибровки и EEPROM. Адрес задаёт вывод ADD0: 0x48 — на земле, 0x49 — на питании, 0x4A — на SDA, 0x4B — на SCL.

SHT4x и BME280: температура заодно с влажностью

Sensirion SHT40 даёт ±0,2 °C типично, SHT45 — ±0,1 °C типично; максимальные значения производитель приводит только графиками. Питание — 1,08–3,6 В, адрес 0x44 (у SHT40 бывают исполнения с 0x45 и 0x46), время отклика по температуре — 2 с до 63 % скачка. Температуру считают из 16-битного кода S:

T=−45+175⋅S65535 ∘CT = -45 + 175 \cdot \frac{S}{65535}\ ^\circ\text{C}

У Bosch BME280 температура — вспомогательная величина для компенсации давления и влажности: ±0,5 °C типично при 0…65 °C, но Bosch прямо предупреждает, что показания зависят от температуры платы и самонагрева и обычно выше окружающей. Влажность и давление — в статьях «Датчики влажности» и «Датчики давления».

Встроенный датчик микроконтроллера

Почти в каждом STM32 есть датчик температуры на одном из каналов АЦП. У STM32F407, по даташиту DS8626, характеристика такая: наклон 2,5 мВ/°C, 0,76 В при 25 °C — оба значения только типичные, — линейность ±1 °C типично и ±2 °C максимум. Справочное руководство RM0090 добавляет главное: смещение характеристики различается от кристалла к кристаллу до 45 °C, поэтому ST считает встроенный датчик пригодным для отслеживания изменений температуры, а для абсолютных измерений советует внешний.

Смещение убирают заводские калибровки. На производстве ST записывает в системную память код АЦП при 30 °C (TS_CAL1, адрес 0x1FFF 7A2C) и при 110 °C (TS_CAL2, 0x1FFF 7A2E), оба при VDDA = 3,3 В. Температура — линейная интерполяция между двумя точками:

T=30 ∘C+(110−30) ∘CTS_CAL2−TS_CAL1 (DTS−TS_CAL1)T = 30\ ^\circ\text{C} + \frac{(110 - 30)\ ^\circ\text{C}}{TS\_CAL2 - TS\_CAL1}\,\left(D_\text{TS} - TS\_CAL1\right)

где DTS — код АЦП, приведённый к VDDA = 3,3 В. Если VDDA другое, код датчика умножают на VREFINT_CAL/DREFINTVREFINT\_CAL / D_\text{REFINT}: VREFINT_CAL (адрес 0x1FFF 7A2A) — код внутреннего опорного напряжения при 3,3 В, DREFINT — его код сейчас. VREFINT_CAL снят при 30 °C, а опорное напряжение само немного зависит от температуры (DS8626: до 50 ppm/°C), поэтому при стабильном VDDA = 3,3 В пересчёт можно не делать. После калибровки остаются нелинейность (по характеризации до ±2 °C) и погрешности АЦП и самих точек TS_CAL. Время выборки канала датчика — не меньше 10 мкс, после включения датчику нужно до 10 мкс на запуск. Подробно про АЦП — в статье «АЦП STM32».

#include <stdint.h>

/* STM32F405/407: factory calibration values (DS8626, tables 70 and 73), VDDA = 3.3 V */
#define TS_CAL1     (*(const uint16_t *)0x1FFF7A2CU)   /* ADC code at 30 C  */
#define TS_CAL2     (*(const uint16_t *)0x1FFF7A2EU)   /* ADC code at 110 C */
#define VREFINT_CAL (*(const uint16_t *)0x1FFF7A2AU)   /* VREFINT code at 30 C */

/* ts_raw and vref_raw: 12-bit conversions of the sensor and VREFINT channels,
   both sampled for at least 10 us. Writes the die temperature in degrees C to *t
   and returns 0, or returns -1 if the inputs or the calibration data are unusable. */
int stm32_die_temperature(uint16_t ts_raw, uint16_t vref_raw, float *t)
{
    if (vref_raw == 0 || TS_CAL2 <= TS_CAL1)
        return -1;  /* no VREFINT reading or blank/corrupt calibration */
    /* Rescale the sensor code to VDDA = 3.3 V, the condition of the calibration. */
    float ts_33 = (float)ts_raw * VREFINT_CAL / vref_raw;
    *t = 30.0f + (110.0f - 30.0f) * (ts_33 - TS_CAL1) / (float)(TS_CAL2 - TS_CAL1);
    return 0;
}

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

Подключение и подтяжки

  • I²C (TMP117, SHT4x, BME280): подтяжки SDA и SCL к питанию датчика, расчёт — в статье «Интерфейс I²C». Для TMP117 TI советует резисторы не меньше 2 кОм: малые подтяжки увеличивают ток и нагревают датчик. SHT4x и BME280 рассчитаны только до 3,6 В — с 5-вольтовой платой нужен стабилизатор и согласование уровней; TMP117 работает до 5,5 В.
  • 1-Wire (DS18B20): одна подтяжка 4,7 кОм на линию, у ведущего. Для длинных линий и паразитного питания — правила из статьи «Интерфейс 1-Wire».
  • SPI (MAX31855, MAX31856): обычная шина; MAX31855 только отдаёт данные, линии MOSI у него нет.
  • Аналоговые датчики: короткая дорожка до входа АЦП, керамический конденсатор по питанию у датчика, RC-фильтр перед АЦП. Для термистора опору АЦП и питание делителя берут от одного источника.

Самонагрев и размещение на плате

Любой датчик измеряет свою температуру. Чтобы она совпала с температурой воздуха или объекта, нужны три вещи: малая мощность в самом датчике, слабая тепловая связь с горячими компонентами и хорошая — с измеряемой средой.

  • Мощность. Измеряйте редко и спите между измерениями. TI оценивает самонагрев TMP117 в непрерывном режиме при 3,3 В примерно в 40 м°C и советует однократный режим или цикл в 1 с с усреднением по 8 отсчётам — за паузу датчик остывает. DS18B20 во время преобразования потребляет до 1,5 мА, у термистора и Pt100 мощность задаёт делитель или измерительный ток.
  • Соседи. Стабилизатор, процессор, силовые ключи и даже подтягивающий резистор (TI отдельно упоминает его для TMP117) греют плату. Датчик воздуха ставят на край платы, отделяют от горячей части прорезью, оставляют под ним минимум меди и выносят на шлейф или отдельную плату-«язычок».
  • Тепловая площадка. TI рекомендует на жёсткой плате тепловую площадку TMP117 не паять: пайка снижает тепловое сопротивление, но вносит механическое напряжение и дополнительную ошибку. Если датчик должен измерять температуру корпуса или радиатора, наоборот, нужна короткая тепловая связь с объектом: медные полигоны и тепловые переходные отверстия.
  • Воздух. Датчику воздуха нужен обмен воздуха с окружающей средой: отверстия в корпусе рядом с ним и подальше от тёплого воздуха электроники.

Усреднение и фильтрация

Шум одного отсчёта легко убрать усреднением, а медленно меняющейся температуре это почти ничего не стоит. Встроенное усреднение есть у TMP117 (8, 32 или 64 преобразования) и у MAX31856 (до 16 отсчётов; каждый добавляет 40 мс при фильтре 50 Гц). Для АЦП микроконтроллера — скользящее среднее или фильтр с бесконечной импульсной характеристикой первого порядка, а сумма 4ⁿ отсчётов добавляет n бит разрешения, если в сигнале есть шум (передискретизация). Помните, что усреднение убирает шум, но не систематическую ошибку датчика и не самонагрев.

Калибровка

Без калибровки точность ограничена даташитом. Чтобы её улучшить, сравнивают показания с эталоном в одной или двух точках:

  • Одна точка убирает смещение. Удобная естественная точка — тающий лёд в воде (0 °C); эталоном может служить и откалиброванный термометр рядом с датчиком в термостатированном объёме. У TMP117 для этого есть регистр смещения, у остальных поправку вычитают в программе.
  • Две точки убирают и смещение, и ошибку наклона — так ST калибрует встроенный датчик STM32. Для термистора по трём точкам заново подбирают коэффициенты Стейнхарта — Харта.
  • Калибровка в изделии. Калибровать нужно в собранном устройстве в рабочем режиме: тогда в поправку войдут и самонагрев, и нагрев от соседей, и тепловое сопротивление до объекта. По TI, калибровка в системе убирает у TMP117 не только самонагрев, но и сдвиг из-за теплового сопротивления между датчиком и объектом.

Типичные ошибки

  • Сравнивают типичное с максимальным. ±0,2 °C типично у одного датчика и ±0,5 °C максимум у другого — разные вещи; при выборе сравнивайте гарантированные пределы в нужном диапазоне.
  • Модель B в широком диапазоне. У термистора 10 кОм с B = 3977 К ошибка модели при −20 °C — около 1,7 °C.
  • Pt100 двумя проводами. 1 Ом в проводах — 2,6 °C.
  • Термопара без поправки нелинейности. MAX31855 считает характеристику прямой; на краях диапазона без поправки по таблице NIST ошибка растёт.
  • Встроенный датчик МК как термометр. Без калибровки смещение у STM32F4 — до 45 °C, с калибровкой датчик всё равно измеряет нагретый кристалл.
  • Датчик рядом со стабилизатором. Плата на несколько градусов теплее воздуха, и это не исправит никакая точность датчика.
  • DS18B20 опрашивают раньше конца преобразования. При 12 битах нужно до 750 мс, при 9 битах — до 93,75 мс; почему датчик иногда показывает 85 °C, разобрано в статье «Интерфейс 1-Wire».

Другие датчики — в разделе «Датчики».

Частые вопросы

Какой датчик температуры выбрать для Arduino?

Для комнаты и улицы проще всего DS18B20: одна линия 1-Wire с резистором 4,7 кОм, −55…+125 °C, ±0,5 °C при −10…+85 °C, несколько датчиков на одном проводе. Если нужна точность лучше 0,2 °C — TMP117 по I²C (±0,1 °C при −20…+50 °C). Если вместе с влажностью — SHT4x. Для печи и выхлопа, выше +150 °C, нужна термопара K с преобразователем вроде MAX31855 или MAX31856, для промышленного диапазона с хорошей точностью — Pt100 или Pt1000.

Что точнее: термистор NTC или DS18B20?

Сам термистор может быть очень точным, но его точность складывается из допуска R25 (у Vishay NTCLE100E3 — ±2, ±3 или ±5 %), допуска коэффициента B, точности постоянного резистора, опорного напряжения и АЦП. У термистора 10 кОм допуск R25 ±5 % вместе с допуском B даёт, по примеру Vishay, ±1,17 °C при 0 °C. DS18B20 нормирует ±0,5 °C при −10…+85 °C (предел 3σ) сразу для всего тракта, без расчётов.

Можно ли подключить термопару прямо к АЦП микроконтроллера?

Нет. ЭДС термопары K — около 41 мкВ/°C, а шаг 10-битного АЦП с опорой 3,3 В — 3,2 мВ, то есть примерно 78 °C на отсчёт. Кроме того, термопара измеряет разность температур рабочего и холодного спая, и температуру холодного спая нужно измерять отдельно. Поэтому ставят специализированный преобразователь с компенсацией холодного спая — MAX31855 или MAX31856 — либо прецизионный АЦП с усилителем.

Насколько точен встроенный датчик температуры STM32?

Без калибровки — плохо: у STM32F4 смещение характеристики, по RM0090, различается между экземплярами до 45 °C, а V25 = 0,76 В и наклон 2,5 мВ/°C в даташите только типичные. С заводскими точками TS_CAL1 (30 °C) и TS_CAL2 (110 °C) смещение убирается, а остаются нелинейность (по характеризации до ±2 °C) и погрешность самого АЦП. Кроме того, датчик измеряет температуру кристалла, а не воздуха; ST сама советует для абсолютных измерений внешний датчик.

Почему датчик на плате показывает больше, чем в комнате?

Его греют соседние компоненты, медь платы и он сам. Bosch прямо пишет, что температура BME280 зависит от платы и самонагрева и обычно выше окружающей. Датчик выносят на край платы или на гибкий шлейф, отделяют прорезью от стабилизаторов и процессора, измеряют редко и в паузах держат в режиме сна.

Источники

  1. Vishay BCcomponents. NTCLE100E3 — NTC Thermistors, Radial Leaded, Standard Precision (Document Number 29049, Revision 07-May-2025) — Quick Reference Data (с. 1) — R25 от 3,3 Ом до 470 кОм, допуск R25 ±2, ±3, ±5 %, B25/85 2880–4570 К, −40…+125 °C длительно, отклик в масле 1,2 с, тепловая постоянная времени 15 с, коэффициент рассеяния 7 мВт/К (8,5 мВт/К при R25 ≤ 680 Ом), оба значения справочные; Electrical Data — 10 кОм: B25/85 = 3977 К ±0,75 %; Formulae (с. 4) — R(T) = Rref · e^(A + B/T + C/T² + D/T³) и обратная формула с A1…D1, коэффициенты материала 3977 К, расхождение формул не больше 0,005 °C при 25–125 °C и 0,015 °C при −40…+25 °C, пример: 10 кОм ±5 % при 0 °C — 32,55 кОм ±1,17 °C (с учётом допуска B); таблица R(T) (с. 10) — 32 554 Ом при 0 °C, 96 358 Ом при −20 °C, TCR −5,09 %/К при 0 °C и −4,38 %/К при 25 °C
  2. Vishay Beyschlag. PTS: Temperature Dependent Platinum Thin Film Chip Resistor (RTD) (Document Number 28762, Revision 25-Feb-2025) — Technical Specifications (с. 3) — R0 100, 500, 1000 Ом, +3850 ppm/K по IEC 60751, классы F0.3 и F0.6, −55…+155 °C, ток измерения для 100 Ом 0,1–0,5 мА (0603) и 0,1–1,0 мА (0805, 1206), для 1000 Ом 0,1–0,25 мА с самонагревом меньше 0,1 °C, самонагрев в неподвижном воздухе не более 0,9 / 0,8 / 0,7 К/мВт, время отклика t0,9 в воде 0,4 м/с не более 0,2 / 0,3 / 0,4 с и в воздухе 3 м/с не более 2 / 3 / 5 с; Functional Performance (с. 4) — уравнения для −55…0 °C и 0…+155 °C, коэффициенты IEC 60751 A = 3,9083 · 10⁻³, B = −5,775 · 10⁻⁷, C = −4,183 · 10⁻¹², допуски F0.3 = ±(0,30 + 0,005·|T|), F0.6 = ±(0,60 + 0,010·|T|); таблица (с. 5) — 138,51 Ом при 100 °C, ±0,80 и ±1,60 °C
  3. Microchip. AN687: Precision Temperature-Sensing With RTD Circuits (DS00687C, 2008) — с. 1–2 — самонагрев RTD измерительным током; с. 4 — трёхпроводная схема, компенсирующая сопротивление проводов
  4. Analog Devices (Maxim Integrated). MAX31855 Cold-Junction Compensated Thermocouple-to-Digital Converter (19-5793, Rev 5, 1/15) — с. 1 — типы K, J, N, T, S, R, E, 14 бит, шаг 0,25 °C, SPI только чтение; с. 2 — питание 3,0–3,6 В; Thermal Characteristics (с. 3–4) — MAX31855K ±2 °C при −200…+700 °C, ±4 °C при +700…+1350 °C и ±6 °C при −270…+1372 °C, без учёта ошибки холодного спая и нелинейности термопары (примечание 4), 41,276 мкВ/°C, ошибка холодного спая ±2 °C при −20…+85 °C, преобразование 70 / 100 мс; с. 7 — вывод T− не соединять с GND; с. 8 — линейная модель VOUT = 41,276 мкВ/°C · (TR − TAMB), поправку на нелинейность делает пользователь; с. 9 — микросхема и холодный спай при одной температуре, без нагревающихся компонентов рядом; с. 11 — керамический конденсатор 10 нФ между T+ и T−, витая пара
  5. Analog Devices (Maxim Integrated). MAX31856 Precision Thermocouple to Digital Converter with Linearization (19-7534, Rev 0, 2/15) — с. 1 — линеаризация по таблице для K, J, N, R, S, T, E, B, 19 бит и шаг 0,0078125 °C, ±0,15 % полной шкалы и линейности (макс., −20…+85 °C), холодный спай ±0,7 °C (макс., −20…+85 °C), защита входов ±45 В, фильтр 50/60 Гц; с. 2–3 — питание 3,0–3,6 В, ошибка холодного спая ±1 °C при −40…+105 °C; с. 4 — преобразование 143 / 155 мс; табл. 1 (с. 12) — диапазоны по типам: B 250…1820 °C, E −200…+1000 °C, J −210…+1200 °C, K −200…+1372 °C, N −200…+1300 °C, R и S −50…+1768 °C, T −200…+400 °C; с. 20 — усреднение 1–16 отсчётов, +33,33 мс (60 Гц) или +40 мс (50 Гц) на отсчёт
  6. Texas Instruments. LM35 Precision Centigrade Temperature Sensors (SNIS159H, revised December 2017) — разд. 1 — 10 мВ/°C, −55…+150 °C, питание 4–30 В, меньше 60 мкА, самонагрев 0,08 °C в неподвижном воздухе; разд. 6.5–6.6 — точность при 25 °C: LM35A ±0,2 типично / ±0,5 °C гарантировано, LM35 ±0,4 / ±1 °C
  7. Analog Devices. TMP35/TMP36/TMP37 Low Voltage Temperature Sensors (Data Sheet Rev. H) — с. 1 — 2,7–5,5 В, 10 мВ/°C, −40…+125 °C, меньше 50 мкА, самонагрев меньше 0,1 °C в неподвижном воздухе, 750 мВ при 25 °C; табл. 1 — исполнение F: ±1 / ±2 °C при 25 °C и ±2 / ±3 °C во всём диапазоне (типично / макс.), исполнение G: ±1 / ±3 и ±2 / ±4 °C, выход 100–2000 мВ, без учёта самонагрева
  8. Texas Instruments. LMT86 2.2V, SC70/TO-92/TO-92S, Analog Temperature Sensor (SNIS169F, revised May 2024) — разд. 1, 3 — ±0,4 °C типично, ±2,7 °C максимум (ниже 0 °C — при питании от 3,0–3,6 В, табл. 6.5), −10,9 мВ/°C в среднем, 2,2–5,5 В, 5,4 мкА, −50…+150 °C, у TO-92S тепловая постоянная 10 с при обдуве 1,2 м/с; разд. 7.3 — уравнение 1: V = 1777,3 мВ − 10,888 мВ/°C · (T − 30 °C) − 0,00347 мВ/°C² · (T − 30 °C)²
  9. Texas Instruments. TMP117 High-Accuracy, Low-Power, Digital Temperature Sensor With SMBus- and I2C-Compatible Interface (SNOSD82D, revised September 2022) — разд. 1, 3 — ±0,1 °C (макс.) при −20…+50 °C, ±0,15 °C при −40…+70 °C, ±0,2 °C при −40…+100 °C, ±0,25 °C при −55…+125 °C, ±0,3 °C при −55…+150 °C, 1,7–5,5 В при −55…+70 °C и 1,8–5,5 В при −55…+150 °C, шаг 0,0078 °C, точность сравнима с RTD класса AA; разд. 6.5 — пределы точности при усреднении по 8 и цикле 1 с, тепловая площадка не припаяна, преобразование 15,5 / 17,5 мс; разд. 7.6.3 — усреднение 8, 32 или 64 преобразования; табл. 7-2 — адреса 1001000–1001011 по выводу ADD0; разд. 8.2.2.2 — самонагрев около 40 м°C в непрерывном режиме при 3,3 В и 25 °C, однократный режим или цикл 1 с с усреднением по 8, подтяжки больше 2 кОм; разд. 10.1 — на жёсткой плате тепловую площадку не паять, конденсатор 0,1 мкФ, подтягивающий резистор может греть датчик
  10. Analog Devices (Maxim Integrated). DS18B20 Programmable Resolution 1-Wire Digital Thermometer (19-7487, Rev 6, 7/19) — с. 1 — −55…+125 °C, 9–12 бит; с. 2 — питание 3,0–5,5 В, погрешность ±0,5 °C при −10…+85 °C, ±1 °C при −30…+100 °C, ±2 °C при −55…+125 °C (пределы 3σ, примечание 3), ток преобразования 1 / 1,5 мА, дрейф ±0,2 °C; с. 3 — время преобразования 93,75 / 187,5 / 375 / 750 мс; с. 5, 7 — шаг 0,5…0,0625 °C, подтяжка 4,7 кОм; с. 7 — паразитное питание не рекомендуется выше +100 °C
  11. Sensirion. Datasheet SHT4x: 4th Gen. Relative Humidity and Temperature Sensor (Version 7.3, June 2026) — с. 1 — питание 1,08–3,6 В, адреса SHT40 0x44, 0x45, 0x46, SHT41 и SHT45 0x44; табл. 2 — температура: SHT40 и SHT41 ±0,2 °C типично, SHT45 ±0,1 °C типично (максимум — только на графиках), −40…+125 °C, отклик 2 с (63 %), шаг 0,01 °C; табл. 5 — измерение с высокой повторяемостью 6,9 / 8,3 мс; разд. 4.6 — T = −45 + 175 · S/65535; команда 0xFD
  12. Bosch Sensortec. BME280 Combined humidity and pressure sensor: Data sheet (BST-BME280-DS001-24, revision 1.24, February 2024) — разд. 1.1 — температура нужна для компенсации давления и влажности и может использоваться для оценки окружающей; табл. 4 — работа −40…+85 °C, ±0,5 °C при 25 °C и при 0…65 °C, шаг 0,01 °C; примечание 7 — показания зависят от температуры платы и самонагрева и обычно выше окружающей
  13. STMicroelectronics. STM32F405xx, STM32F407xx: Datasheet (DS8626 Rev 12, 18-Mar-2026) — табл. 69 (с. 140) — линейность ±1 °C типично и ±2 °C максимум, Avg_Slope 2,5 мВ/°C, V25 0,76 В (типичные, по характеризации), запуск до 10 мкс, время выборки не меньше 10 мкс; табл. 70 — TS_CAL1 (30 °C) по адресу 0x1FFF 7A2C и TS_CAL2 (110 °C) по 0x1FFF 7A2E, VDDA = 3,3 В; табл. 72 — температурный коэффициент VREFINT 30 типично / 50 ppm/°C максимум; табл. 73 — VREFIN_CAL по 0x1FFF 7A2A (30 °C)
  14. STMicroelectronics. RM0090 Reference manual: STM32F405/415, STM32F407/417, STM32F427/437 and STM32F429/439 (Rev 22, 04-May-2026) — разд. 13.10 (с. 415–416) — канал ADC1_IN16 или ADC1_IN18, бит TSVREFE, формула через V25 и Avg_Slope, смещение до 45 °C между экземплярами, для абсолютной температуры ST советует внешний датчик

Нашли ошибку?