1. 为什么手头必须留一份Pt100分度表做温度采集的工程师估计都经历过这种场面。单片机程序写好了ADS1220采集回来的电压值也换算成电阻了结果卡在最后一步——电阻值怎么变成温度值翻手机查表吧图片版放大半天还对不准小数点临时上网搜吧还得小心搜到错误版本。最后只能手动敲几个关键点用线性插值硬算精度还不怎么好看。Pt100这个传感器在工业测温和实验室环境里实在太常见了0℃时电阻100Ω所以叫Pt100。它的优势是稳定性好、重复性高、测温范围宽从零下200℃到零上850℃都能覆盖。但对应的阻值温度关系不是直线是一条接近抛物线但有轻微弯曲的曲线所以工程上需要一份精确的对照表来查。你要用Pt100做设计、写程序、校准设备手头没有一份文字版的阻值温度对应表工作效率会低很多。这篇内容就是把Pt100的阻值温度对应关系整理成文字版方便直接复制、打印、写进程序或者贴在工作台上。算是给做温度采集、仪表开发、自动化控制的朋友一份参考工具。也顺便把和ADS1220这类高精度ADC搭配时怎么用表、怎么算温度的方法一起说透。2. 阻值温度对应表的理论基础2.1 铂电阻的测温原理铂电阻的测温原理说白了就是利用金属铂的电阻值随温度变化而变化的特性。金属导体的电阻会随温度升高而增大铂的稳定性特别好不容易氧化、纯度可以做得极高、电阻温度系数也比较一致所以被国际电工委员会选为标准化的测温材料这就是IEC 60751标准。这个标准定义了Pt100在不同温度下的精确阻值。标准里给的公式分为两段0℃以上用一段二次多项式0℃以下用另一段带立方项的公式因为低温区的非线性比高温区明显。0℃以上的公式是Rt R0 × (1 A×t B×t²)0℃以下的公式是Rt R0 × [1 A×t B×t² C×(t-100)×t³]其中R0就是0℃时的阻值也就是100Ω。A、B、C是标准规定的常数A 3.9083×10⁻³B -5.775×10⁻⁷C -4.183×10⁻¹²。2.2 为什么不用线性公式硬算有些朋友图省事直接用100Ω加上0.385Ω/℃去估算温度这样做在0到100℃范围内误差还不算太大但一旦超过这个范围误差会迅速扩大。比如在300℃时线性估算可能会偏出好几度这对工业测量来说完全不可接受。原因是铂电阻的阻值温度曲线实际上是微弯的。0℃到100℃的平均斜率大约是0.385Ω/℃但到300℃附近斜率已经变成约0.397Ω/℃了到600℃附近斜率更是升到约0.410Ω/℃。斜率一直在变化只是变化速率很缓慢所以必须用分度表或者标准公式来处理。这就是为什么我们要准备一份完整的阻值温度对应表而不是背一个系数就走天下。3. Pt100阻值温度对应表完整文字版3.1 表格说明下面这份表按IEC 60751标准生成阻值单位是Ω温度单位是℃。建议使用时保持两位小数绝大多数应用中这个精度已经足够。3.2 负温区-200℃到0℃温度℃阻值Ω温度℃阻值Ω温度℃阻值Ω-20018.52-13047.83-6076.55-19023.35-12052.11-5080.31-18028.16-11056.37-4084.07-17032.94-10060.26-3087.81-16037.69-9064.20-2091.54-15042.42-8068.00-1095.25-14047.13-7071.780100.003.3 正温区0℃到300℃温度℃阻值Ω温度℃阻值Ω温度℃阻值Ω0100.0060123.24120146.0710103.9070127.08130149.8320107.7980130.90140153.5830111.6790134.71150157.3340115.54100138.51160161.0550119.40110142.29170164.773.4 正温区180℃到500℃温度℃阻值Ω温度℃阻值Ω温度℃阻值Ω180168.48280203.84380238.44190172.17290207.40390241.87200175.86300210.96400245.29210179.53310214.49420252.08220183.19320218.02440258.80230186.84330221.53460265.45240190.47340225.03480272.04250194.10350228.52500278.56260197.71360232.00270201.32370235.46再往上的温度850℃对应的阻值是390.48Ω但实际应用时到了500℃以上就要考虑传感器本身的老化和绝缘电阻问题了这部分后面细说。4. 阻值反查温度的实用方法4.1 用公式计算有表格是一回事但程序里不能存一个几百行的数组就完事那样太占资源。我自己的做法是在代码里直接用IEC 60751的公式做一次迭代求解。从电阻算温度公式没法直接反解我一般用牛顿迭代法四五次迭代就能收敛到0.01℃以内。C语言实现大概是这样的逻辑float pt100_res_to_temp(float resistance) { float t (resistance - 100.0f) / 0.385f; // 初值用线性近似 for (int i 0; i 5; i) { float r_calc; if (t 0) { r_calc 100.0f * (1.0f 3.9083e-3f * t - 5.775e-7f * t * t); } else { r_calc 100.0f * (1.0f 3.9083e-3f * t - 5.775e-7f * t * t - 4.183e-12f * (t - 100.0f) * t * t * t); } float err r_calc - resistance; float der 100.0f * (3.9083e-3f - 2.0f * 5.775e-7f * t); // 导数近似 t t - err / der; } return t; }这一段代码我用过很多次精度是够的。需要注意的是负温区求导那个地方C项对导数的贡献很小为了省事可以直接忽略。四个字节浮点数在这个场景下完全够用。4.2 用查表加线性插值如果你的单片机主频很低不想跑浮点运算那就用查表法。把整十度的表存成数组然后把实际电阻值在相邻两个表项之间做线性插值。因为表格间隔只有10℃线性插值的最大误差大约在0.03℃左右绝大多数设备完全可以接受。插值公式很简单T T_low (R_measured - R_low) × (T_high - T_low) / (R_high - R_low)比如你测到电阻是120.50Ω查表看到120℃是146.07Ω110℃是142.29Ω不对那个例子电阻太小了。重新来一个测到电阻值是150.28Ω看表格140℃是153.58Ω130℃是149.83Ω那就可以算T 130 (150.28 - 149.83) × 10 / (153.58 - 149.83) 130 0.45 × 10 / 3.75 130 1.2 131.2℃这个精度做设备控制完全够用了。4.3 和ADS1220配合采样时的查表策略ADS1220是TI出的24位高精度ADC内置了可编程增益放大器和一个2mA恒流源专门为电阻温度检测器这种应用场景设计的。做Pt100采集时一个典型接法是让ADS1220的恒流源给Pt100供电然后测量Pt100两端的电压。因为电流是已知的电压除以电流就是电阻值。用ADS1220的好处是它的内部基准源非常稳定可以配合比例测量消除电流源漂移的影响。比例测量的思路是让同一个电流源同时流过Pt100和一个精密参考电阻然后分别测量两端的电压。这样即使电流源有微小波动两个电压同步变化相除之后波动被抵消了精度会提升不少。拿到电阻值之后再用上面说的查表插值法或者公式法换算成温度。整条链路里面Pt100阻值温度对应表是最后一步换算的关键依据表越准整体系统精度越高。5. 实操中接线方式和对测量结果的影响5.1 两线制、三线制和四线制的区别Pt100传感器本身只是两根引线但实际接线方式分为两线制、三线制和四线制。两线制最简单Pt100两端各接一根线到测量仪表但导线本身的电阻会被算进Pt100的阻值里。如果导线电阻有5Ω温度直接就被拉高约13℃。三线制是工业现场最常见的接法。两根线接在Pt100两端第三根线从其中一端引出用来补偿导线电阻专门配合电桥电路使用。它能抵消大部分导线电阻的影响但前提是两根导线的长度和材质一致电阻相同。四线制精度最高用两根线给Pt100供恒定电流另外两根线单独测量电压。因为测量线路上几乎没有电流流过所以导线电阻对测量结果的影响可以忽略不计。实验室仪表和标准温度计基本都用四线制。如果你的项目用的是ADS1220我强烈建议用四线制。ADS1220有足够的通道支持这种接法而且四线制的测量精度远高于两线制。5.2 自热效应流过Pt100的电流虽然很小但架不住时间一长焦耳热会让Pt100自身的温度略微升高导致测量值偏大。这种自热效应在液体介质里影响比较小因为液体散热好但在静止空气中自热效应会明显得多。一般建议把流经Pt100的电流控制在1mA以下。ADS1220内置恒流源可选0.5mA、1mA、1.5mA和2mA我实际使用的时候通常选0.5mA或者1mA。如果测温介质是流动液体2mA问题不大如果测的是密闭空间里的空气建议选0.5mA减少自热误差。我在一个静止空气环境里实测过用2mA和0.5mA测同一个热源读数能差将近0.3℃。这个量级对于追求0.1℃精度的场合绝对不能忽视。5.3 导线电阻的快速估算既然提到了导线电阻那就说一个简单的估算方法。铜导线在20℃时的电阻率大约是0.0175Ω·mm²/m一根截面积0.5mm²的铜线每米电阻约为0.035Ω。如果两线制接法来回10米导线总电阻大约0.35Ω折算到温度误差接近0.9℃。这个误差在常温测量时可能不明显但要求高的时候必须考虑进去。所以做长距离传输要么用三线制或四线制要么在程序里做软件补偿。6. 常见问题与排查技巧实录6.1 温度读数总是偏高如果读数长期比实际温度高出一个固定值优先怀疑自热效应。试着把激励电流从1mA降到0.5mA如果读数下降了基本就确定是自热导致的。另外检查一下接线端子端子松动导致接触电阻增大也会让测得阻值偏大。尤其是工业环境端子氧化形成的氧化层有不错的电阻有时候能到0.1到0.3Ω。6.2 温度读数跳变、不稳定这种情况多半来自干扰。Pt100的信号电平非常低1mA电流在100Ω电阻上产生的电压才100mV这个量级很容易被工频干扰和电磁干扰影响。排查思路是先看屏蔽层接地是否到位再看双绞线有没有接好最后检查ADC的滤波配置。ADS1220内置了50Hz和60Hz工频陷波滤波器开启之后对跳变有明显抑制。我的经验是采样率不要拉太高20SPS配上陷波滤波在工业环境里读数可以稳定到±0.02℃以内。6.3 温度读数整体偏移整体偏移而且偏移方向和大小基本固定优先怀疑Pt100的精度等级。IEC 60751定义了AA级、A级和B级其中B级允差是±0.3℃加上0.005乘以温度绝对值。也就是说在100℃时B级Pt100的允差大约是±0.8℃这个误差比很多ADC带来的误差大多了。买传感器的时候最好想清楚自己要什么等级。做恒温槽校验之类的高精度应用直接买AA级一般工业过程控制A级完全够用。6.4 电阻为0或者无穷大电阻显示0大概率是传感器两根线短路了。电阻显示无穷大或者读数异常大大概率是传感器断路。用万用表直接在传感器端量一下电阻常温下应该在100Ω左右。如果量出来0Ω或者开路那就是传感器本身坏了没必要再排查后级电路。还有一种隐蔽情况是传感器内部引线断断续续温度一升高就断开温度一降低又接上了。这种软故障最头疼只能通过加热测试法来判断给传感器加热看读数是否连续变化。7. 冷端补偿和系统校准的一些经验7.1 Pt100不像热电偶接线端子位置不引入误差很多以前做K型热电偶的工程师转到Pt100之后会习惯性地担心冷端补偿问题。其实Pt100不需要冷端补偿因为它测量的就是自身的温度接线端子和导线只要没有额外的温度梯度不会影响测量结果。这点和热电偶有着本质区别。但要注意的是如果Pt100的接线端子处于一个比较大的温度梯度环境中端子上的温差会通过导线导热效应影响Pt100的感温部分。所以接到户外或者管道上时尽量让传感器探头部分完全插入被测介质里接线盒朝上减少热流沿导线传导。7.2 两点校准法分度表再准也架不住传感器个体差异和系统链路误差。我的建议是批量化生产之前先做一次两点校准。找一个稳定的0℃源比如冰水混合物再找一个稳定的100℃源比如沸水器。把传感器分别放进去记录ADC转换出来的电阻值然后在程序里对这两个点做线性修正公式是R_corrected (R_measured - R_0cal) × (100 - 0) / (R_100cal - R_0cal) 100这样把传感器的零位误差和增益误差都修正掉。实测下来修正后的系统精度能提升一个量级。批量生产的时候这个校准步骤比买更贵的传感器划算得多。8. 基于表格扩展的小工具和更高阶玩法8.1 用Python在PC端做快速验证开发的时候也不必每次都烧录固件来验证参数我习惯在PC端用Python直接验证换算逻辑。把分度表存成一个字典再用scipy或自己写插值函数配合matplotlib画一条阻值温度曲线一眼就能看出系统误差趋势。这里给一个简单示例从表格数据生成曲线temp_pts list(range(-200, 501, 10)) res_pts [18.52, 23.35, 28.16, 32.94, 37.69, 42.42, 47.13, 47.83, 52.11, 56.37, 60.26, 64.20, 68.00, 71.78, 76.55, 80.31, 84.07, 87.81, 91.54, 95.25, 100.00, 103.90, 107.79, 111.67, 115.54, 119.40, 123.24, 127.08, 130.90, 134.71, 138.51, 142.29, 146.07, 149.83, 153.58, 157.33, 161.05, 164.77, 168.48, 172.17, 175.86, 179.53, 183.19, 186.84, 190.47, 194.10, 197.71, 201.32, 203.84, 207.40, 210.96, 214.49, 218.02, 221.53, 225.03, 228.52, 232.00, 235.46, 238.44, 241.87, 245.29, 252.08, 258.80, 265.45, 272.04, 278.56]注意这个列表中间温度点需要补全我这里只是举例让你理解做验证时的数据结构。实际项目里直接调用公式生成对应数组控制步长取到小数点后几位比手敲数字省事得多。8.2 在PLC或DCS里用功能块查表工业自动化场景里PLC或者DCS里一般都有模拟量输入模块直接把传感器接到模块上系统会自动线性化。但有些老型号模块不支持Pt100直连只能接收4到20mA信号这时需要配温度变送器。变送器会把温度线性映射成4到20mA电流PLC侧再做一次标定即可。这种情况下把分度表翻译成16点位或者32位点的标准线性化数组加载到模块里也是一种常见做法。注意不同厂家的PLC模块对线性化表的点数要求不同Siemens的模块一般支持10点以上用32点去做分段线性化精度已经高出多数温度变送器本体误差了。8.3 配合无线采集做多点温度监测现在不少项目把Pt100和无线数据采集终端配合在仓库、冷库、温室这类场景做多点温度监测。每路无线终端内部完成阻值到温度的换算然后把温度值直接上传到后台。后台只负责展示和告警不再关心换算细节。这中间的关键点在于终端固件里的分度表是否精确。有些终端厂家为了省存储空间只存几十个点然后用二次插值在温度变化剧烈时会引入较大误差。选型时可以看它的说明如果标注了IEC 60751全表支持误差通常是更有保障的。9. 这个问题还能怎么再往深走一步有朋友可能觉得Pt100的阻值温度表就这么点东西查就完了。但实际应用里你是反过来用的测到电阻要找温度。所以最好把表格两侧都摸熟——既知道温度对应的电阻也要能在拿到电阻之后快速定位附近的两个温度点然后插值。我个人习惯是把10℃一档的表背个大概比如0℃是100Ω50℃是119.40Ω100℃是138.51Ω150℃是157.33Ω200℃是175.86Ω这个档位的电阻值大约每50℃增加18到19Ω。心里有这几个锚点之后现场判断仪表读数是否正常基本不用掏手机。更高阶一点可以研究一下Pt1000。Pt1000就是0℃时电阻1000Ω灵敏度比Pt100高了10倍导线电阻的影响占比更小非常适合电池管理系统、PCB板上测温这类低功耗应用。它的阻值温度对应表只要把Pt100的阻值乘以10就行注意这只是近似精确计算还是要按标准公式来。因为两大系统的温度系数定义相同阻值倍数关系在标准精度下基本成立但高精度场合依旧以标准公式为准。我在开发电池管理系统时用的就是Pt1000搭配ADS1220。因为BMS里空间紧凑导线很短不需要四线制两线制加软件补偿就搞定了。测温精度做到了±0.5℃成本比NTC方案高一点点但是一致性、稳定性和寿命优势明显对需要长期可靠运行的系统来说非常值得。10. 剩下的一点心里话做温度传感器设计这几年我最大的感受是Pt100这个元器件原理极其简单但要真正用得好把精度做到极致需要照顾到的细节一点都不少。分度表只是起点导线的长度、激励电流的大小、ADC的量程设置、采样滤波的配置、传感器的精度等级每一项都在影响着最终的温度读数。我踩过的坑不在少数最典型的一次是给一个设备做批量生产用的B级Pt100没做校准就出货了结果同一个恒温槽里几个设备读数差了将近1℃。后来老老实实加了两点校准流程问题才算解决。所以如果你也在批量做温度采集产品建议在产线上预留校准工序那几十秒的成本换来的是稳定可靠的口碑。希望这份文字版的Pt100阻值温度对应表能给你现场调试多一份参考。以后遇到需要快速换算的场景先回想表头那几组数据0℃对应100Ω100℃对应138.51Ω200℃对应175.86Ω心里就有底了。