NTC termistor Amphenol Advanced Sensors SC30F103V - nastavení, kalibrace, programování

12.10.2021 Arduino #arduino #ntc #termistor

Metodika pro výpočet koeficientů Steinhart-Hartova modelu, pro přesné snímání teploty a ukázka implementace v Arduino.


Co je termistor NTC

Termistory jsou polovodičové prvky snímající teplotu. Se změnou teploty se mění jejich odpor.Tento odpor lze měřit pomocí malého, stejnosměrného proudu nebo napětí procházejícího termistorem za účelem měření vzniklého úbytku napětí.Tato teplotní čidla v fungují jako elektrické odpory, které jsou citlivé na teplotu.

Termistory se obecně skládají ze slinuté keramiky sestávající se z vysoce citlivého materiálu s konzistentně reprodukovatelnými vlastnostmi odporu proti teplotě. Termistory NTC jsou nelineární odpory, které s teplotou mění své odporové charakteristiky. Odpor NTC se bude snižovat se zvyšující se teplotou. Způsob, jakým odpor klesá, souvisí s konstantou známou v elektronickém průmyslu jako beta nebo ß. Beta se měří v ° K.

Odpor termistorů NTC při dané teplotě lze snadno vypočítat pomocí beta, ale existuje ještě přesnější způsob, jak to provést a to pomocí Steinhart & Hart rovnice. Termistory NTC jsou také vynikající alternativou k polovodičovým obvodům pro řešení problémů souvisejících s teplotou. Lze je snadno použít k výpočtu teplotního koeficientu.

Pro porozumění termistorům a jejich potenciálnímu využití může být nápomocna některá základní terminologie. Za prvé, standardní referenční teplota je obvykle 25 °C nebo teplota tělesa termistoru, když je patrný odpor s nulovým výkonem. Tento odpor nulového výkonu je stejnosměrný odpor odporu termistoru při měření na konkrétní teplotě s dostatečně nízkým ztrátovým výkonem z termistoru pro jakékoli další snížení výkonu, což má za následek ne menší než 1/10 konkrétní tolerance měření nebo nulový bod jednoprocentní změna odporu.

Poměr odporu je charakteristika, která identifikuje poměr odporu nulového výkonu termistoru při 125 ° k odporu při 25 °C. Maximální provozní teplota je nejvyšší tělesná teplota, při které bude termistor pracovat s přijatelnou stabilitou po dlouhou dobu. Tato teplota by neměla překročit nejvyšší uvedenou hodnotu. Podobně je maximální výkon termistorů nejvyšší výkon, při kterém bude termistor pracovat po určitou dobu při zachování stability.

Jak používat termistor NTC k měření teploty

Výstupem termistoru je změna odporu. Tuto změnu odporu lze měřit pomocí děliče napětí přidáním jednoho sériového rezistoru s termistorem uvedeným níže.

Rozhraní termistoru

Nyní lze změřit analogové výstupní napětí, které je funkcí změny odporu se změnou teploty.

1.Převod analogového napětí na odpor termistoru

Jak vypočítat hodnotu odporu termistoru?

 textbf {Rth}  textbf {=}  left ( frac { textbf {1023*Series Resistor}} { textbf {ADC Output}}  right)  textbf {- Series Resistor}

ADC Output - digitální hodnota Vout (od 0 do 1023).

Séries Resistpr - ve schématu zapojení uvedeném výše jsme použili odpor 10 K ohmů.

2. Vypočet teploty z odporu

Steinhart Hartova rovnice - rovnice se používá k odvození přesné teploty termistoru, protože poskytuje bližší přiblížení skutečné teplotě než jednodušší rovnice koeficientem odporu Beta. Je použitelná v celém rozsahu pracovních teplot snímače.

 frac { textbf {1}} { textbf {T}}  textbf {=}  textbf {A+B}  left ( textbf {lnR}  right)  textbf {+C}  left ( textbf {lnR}  right) ^{ textbf {3}}

T - teplota v kelvinech

R –přirozený logaritmus odporu

A, B a C jsou koeficienty odvozené z experimentálního měření.

Jak získat hodnoty A, B a C?

Existují tři způsoby, jak tyto tři hodnoty získat.

  • Podle metody „Kalibrace Steinhart-Hartových koeficientů pro termistory“ můžeme změřit hodnotu odporu termistoru při různých teplotách a pomocí maticové metody lze vypočítat hodnoty A, B, C.
  • A, B a C jsou Steinhart-Hartovy koeficienty, které se budou lišit v závislosti na typu a modelu termistoru.
  • Steinhart Hartův vzorec je typicky přesný kolem +/- 0,15 °C, v rozmezí -50 °C až +150 °C, což je užitečné pro většinu aplikací.
  • Pro snížený teplotní rozsah, 0 °C až 100 °C, získáme lepší přesnost, kolem +/- 0,01 °C.

Rovnice s parametrem B

  • Ve výše uvedené Steinhart-Hartově rovnici musíme znát nebo vypočítat různé proměnné (A, B a C). Tomu se lze vyhnout použitím parametru B, který uvádí výrobce termistorů.
  • Jedná se také o Steinhart-Hartovu rovnicu s C = 0.

 frac { textbf {1}} { textbf {T}}  textbf {=}  frac { textbf {1}} { textbf {T0}}+ frac { textbf {1}} { textbf {B}}  textbf {ln}  left ( frac { textbf {R}} { textbf {R0}}  right)

Všechny teploty jsou v Kelvinech

T0 – Pokojová teplota, tj. 25 °C = 298,15 K.

B - Součinitel termistoru (uveden na termistoru).

