Датчики температуры: термопара и терморезистор
Урок про два самых распространённых температурных датчика и формулы их пересчёта.
Термопара даёт напряжение, пропорциональное разнице температур спаев (эффект Зеебека); терморезистор меняет сопротивление с температурой.
Температуру нельзя измерить напрямую — её переводят в электрический сигнал. Два классических способа: термопара (милливольты на разнице температур) и терморезистор (изменение сопротивления). У каждого своя физика и своя формула пересчёта.
Термопара
В простом приближении напряжение термопары линейно по разнице температур:
$$ V \approx S_{th}\,(T - T_{ref}) $$
где $S_{th}$ — коэффициент Зеебека (для типа K около $41\ \text{мкВ/°C}$). Зная напряжение и температуру холодного спая, восстанавливаем горячий.
# Термопара типа K: ~41 мкВ/°C
S_th = 0.041 # мВ/°C
T_ref = 25.0 # температура холодного спая
def thermocouple_temp(mv):
return T_ref + mv / S_th
print(round(thermocouple_temp(4.1), 1), "°C")
print(round(thermocouple_temp(0.0), 1), "°C")Вывод:
125.0 °C 25.0 °C
Терморезистор (NTC)
У NTC-терморезистора сопротивление падает с ростом температуры. Удобная модель — уравнение Бета:
$$ \frac{1}{T} = \frac{1}{T_0} + \frac{1}{B}\ln\!\frac{R}{R_0} $$
где $T$ — в кельвинах, $R_0$ — сопротивление при опорной температуре $T_0$, $B$ — параметр из даташита.
import math
def thermistor_temp(R, R0=10000, T0=298.15, B=3950):
inv_T = 1/T0 + (1/B) * math.log(R / R0)
return 1/inv_T - 273.15 # в °C
for R in (5000, 10000, 20000):
print(R, "Ом ->", round(thermistor_temp(R), 2), "°C")Вывод:
5000 Ом -> 41.46 °C 10000 Ом -> 25.0 °C 20000 Ом -> 10.18 °C
Как работает под капотом
Термопара измеряет разницу температур, поэтому ей нужна компенсация холодного спая — отдельный датчик, который знает температуру разъёма. Терморезистор обычно включают в делитель напряжения с известным резистором; АЦП меряет напряжение, по нему считают сопротивление, по нему — температуру. Уравнение Бета — приближение; для высокой точности применяют формулу Стейнхарта–Харта с тремя коэффициентами. Обе характеристики сильно нелинейны, и без линеаризации (раздел 4) показания врут на краях диапазона.
Частые ошибки
- Забыть компенсацию холодного спая термопары — систематический сдвиг на десятки градусов.
- Считать кельвины и градусы Цельсия одним и тем же в уравнении Бета: логарифм требует абсолютной температуры.
- Применять линейную модель к NTC на широком диапазоне — он экспоненциально нелинеен.
Итог
- Термопара: $V \approx S_{th}(T - T_{ref})$, нужна компенсация холодного спая.
- Терморезистор NTC: температуру даёт уравнение Бета через логарифм отношения сопротивлений.
- Оба датчика нелинейны; для точности нужна линеаризация.