Termistory - wstęp

W elektronice dość szeroko wykorzystuje się rezystancyjne czujniki temperatury zwane termistorami. W praktyce rozróżnia się dwie podstawowe grupy termistorów: NTC i PTC, które mają odmienne własności fizyczne i zastosowania.

Termistory NTC (Negative Temperature Coefficient)

Definicja
Rezystancja maleje wraz ze wzrostem temperatury.

Charakterystyka R(T)

  • Silnie nieliniowa (wykładnicza).
  • Najczęściej opisywana równaniem:

\[ R(T) = R_0 \cdot \exp\!\left[B\left(\frac{1}{T}-\frac{1}{T_0}\right)\right] \]

gdzie:

  • \(R_0\) – rezystancja w temperaturze odniesienia \(T_0\) (zwykle 25 °C),
  • \(B\) – stała materiałowa (typowo 3000–4500 K),
  • \(T\) – temperatura bezwzględna w kelwinach.

Typowe zakresy

  • Rezystancja: od kilkudziesięciu Ω do kilku MΩ (przy 25 °C).
  • Temperatura pracy: zwykle −40 °C do +125 °C (specjalne nawet do +300 °C).

Cechy praktyczne

  • Bardzo duża czułość temperaturowa.
  • Wysoka rozdzielczość w wąskim zakresie temperatur.
  • Wymaga liniaryzacji (sprzętowej lub programowej).

Zastosowania

  • Czujniki temperatury (HVAC, AGD, automotive).
  • Kompensacja temperaturowa.
  • Ograniczniki prądu rozruchowego (inrush current limiter).

Termistory PTC (Positive Temperature Coefficient)

Definicja
Rezystancja rośnie wraz ze wzrostem temperatury.

Charakterystyka R(T)

  • W wersji „klasycznej”: łagodny, dodatni współczynnik temperaturowy.
  • W wersji ceramicznej (BaTiO₃):
    • gwałtowny skok rezystancji powyżej temperatury Curie (kilka rzędów wielkości).

Cechy praktyczne

  • Zachowanie quasi-przełącznikowe.
  • Silna samostabilizacja temperaturowa.

Zastosowania

  • Zabezpieczenia nadprądowe (bezpieczniki polimerowe – resetowalne).
  • Zabezpieczenia termiczne silników i transformatorów.
  • Elementy grzejne o samoregulacji temperatury.

Termistory NTC - praktyka inzynierska

Punkt wyjścia: fizyczna charakterystyka NTC

Dla termistora NTC w szerokim zakresie temperatur obowiązuje zależność:

\[ R(T) = R_0 \cdot \exp\!\left[B\left(\frac{1}{T}-\frac{1}{T_0}\right)\right] \]

gdzie:

  • \(T\) – temperatura bezwzględna [K],
  • \(R(T)\) – rezystancja,
  • \(B\) – stała materiałowa termistora,
  • \(R_0\) – rezystancja w temperaturze odniesienia \(T_0\) (zwykle 25 °C = 298.15 K).

Ta postać nie jest liniowa i wprost nie nadaje się do klasycznej regresji liniowej.

Logarytmowanie

Logarytm naturalny po obu stronach równania:

\[ \ln R = \ln R_0 + B\left(\frac{1}{T}-\frac{1}{T_0}\right) \]

Po przekształceniu:

\[ \ln R = B \cdot \frac{1}{T} + \left(\ln R_0 - \frac{B}{T_0}\right) \]

I oto sedno:

\[ \boxed{ \ln R = a \cdot \frac{1}{T} + b } \]

czyli równanie prostej.

Przebieg eksperymentu

Elektronik:

  1. Mierzy temperaturę \(T_i\) (np. w °C),
  2. Przelicza ją na kelwiny:

\[ T_i[K] = T_i[°C] + 273.15 \]

  1. Mierzy odpowiadającą rezystancję \(R_i\),
  2. Buduje dane:

\[ x_i = \frac{1}{T_i} \]

\[ y_i = \ln R_i \]

Model regresji liniowej

Wykorzystując model regresji liniowej wyznacza jego parametry gdzie:

Z regresji:

\[ y=\beta_1 x + \beta_0 \]

otrzymujemy:

  • \(B = \beta_1\),
  • \(\ln R_0 = \beta_0 + \frac{B}{T_0}\)
  • \(R_0 = \exp\left(\beta_0 + \frac{B}{T_0}\right)\)

Czyli z kilku pomiarów rezystancji:

  • identyfikujemy parametry materiałowe termistora,
  • odtwarzamy jego pełną charakterystykę \(R(T)\).

Przykładowy przebieg ekperymentu

Elektronik odnajduje w swoich zasobach trzy termistory. Niestety nie zna ich parametrów. Postanawia więc eksperymentalnie określić parametry tych elementów. Przygotowuje więc pojemnik z lodem, dokładny termometr oraz typowy multimetr do pomiaru rezystancji. Czujnik termometru wraz z termistorami zanurza w pojemniku z lodem (i oczywiście nieco wody). Następnie powoli podnosi temperaturę pojemnika co jakiś czas rejestrując temperaturę oraz wskazania multimetru przełączając go pomiędzy trzy badane termistory.

