Work out the NTC thermistor accuracy you get from a resistor divider once the thermistor, resistor, reference, ADC, self-heating and firmware are all counted. See every contributor to thermistor temperature accuracy across your range, the budget at any temperature, and copy a C lookup table for the exact circuit.
Examples
ThermistorTDK B57861S0103F040 · ±1 % R, ±1 % B
10 kΩ ±1 %, B25/100 = 3988 K ±1 %, dissipation factor about 1.5 mW/K in air, −55 to 155 °C. R-T table 8016 from the datasheet. Datasheet
Model the firmware uses
43 points, -55 to 155 °C · R25 = 10 kΩ · B25/85 = 3974 K
%
%
mW/°C
Power for a 1 °C rise; the datasheet value is usually in still air.
DividerNTC to GND · Rs 10 kΩ ±1 % · 3.3 V
NTC position
The ADC voltage falls as temperature rises.
Ω
· max swing at 10.2 kΩ
%
Also used for Rp.
ppm/°C
Thick film is often ±100, thin film ±25 or better.
Resistors sit
°C
°C
Ω
Optional. Linearizes the curve at the cost of sensitivity.
V
%
Below 100 % when a GPIO powers the divider only to sample.
ADCMCP3208-B · 12-bit · ratiometric
Microchip MCP3208-B with VREF tied to the divider supply: INL ±1 LSB, offset ±3 LSB, gain error ±5 LSB, leakage ±1 µA (datasheet maximums). Datasheet
The error budget below is for this temperature. Click the chart to move it.
Worst case
±2.25 °C
at 85 °C; sum of every contributor
RSS
±0.92 °C
at 85 °C; root-sum-square
Resolution
0.022–0.089
°C per LSB (worst at 85 °C)
Self-heating
+0.18 °C
peak NTC power 272 µW
Divider current
298 µA
peak, at 85 °C where the NTC is lowest
ADC source impedance
9.07 kΩ
max; codes 3713 to 397 (81 % of span)
⚠ Self-heating reaches 0.18 °C. Murata sizes its maximum operating current for a 0.1 °C rise; raise the series resistor, lower the excitation or switch the divider on only while sampling.
Error contributors across temperature
Stack height is the worst case; the dashed line is the RSS. Click or tap to inspect a temperature.
Stacked error contributors from -20 to 85 °C. The top of the stack is the worst case; the dashed line is the root-sum-square total.
NTC R25 toleranceNTC B toleranceSelf-heatingDivider resistorsADC offset, gain, INLADC noise, quantization, leakageLookup tableRSS total
Error budget at 25 °C
NTC at 10 kΩ, ADC node at 1.65 V (code 2048), 0.022 °C per LSB. Error band -0.87 to +1.04 °C.
Contributor
Spec
Error (°C)
Share of worst case
Series resistor tolerance
±1 %
±0.23
22 %
NTC R25 tolerance
±1 %
±0.23
22 %
Self-heating
1.5 mW/°C
+0.18
17 %
ADC input leakage
±1 µA × source impedance
±0.14
13 %
Series resistor tempco
±100 ppm/°C, board 0 to 70 °C
±0.10
9.8 %
ADC offset
±3 LSB
±0.067
6.4 %
ADC gain error
±0.122 % of full scale
±0.056
5.3 %
ADC INL
±1 LSB
±0.022
2.1 %
Quantization
±½ LSB
±0.011
1.1 %
ADC noise (3σ)
0.5 LSB rms ÷ √16 × 3 = ±0.375 LSB
±0.0084
0.8 %
Lookup table interpolation
65 entries, linear
±0.0034
0.33 %
NTC B tolerance
±1 % (±39.7 K)
±0
0 %
Worst case (sum)
±1.05
RSS
±0.42
Firmware lookup table (C)
ADC code to 0.01 °C, linear interpolation. Worst interpolation error in range: 0.11 °C.
/* NTC lookup table: 12-bit ADC code -> temperature in 0.01 degC.
* TDK B57861S0103F040, NTC to GND, Rs = 10 kohm.
* ratiometric (ADC reference = divider supply).
* 65 entries, one every 64 codes, linear interpolation;
* clamped to -40.00 .. 105.00 degC.
* Open thermistor reads near code 4095, shorted near code 0:
* check for those before trusting the result.
* Generated by https://www.protoflow.ai/tools/ntc-accuracy-calculator
*/
#include <stdint.h>
#define NTC_ADC_MAX 4095u
#define NTC_LUT_SHIFT 6u
static const int16_t ntc_lut[65] = {
10500, 10500, 10500, 10500, 10068, 9261, 8613, 8074,
7609, 7201, 6838, 6510, 6210, 5933, 5675, 5433,
5205, 4990, 4784, 4588, 4399, 4217, 4042, 3872,
3706, 3545, 3388, 3234, 3083, 2934, 2788, 2643,
2500, 2358, 2216, 2076, 1936, 1796, 1656, 1515,
1373, 1231, 1087, 940, 792, 641, 487, 329,
166, -1, -175, -356, -545, -744, -955, -1182,
-1427, -1695, -1993, -2333, -2732, -3223, -3877, -4000,
-4000,
};
int16_t ntc_centi_celsius(uint16_t code)
{
if (code > NTC_ADC_MAX) code = NTC_ADC_MAX;
uint16_t i = (uint16_t)(code >> NTC_LUT_SHIFT);
int32_t frac = (int32_t)(code & 63u);
int32_t a = ntc_lut[i];
int32_t b = ntc_lut[i + 1u];
return (int16_t)(a + ((b - a) * frac) / 64);
}
····
How accurate is an NTC thermistor in a real circuit?
It depends on the whole circuit, and mostly on the parts around the ADC rather than the ADC itself. A 10 kΩ ±1 %, B ±1 % NTC with a 10 kΩ ±1 % series resistor on a 12-bit ratiometric ADC has a worst case of ±1.05 °C at 25 °C (RSS ±0.42 °C) and ±2.25 °C at 85 °C, where the thermistor's B tolerance takes over. Each error is found by moving one part to its limit and converting the ADC code back to temperature; worst case adds them, RSS root-sum-squares them.
Thermistor accuracy formulas: NTC model and divider
The firmware turns an ADC code into a resistance and the resistance into a temperature. The calculator runs exactly that chain, with the thermistor model you pick.
Beta: R(T) = R25 × e^(B (1/T − 1/T25)) Steinhart-Hart: 1/T = A + B ln R + C (ln R)³
R25, B
resistance at 25 °C and the B value (B25/85 unless the datasheet uses another pair)
T, T25
temperature in kelvin; T25 = 298.15 K
A, B, C
Steinhart-Hart coefficients, fitted through three points of the R-T table
With an R-T table, the calculator interpolates between neighboring points with their local B value, the method in TDK's application note. For the Vishay 10 kΩ table at 5 °C steps that stays within 0.015 °C of Vishay's own extended Steinhart-Hart formula.
ADC reading, 0 to 2^N − 1 (ATmega328P and MCP3208 datasheets use 2^N)
The last form is the ratiometric case (Vref = Vexc): the supply drops out, which is why a ratiometric divider has no excitation or reference term. With the NTC on the supply side, swap R and Rs.
How the error budget is calculated
Each contributor is found by perturbation, not by a linear sensitivity formula. At every temperature the circuit is evaluated twice more with one parameter at its + and − limit; both codes are converted back with the nominal model (what the firmware does), and the larger deviation is that contributor's error. Nonlinear effects near the ends of the range are therefore included.
eᵢ(T) = max |T̂(code(T, pᵢ ± Δpᵢ)) − T̂(code(T, p))| worst case = Σ eᵢ RSS = √(Σ eᵢ²)
T̂(code)
temperature the firmware reports for a code, using nominal values
eᵢ(T)
error from contributor i at true temperature T
Δpᵢ
the ± limit of that contributor
Contributor
How it is perturbed
NTC R25 tolerance
R(T) × (1 ± tol)
NTC B tolerance
R(T) × exp(±ΔB (1/T − 1/298.15 K)), ΔB = tol × B25/85 of the curve
Self-heating
NTC at T + P/δ, P = V_NTC² / R_NTC × duty (one-sided: always reads high)
Series resistor tolerance
Rs × (1 ± tol)
Series resistor tempco
Rs × (1 ± TC × max|T_board − 25 °C|), or × |T − 25 °C| when it sits with the NTC
Parallel resistor
Rp × (1 ± (tol + TC × ΔT))
Excitation and reference (separate reference only)
Vexc × (1 ± tol), Vref × (1 ± tol)
ADC offset, INL
code ± LSB
ADC gain error
code × (1 ± gain)
ADC noise
code ± 3σ/√N (N = samples averaged)
Quantization
code ± ½ LSB
ADC input leakage
V_ADC ± I_leak × (Rs ∥ R_NTC)
Lookup table
largest |table − exact| over the code segment, inside the operating range
Assumptions: errors are independent of each other, tolerance limits and 3σ noise are treated as equivalent bounds for the RSS, the averaged ADC noise is Gaussian, and self-heating uses the average power, which holds when the excitation pulses are short against the thermistor's thermal time constant (seconds for most parts). Quantization is kept at ±½ LSB even with averaging; with enough noise to dither, the real figure is smaller. Self-heating is solved for the temperature where the power balances; a rise above 100 °C, or a thermistor that runs away, is reported as an error instead of a number.
NTC thermistor accuracy examples
Example 1: a 10 kΩ NTC on a 12-bit ratiometric ADC
TDK B57861S0103F040 (10 kΩ ±1 %, B ±1 %, R/T table 8016), a 10 kΩ ±1 % 100 ppm/°C series resistor on a board at 0 to 70 °C, 3.3 V excitation, and an MCP3208-B at its datasheet limits, read ratiometrically from −20 to 85 °C. At 25 °C the worst case is ±1.05 °C (RSS ±0.42 °C). The largest terms are series resistor tolerance (±0.23 °C, 22 %), NTC R25 tolerance (±0.23 °C, 22 %), self-heating (+0.18 °C, 17 %) and ADC input leakage (±0.14 °C, 13 %).
At 85 °C the worst case grows to ±2.25 °C: the NTC B tolerance alone is ±0.71 °C, and each ADC code now spans 0.089 °C.
Example 2: a better series resistor and a duty-cycled divider
Same circuit with a 0.1 % 25 ppm/°C thin-film resistor and the divider powered 1 % of the time. At 25 °C the worst case falls to ±0.59 °C (from ±1.05 °C) and self-heating to 0.0018 °C. At 85 °C it only falls to ±1.79 °C, because the thermistor's own B tolerance (0.71 °C) is untouched. Past this point a better thermistor or a calibration buys more than a better resistor.
Example 3: an ADS1115 with its internal reference
A Murata NCP15XH103F03RC 0402 NTC with 10 kΩ from a 3.3 V ±1 % regulator, read by an ADS1115 on its ±4.096 V range. The ADS1115 has its own reference, so the regulator's tolerance goes straight into the reading: ±0.53 °C of the ±1.40 °C worst case at 25 °C. It is worst where the divider sits near a rail: ±2.95 °C at −20 °C. Measuring the excitation on a second channel and dividing makes the reading ratiometric again; with that term gone the range worst case is ±1.90 °C.
Beta equation error against the datasheet R-T table
Temperature a firmware Beta equation reports for the datasheet resistance, minus the true temperature. Vishay NTCLE100E3103 uses its B25/85 = 3977 K; TDK B57861S0103 (R/T 8016) uses its B25/100 = 3988 K. Both agree with the table at their two reference temperatures, to the rounding of the published B, and drift away from them.
Temperature
Vishay R (table)
Beta error
TDK R (table)
Beta error
−40 °C
332.1 kΩ
+2.99 °C
336.5 kΩ
+2.94 °C
−20 °C
96.36 kΩ
+1.71 °C
97.07 kΩ
+1.70 °C
0 °C
32.55 kΩ
+0.76 °C
32.65 kΩ
+0.77 °C
10 °C
19.87 kΩ
+0.40 °C
19.9 kΩ
+0.41 °C
25 °C
10 kΩ
0.00 °C
10 kΩ
0.00 °C
40 °C
5.33 kΩ
−0.24 °C
5.327 kΩ
−0.27 °C
60 °C
2.49 kΩ
−0.31 °C
2.488 kΩ
−0.39 °C
85 °C
1.07 kΩ
+0.01 °C
1.072 kΩ
−0.25 °C
100 °C
677.3 Ω
+0.39 °C
680 Ω
−0.01 °C
125 °C
338.7 Ω
+1.40 °C
341.7 Ω
+0.67 °C
150 °C
182.6 Ω
+2.84 °C
185.3 Ω
+1.67 °C
10k thermistor accuracy chart: temperature tolerance at R25 ±1 %, B ±1 %
The thermistor's own error, before any circuit: TDK B57861S0103F040 (R/T 8016, B25/100 = 3988 K ±1 %, so ΔB = ±39.9 K). The R25 term grows slowly as |α| falls; the B term is zero at 25 °C and dominates far from it.
Temperature
α (%/°C)
From R25 ±1 %
From B ±1 %
Thermistor total
−40 °C
−6.65
±0.15 °C
±0.56 °C
±0.71 °C
−20 °C
−5.81
±0.17 °C
±0.41 °C
±0.58 °C
0 °C
−5.11
±0.20 °C
±0.24 °C
±0.44 °C
25 °C
−4.38
±0.23 °C
±0.00 °C
±0.23 °C
50 °C
−3.81
±0.26 °C
±0.27 °C
±0.54 °C
85 °C
−3.15
±0.32 °C
±0.71 °C
±1.03 °C
100 °C
−2.92
±0.34 °C
±0.92 °C
±1.27 °C
125 °C
−2.58
±0.39 °C
±1.31 °C
±1.70 °C
What goes wrong in real NTC circuits
Self-heating: the reading is always high, by P/δ. The datasheet δ is usually for a part in still air or on a small test board; a thermistor in a sealed probe or on a large copper pour behaves differently. Keep it under about 0.1 °C or duty-cycle the divider, and let the node settle before sampling.
Source impedance: a 10 kΩ divider presents several kΩ to the ADC. Many MCU ADCs ask for 10 kΩ or less (the ATmega328P datasheet says so); add a capacitor at the pin much larger than the sampling capacitor, or a longer sampling time. Pin leakage through that impedance is a real error at its datasheet maximum.
Ratiometric in name only: the ADC reference and the top of the divider must be the same node. A separate regulator, a ferrite or a long shared trace between them reintroduces part of the supply error.
One-point calibration: scaling the measured resistance at one known temperature removes both the R25 and the series resistor tolerance at every temperature, because both multiply the resistance ratio. The B tolerance remains and grows away from the calibration point; a second point removes most of it.
Model choice: the Beta equation is fine near its reference temperatures and poor beyond them. Use the manufacturer’s R-T table, or a Steinhart-Hart fit through three points of it, for a wide range.
Lead and connector resistance add to the thermistor. For a 10 kΩ part it is negligible; for a 100 Ω to 1 kΩ part at high temperature, or long leads, include it.
Glossary
R25
The thermistor’s zero-power resistance at 25 °C, with its tolerance (for example 10 kΩ ±1 %).
B value (B25/85)
The constant in R = R25·exp(B(1/T − 1/T25)), defined between two temperatures (here 25 and 85 °C). Its tolerance spreads the curve away from 25 °C.
α (TCR)
The thermistor’s relative sensitivity, (1/R)(dR/dT), about −4 %/°C at 25 °C for a typical 10 kΩ NTC.
Dissipation constant (δ)
Power that raises the thermistor 1 °C above its surroundings, in mW/°C. Depends on mounting and airflow.
Ratiometric measurement
Using the divider’s own supply as the ADC reference, so supply and reference errors cancel.
LSB
One ADC code: the full-scale voltage divided by 2^N.
INL
Integral nonlinearity: the largest deviation of the ADC’s transfer curve from a straight line, in LSB.
Worst case and RSS
Worst case adds the magnitude of every error; RSS (root-sum-square) adds them as independent random errors.
Related guides
NTC thermistor calculator: resistance and temperature with the Beta model, without the error budget.
The part alone: a 10 kΩ ±1 %, B ±1 % NTC (TDK B57861S0103F040) is within ±0.23 °C at 25 °C and ±1.03 °C at 85 °C, because the B tolerance grows away from 25 °C. The measurement adds the series resistor, the ADC and self-heating: with a 1 % resistor and a 12-bit ratiometric ADC the worst case is ±1.05 °C at 25 °C and ±2.25 °C at 85 °C.
How do I convert thermistor resistance tolerance into temperature error?
Divide the resistance deviation by the size of the thermistor's sensitivity α: ΔT ≈ (ΔR/R) / |α|. At 25 °C a 10 kΩ, B = 3988 K part has α = −4.38 %/°C, so ±1 % of resistance is about ±0.23 °C. Vishay's NTCLE100E3 datasheet works the same example at 0 °C: ±5.97 % at 5.09 %/K is ±1.17 °C.
What series resistor gives the best NTC accuracy?
For the largest voltage swing over a range, use Rs = √(R(Tmin) × R(Tmax)): 10.2 kΩ for this 10 kΩ part from −20 to 85 °C. The best value for accuracy also weighs self-heating and where you need the most resolution; the calculator's "Find the best E96 value" button tests E96 values from a third of the thermistor's lowest resistance to three times its highest against the full error budget.
Does a ratiometric ADC remove the reference error?
Yes. When the ADC reference is the same supply that drives the divider, the code depends only on Rs and the NTC, so the supply and reference tolerances cancel (TI's SLYT786 shows the algebra). It does not remove the ADC's own offset, gain error and INL, or the resistor and thermistor tolerances. In the ADS1115 example below, a 1 % excitation error alone costs ±0.53 °C at 25 °C.
How much does self-heating affect an NTC reading?
The thermistor warms by ΔT = P / δ, where P is the power in it and δ the dissipation constant. A 10 kΩ NTC with 10 kΩ from 3.3 V dissipates 272 µW; at the TDK part's 1.5 mW/K that reads 0.18 °C high. Powering the divider only while sampling divides it by the duty cycle.
Should I use the Beta equation, Steinhart-Hart or a lookup table?
Use the manufacturer's R-T table (or Steinhart-Hart fitted to it) when you need better than about a degree away from 25 °C. The Beta equation fitted at 25 and 85 °C is off by 2.99 °C at −40 °C and 1.40 °C at 125 °C for the Vishay NTCLE100E3103; interpolating Vishay's own 5 °C table stays within 0.015 °C of its exact formula.
Should I quote worst case or RSS error?
Worst case assumes every part sits at its limit in the worst direction at once; use it for safety limits and anything you must guarantee. RSS assumes the errors are independent and is a better guide to the spread across a production run. The real error of one unit is usually closer to RSS.
Why is an NTC less accurate at high temperature?
The thermistor's sensitivity falls (|α| is 3.15 %/°C at 85 °C versus 4.38 %/°C at 25 °C) and the divider compresses as its resistance drops far below Rs, so each ADC code spans more degrees and the B tolerance grows. In the default design the resolution falls to 0.089 °C per LSB at 85 °C.
ProtoFlow is free AI PCB design software: describe a circuit and get a schematic with real parts, PCB layout with an autorouter, SPICE simulation and Gerber files. Native KiCad, Altium and EAGLE import and export. Free on macOS, Windows and Linux.