R0 - Odpor při pokojové teplotě, např. 10 K NTC má 10K odpor při pokojové teplotě.

R - Sériový rezistor.

Termistor SC30F103V od Amphenol Advance Sensor

Termistory řady SC310 a SC50 jsou Thermometrics Epoxy Type SC NTC čipové termistory s pouzdry s těžkými izomidově izolovanými niklovými olověnými dráty. Poskytují přesné měření teploty, ovládání a kompenzaci s použitím v rozsahu -40 °C až 105 °C (-40 °F až 221 °F) a vysokou citlivostí vyšší než -4%/°C při 25 °C (77 °F), díky čemuž jsou ideální pro lékařské aplikace.

Pro zodpovědnou práci s termistory SC30 je nutné mít k dispozici tabulku pro převod odporu a teploty. Chceme-li určit jmenovitou hodnotu odporu termistoru při zadané teplotě, vynásobíme jeho hodnotu RT/R25 pro požadovanou teplotu a křivku RT z níže uvedené tabulky jeho nominálním odporem při 25 °C.

Specifikace SC30, SC50.
Křivka resistence v závislosti na teplotě.

Temperature (°C) Rt/R25 nominal Temp Coef (%/°C) ∝ β Deviation† (±%)
-50 68.60 7.21% 2.30%
-45 48.16 6.96% 2.68%
-40 34.23 6.71% 2.87%
-35 24.62 6.48% 2.92%
-30 17.91 6.26% 2.86%
-25 13.17 6.05% 2.71%
-20 9.782 5.85% 2.50%
-15 7.339 5.66% 2.25%
-10 5.558 5.47% 1.97%
-5 4.247 5.30% 1.68%
3.274 5.13% 1.37%
5 2.544 4.97% 1.07%
10 1.992 4.81% 0.78%
15 1.572 4.67% 0.50%
20 1.250 4.53% 0.24%
25 1.000 4.39% 0.00%
30 0.8056 4.26% 0.21%
35 0.6530 4.14% 0.40%
40 0.5326 4.02% 0.56%
45 0.4369 3.91% 0.69%
50 0.3604 3.80% 0.80%
55 0.2989 3.69% 0.87%
60 0.2491 3.59% 0.92%
65 0.2087 3.49% 0.93%
70 0.1756 3.40% 0.92%
75 0.1485 3.31% 0.88%
80 0.1261 3.23% 0.81%
85 0.1075 3.14% 0.72%
90 0.09209 3.06% 0.59%
95 0.07916 2.99% 0.45%
100 0.06831 2.91% 0.28%
105 0.05916 2.85% 0.08%
110 0.05141 2.77% 0.12%
115 0.04483 2.70% 0.36%
120 0.03922 2.64% 0.61%
125 0.03442 2.57% 0.87%
130 0.03030 2.51% 1.16%
135 0.02675 2.47% 1.46%
140 0.02369 2.41% 1.82%
145 0.02103 2.35% 2.14%
150 0.01872 2.35% 2.46%

Jestliže jsme určili požadované hodnoty R/T z výše uvedené tabulky pomocí Steinhart-Hart modelu, zadáme je do termistorové kalkulačky, abychom určili koeficienty A, B a C.

Zde je použita termistorová kalkulačka SRS poskytovaná společností Stanford Research Systems.

 

Implementace koeficientů A, B, C do kódu by mohla vypadat následovně:

#include <math.h>

double Temp;

float a=1.053746008e-3;
float b=2.465568113e-4;
float c=0.3762658365e-7;

double Thermistor(int RawADC) {
//Connection 5V - Thermistor - AI - 10k - GND
  Temp = log(100000.0 * ((1024.0 / RawADC - 1)));
  Temp = 1 / (a + (b + (c * Temp * Temp )) * Temp );
  Temp = Temp - 273.15;            // Convert Kelvin to Celcius
}

void setup() {
  Serial.begin(9600);
}

void loop() {
  Thermistor(analogRead(A0));
  Serial.print(Temp); Serial.print(" °C "); // display Celcius

  Temp = (Temp * 1.8) + 32.0; // Convert Celcius to Fahrenheit return Temp;
  Serial.print(Temp); Serial.println(" °F"); // display Fahrenheit
  delay(500);
}

Original zdroj: https://github.com/AmphenolAdvancedSensors/Thermometrics/blob/master/NTC_10K_Thermistor.ino

Pro skutečné použití je třeba provést několik měření, jinak existuje možnost, že výsledky nemusí být podle očekávání, zejména kvůli rušením na kabelech. Obvod by měl také obsahovat RC filtr! Proto je vhodné provést několik měření za sebou a provést průměr naměřených hodnot nebo vybrat střední hodnotu. Experimentálně se ukazuje, že výběr stření hodnoty vykazuje lepší výsledky. Níže je uveden kód pro provedení vícero měření vybrání střední hodnoty.

#define MEDIAN_COUNT 15
#define MEDIAN_DELAY 2

void isort(int *a, int n)
{
 for (int i = 1; i < n; ++i)
 {
   int j = a[i];
   int k;
   for (k = i - 1; (k >= 0) && (j < a[k]); k--)
   {
     a[k + 1] = a[k];
   }
   a[k + 1] = j;
 }
}

int analogReadMedian(int port)
{
  int values[MEDIAN_COUNT];
  for(int i =0; i != MEDIAN_COUNT; ++i)
  {
    values[i] = analogRead(port);
    delay(MEDIAN_DELAY);
  }
  isort(values, MEDIAN_COUNT);
  return values[MEDIAN_COUNT / 2 + 1];
}