资讯详情

资讯详情

NTC分压电阻怎么选?从ADC分辨率到灵敏度最优匹配

搞温度采集的工程师十有八九都经历过这么一遭手里一颗 10K NTC 热敏电阻顺手配了个 10K 分压电阻12 位 ADC 一接常温段测起来顺风顺水可一到高温段——80℃ 往上——就发现读数开始蹦格ADC 每跳一个码温度跟着跳半度甚至一度。心里开始犯嘀咕这颗分压电阻到底选多大才算对当初随手拿的 10K 是拍脑袋拍出来的吗这篇文章就把这个问题彻底讲透。我会从 NTC 的阻值-温度特性出发把分压电阻选型变成一道可以精确计算的题先算出 ADC 在每个温度点上的理论采样分辨率再反推想让某个温度区间分辨率最高分压电阻该取多少。结论可能和直觉不太一样——根本没有一颗万能的分压电阻核心原则是让分压电阻阻值尽量靠近你关心的那个温度点上的 NTC 阻值。这篇文章适合正在做温控板、电池管理系统、智能家居温度采集或者想搞清楚 ADC 采样误差来源的硬件工程师和嵌入式开发者。1. 为什么分压电阻选型值得单独琢磨NTC 的指数曲线才是源头1.1 NTC 阻值-温度特性与 B 值公式NTC负温度系数热敏电阻的特性一句话就能概括温度升高阻值指数下降。以最常用的 10K NTC、B 值 3950 为例25℃ 时阻值是 10KΩ0℃ 时大约 33.6KΩ-20℃ 时飙到 105KΩ 左右而到了 100℃ 只剩 700Ω 不到。整个跨度超过两个数量级而且它不是一条直线——温度越低曲线越陡温度越高曲线越平。工程上描述这条曲线最常用的工具是 B 值公式R(T) R0 × exp( B × (1/T - 1/T0) )其中 R0 是 25℃T0 298.15K下的标称阻值T 是当前开尔文温度。B 值是 NTC 的核心参数不同厂家、不同型号差异很大常见的有 3435、3950、4200。B 值越大阻值随温度变化越剧烈同样 1℃ 变化对应的阻值变化量就越大但带来的问题是阻值动态范围太宽量程两端更难兼顾。为什么要先把这条曲线摆出来因为分压电阻选型的全部逻辑都是围绕这条曲线在哪个温度区间斜率大、在哪个区间斜率小展开的。你选出的每一颗电阻值本质上都是在这条曲线上挑一个工作点这个点选在哪直接决定了你 ADC 读数的有效分辨率。1.2 分压电路把阻值变化翻译成电压但翻译精度不是均匀的ADC 只能读电压读不了电阻。所以 NTC 必须和一颗固定电阻组成分压电路把阻值变化转换成电压变化。最常见的接法是 NTC 在下、固定电阻 Rs 在上电源 Vcc 经过 Rs 和 NTC 到地中间抽头接 ADCVout Vcc × Rntc / (Rs Rntc)这个式子看着简单但里面藏着一个容易被忽略的事实分压电路对阻值变化的放大效果是强烈非线性的。同样的 ΔRntc在 Rntc 远大于 Rs、约等于 Rs、远小于 Rs 三种情况下产生的 ΔVout 完全不同。这就是为什么有人用 10K 配 10K 在常温下很准换到高温段就变得很钝。高温时 NTC 阻值掉到几百欧和 10K 的 Rs 严重不匹配NTC 上分到的电压比例太低分压灵敏度被拉到很低。同理如果你把分压电阻换成 1K高温段会敏锐不少但低温段又会变得很钝。也有人习惯把 NTC 放上面、固定电阻放下方公式变成 Vout Vcc × Rs / (Rs Rntc)输出随温度升高而上升。两种接法物理上等价只是电压方向和反推阻值的公式不同后面用NTC 在下为例展开结论对两种接法都成立。2. 先算清 ADC 的底牌从 LSB 到每摄氏度多少码值2.1 LSB 是采样分辨率的天花板讨论分压电阻之前必须先把 ADC 的底牌算清楚。对 N 位 ADC、参考电压 Vref每个码对应的电压是LSB Vref / (2^N - 1)举例12 位 ADC、Vref 3.3V每个码代表 0.806mV10 位 ADC 则是 3.23mV16 位 ADC 只有 0.05mV。ADC 位数直接决定你最终能分辨多小的温度变化。如果 NTC 分压电路在某个温度点每变化 1℃ 只产生 2mV 的电压变化10 位 ADC 在这个点连 1℃ 都分不出来16 位却能分辨 0.025℃ 左右。所以讨论分压电阻选型第一步是把手上的 ADC 位数摆到台面上不然后面所有计算都是空中楼阁。这里还要多说一句ADC 的理论分辨率只是天花板实际有效分辨率还要受噪声、基准漂移、NTC 本身误差的影响。后面第 5、7 节会专门讲这些坑现在先把理想情况算明白。2.2 灵敏度、量化台阶与温度分辨率的换算方法温度分辨率的标准算法是温度分辨率(℃/码) LSB / |dV/dT|其中 dV/dT 是分压输出对温度的变化率它由两部分组成NTC 自身阻值随温度的变化率 dR/dT以及分压电路把阻值变化转成电压变化的系数 dV/dR。两者相乘才是整体灵敏度。NTC 的阻值温度系数也就是热敏电阻自身的增益dR/dT -B × R / T²注意这里的 T 是开尔文温度。这个公式揭示了一个关键趋势dR/dT 的绝对值在低温区间极大在高温区间急剧变小。还是拿 10K NTC、B3950 来说-20℃ 时 dR/dT 大约 -6500Ω/℃0℃ 时约 -1778Ω/℃25℃ 时约 -444Ω/℃100℃ 时只剩下约 -20Ω/℃。这就是高温段分辨率下降的物理根源——NTC 自己变钝了这是材料特性决定的分压电阻选得再好也只能缓解无法根除。分压电路的电压转换系数NTC 在下时为dV/dR Vcc × Rs / (Rs Rntc)²两者相乘就得到完整的灵敏度公式dV/dT Vcc × Rs / (Rs Rntc)² × (-B × Rntc / T²)2.3 一组实测计算10K NTC 10K 分压电阻把这套公式套进一个最常见的配置12 位 ADC、Vref 3.3V、10K NTC、B 3950、分压电阻 Rs 10K、NTC 在下。计算几个温度点的理论分辨率温度Rntc (Ω)Vout (V)灵敏度 (mV/℃)分辨率 (℃/码)-20℃1052003.0116.10.0500℃335902.5430.90.02625℃100001.6536.70.02250℃35850.9024.30.033100℃6970.225.70.14常温段每个码只有 0.022℃看起来相当不错但 100℃ 时每码已经相当于 0.14℃如果 ADC 噪声再抖两三个码温度读数就会跳半度。这还只是理想情况实际电路中基准电压的波动、NTC 的容差都会把这个误差进一步放大。如果你要求 0.1℃ 级别的准确度这个配置在高温段是不够看的。3. 灵敏度最大化的那个点分压电阻取 NTC 目标温度的阻值3.1 从 dV/dT 公式推导出 Rs 与 Rntc 的匹配条件回到灵敏度公式把某个温度点上的 Rntc 和 dRntc/dT 当作定值剩下的部分就只有 Rs 是变量dV/dT Vcc × [ Rs / (Rs Rntc)² ] × dRntc/dT方括号里的项 Rs / (Rs Rntc)² 在什么条件下最大对 Rs 求导令导数为零解出来就是Rs Rntc也就是说当分压电阻的阻值恰好等于当前温度下 NTC 的阻值时分压灵敏度达到最大值。这个结论和电阻分压的直觉完全一致分压电阻比 NTC 大太多NTC 阻值的变化只占输出电压的很小比例分压电阻比 NTC 小太多NTC 上分到的电压本身太低变化量也小。只有两者相等时电压被一分为二NTC 阻值的变化对 Vout 的影响最显著。所以选型的核心逻辑一句话就能讲完你想让哪个温度附近最准就让 Rs 等于那个温度下 NTC 的阻值。这是一个可以精确计算、有明确最优解的问题不该靠拍脑袋。3.2 三颗分压电阻的数值对比用上一节同样的配置12 位 ADC、3.3V、10K NTC、B3950分别计算 Rs 1K、10K、33K 三个值的表现分压电阻 Rs灵敏度最高点25℃ 分辨率 (℃/码)0℃ 分辨率 (℃/码)100℃ 分辨率 (℃/码)1KΩ约 90℃0.0670.160.03610KΩ25℃0.0220.0260.1433KΩ约 0℃0.0310.0190.43这张表非常直观地说明了问题Rs 10K 时25℃ 分辨率最好0℃ 也还不错但 100℃ 掉到 0.14℃/码。Rs 1K 时高温段分辨率大幅改善到 0.036℃/码代价是低温段变得很钝0℃ 只有 0.16℃/码。Rs 33K 时0℃ 分辨率最好25℃ 也不差但 100℃ 已经钝到 0.43℃/码基本没法用。3.3 为什么没有一颗电阻能吃遍全温区原因就在 NTC 的阻值动态范围从 -20℃ 的 105K 到 100℃ 的 697Ω跨度超过 150 倍。一颗固定电阻只能在某一个温度点附近达到最优匹配其他区间的灵敏度必然下降。这里要强调的是这里的最优只是灵敏度最大并不意味着其他区间不能用。比如 Rs 10K 在 -20℃ 时的分辨率是 0.05℃/码很多场合依然够用。选型的本质是权衡你愿意牺牲哪个区间去换取目标区间的更优表现。没有免费的午餐只有明确的需求优先级。4. 针对不同温度区间的选型策略与变通方案4.1 低温优先Rs 取 33K~100K如果你的应用是冷链物流、北方户外设备、冰箱冷柜核心测温区间在 -40℃~0℃分压电阻要往大了选。0℃ 时 NTC 是 33.6K-20℃ 时是 105K所以 Rs 取 33K 可以让灵敏度最高点落在 0℃ 附近取 47K~100K 可以把最高点继续往低温推。以 Rs 33K 为例0℃ 分辨率约 0.019℃/码-20℃ 约 0.022℃/码全程表现非常均衡。但用大阻值分压电阻要付出一个代价分压电路对 ADC 的源阻抗会变高。Rs 33K 时NTC 33.6K 处的等效源阻抗接近 16.6KRs 100K 时在低温端甚至能到 50K 以上。这会拖慢 ADC 内部采样电容的充电速度后面第 7 节会专门讲怎么处理。4.2 常温优先Rs 10K 是久经考验的默认值大部分消费级、工业级温度采集的场景集中在 0℃~50℃这也是 10K NTC 10K 分压电阻成为绝对主流的原因。这个组合的灵敏度最高点正好在 25℃贴近常温使用环境0℃ 分辨率 0.026℃/码、50℃ 约 0.033℃/码全程都不差。从计算上验证50℃ 时 NTC 阻值约 3.6K虽然已经不匹配 10K 的 Rs但 0.033℃/码的表现在多数场景完全够用。再加上 10K 作为行业标准阻值物料好买、价格便宜、表库丰富默认值这个位置它坐得很稳。4.3 高温优先Rs 取 1K~2K但要防自热电机绕组测温、LED 散热监测、功率器件外壳测温这类场景关心的区间在 60℃~150℃。这个区间 NTC 阻值在 2.5K 到 400Ω 之间波动所以分压电阻应取 1K~2K让灵敏度最高点落在 90℃ 左右。以 Rs 1K 为例100℃ 分辨率约 0.036℃/码比 Rs 10K 的 0.14℃/码提升了近 4 倍效果立竿见影。但这里有一个隐形代价分压回路的电流变大了。100℃ 时回路电流约 1.94mANTC 上消耗的功率约 2.6mW。对于 0603 封装的 NTC散热系数通常在 0.5~2mW/℃ 之间这意味着自热温升可能达到 1.3℃ 甚至更高——这是个很讽刺的结果你费劲提升了高温分辨率结果自热误差把精度全吃回去了。解决思路有几个降低 Vcc比如用 1.8V 供电给分压回路或者采用脉冲激励方式只在 ADC 采样前几十毫秒给分压回路通电其余时间断开或者查 NTC 手册的散热系数估算自热误差后在软件里做补偿。4.4 宽温范围与硬件受限时的几种变通如果需要覆盖 -20℃~100℃ 的完整区间又要求全程都有不错的分辨率单靠一颗固定电阻是不够的。我实际用过的方案有这么几种第一接受折中。按最常用的区间选 Rs 10K牺牲高温段的精度。适合对高温段精度要求不高的场景。第二双分压支路。一路用大 Rs 覆盖低温一路用小 Rs 覆盖高温两个 ADC 通道或者通过模拟开关切换。软件里优先采用灵敏度高的一路或者对两路结果做加权。代价是多占一个通道和几颗电阻但对分辨率提升是实打实的。第三运放程控增益。在分压输出后面加一级同相放大低温段用低增益防止 ADC 满量程高温段切高增益把微弱的信号放大。这个方案适合对成本不敏感、精度要求高的项目。第四如果温区跨度实在太大、精度要求又高我一般建议认真评估一下直接换数字温度传感器比如 DS18B20、TMP117或者换成 PT100/PT1000 铂电阻方案。NTC 的指数特性决定了它天生适合窄温区高精度硬要在宽温区做到处处高精度成本和复杂度往往不划算。5. 采样之后的有效分辨率查表二分法为什么不准5.1 线性插值撞上非线性曲线误差实例很多人搜过NTC 查表二分法不准这个现象确实太普遍了。先说结论二分查找本身逻辑没错错的是查完之后怎么用以及表是怎么建的。常见做法是把 NTC 的阻值-温度表存进 ROM二分法找到当前阻值所在的两个相邻表点然后线性插值得到温度。听起来没问题但 NTC 曲线在低温端弯曲非常厉害线性插值假设两个表点之间是直线这里就埋下了误差。我用 10K NTC、B3950 实际算一组数据。如果表里只有 0℃ 和 10℃ 两个点用线性插值去求 5℃ 的阻值得到约 26.9KΩ而真实值约 25.9KΩ差了 1KΩ折合成温度误差约 0.73℃。如果表点跨度拉到 20℃0℃ 和 20℃插值求 10℃ 的误差直接到 2.9℃。这就是二分法不准的真相——不是查表慢了是线性插值假定了线性而 NTC 在表点之间的真实曲线是弯的。如果表是每 1℃ 一个点线性插值误差其实很小大约 0.02℃ 级别完全可以忽略。所以表点密度直接决定插值误差的大小低温段曲率大需要更密的表点。5.2 让查表变准的四种办法第一最彻底的办法是弃表用公式。现代 MCU 的浮点运算能力足够强直接用 B 值公式反解温度一两条 log 指令的事精度只受 B 值本身误差限制。C 代码可以这么写// NTC 在下方的分压结构Vref Vcc 的比例式测量 // code 是 12 位 ADC 原始值Rs 是分压电阻 float rntc Rs * (float)code / (4095.0f - (float)code); // 用 B 值公式反解温度10K NTCB 3950 float t0 298.15f; // 25℃ 对应的开尔文温度 float r0 10000.0f; // 25℃ 标称阻值 float b 3950.0f; float kelvin 1.0f / (1.0f / t0 logf(rntc / r0) / b); float tempC kelvin - 273.15f;第二如果一定要查表就把表建密。特别是 0℃ 以下的低温段建议 1℃ 一步高温段曲率小可以放宽到 5℃ 甚至 10℃ 一步。变步长表能控制 ROM 占用。第三分段二次插值或三次样条插值比线性插值更贴合 NTC 曲线。如果不想引入浮点开销可以预计算每段的多项式系数定点实现也不难。第四查表之前先对 ADC 原始值做滤波。如果原始码值本身有 ±2 个码的噪声在高温段每码 0.14℃就意味着 ±0.28℃ 的抖动这会被误认为是查表不准。最简单的做法是连续采样几次取平均或者用中值滤波去掉毛刺。5.3 比例测量从 ADC 码值反推阻值时绕开基准漂移还有一个非常常见的坑直接用 ADC 码值去查码值-温度表。这种做法有个隐含假设——参考电压恒定。如果 ADC 的 Vref 用的就是 Vcc而 Vcc 随负载或温度漂移同一温度下码值会跟着漂查出来的温度自然不准。正确做法是比例测量让分压电路的供电和 ADC 的参考电压共用同一个电源。这样一来ADC 实际测的是 Vout/Vref 的比值而不是绝对电压。码值公式变成code / 4095 Rntc / (Rs Rntc)反推阻值Rntc Rs × code / (4095 - code)这个式子不包含 Vcc电源电压怎么漂都无所谓。这也是为什么我在前面的代码里直接用码值反推 Rntc而不是查电压-温度表的原因。6. 顺着分压电阻搜出来的两个相关问题6.1 NTC 查表不准的完整排查顺序既然NTC 查表二分法不准是高频搜索词我把排查步骤整理成清单。按这个顺序走一遍九成的问题都能定位确认 NTC 的 B 值和表是否一致。网上流传的表很多是按 B3435 或 3950 生成的用错表可能带来 1~3℃ 的全程偏移这是最容易被忽略的。确认分压拓扑方向。NTC 在上还是在下反推阻值的公式完全不同抄错公式会得到完全错误的结果。用万用表实测 Rntc 和 Rs 的实际值。5% 精度的 NTC 和 1% 精度的分压电阻标称值和实际值差多少最好心里有数。确认 ADC 参考电压和分压供电是否同源如果不是同源优先改电路做成比例测量。观察原始 ADC 码值的波动范围。如果抖动超过 2~3 个码先做滤波再谈查表精度。检查表点步长和插值方式。低温段步长过大是插值误差的主要来源。6.2 ATX 辅助绕组反馈中 TL431 上下分压电阻的参考值搜分压电阻的人很多其实是冲着 TL431 反馈电路来的这里顺手把问题说清。ATX 电源的 5VSB 辅助绕组反馈电路里TL431 配合光耦构成稳压环路TL431 的 REF 引脚通过上下两颗分压电阻检测输出电压。TL431 内部基准 Vref 约 2.5V输出电压满足Vout Vref × (1 R_upper / R_lower)对于 5VSB 输出脚一算就知道 R_upper / R_lower 1也就是上下电阻阻值相等。实际电路里常见 10K/10K 或 4.7K/4.7K取值逻辑是让分压支路电流落在 0.1~0.5mA 区间保证噪声抑制能力的同时不过分消耗功率。比如 10K/10K 在 5V 上的支路电流是 0.25mA远超 TL431 的参考输入电流约 2μA 级别所以参考电流造成的误差可以忽略。如果输出是 12V比值就是 12/2.5 - 1 3.8常见取值 39K/10K 或 38K/10K。这个例子里体现的原理和 NTC 分压选型如出一辙分压电阻的比值决定工作点绝对阻值决定支路电流、噪声和功耗两者要分开考虑。7. 选型之外的工程细节自热、采样时间与校准7.1 自热误差高温小 Rs 方案的隐形扣分项前面提到过Rs 取 1K 时高温段 NTC 功耗可能到 2.6mW。很多工程师算完分辨率就完事了完全没意识到 NTC 自身发热带来的温升。这里再强调一次NTC 的散热系数dissipation factor通常在 0.5~2mW/℃2.6mW 对应的自热温升可能高达 1.3~5℃。这个误差是系统性的不会因为采样平均而消失。对策有几个优先选择散热系数大的封装把 Vcc 降到 1.8V 或 2.5V用 GPIO 控制分压回路的供电采样前通电、采样后断电把平均功耗压到极低。至少要做的是查 NTC 手册的散热系数估算自热误差是否在可接受范围内别让精心选型的成果毁在一颗电阻的发热上。7.2 源阻抗、ADC 采样时间与输入端电容分压电路对 ADC 而言是一个信号源其等效源阻抗是 Rs 和 Rntc 的并联值。Rs 10K、Rntc 10K 时源阻抗约 5KRs 100K、低温端 Rntc 105K 时源阻抗约 51K。源阻抗越高ADC 内部采样电容充电越慢如果采样时间不够转换结果会系统性偏低。12 位 ADC 要达到 1/2 LSB 的建立精度理论上需要约 9 倍 RC 时间常数。以源阻抗 50K、采样电容 6pF加上开关电阻约 55K来算时间常数约 330ns9 倍约 3μs。大多数 MCU 的 ADC 采样时间可以配置到 3~10μs勉强够用。但如果输入端再并一个 100nF 的滤波电容时间常数直接上天读取结果会严重滞后甚至错误。所以大阻值分压方案要么配置足够长的采样时间要么加运放缓冲要么别在 ADC 引脚上放太大容值的电容。7.3 校准与标定的最低成本方案分压电阻选型只是第一步NTC 本身有阻值容差通常是 1%~5%和 B 值容差约 ±1%~±3%两者叠加后即使 ADC 分辨率再高绝对温度误差也可能有 1~2℃。要想把精度做上去标定是绕不开的。最低成本的标定方案是两点标定用冰水混合物做 0℃ 基准用电热恒温箱或沸水做 100℃ 基准测出实际 ADC 码值和理论码值之间的偏差然后软件补偿一个偏移量和增益系数。注意沸水温度受海拔影响标准大气压下才是 100℃高海拔地区要用当地沸点修正。如果手头有精密电阻箱也可以用几个标准电阻替换 NTC标定 ADC 码值和计算阻值之间的映射关系但这样标定的是测量链路NTC 本身的误差还是得靠两个温度点来校。我在实际项目里的体会是先把分压电阻按这篇文章的方法算对保证灵敏度在目标区间足够好再谈标定。如果第一步就拍脑袋选了阻值后面再标定也只是在错误的基础上打补丁。先把物理层的分辨率做扎实软件和标定才有意义。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →