前阵子调试某工业采集板,客户对温度测量这一路提出了"必须用数字传感器"的死要求。我算了一笔账:如果改用分立二极管测温方案,物料成本能压掉一大半,精度反而更好控。最后板子做出来,实测读数与标定用铂电阻偏差在±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)
如果监测芯片默认n=1,而实际二极管n=1.02,那么在300K附近温度读数就会偏差约0.6%,也就是1.8℃左右。这就是为什么CPU内置测温结需要有对应的修正参数,也是为什么很多远程测温芯片允许编程设定理想因子。用分立二极管做实验时,如果死活对不上标定源,检查一下n值是最容易被漏掉的一步。
3.4 老化和漏电:模拟传感器也要谈长期稳定性
正向压降会随器件老化轻微漂移,幅度每年几个毫伏,折算成温度就是每年1℃级别。对高可靠设备,这不能忽略。有意思的是,ΔVbe方案受老化影响小得多,因为电流比这个参数几乎不随老化改变。这也是我倾向在长期运行设备上使用ΔVbe测量的原因。
另一个隐蔽问题是漏电流。PCB残留助焊剂、潮湿环境、三防漆涂覆不良,都会在二极管两端形成并联电阻,导致低温端读数明显偏低。排查时可以用高阻表量一下器件两端的绝缘电阻,低于100MΩ就要考虑清洗板件或者重新涂覆。这个细节在湿度大的工业现场特别重要。
4. 从原理到板子:恒流激励电路、ΔVbe测量与两点标定
4.1 最简单的恒流源:运放加基准电阻
给二极管供电的恒流源,最省事的做法是用运放加采样电阻。原理是这样:基准电压加到运放同相端,采样电阻串在功率管的发射极或源极,运放的反相端接采样电阻另一端,运放会不断调整输出,直到采样电阻上的压降恰好等于基准电压。于是:
I = Vref / Rs
例如Vref取1V,Rs取10kΩ,恒流就是100μA。如果Rs用精密电阻,温度系数5ppm/℃,这个恒流的稳定性对最终精度的影响可以忽略。二极管再串进集电极或漏极回路,测量它对地的电压即可。注意运放轨到轨特性,确保在整段温度范围内二极管处于正向导通区。
4.2 用ADC读数换算温度:先写一版能跑的
有了测量电压之后,软件换算非常直接。以恒流100μA、25℃时Vf=650mV、斜率-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,标定时写入EEPROM:
float 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
代入常数,若n=1,则Δ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℃标定的,二极管的绝对压降随环境漂移直接触发了保护。从那以后,凡是涉及绝对温度阈值的分立二极管方案,我都坚持在软件里做环境温度补偿或动态阈值修正,单纯靠一颗二极管的裸压降判断,在跨度大的工况里不够靠谱。现在这个教训我一直保留在团队的设计检查清单里,也算给各位提个醒。