Embedded Sensors, Battery BMS & Thermal Management
NTC Thermistor Beta & Steinhart-Hart Divider Formula
Calculate Microcontroller Pull-Up Voltage Divider Output V_adc = V_ref * R_ntc / (R_pull + R_ntc), Log Resistance Ratio LN(R_ntc / R_25), Absolute Kelvin Temperature 1 / (1/298.15 + LN(R/R_25)/Beta), and Celsius Temperature.
Convert nonlinear EV battery-pack NTC thermistor resistance into Kelvin before subtracting 273.15!
Lithium-ion Battery Management Systems (BMS) and 3D-printer hotends monitor cell temperatures using Negative Temperature Coefficient (NTC) ceramic thermistors wired in a ratiometric voltage divider with a fixed precision pull-up resistor R_pull: V_adc = V_ref * (R_ntc / (R_pull + R_ntc))! Firmware beginners often plug Celsius T_0 = 25 instead of absolute Kelvin T_0 = 298.15 K into the two-parameter Steinhart-Hart Beta equation—causing divide-by-zero or wild temperature errors! Exact semiconductor Arrhenius activation gives 1 / T_K = (1 / 298.15) + (1 / Beta_K) * LN(R_ntc / R_25), from which Celsius Temperature is T_C = T_K - 273.15!
Verify on a 10k-NTC BMS Channel—ADC_Reference V_ref = 3.30 V (B2), Pullup_Resistor R_pull = 10.0 kOhm (B3), Measured_NTC_Resistance R_ntc = 10.0 kOhm (B4), Nominal_25C_Resistance R_25 = 10.0 kOhm (B5), and Material_Beta_25_85 = 3,950 K (B6): Midpoint Divider Voltage is 3.30 * (10 / 20) = 1.6500 V (E2); Log Resistance Ratio LN(10 / 10) is 0.0000 (E3); Absolute Temperature is 298.15 K (E4); and Cell Temperature is 25.00 °C (E5)! Heat the battery pack until R_ntc drops 4x to 2.50 kOhm: V_adc drops to 0.6600 V, T_K climbs to 332.99 K, and T_C alerts at 59.84 °C!
| NTC BMS Channel Metric (Vref=3.3V, Rpull=10k, Rntc=10k, R25=10k, Beta=3,950 K) | Formula | Verified Output |
|---|---|---|
| ADC Voltage Divider V_adc (V) | V_ref * (R_ntc / (R_pull + R_ntc)) | 1.6500 V (0.6600 V @ R_ntc=2.5k) |
| Natural Log Ratio LN(R / R_25) | LN(R_ntc / R_25) | 0.0000 (-1.3863 @ R_ntc=2.5k) |
| Absolute Temperature T (Kelvin) | 1 / ((1 / 298.15) + LN(R/R25) / Beta) | 298.15 K (332.99 K @ R_ntc=2.5k) |
| Pack Cell Temperature (°C) | T_Kelvin - 273.15 | 25.00 °C (59.84 °C @ R_ntc=2.5k) |
NTC Thermistor Beta-Equation Celsius Temperature Formula
Validate strictly positive V_ref, R_pull, R_ntc, R_25, Beta_K > 0, and guard positive reciprocal Kelvin denominator!
=LET(v_rf, B2, r_pl, B3, r_nt, B4, r_25, B5, bt_k, B6, IF(OR(v_rf <= 0, r_pl <= 0, r_nt <= 0, r_25 <= 0, bt_k <= 0), "Invalid Thermistor Input", LET(inv_t, (1 / 298.15) + LN(r_nt / r_25) / bt_k, IF(inv_t <= 0, "Invalid Thermistor Input", ROUND((1 / inv_t) - 273.15, 2)))))High-Temperature Thermal-Runaway Pre-Alarm Check (Set R_ntc = 2.5 kOhm)
Set Measured_NTC_Resistance B4 = 2.5 kOhm: V_adc E2 drops to 0.6600 V, Absolute Kelvin E4 rises to 332.99 K, and Pack Temperature E5 reaches 59.84 °C!
=IF(ISTEXT(E5), E5, ROUND(1 / ((1 / 298.15) + LN(B4 / B5) / B6), 2))Try the example
Use the original values or change them to test your understanding.