Translating Thermistor Voltage to Temperature: The Core Math

Measuring temperature accurately in power electronics starts with a solid analog front-end. A thermistor is a variable resistor, but your microcontroller's ADC only reads voltage. To bridge this gap, you build a voltage divider and apply the Steinhart-Hart equation. The target keyword for this process—thermistor voltage to temperature conversion—relies on precision in both hardware and math.

Let's use a standard 10kΩ NTC thermistor (like the Vishay NTCLE100E3103, roughly $0.50) paired with a 10kΩ 1% tolerance series resistor. If we place the NTC on the bottom (to ground) and the fixed resistor on top (to a 3.3V reference), the output voltage ($V_{out}$) at the midpoint is:

V_out = V_ref * [R_ntc / (R_series + R_ntc)]

Bench Example: At 25°C, the Vishay NTCLE100E3103 is exactly 10kΩ. Your ADC reads 1.65V. At 85°C, the thermistor resistance drops to roughly 1.07kΩ. The voltage drops to 0.32V. If your ADC is 12-bit (0-4095) on a 3.3V scale, 0.32V translates to an ADC raw value of 397.

Once you have the resistance calculated from the voltage, you convert it to Kelvin using the Steinhart-Hart equation: 1/T = A + B*ln(R) + C*(ln(R))^3. For the Vishay 10k NTC, the coefficients are approximately A = 0.001129, B = 0.0002341, and C = 0.0000000877. Never rely on the simpler Beta ($\beta$) parameter equation for wide-range measurements; it introduces up to 2°C of error at temperature extremes compared to Steinhart-Hart.

Thermal Path Math: From Junction to Ambient (RθJA)

Knowing the case temperature via your thermistor is only half the battle. The silicon junction inside the component is always hotter than the case you are measuring. To prevent silicon death, you must calculate the thermal path using thermal resistance ($R\theta$), measured in °C/W.

The fundamental thermal path equation is:

T_J = T_A + P_D * (Rθ_JC + Rθ_CS + Rθ_SA)

  • T_J: Junction temperature (what we are trying to keep safe)
  • T_A: Ambient air temperature inside the enclosure
  • P_D: Power dissipated in Watts
  • Rθ_JC: Junction-to-Case thermal resistance (from the datasheet)
  • Rθ_CS: Case-to-Sink thermal resistance (thermal paste/pad)
  • Rθ_SA: Sink-to-Ambient thermal resistance (your heatsink)

Let's look at a classic linear regulator, the TI LM317 in a TO-220 package, dropping 12V to 5V at 1A. The power dissipated ($P_D$) is $(12V - 5V) * 1A = 7W$. According to the TI LM317 datasheet, the $R\theta_{JC}$ is 2.5°C/W. Using a standard silicone thermal pad gives an $R\theta_{CS}$ of about 0.5°C/W.

How Hot is Too Hot and Interpreting Derating Curves

The absolute maximum junction temperature ($T_{J(max)}$) for the LM317 is 125°C. However, designing to the absolute limit is a rookie mistake. You must interpret the derating curve. The LM317 derates linearly to 0W output capability once the junction hits 125°C. Furthermore, internal thermal shutdown typically trips around 165°C, but repeated tripping degrades the silicon. A robust design targets a maximum $T_J$ of 105°C to 110°C, leaving a 15°C margin for transient spikes.

Heatsink Selection and Airflow: Sizing for the Worst Case

If your enclosure ambient ($T_A$) reaches 40°C on a hot day, and we target a $T_J$ of 110°C with our 7W LM317 load, we can solve for the required heatsink ($R\theta_{SA}$):

110 = 40 + 7 * (2.5 + 0.5 + Rθ_SA)
70 = 7 * (3 + Rθ_SA)
10 = 3 + Rθ_SA
Rθ_SA = 7 °C/W

You need a heatsink with a thermal resistance of 7°C/W or lower. A real-world part that fits this is the Wakefield 680-15ABP (stamped aluminum, ~$4.50), which provides roughly 6.5°C/W in natural convection.

What Airflow and Enclosure Changes Buy You

Natural convection relies on the chimney effect; if you mount the Wakefield heatsink horizontally or seal it in an unvented IP65 enclosure, its effective $R\theta_{SA}$ will double, and your LM317 will overheat. If you must use a sealed enclosure, you must add forced air. Adding a Noctua NF-A4x10 40mm fan (~$15) blowing directly across the fins drops the $R\theta_{SA}$ of that same stamped heatsink from 6.5°C/W down to roughly 3.5°C/W. This single airflow change allows you to push the LM317 to 1.5A (10.5W dissipation) while keeping the junction safely under 110°C.

Failure Signatures of Thermal Stress

When thermal management fails or is under-designed, components don't always die instantly. They exhibit specific failure signatures over time:

Component Thermal Failure Signature Mechanism
Silicon (MOSFETs/ICs) Increased Rds(on), threshold voltage drift Electromigration of metal interconnects at >105°C
Electrolytic Capacitors Increased ESR, capacitance drop, venting Electrolyte boil-off (life halves every 10°C rise)
Solder Joints / Packaging Intermittent connection, die delamination Thermal cycling causes creep and CTE mismatch fatigue
Thermistor (Sensor) Reading reads consistently 3-5°C too high Self-heating from excessive ADC excitation current
Warning: Thermistor Self-Heating. A common mistake when designing a thermistor voltage to temperature circuit is ignoring the dissipation constant ($\delta$). If your voltage divider sources 1mA through a 10kΩ thermistor, it dissipates 10mW. The Vishay NTCLE100 has a $\delta$ of roughly 2mW/°C in still air. That 10mW will artificially heat the thermistor bead by 5°C, completely ruining your thermal management feedback loop. Always use high-value series resistors or pulse the divider power via a GPIO pin to keep self-heating under 0.5°C.

Thermistor Voltage to Temperature FAQ

Why is my thermistor voltage to temperature reading drifting over time?

Drift usually stems from two physical issues rather than math errors. First, check for thermal coupling: if your thermistor is epoxied to a heatsink but the leads are touching a hot PCB trace, heat will wick down the copper leads (thermal short-circuiting). Second, check for moisture ingress. Unsealed NTC beads will absorb ambient humidity, which alters the resistance of the epoxy coating and shifts the baseline reading. For harsh environments, always specify a glass-encapsulated NTC (like the Vishay NTCG series) rather than a bare epoxy-coated bead.

How do I map a non-linear thermistor voltage to temperature in an ESP32 ADC?

The ESP32's internal ADC is notoriously non-linear, especially near the 0V and 3.3V rails, which will destroy the accuracy of your Steinhart-Hart calculations. To fix this, do not rely on the raw analogRead() mapping. Instead, use the ESP32's analogReadMilliVolts() function, which applies the factory-stored eFuse calibration data to linearize the reading. For the final conversion, avoid floating-point math in your main loop; pre-calculate a 256-byte lookup table mapping ADC millivolts to tenths-of-a-degree Celsius, and interpolate between the nearest two array indices.

Can I use a thermistor to measure a heatsink directly instead of calculating RθJA?

Yes, but you must understand the blind spot. Strapping a thermistor directly to the metal tab of a TO-220 gives you an excellent $T_C$ (Case Temperature) reading. However, it does not tell you the internal junction temperature ($T_J$). If your thermal paste dries out or the mounting torque is uneven, $R\theta_{JC}$ increases. Your thermistor might read a safe 60°C on the case, while the silicon junction inside is silently cooking at 130°C because the heat cannot escape the package. Always use the thermistor for active closed-loop fan control, but rely on RθJA math during the initial design phase to guarantee the junction stays within limits under worst-case stall conditions.