NTC 10K 热敏电阻测温补偿算法
NTC 热敏电阻广泛应用于嵌入式系统中。标称值为 10kΩ 的 NTC(常称'NTC 10K')凭借成本低、响应快、电路简单,成为温度测量的常用元件。但其阻值与温度呈非线性指数关系,直接换算误差较大,需通过软件算法进行补偿。
基础电路
典型 NTC 测温电路为分压器结构:
Vcc -- R_ref (10k) -- ADC Input
|
NTC (10k @ 25°C)
|
GND
MCU 采集电压后计算 NTC 阻值:
$$ R_{NTC} = R_{ref} \cdot \frac{V_{out}}{V_{cc} - V_{out}} $$
听起来挺直观对吧?可真正的挑战才刚刚开始——怎么把 $ R_{NTC} $ 变成准确的温度?
因为 NTC 的 R-T 曲线根本不是线性的!它是指数级的,低温区变化迅猛,高温区趋于平缓。如果你强行用一条直线去拟合,结果只会让你怀疑人生。
所以,必须上算法!而且得选对'武器'。
Steinhart-Hart 方程:精度王者
如果要评选'最准的 NTC 算法',那必须是 Steinhart-Hart 方程 :
$$ \frac{1}{T} = A + B \cdot \ln(R) + C \cdot (\ln(R))^3 $$
其中:
- $ T $ 是开尔文温度(K)
- $ R $ 是实测 NTC 阻值
- $ A, B, C $ 是材料系数,由厂商提供或三点标定得出
这套公式能在 -40°C 到 +125°C 范围内做到 ±0.1~0.5°C 的惊人精度,堪称工业级首选。
举个例子,某常见 10D-9 型号的参数可能是:
#define A 1.12915e-3
#define B 2.34124e-4
#define C 8.76741e-8
实现起来也不复杂:
#include <math.h>
float steinhart_hart(float r_ntc) {
float ln_r = log(r_ntc);
float inv_t = A + B * ln_r + C * pow(ln_r, 3);
float temp_k = 1.0 / inv_t;
return temp_k - 273.15f;
}

