参数设置
电源电压 Vs = 3.3 V、串联阻值 Rs = R0 的电压分压器输出。
阻值-温度特性 R(T)
横轴=温度 T(°C)/ 纵轴=阻值 R(kΩ·对数)/ 黄=当前点 (T, R)、蓝=基准点 (T0, R0)
电压分压器电路
3.3 V 电源 → 串联阻值 Rs = R0 → 热敏电阻 R(T) → GND。中点电压为 Vout
理论与主要公式
用β参数模型表示NTC热敏电阻的阻值-温度特性。T 和 T0 为绝对温度(K)。
阻值-温度特性(β参数模型):
$$R(T) = R_0\,\exp\!\left[B\!\left(\frac{1}{T} - \frac{1}{T_0}\right)\right]$$
电压分压器的输出电压(Vs = 3.3 V、串联阻值 Rs = R0):
$$V_\text{out} = V_s \cdot \frac{R(T)}{R(T) + R_s}$$
温度灵敏度(负值:温度上升时阻值下降):
$$\frac{dR}{dT} = -\frac{R(T)\,B}{T^2}$$
B常数一般为3000~4500 K,在25°C附近,温度每变化1°C,阻值变化约为4~5%。
NTC热敏电阻模拟器是什么
🙋
空调的出风口里有个小温度传感器。它是怎样测温的呢?
🎓
那个黑色米粒样的东西就是NTC热敏电阻。它有"温度上升时阻值下降"的特性,用β参数模型可表示为$R(T) = R_0\,\exp[B(1/T - 1/T_0)]$这样的指数函数关系。它是由锰、镍、钴等金属氧化物烧结制成的,微控制器通过读取分压电路的电压,再反算出阻值,进而推断温度。试试在模拟器中拉动温度滑块,你会看到R值呈指数式地剧烈变化。
🙋
B常数,比如3950这个数字代表什么?我在数据表上经常看到。
🎓
B就是这个热敏电阻的"反应灵敏程度",是一个材料固有常数,单位是K(开尔文)。B值越大,温度对阻值的影响越强。在25°C附近,温度每变1°C,阻值大约变4~5%,这比白金测温电阻体(Pt100)的灵敏度高约10倍。在模拟器中把B值改为3000或5000对比,你会明显看出图表的"斜率"不一样,这就是灵敏度差异。
🙋
电路图中的分压器,为什么Rs要用R0相同的值呢?随意选一个不行吗?
🎓
好问题。当Rs = R0时,在基准温度(25°C)处Vout = Vs/2 = 1.65 V,这样ADC能用到中间位置,温度无论向上还是向下摆动,都能准确读取电压变化。如果Rs太小,低温端会饱和;Rs太大,高温端会饱和。试试在模拟器里拉动T滑块,看Vout值在0~3.3 V之间怎么移动。
🙋
那实际的温度测量是微控制器读Vout,然后反推温度吗?
🎓
完全正确。ADC读到Vout后,先用R = Rs · Vout/(Vs − Vout)反算阻值,再用B模型对T求解:$T = 1/(1/T_0 + \ln(R/R_0)/B)$,就得到温度了。嵌入式系统有时用查表法来加速,需要高精度的话就用Steinhart-Hart公式$1/T = A + B\ln R + C(\ln R)^3$,这样可以达到±0.1°C的精度。
物理模型与主要公式
NTC热敏电阻的阻值-温度特性来自半导体中传导电子越过带隙能的激发过程,具有活性化能型温度依赖性。最简洁的模型就是β参数模型,用绝对温度T(K)和基准温度T0处的阻值R0表示:$R(T) = R_0\,\exp[B(1/T - 1/T_0)]$。B常数是材料固有的、对应于活性化能的参数,通常为3000~4500 K。
对温度求微分得到温度灵敏度$\frac{dR}{dT} = -\frac{R\,B}{T^2}$,可以看出低温时(T小)或R较大时灵敏度越高。这正是NTC热敏电阻在室温~100°C温度范围内分辨率高的原因。但在高温区,R指数式下降,绝对灵敏度迅速衰减。
实用电路采用电压分压器,通过$V_\text{out} = V_s\,R(T)/(R(T)+R_s)$的关系,用ADC读出Vout反推温度。选Rs = R0使基准温度处输出为Vs/2,这样能最大化利用ADC动态范围。
实际应用领域
家用电器和温度控制设备:空调、冰箱、热水器、咖啡机等家电中,NTC热敏电阻几乎处处可见。具有成本低、反应快、在−30°C~+150°C范围内精度可靠等特点,已成为白色家电的标准温度传感器。
汽车电子系统:发动机冷却液温度(CTS)、进气温度、车内温度、排气温度等多处采用NTC热敏电阻测量。ECU根据冷却液温度调整燃油喷注量和点火时间,热敏电阻精度直接影响燃效和排放。
锂离子电池温度监测:BMS(电池管理系统)在各电芯附近布置NTC热敏电阻,监测充放电时的温度。过热时停止充电的安全机构核心就是这个传感器,广泛应用于电动车、笔记本、手机电池。
医疗设备:电子体温计、保育器、呼吸机、输液加热器等医疗仪器都用NTC热敏电阻测体温或流体温度。热容量小、响应快(1秒以内),适合迅速精确测量。
常见误区与注意事项
最常见的误区是认为β参数模型在全温度范围都很精准。这个模型在基准温度附近±20°C范围误差在1°C以内就不错了,但到了−40°C或+150°C两端,误差会达到数°C。这是因为B常数本身随温度变化。大温度范围高精度应该用Steinhart-Hart三系数公式,从3个或以上校准数据点拟合A、B、C系数,能达到±0.1°C。
第二个常见错误是把热敏电阻直接接电源。当通过热敏电阻的电流大时会产生自我加热。比如10 kΩ的热敏电阻通1 mA电流,会发热10 mW,在空气中产生约1°C的温升,让测量值产生误差。而Vs = 3.3 V、Rs = 10 kΩ的分压器最大电流只有0.165 mA,发热≤0.5 mW,自热效应可以忽略。
还有一个数据表上的响应时间需要特别注意。厂家标注的响应时间是在特定流体、特定流速、特定封装条件下的值,实际使用条件变了就会差很大。露露形引脚可能是几百毫秒,带套管的要好几秒。流体测量要考虑流速,表面测温要考虑接触压力和热阻。必要时要当成一阶滞后系统来补偿滤波。
常见问题
NTC(负温度系数)随温度上升阻值下降,用于"测量"温度。PTC(正温度系数)随温度上升阻值增加,在居里点附近阻值陡升,用于"过载保护"或"自限制加热器"。两者应用领域完全不同——测温用NTC,保护用PTC。
在两个不同温度T1、T2分别测阻值R1、R2,代入公式$B = \ln(R_1/R_2) / (1/T_1 - 1/T_2)$即可计算。一般用25°C和50°C或25°C和85°C两点,数据表上会标注为B25/50或B25/85。要精度高还是要在多个温度区段分别用不同B值,或采用Steinhart-Hart三参数模型。
先读ADC得到Vout,计算R = Rs · Vout/(Vs − Vout),再代入B模型反解温度:T_K = 1/(1/T0_K + ln(R/R0)/B),然后减去273.15换成℃。Arduino或ESP32可以用查表法加速。需要高精度(±0.1°C)就用Steinhart-Hart公式。
最直接的办法是减小通过热敏电阻的电流。可以用大的分压电阻、脉冲式测量、高阻ADC等方法。一般消耗功率≤0.1 mW就能忽略自热。在水中散热好,在空气中散热差,同样电流在不同媒介的允许值不一样。