Aziz Bench

Calcolo per termistori NTC

Dalla temperatura alla resistenza e ritorno con l’equazione Beta, più il partitore davanti all’ADC: la lettura a ogni temperatura, quanti gradi vale ogni passo e la resistenza fissa adatta al tuo intervallo.

Resistenza
5,3kΩ
a 40,0 °C · 0,53 × R25
Tensione all’ADC
1,143 V
Lettura ADC
1419
Per passo dell’ADC
0,027 °C
Lettura dell’ADC in funzione della temperatura
0200040000°20°40°60°80°100°
Termistore
Ω
K

Dal datasheet. B25/50 va meglio intorno alla temperatura ambiente, B25/85 per temperature più alte.

Calcola
Parti da
°C
Partitore e ADC
V
V

Uguale all’alimentazione su Arduino Uno con il riferimento predefinito. L’ADC dell’ESP32 ha un suo riferimento: lì, se puoi, usa le tensioni calibrate.

Ω
Il termistore va a
Risoluzione dell’ADC
Intervallo di temperatura
°C
°C

Serve per la tabella, il grafico e la resistenza fissa migliore.

Resistenza fissa migliore

Da 0 °C a 100 °C il partitore è più sensibile a metà intervallo con 3,59 kΩ, la resistenza del termistore a 50 °C. Valore E24 più vicino: 3,6 kΩ.

Letture da 0 °C a 100 °C

TemperaturaResistenzaTensioneADCPer passo
0 °C33,6 kΩ2,543 V31560,026 °C
10 °C20,2 kΩ2,206 V27380,022 °C
20 °C12,5 kΩ1,836 V22780,022 °C
30 °C8,04 kΩ1,470 V18250,023 °C
40 °C5,3 kΩ1,143 V14190,027 °C
50 °C3,59 kΩ0,871 V10810,033 °C
60 °C2,49 kΩ0,657 V8150,043 °C
70 °C1,76 kΩ0,494 V6130,057 °C
80 °C1,27 kΩ0,372 V4620,077 °C
90 °C934 Ω0,282 V3500,1 °C
100 °C698 Ω0,215 V2670,14 °C

Da tenere presente

Codice

Arduino
// NTC 10 kΩ, B 3950, NTC verso GND
const float R_FIXED = 10000.0;  // resistenza fissa, ohm
const float R25 = 10000.0;      // resistenza dell’NTC a 25 °C, ohm
const float BETA = 3950.0;
const float V_SUPPLY = 3.3;    // alimentazione del partitore, volt
const int PIN = 34;  // GPIO34

float readTempC() {
  long sum = 0;
  for (int i = 0; i < 16; i++) sum += analogReadMilliVolts(PIN);  // media di 16 letture
  float ratio = (sum / 16.0) / 1000.0 / V_SUPPLY;  // ESP32: calibrated millivolts, not raw counts
  if (ratio <= 0.0 || ratio >= 1.0) return NAN;          // in corto o scollegato
  float r = R_FIXED * ratio / (1.0 - ratio);   // NTC verso GND
  return 1.0 / (1.0 / 298.15 + log(r / R25) / BETA) - 273.15;
}
ESPHome
sensor:
  - platform: adc
    id: ntc_voltage
    pin: GPIO34
    attenuation: 12db
    update_interval: 10s
  - platform: resistance
    id: ntc_resistance
    sensor: ntc_voltage
    configuration: DOWNSTREAM  # NTC verso GND
    resistor: 10kOhm
    reference_voltage: 3.3V
  - platform: ntc
    sensor: ntc_resistance
    name: Temperatura
    calibration:
      b_constant: 3950
      reference_temperature: 25°C
      reference_resistance: 10kOhm
Testo semplice, per i tuoi appunti o un forum.

L’equazione Beta

La resistenza di un termistore NTC scende quando si scalda, più o meno in modo esponenziale. I datasheet danno la resistenza a 25 °C (R25) e un valore B, che insieme descrivono la curva:

R(T) = R25 × e^(B × (1/T − 1/298,15))
T = 1 ÷ (1/298,15 + ln(R ÷ R25) ÷ B) − 273,15
(T in kelvin: °C + 273,15)

Esempio: un termistore da 10 kΩ B3950 a 50 °C. 1/323,15 − 1/298,15 = −0,00025948; × 3950 = −1,0249; e^−1,0249 = 0,3588; R = 10 kΩ × 0,3588 ≈ 3,59 kΩ.

B25/50 o B25/85?

B si ricava dalla resistenza a due temperature, e il datasheet indica quali: B25/50 usa 25 e 50 °C, B25/85 usa 25 e 85 °C. Per lo stesso componente i due valori sono un po’ diversi: il Murata NCP18XH103F03RB ha 3380 K come B25/50 e 3434 K come B25/85. Usa quello la cui seconda temperatura è più vicina a dove misuri.

