前阵子调试某工业采集板客户对温度测量这一路提出了必须用数字传感器的死要求。我算了一笔账如果改用分立二极管测温方案物料成本能压掉一大半精度反而更好控。最后板子做出来实测读数与标定用铂电阻偏差在±0.3℃以内。这件事让我又一次意识到硅二极管温度传感器这个老办法在嵌入式领域里始终有它不可替代的位置。硅二极管温度传感器本质上就是利用PN结正向压降随温度近似线性变化来测温度。它成本极低、响应快线性度比热敏电阻好一个量级还能做成芯片内嵌的测温结用于CPU结温、电池热管理、热电偶冷端补偿等场景。下面我从原理、分类、误差、电路、场景到选型把这套东西一次讲透。做传感器选型和温控电路设计的硬件工程师可以直接参考刚入行的嵌入式初学者也能顺着读下来。1. 二极管测温的老底子物理为什么一压一降就是温度1.1 肖克利方程与2mV/℃这个数字的来源PN结的电流-电压关系搞模拟的人都很熟悉肖克利方程I Is × [exp(qV / (nkT)) - 1]当正向压降超过0.3V以后指数项远大于1那个-1可以忽略公式变成I ≈ Is × exp(qV / (nkT))两边取对数整理一下V (nkT / q) × ln(I / Is)这里的难点在于Is也就是反向饱和电流它本身强烈依赖温度。硅材料的Is基本按exp(-Eg / kT)的规律变化温度每升高10℃左右就会翻一倍。所以V对T求导的时候表面上kT项是正的但Is随温度暴涨的效应压过了它最终净结果是电压每升高1℃压降大约下降1.8到2.2mV。大家常说的硅二极管-2mV/℃就是这么来的。说白了这个传感器在原理层面非常干净只要给二极管加一个恒定的正向电流它两端的电压就成了温度的函数。你不需要桥电路不需要差分放大器做补偿一颗二极管加一路ADC就能读温度。对一个硬件工程师来说它是少有的能把物理公式一路推导到实际电路里的传感器。1.2 线性度好但好也要打个引号在同样的恒定电流下V和T在-50℃到150℃这个常见区间里近似成一条直线这是二极管测温能流行的最关键原因。作为对比NTC热敏电阻的阻值随温度是指数变化一小段范围内勉强当线性玩跨到100℃跨度就必须查表或做多项式拟合。而二极管在这个区间用固定斜率拟合误差通常在1到2℃以内。不过严格说它并不是直线。Is的指数项随时间漂移硅的禁带宽度Eg本身也随温度变化这两层因素叠加起来会让实际曲线在高低温两端微微下弯。用一根-2mV/℃的直线去拟合整个-55℃到150℃量程在两头会有1到2℃的偏差。所以高精度场合基本是两点标定起步或者配合查表校正而不是死板地用理论斜率。1.3 ΔVbe把绝对压降的不确定性扔掉理解了看压降的原理之后还有一个更高级的玩法不看V本身而是看同一个结在两个不同电流下的压降差。设电流从I1切换到I2压降差为ΔVbe (nkT / q) × ln(I2 / I1)重点在于这个式子里根本没有Is也就没有绝对压降的工艺离散只剩电流比。电流比是由电路设计者人为设定的常数于是ΔVbe严格正比于绝对温度T。这就是集成电路温度传感器、带隙基准共同依赖的数学基础也是CPU内部测温结能被主板管理芯片隔空算温度的原理。后面第四节我会展开讲怎么把这个原理工程化。2. 四种常见形态从几毛钱的分立件到芯片级测温结很多人以为二极管温度传感器就是一颗整流管加个电阻实际上这一家族至少有四种形态输出方式、精度、成本差异很大。2.1 分立二极管最便宜也最看天吃饭这是最原始的方案。随便拿一颗普通开关二极管或整流管加上100μA左右的恒流压降落在0.5到0.7V区间灵敏度约-2mV/℃。优点是单价极低、体积小可以塞进散热片缝隙、绕组间隙甚至直接封装在PCB开槽里。很多变频器、伺服驱动器用的就是这么一坨。缺点也很明显器件之间离散大。同一批料在25℃下测Vf从0.58V到0.68V都可能折算成等效温度误差就是±4℃以上。所以用分立二极管只能做趋势判断和高温保护想要绝对温度就必须逐颗标定。这是方案省钱的代价后面第三节会细讲误差来源。2.2 二极管连接的三极管用BJT的EB结替代工程上更稳的做法是用三极管来客串二极管最常见的就是把基极和集电极短接用EB结测温或者直接用发射结。为什么要绕这一圈因为三极管的设计让发射结的Is更可预测理想因子n更接近1批量一致性普遍好于普通二极管。很多远程测温协议的标准里接受的就是这种二极管连接的三极管而不是随便一颗整流管。SOT-23封装的小三极管可以紧贴在被测表面上采购比专用温度二极管便宜替换也方便。我在某些板卡上看到过所谓外置温度探头拆开看往往就是一颗小三极管贴着功率器件放原理完全一致。2.3 电流型集成温度传感器把电路做进芯片里把恒流源、ΔVbe放大器、校准电路全部集成到一颗芯片里输出电流或电压与绝对温度成正比这就是二极管测温家族里的芯片化形态。典型的输出形式有1μA/K的电流型和10mV/K的电压型内部本质就是把PTAT电流送去修调。出厂一致性很好在-55℃到150℃区间能做到±0.5℃量级不需要逐颗标定。用起来像高级二极管两线制串联到回路里即可读电流或电压就行。这类芯片适合批量产品的标准化测温比如水浴恒温槽、机房环境监测、医疗保温箱。缺点就是贵单价比分立方案贵几十倍而且测温点只能在芯片所在位置没法引线到远处。2.4 远端测温结藏在CPU和GPU里的那颗二极管这是近二十年最活跃的应用形态。CPU、GPU、FPGA制造时就在die内部做了一颗小尺寸PN结主板上的管理芯片通过两根走线给它施加激励电流测ΔVbe推算结温。因为这类内置结在工艺上有明确的理想因子数据监测芯片可以按配方修正精度能做到±1℃以内。这种方案最大的价值在于测的是真正发热的die结温而不是外壳温度。对散热策略、降频保护、风扇调速来说这个温度才是决策依据。缺点是走线和插座电阻都会引入误差所以笔记本和服务器上那套测温走线阻抗是必须控制的变量这个坑在第三节展开。四种形态的选型大致如下形态输出信号典型精度成本典型定位分立二极管正向压降离散大需标定极低保护、趋势监控二极管连接三极管正向压降较好仍建议标定低板级温度探头集成电流型芯片电流/电压±0.5℃量级高标准测温部件远端测温结ΔVbe±1℃量级依赖主机CPU/GPU结温3. 工程误差源排查自热、引线电阻、理想因子怎么坑人3.1 自热读数偏暖的元凶任何靠电流激励的传感器都有自热问题二极管尤其隐蔽。设恒流为1mA正向压降0.6V那么二极管自身功耗就是0.6mW。听起来不大但小封装器件的热阻可能达到每瓦两三百摄氏度0.6mW在静止空气里足以造成0.1到0.2℃的偏差如果安装在气流差、包封厚的地方偏差还会更大。处理办法有三条。第一把激励电流降到100μA量级自热误差可以压到0.05℃以内。第二用脉冲激励方式测量期间短暂通流占空比做小平均功耗显著下降。第三如果自热规律固定可以在标定阶段按同等工作电流来标把自热的影响吸收进标定系数里。我通常的做法是晶圆级探头用脉冲法板级监控用100μA恒定电流。3.2 引线串联电阻每一欧姆都是看不见的温度二极管测温最容易被忽视的误差来自引线电阻。测量到的电压实际上是二极管压降加上电流在导线上产生的压降。以1mA激励电流为例1Ω的导线电阻会额外产生1mV压降按-2mV/℃的斜率折算就是0.5℃的读数偏移。走线长一点、插座氧化一点、焊点老一点积累到好几欧姆并不稀奇。对策是尽量采用四线开尔文连接两根线给恒流另外两根线单独采样电压采样回路几乎没有电流导线压降可以忽略不计。如果板子空间实在不允许四线那就要把走线当误差项做进标定系数里并且保证批量生产的走线阻抗一致。这个坑我在早期做远程测温时踩过当时CPU插座接触不良读数直接跳了2℃多。3.3 理想因子n为什么远端测温要查编程表肖克利方程里的n叫做理想因子物理上代表载流子复合和输运过程偏离理想情形的程度。普通二极管n在1.0到1.1之间工艺不同差异不小。ΔVbe公式里n直接乘在温度项前面ΔVbe (nkT / q) × ln(I2 / I1)如果监测芯片默认n1而实际二极管n1.02那么在300K附近温度读数就会偏差约0.6%也就是1.8℃左右。这就是为什么CPU内置测温结需要有对应的修正参数也是为什么很多远程测温芯片允许编程设定理想因子。用分立二极管做实验时如果死活对不上标定源检查一下n值是最容易被漏掉的一步。3.4 老化和漏电模拟传感器也要谈长期稳定性正向压降会随器件老化轻微漂移幅度每年几个毫伏折算成温度就是每年1℃级别。对高可靠设备这不能忽略。有意思的是ΔVbe方案受老化影响小得多因为电流比这个参数几乎不随老化改变。这也是我倾向在长期运行设备上使用ΔVbe测量的原因。另一个隐蔽问题是漏电流。PCB残留助焊剂、潮湿环境、三防漆涂覆不良都会在二极管两端形成并联电阻导致低温端读数明显偏低。排查时可以用高阻表量一下器件两端的绝缘电阻低于100MΩ就要考虑清洗板件或者重新涂覆。这个细节在湿度大的工业现场特别重要。4. 从原理到板子恒流激励电路、ΔVbe测量与两点标定4.1 最简单的恒流源运放加基准电阻给二极管供电的恒流源最省事的做法是用运放加采样电阻。原理是这样基准电压加到运放同相端采样电阻串在功率管的发射极或源极运放的反相端接采样电阻另一端运放会不断调整输出直到采样电阻上的压降恰好等于基准电压。于是I Vref / Rs例如Vref取1VRs取10kΩ恒流就是100μA。如果Rs用精密电阻温度系数5ppm/℃这个恒流的稳定性对最终精度的影响可以忽略。二极管再串进集电极或漏极回路测量它对地的电压即可。注意运放轨到轨特性确保在整段温度范围内二极管处于正向导通区。4.2 用ADC读数换算温度先写一版能跑的有了测量电压之后软件换算非常直接。以恒流100μA、25℃时Vf650mV、斜率-2mV/℃为例// adc_val: ADC原始值, vref_mv: 满量程电压mV, fullscale: ADC满量程码值 float adc_to_temp(float adc_val, float vref_mv, float fullscale) { float vin_mv adc_val * vref_mv / fullscale; float temp_c (vin_mv - 650.0f) / (-2.0f) 25.0f; return temp_c; }这段代码能跑但精度完全取决于两个假设25℃的Vf是不是正好650mV斜率是不是正好-2.0mV/℃。对一颗批量生产的分立二极管来说这两个假设都过于乐观。所以软件上正确的做法是留出校准参数比如存一个offset和gain标定时写入EEPROMfloat temp_c offset gain * vin_mv;后面的两点标定就是为了求出这个offset和gain。4.3 两点标定流程冰水混合物加恒温槽标定的目标是用两个已知温度点建立ADC码值与实际温度之间的线性关系。标准做法如下把探头和一只高精度参考温度计放进同一个恒温介质等待15到30分钟热平衡。第一个点用冰水混合物注意要碎冰加纯水避免水面浮冰造成局部温差稳定在0℃。第二个点用恒温槽设定在50℃或80℃以确保跨度足够。记录两个温度下的ADC原始值联立求解T1 K × AD1 B T2 K × AD2 B得到K和B之后运行时的任意ADC值都能换算成温度。这一步也是分立二极管方案最主要的成本所在——每颗器件都要单独标。如果项目量很大可以考虑在产线上用自动化恒温槽配合扫码枪记录校准参数把成本摊薄。4.4 板级布局与滤波把热电动势和干扰都挡在外面布局上的建议有几条。第一二极管尽量靠近被测物减少导热路径上的温差。第二测量走线加粗两线尽量平行且远离开关节点和大电流回路避免串扰。第三ADC输入前加RC低通时间常数建议100μs到1ms之间既能滤掉开关噪声又不影响测温带宽。第四器件两端并一颗小容值陶瓷电容吸收静电和射频干扰容值不要太大否则与恒流源构成低通会让响应变慢。4.5 工程化的ΔVbe电路两个电流采样做除法再回到ΔVbe方案。实践上可以这样搭准备两个恒流源一个10μA一个100μA用模拟开关按顺序切换每次切换后等待足够的建立时间再采样电压。两次采样值相减得到ΔV套用公式ΔV (nkT / q) × ln10代入常数若n1则ΔV≈0.1984mV/K。反解出绝对温度再减273.15就是摄氏温度。室温下ΔV大约59mV用16位ADC在2.048V量程下分辨率约31μV折算约0.16℃分辨率完全够用。这个方案的吸引人之处在于结果与二极管绝对压降无关和器件老化也基本无关批量一致性显著优于单点压降法。代价是电路复杂一点、采样时间要预留适合对长期稳定性和一致性有要求的设备。如果量产产品对成本和校准流程敏感我通常会优先考虑ΔVbe而不是逐颗两点标定。5. 应用场景拆解哪些项目该选二极管测温5.1 CPU和GPU结温管理远端测温结的主场主板和服务器上通过管理芯片读取CPU内置测温结已经成了标配。这个场景二极管方案几乎没有替代品因为测温结直接做在die内部NTC和热电阻都塞不进去。实际项目里要注意走线阻抗匹配并按照SoC厂商给出的理想因子配置监测芯片。一旦发现结温读数系统地偏高或偏低优先查的是这两项而不是传感器本身。5.2 电池包和功率器件热保护便宜可靠的第一道防线电池保护板、充电器、变频器的功率MOS管温度监测核心目的通常是到达阈值就保护对绝对精度要求没那么苛刻。分立二极管贴在功率器件表面加一路比较器或ADC就能在过温时关断或降额。成本只有NTC的几分之一而且不需要额外查表。这是我做工业电源设计时很喜欢的一套组合。5.3 热电偶冷端补偿用二极管补上另一个结温热电偶测量的是热端与冷端的温差要得到真实温度必须知道冷端绝对温度。冷端一般放在接线盒或PCB端子附近用一颗二极管或集成温度传感器测冷端温度再在软件里补偿。因为冷端温度变化范围通常不大二极管的绝对精度完全够用成本又低所以很多温度变送器内部都保留了这类元件。5.4 低温与制冷系统分立二极管的隐藏技能可能很多人不知道硅二极管在低温下也能工作。只要降低激励电流比如10μA量级部分分立器件可以测到液氮温度附近只是低温段非线性明显增强必须用专门标定曲线。在实验室的低温恒温器、制冷机系统中会见到用二极管做温度探头。这种场景不要用集成芯片芯片的工作范围往往到不了那么低。5.5 恒温设备和环境监测芯片化形态的标准阵地水浴槽、培养箱、机房空调这类需要稳定、可靠、免标定的场景适合用集成电流型温度传感器。它的输出很规整软件里直接乘系数换算长期运行也稳定。可以说这一形态把二极管测温技术做成了工业标准件让非专业的设备厂商也能放心用。各场景选型对应关系如下应用场景推荐形态为什么CPU/GPU结温内置测温结只能测die内部温度功率管温度保护分立二极管便宜只需阈值判断热电偶冷端补偿分立二极管或集成芯片精度够用成本低低温恒温器分立二极管可延伸低温需标定曲线恒温槽/环境监测集成电流型芯片免标定、长期稳定6. 和主流传感器做选型博弈NTC、热电阻、热电偶各自的生态位6.1 一张表看懂四类传感器的性格差异做选型之前先看横向对比维度硅二极管NTC热敏电阻铂电阻热电偶测温范围-55~150℃分立件可低至低温-50~150℃窄-200~850℃-200~1250℃以上线性度近似线性指数严重非线性高线性中标定后精度±0.5℃量级±0.1℃量级窄范围±0.1℃量级±0.5~2℃批次一致性分立件差集成件优良优良成本极低到低低中高低响应速度快快慢快适合驱动方式恒流激励恒压/分压恒流激励直接测热电动势6.2 什么时候别用二极管如果你想在狭小空间里拿到高精度绝对值又想省去标定工序NTC在窄温区反而更合适前提是厂家已经帮你做好阻值分档。如果测量范围要覆盖-50℃到300℃以上的大跨度铂电阻的稳定性和线性度碾压二极管。如果被测点温度超过500℃甚至上千摄氏度热电偶是唯一现实选择。在这些场景里硬用二极管是给自己制造标定麻烦。6.3 什么时候二极管反而是最优解在我看来二极管方案真正的价值集中在三个地方其一做趋势阈值保护分立二极管成本最低其二做die级测温也就是CPU、GPU内置测温结其他传感器根本进不去其三做ΔVbe远距离传感利用电流比消除绝对参数的影响实现跨接线的稳定测温。如果你恰好在这三类需求里选二极管不是妥协而是更合理的工程决策。最后说一个我踩过的坑。早年的一个项目里我用分立二极管做功率模块过温保护产线上测试全部合格结果到客户现场频繁误报警。排查下来发现是现场环境温度比产线标定环境低了15℃而我的比较器阈值是按住态25℃标定的二极管的绝对压降随环境漂移直接触发了保护。从那以后凡是涉及绝对温度阈值的分立二极管方案我都坚持在软件里做环境温度补偿或动态阈值修正单纯靠一颗二极管的裸压降判断在跨度大的工况里不够靠谱。现在这个教训我一直保留在团队的设计检查清单里也算给各位提个醒。