W wyniku przeprowadzonego eksperymentu uzyskał następujące dane

df
## # A tibble: 16 × 4
##      T_C NTC_A  NTC_B  NTC_C
##    <dbl> <dbl>  <dbl>  <dbl>
##  1  0.05 34260 364000 13960 
##  2  5.24 26220 275900 10920 
##  3 10.4  19850 213900  8561 
##  4 14.4  16350 172500  7450 
##  5 19.5  13020 134700  5912 
##  6 24.8  10070  99700  4690 
##  7 29.6   8294  81470  3911 
##  8 34.7   6661  64880  3250 
##  9 40.0   5317  50950  2725 
## 10 44.8   4418  41970  2312 
## 11 49.9   3665  34660  1911 
## 12 55.3   3004  27090  1605 
## 13 59.3   2591  23450  1435 
## 14 65.6   2022  18580  1174 
## 15 69.9   1759  15620  1045 
## 16 75.3   1511  12730   894.

Obliczenia

Po zebraniu danych eksperymentator przekształca odpowiednio swoje dane a następnie używając modelu regresji liniowej wyznacza odpowiednie parametry termistorów.

df_calc = df %>% 
  pivot_longer(NTC_A:NTC_C, names_to = "id", values_to = "R") %>% 
  mutate(
    invT = 1 / (T_C + 273.15),
    lnR  = log(R),

    # Niepewność pomiaru (przykład): ±(0.5% wskazania + 2 cyfry LSD przy 4 cyfrach znaczących)
    R_err = 0.005 * R + 2 * lsd_4sig(R),

    # Niepewność pomiaru temperatury (przykład): ±0.25°C (termometr) + ±0.005°C (gradient/czas przełączenia)
    T_err = 0.25 + 0.005,

    # Zakresy dla słupków błędów (propagacja przez transformacje)
    invT_min = 1 / (T_C - T_err + 273.15),
    invT_max = 1 / (T_C + T_err + 273.15),

    R_min = pmax(R - R_err, .Machine$double.eps),
    R_max = R + R_err,
    lnR_min = log(R_min),
    lnR_max = log(R_max)
  ) %>%
  group_by(id) 

df_calc %>% ggplot(aes(T_C, R, colour = id))+
  geom_line()+
  geom_point(size=0.5)+
  geom_crossbar(aes(ymin = R - R_err, ymax = R + R_err), width = 0) +
  geom_segment(aes(x = T_C - T_err, xend = T_C + T_err, y = R, yend = R)) +
  facet_wrap(vars(id),  ncol  = 3, scales = "free_y") +
  labs(x = "T [°C]", y = "R [Ω]")

Te wykresy o wiele lepiej przedstawić po zastosowanych przekształceniach.

df_calc %>% 
  ggplot(aes(invT, lnR, colour = id)) +
  geom_smooth(method = "lm", formula = y ~ x, linewidth = 0.2) +
  geom_point(size = 0.6) +
  geom_crossbar(aes(ymin = lnR_min, ymax = lnR_max), width = 0) +
  geom_segment(aes(x = invT_min, xend = invT_max, y = lnR, yend = lnR)) +
  stat_poly_eq(
    formula = y ~ x,
    aes(label = paste(after_stat(eq.label), after_stat(rr.label), sep = "~~~")),
    parse = TRUE,
    size = 3
  ) +
  labs(x = "1/T [K^-1]", y = "ln(R)")

Jak widać uzyskane dane są idealnie liniowe.

Na koniec używając funkcji lm wyznaczamy parametry termistorów.

fitt = df_calc %>%
  do({
    m <- lm(lnR ~ invT, data = .)
    tibble::tibble(
      model = list(m),
      B_1 = coef(m)[["invT"]],
      B_0 = coef(m)[["(Intercept)"]],
      sigma = summary(m)$sigma,
      r2 = summary(m)$r.squared
    )
  }) %>%
  ungroup() %>%
  mutate(
    T0_K = 298.15,
    B_hat = B_1,
    lnR25_hat = B_0 + B_hat * (1 / T0_K),
    R25_hat = exp(lnR25_hat)
  )

fitt %>% select(-model)
## # A tibble: 3 × 9
##   id      B_1   B_0  sigma    r2  T0_K B_hat lnR25_hat R25_hat
##   <chr> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl>     <dbl>   <dbl>
## 1 NTC_A 3958. -4.06 0.0108 1.000  298. 3958.      9.22  10110.
## 2 NTC_B 4241. -2.70 0.0146 1.000  298. 4241.     11.5  101204.
## 3 NTC_C 3475. -3.19 0.0120 1.000  298. 3475.      8.47   4747.

Z osiągniętych wyników można się domyślić, że poszczególne termistory to handlowe wersje:

  • NTC_A: NTC 10k, B=3950K (bardzo popularny w elektronice, np. „10K 3950”)
  • NTC_B: NTC 100k, B=4250K (częsty w czujnikach temp. o większej rezystancji)
  • NTC_C: NTC 4.7k, B=3470K (spotykany, inna charakterystyka)

Jednak dzięki precyzyjnemu określeniu parametrów można ich użyć zamiast parametrów producenta.