Come scegliere la resistenza fissa

In un partitore la tensione cambia più in fretta con la temperatura quando la resistenza fissa è uguale a quella del termistore a quella temperatura. Quindi scegli la resistenza a metà dell’intervallo che ti interessa: 10 kΩ per un termistore da 10 k intorno alla temperatura ambiente, circa 3,6 kΩ per 0–100 °C (3,59 kΩ a 50 °C). Più ti allontani dal centro, più gradi copre ogni passo dell’ADC.

Il lato su cui va il termistore inverte soltanto la curva: con il termistore verso GND la tensione scende quando si scalda, con il termistore verso l’alimentazione sale.

Resistenza di un termistore da 10 kΩ B3950

TemperaturaResistenzaα
-20 °C105 kΩ-6,16 %/°C
-10 °C58,2 kΩ-5,7 %/°C
0 °C33,6 kΩ-5,29 %/°C
10 °C20,2 kΩ-4,93 %/°C
20 °C12,5 kΩ-4,6 %/°C
30 °C8,04 kΩ-4,3 %/°C
40 °C5,3 kΩ-4,03 %/°C
50 °C3,59 kΩ-3,78 %/°C
60 °C2,49 kΩ-3,56 %/°C
70 °C1,76 kΩ-3,35 %/°C
80 °C1,27 kΩ-3,17 %/°C
90 °C934 Ω-3 %/°C
100 °C698 Ω-2,84 %/°C
110 °C529 Ω-2,69 %/°C
120 °C407 Ω-2,56 %/°C

Calcolata con l’equazione Beta, R25 = 10 kΩ, B = 3950 K. α è la variazione di resistenza per grado. I componenti reali seguono la tabella del loro datasheet, soprattutto lontano da 25 °C.

Precisione

Di solito l’errore dipende da tre cose. La tolleranza del termistore: ±1 % su R25 vale circa ±0,26 °C intorno alla temperatura ambiente per un componente con B 3380, perché lì la sua resistenza cambia di circa il 3,8 % per grado. Il modello: l’equazione Beta è esatta alle sue due temperature di riferimento e fuori se ne allontana; su un intervallo ampio usa l’equazione di Steinhart–Hart con tre punti di calibrazione. E l’autoriscaldamento: la corrente del partitore scalda il termistore, quindi tienila bassa, oppure alimenta il partitore solo durante la misura.

Domande frequenti

Cosa significa B3950 su un termistore?

È il valore B, 3950 K: quanto ripidamente la resistenza scende con la temperatura. Insieme alla resistenza a 25 °C (10 kΩ in un “10k B3950”) definisce la curva che usa il calcolatore. Il datasheet indica tra quali due temperature è stato misurato, per esempio 25/50 °C.

10 kΩ o 100 kΩ?

Scegli quello la cui resistenza resta in un intervallo che il partitore riesce a leggere alle tue temperature. 10 kΩ va bene per ambiente, acqua e frigorifero. A 250 °C un 10 kΩ B3950 scende a circa 34 Ω, per questo gli hotend delle stampanti 3D usano termistori da 100 kΩ come il Semitec 104GT-2, che secondo l’equazione Beta a 200 °C ha ancora circa 500 Ω.

Quale resistenza fissa devo usare?

La resistenza del termistore a metà del tuo intervallo di temperatura: così il partitore è più sensibile dove misuri. Il calcolatore la ricava dall’intervallo che inserisci e la arrotonda a un valore standard.

NTC, PTC o DS18B20?

Un NTC è economico, piccolo e veloce, ma servono un partitore, un ADC e la formula. In un termistore PTC la resistenza sale con la temperatura, spesso di colpo a un certo punto: per questo i PTC si usano soprattutto come fusibili ripristinabili e interruttori di sovratemperatura, più che per misurare. Il DS18B20 è un sensore digitale: niente calibrazione e ±0,5 °C da −10 a +85 °C secondo il datasheet, ma è più lento e limitato a −55…+125 °C.

Perché le mie letture sbagliano di qualche grado?

Controlla, in quest’ordine: che R25 e B corrispondano al tuo componente; il valore reale della resistenza fissa; che il codice preveda lo stesso collegamento (termistore verso GND o verso l’alimentazione); che il riferimento dell’ADC sia quello che il codice si aspetta; e l’ADC stesso. L’ADC dell’ESP32 non è lineare vicino a 0 V e in cima alla scala: tieni la tensione del partitore nella parte centrale o usa letture calibrate.

Come collego un termistore a un ESP32 o ad Arduino?

Un capo del termistore a GND, l’altro a un pin analogico e, attraverso la resistenza fissa, a 3,3 V (5 V su un Arduino a 5 V). Aggiungi un condensatore da 100 nF tra il pin e GND. Sull’ESP32 usa un pin dell’ADC1 come GPIO34: l’ADC2 non si può usare quando il Wi-Fi è acceso.