Pt100热电阻测温:桥式与恒流源选型及调试校正

发布时间:2026/11/2 5:47:34
Pt100热电阻测温:桥式与恒流源选型及调试校正

简介:围绕 Pt100 热电阻测温电路的设计与调试展开的一份技术文档,面向从事温度采集、工业仪表开发及电子竞赛实践的初、中级硬件工程师与学习者。内容以铂电阻非线性校正为线索,梳理两线制与三线制接法差异,并对比桥式、恒流源式两类采样电路的原理、器件选型及调试要点,对运放负反馈接法、基准源稳定、零点设定和自热误差等常见问题均有说明。压缩包共 1 个 PDF 文件,约 201KB,篇幅精炼,适合作为电路搭建前的速查资料与排错参考。该文档已有 1354 人学习,可帮助读者快速理清测温方案选型思路,理解电桥压差放大与恒流源压降放大的实际偏差,少走反复改板与调零的弯路。

1. 从一块重做的板子说起:热电阻 Pt100 测温电路的两条路线

热电阻 Pt100 测温电路这块板子,我前后打过三次样。第一次报废,原因是运放的反馈接反了:有人很确定地告诉我,只有接成正反馈电路才能正常工作。我当时没做实验就照做了,板子回来直接瘫了,只能重新投板。第二次是基准源直接挂在 VCC 上,网压一波动,之前辛苦建立的那张温度-电阻表全都作废。第三次我把桥式和恒流源两套采样电路都跑通了,也弄清楚了它们各自适合什么场合、在哪些参数上会限制你。

这篇就把这两条路线的原理、电阻取值、非线性校正和调试顺序讲清楚。正在选择采样方案的人,可以拿到一套能算数字的对比依据;正在调板子的人,可以对着排查顺序一条条走;刚上手的人照着结论做,也能少走我这三次重新投板的弯路。

2. 两条路线先摆上桌:桥式与恒流源的核心差异

Pt100 的电阻随温度变化,而在 -50℃ 到 600℃ 这段范围内,每摄氏度只有大约 0.385Ω 的变化量。要把这么小的电阻变化变成 AD 能读的电压,工程上成熟的做法基本就两条:桥式测温电路和恒流源式测温电路。这两条路我都在实物上验证过,都能用,但用起来的感受和在参数上的表现差距不小。

先给一个粗略结论:温区窄、追求分辨率、板上已经有可靠基准的场合,桥式更划算;温区宽、探头引线长、不想反复调零点的场合,恒流源更省心。但这个结论背后的权衡必须算清楚,否则照搬别人的阻值,出来的东西大概率对不上。

2.1 桥式测温电路:把电阻失衡放大成电压

桥式测温和它的名字一样,核心是一个四臂电桥。基准部分用 TL431 配合电位器 VR1 调节,产出一路 4.096V 的参考电源。电桥的四个臂分别是 R1、R2、VR2 和 Pt100,其中 R1 和 R2 取相同阻值,VR2 用 100Ω 精密电阻。

当 Pt100 的阻值和 VR2 相等时,电桥平衡,两侧分压相同,输出压差为零。温度一变,Pt100 阻值偏离 100Ω,电桥失衡,两臂中点之间出现一个毫伏级的压差信号。这个信号幅度很小,0℃ 到 100℃ 全程也就几十毫伏,必须放大之后才送得进 AD 转换芯片。

放大环节用的是 LM324 构成的差动放大电路,配阻关系是 R3=R4、R5=R6,放大倍数等于 R5 除以 R3,运放采用单一 5V 供电。这种配阻方式的好处是四个电阻两两对称,共模部分被抑制掉,只有差模的失衡量被放大,所以同样的增益下,桥式对温度变化的有效灵敏度比直接放大 Pt100 上的压降要高。

这里有个容易被忽略的点:理论输出电压和实际输出电压并不是一回事。按放大倍数乘压差算出来的值,在电路上量往往偏大不少。实际输出更接近下面这个式子:

Vout = 4.096 × ( R_Pt100 / (R1 + R_Pt100) − R_VR2 / (R1 + R_VR2) )

式中的电阻值必须以电路工作时的实测值为准,不能拿标称值直接代。原因很实在:电桥本身有内阻,运放的输入阻抗不是无穷大,差动放大网络又对电桥形成了负载,几项叠加下来,压差被拉低了。我一般会先用这个式子估个大概,再上电实测,把实测曲线作为后面建表的依据,而不是拿理论值硬套。

还有一个参数上的自由度:同幅度调整 R1 和 R2 的阻值,可以改变电桥输出的压差大小。R1、R2 取小,电桥内阻低,带负载能力强,但流过 Pt100 的电流也大,自热风险上升;R1、R2 取大,功耗低,但电桥内阻高,后级放大器的输入阻抗必须跟着提上去,否则压差被吸掉更多。这是一个需要反复调整的平衡点,图省事随便定一个阻值,后面调试时会花几倍时间补回来。

2.2 恒流源式测温电路:让压降只跟 Pt100 自己走

恒流源式的思路完全不一样:不去比两个分压,而是强行让一个恒定电流流过 Pt100,那么 Pt100 上的压降就只跟它自己的阻值成正比,线性度天然比桥式好。

具体实现靠两个运放。U1A 把 4.096V 基准电压转成恒流源,U1B 负责把 Pt100 上的微弱压降放大,图中给的放大倍数是 10 倍。推导过程用的是虚短和虚断这两个基本概念:工作在线性范围内的理想运放,两个输入端同电位,所以 U1A 的正端和负端都等于 4.096V。设 U1A 输出脚对地电压为 Vo,按虚断列节点方程:

(0 − V−) / R1 + (Vo − V−) / R_Pt100 = 0

整理得到 Pt100 上的压降:

V_Pt100 = Vo − V− = V− × R_Pt100 / R1

V− 和 R1 都是定值,所以流过 Pt100 的电流恒为 V− / R1,压降只和 Pt100 自身变化的阻值有关。虚线框里那部分电路,从 Pt100 的角度看就是一个理想恒流源。这个推导不复杂,但它的工程意义很大:引线电阻、接触电阻串进来,改变的是回路总阻值,而恒流源的输出电流不会因此改变,只要后续放大的接法对,串进来的这部分只会变成一个固定偏置,可以被校准掉。

恒流源这条路的调试体验明显比桥式轻松。桥式里增益和零点互相耦合,动一个电阻两个都变;恒流源是一路管电流、一路管放大,各管各的,出问题容易定位。

2.3 六个维度对比与选型结论

把两条路放进同一张表里,差异就一目了然了。下面这张表是我按实际调试感受整理的,参数不是数据手册抄来的,是我在两套板上反复比对后的判断。

对比维度桥式测温电路恒流源式测温电路
输出与温度的关系分压比形式,天然带非线性压降正比于阻值,线性更好
有效灵敏度只放大失衡量,同样增益下更高受恒流值限制,需更大后级增益
对基准源的敏感度强,基准一动整条曲线平移强,电流直接由基准决定
引线电阻影响两线制下误差全部计入结果串联电阻不改变恒流值,影响相对小
零点调整方式换 VR2 阻值即可,直观靠软件偏置或改 R1,稍绕
器件数量与调试难度电桥四臂加差动放大,增益零点耦合一

从表里能读出的判断依据有三条。第一条,如果你的测温区间只有几十度,比如 0℃ 到 100℃,桥式的灵敏度优势非常明显,因为它的输出本身就是围绕平衡点的差值,量程窄反而让放大倍数好安排。第二条,如果探头引线拉到几米甚至十几米,恒流源更稳,因为引线电阻串在恒流回路里不会改变电流大小。第三条,如果板上没有独立基准、只能共用 VCC,那两条路都别急着上,先把基准解决了再谈采样。

3. 两线制与三线制的账:导线电阻到底吃掉多少精度

接法的选择比电路拓扑更容易被轻视。很多人电路画得很讲究,探头一接上去读数就偏,查了半天运放和基准,最后发现是两根引线的电阻在作怪。

3.1 两线制的误差:一根导线能吃掉近两度

两线制最省线,也最容易被误用。Pt100 在 0℃ 时是 100Ω,平均每摄氏度变化约 0.385Ω。而常用铜导线的电阻率大约是 0.0175 Ω·mm²/m,一根 0.5mm² 的线,每米电阻约 0.035Ω。

算一笔具体的账:探头离板子 10 米,两线制要走两根线,电流去一趟回一趟,回路总导线长度 20 米,串进来的电阻约 0.7Ω。把这 0.7Ω 折算成温度,0.7 ÷ 0.385 约等于 1.8℃。也就是说,还没开始测,系统里已经埋了接近两度的固定误差,而且这个误差随环境温度变化,铜的电阻温度系数约 0.4%/℃,夏天和冬天还不一样。

更麻烦的是这部分误差没法用软件一次性扣掉,因为它混在 Pt100 的阻值里,你不知道哪一部分是导线、哪一部分是传感器。所以两线制只适合引线极短、精度要求不高的场合,比如板上直接贴着传感器焊的场景,走线长度控制在几厘米内,误差可以忽略。

3.2 三线制为什么能把导线电阻抵消掉

三线制的做法是把 Pt100 一侧的两根等长导线,分别接到电桥的两个相邻桥臂上。这样导线电阻同时出现在两个桥臂里,对分压比的影响互相抵消,只要两根线的长度和线径一致,引线电阻基本不进入结果。

这里的关键词是「等长」。我见过为了省事,一根线走直线、一根线绕了个弯的接法,长度差出十几厘米,抵消就失效了,误差回到接近两线制的水平。真要做得稳,两根线用同一卷线、同样长度剪下来,走线路径尽量对称,接头处用同种端子,把不对称控制在一两厘米内。

恒流源电路同样推荐三线制。虽然恒流源对串联电阻的容忍度比桥式高,但引线电阻产生的压降会叠加在 Pt100 的压降上,一端引线的电阻照样进结果,三线制的抵消逻辑在这里一样成立。常见的做法还有四线制,用两根线走恒定电流、另外两根线专门测电压,把引线影响彻底隔离,成本更高,一般在长距离高精度场合才用。

3.3 桥臂电阻、放大倍数和零点怎么定

这三个参数是桥式电路调试时最常被问到的,也是我重做板子之后反复算过的部分。

桥臂电阻 R1 和 R2 主要决定电桥内阻和流过 Pt100 的电流。取值太小,电流大、自热明显,传感器自己把自己加热,读数会系统性偏高;取值太大,电桥内阻高,后级放大器的输入阻抗要求跟着提高,普通运放容易把压差吸掉。我一般从 2k 这个量级起步,再用万用表量一次实际压差来确认。

放大倍数由 R5 除以 R3 决定。这一步不能只看放大,必须同时看运放的输出摆幅。举个具体的例子:假设测 0℃ 到 100℃,Pt100 从 100Ω 变到 138.51Ω,R1=R2=2k,按前面的式子算,电桥输出压差大约 70mV。如果照图取 R5=100k、R3=1k,增益 100 倍,理论输出 7V,可运放只有单 5V 供电,LM324 的输出根本摆不到这么高,结果就是高压段全部贴顶饱和,温度越高读数越不准。这种设计上的问题,调到半夜也找不出来,只能靠事先算。

改成 R5=43k、R3=1k,增益约 43,满量程输出约 3V,留出了运放输出级的上摆和下摆余量,这才是能用的安排。

零点设定靠 VR2。Pt100 的零点温度是 0℃,对应阻值 100Ω;如果把 VR2 的阻值调到 109.885Ω,零点就被挪到了 25℃。这个做法在只需要关注某一段温区时很好用,相当于把放大器的线性区对准了关心的范围。但测 VR2 阻值有个前提:必须在不接入电路的状态下调节和测量。一旦焊进电路,并联支路会改变量出来的值,你量到的数字和实际参与分压的阻值不是一回事,零点自然调不准。

4. 从毫伏到摄氏度:非线性校正的两条路

Pt100 的阻值和温度不是一条直线,虽然在中段近似度不错,但拉到 -50℃ 到 600℃ 这么宽的范围,直接用线性公式换算,误差会积累到不能接受的程度。校正有两条路,模拟电路校正和微处理器数字化校正,选哪条取决于你的精度要求和 BOM 预算。

4.1 模拟校正的精度天花板在哪

模拟校正的思路是在信号链里加补偿网络,用热敏电阻、二极管或者分段电阻网络去拟合那条曲线。优点是响应快、不占 CPU、断電也能工作,缺点也很直接:精度不高,而且容易受温漂干扰。

问题在于补偿网络本身也是用元件搭的,这些元件自己就有温度系数。你用一个电阻网络去修正 Pt100 的非线性,结果这个网络在不同温度下漂移量不一样,修正曲线跟着变形。想靠挑选元件、加配对来压住漂移,成本会迅速上升,而且每一台都要单独调,量产时的一致性很难保证。

所以模拟校正适合的场景很窄:精度要求在一两度级别、温区不宽、成本压得很死、不想上单片机。真要往 0.1℃ 甚至更高走,这条路走不通,必须交给数字部分。

4.2 数字化查表:把分度表塞进 EEPROM

数字化校正的做法是:先把 Pt100 的电阻值和温度的对应关系建好,存进 EEPROM,运行时根据电路实测的 AD 值反查对应温度。这条路把非线性问题从模拟域挪到了数字域,精度上限由分度表和 AD 分辨率决定,不再受补偿网络温漂的影响。

实现上有两种常见存法。一种存「温度→阻值」,运行时先把 AD 码换算成电压、再换算成阻值,然后查表;另一种更省事,直接存「温度→理论 AD 码值」,把增益、基准、放大倍数全部提前算进去,运行时拿实测 AD 码去表里二分查找。第二种少了一步换算,误差来源更少,代价是换一块板、改一次增益,表就得重烧。

下面这段是第二种写法的实现,表按 5℃ 步长存放,覆盖 -50℃ 到 600℃:

/* pt100_tbl[] 存 -50℃ 起、每 5℃ 一个点的理论 AD 码值 * 表内容 = (该温度下运放输出电压 mV) * 4095 / 4096,烧录前算好 * 共 (600 - (-50)) / 5 + 1 = 131 个点,单调递增 */ #define TBL_STEP 5 #define TBL_MIN_T (-50) #define TBL_MAX_T 600 #define TBL_N (((TBL_MAX_T - TBL_MIN_T) / TBL_STEP) + 1) extern const uint16_t pt100_tbl[TBL_N]; /* 返回温度值,单位 0.01℃;adc_code 为 12 位 AD 原始码 */ int32_t pt100_lookup(uint16_t adc_code) { uint16_t lo = 0, hi = TBL_N - 1, mid; /* 超量程直接钳位,避免表外访问 */ if (adc_code <= pt100_tbl[0]) return TBL_MIN_T * 100; if (adc_code >= pt100_tbl[TBL_N - 1]) return TBL_MAX_T * 100; /* 二分找到相邻两点,表长 131,最多 8 次比较 */ while (hi - lo > 1) { mid = (lo + hi) >> 1; if (pt100_tbl[mid] <= adc_code) lo = mid; else hi = mid; } /* 两点之间线性插值:斜率 = 5℃ / 码值差 */ int32_t dcode = (int32_t)pt100_tbl[hi] - (int32_t)pt100_tbl[lo]; int32_t dtemp = (int32_t)(adc_code) - (int32_t)pt100_tbl[lo]; return (TBL_MIN_T + lo * TBL_STEP) * 100 + (dtemp * TBL_STEP * 100) / dcode; }

这段代码的关键在三个地方。表里存的是理论 AD 码而不是电阻值,所以增益、基准、放大倍数全部在烧录前就被吸收进表里,运行时不用再做单位换算,减少了一层浮点或定点的误差。二分查找保证在 131 个点里最多 8 次比较,MCU 负担可以忽略。插值用的是整数运算,返回单位是 0.01℃,避免了浮点在低端 MCU 上的开销,也避免了小数点后精度丢失。

要改的地方也很明确:TBL_STEP 决定表长和插值精度,5℃ 步长在 Pt100 上的非线性残差很小,够用;如果温区收窄到 0℃ 到 100℃,可以改成 1℃ 步长,表短反而更准。TBL_MIN_T 和 TBL_MAX_T 必须和你实际标定的温区一致,改了增益就要重新生成整张表。

4.3 查表步长和 AD 分辨率要一起算

这是最容易被忽略的一环。很多人把表建得很精细,5℃ 一个点甚至 1℃ 一个点,结果 AD 只有 12 位,前端增益又不够,实际分辨率根本撑不起这个表,精度全浪费在量化误差上。

算一笔:12 位 AD、4.096V 基准,1 个 LSB 对应 1mV。如果恒流源电流取 1mA,Pt100 从 100Ω 到 138.51Ω,压降从 100mV 到 138.5mV,全程只变化 38.5mV,每摄氏度约 0.385mV。也就是说,1mV 的量化误差对应 2.6℃。这时候你把表做得再细也没用,硬件分辨率已经卡死了。

同样的电路,把后级增益从 10 倍提到 100 倍,每摄氏度对应 3.85mV,1 个 LSB 折合 0.26℃。这才是能谈精度的配置。桥式那边同理,70mV 全程压差、增益 43 倍,满量程约 3V,1 个 LSB 折合 0.036℃,量化误差可以忽略,剩下的是电桥和运放本身的漂移。

所以建表之前,先把「每摄氏度对应多少毫伏」和「1 个 LSB 是多少毫伏」这两个数算出来相除,得到的才是你系统真实的温度分辨率。这个数字不达标,后面所有软件补偿都是在给硬件擦屁股。

5. 调试避坑:五个把我按在地上摩擦的现场

下面这五条都是实实在在踩过的,每一条都让我多花了一两天。按「现象、原因、解决」的顺序写,遇到类似的症状可以直接对照。

5.1 放大电路接成正反馈,板子直接重做

现象:上电后运放输出贴在一侧电源轨上,怎么调电位器都不动,或者随手指触碰剧烈跳变,温度变化完全没有响应。

原因:放大电路必须接成负反馈,输出端要经反馈电阻回到反相输入端。当时有人特别提醒我「只有接成正反馈才能正常工作」,我没做实验,直接按他说的画了,结果放大器进入自锁状态,工作点彻底跑飞,只能重新投板子。这条经验是典型的道听途说,任何反馈接法都应该先在面包板上搭一次验证,不能拿别人的口头结论当依据。

解决:输出端经 R5 回到反相输入端构成负反馈,同相端接电桥的另一个中点。上电前用万用表量一遍反馈路径的通断,再上电测静态工作点,确认输出停在中点附近而不是贴在轨上。

5.2 基准源挂在 VCC 上,白天晚上读数不一样

现象:同一路恒温源,上午测和晚上测差 1℃ 到 2℃,用手摸一下电源部分读数就跳,重啟之后零点又变了。

原因:电桥的正电源直接接了 VCC。网压波动会让 VCC 跟着变,电桥输出、运放工作点、AD 参考全都受影响。前面那个式子里 4.096 是常数,VCC 一飘,这个系数就变了,而你的温度-电阻表是按 VCC 稳定时建的,查出来的值当然不对。

解决:电桥和 AD 参考必须接同一路稳定基准,用 TL431 配合电位器调出 4.096V,实测波动控制在 1mV 以内再往下做。特别要注意的是 AD 参考和电桥基准必须同源,否则基准漂移在两边不同步,误差不会被抵消,反而会被放大。

5.3 恒流源电流取大了,传感器自己发热

现象:恒流源电路读数比实际温度系统性偏高,电流越大偏得越多,把探头从水里拿出来,读数回落得比预期慢。

原因:恒流值由 4.096 除以 R1 决定。图上 R1 取 3.3k,算下来电流约 1.24mA,已经超过了 1mA 这条线。电流在 Pt100 上产生的焦耳热会让电阻体自身温度高于环境温度,形成自热误差,而且这个误差随电流平方增长。

解决:把 R1 改大到 4.1k 以上,让电流落在 1mA 以内,实测超过 1.5mA 时自热影响已经很明显。改完 R1 后整条标定曲线都要重做,因为恒流值变了,同样的温度对应的压降也变了。

5.4 电位器在路测量,零点永远调不准

现象:把 VR2 调到自己算出来的阻值,装上去一测零点还是偏,反复调几次,每次量出来的数都不一样。

原因:电位器接入电路后,两端并联了电桥的其他支路,万用表量到的是等效阻值,不是它本身参与分压的那个值。你按这个数去调,等于在追一个移动的目标。

解决:电位器必须在没有接入电路的状态下调节和测量,调好再焊,或者干脆用固定精密电阻替代电位器,把零点一次定死。如果确实需要在路可调,就把电位器改成串联结构,让调节端的阻值变化不受并联支路影响。

5.5 单 5V 供电,算出来的输出电压和实测对不上

现象:按放大倍数乘压差算出来的输出是 7V,实际量到 3V 出头就上不去了,温度再高读数也不变。

原因:两层。一层是运放输出摆幅,LM324 单 5V 供电时输出到不了轨,高压段会提前饱和;另一层是前面提到的,电桥内阻和放大网络互相加载,实际压差比理论值小很多,你拿理论压差乘增益,两个误差叠在一起。

解决:先算摆幅再定增益,满量程输出留出至少 1V 余量。如果测温范围宽、需要的输出幅度大,把运放供电改成 ±15V 双电源,动态范围立刻宽松,实测温度波动大的场合改善非常明显。改完电源之后,标定必须重做,不能沿用旧表。

6. 一套可复现的调试顺序:从空板到能出温度值

前面讲的是原理和坑,最后落到顺序上。这套顺序是我重做三次板子之后固定下来的,每次新板回来都按这个走,能在一晚上之内定位到问题出在哪一级。

步骤操作观察点不合格怎么办
1只焊基准部分,不焊运放和 Pt100万用表量基准输出,应为 4.096V,波动小于 1mV查 TL431 分压电阻和电位器,确认负载没接错
2用 100Ω 精密电阻代替 Pt100 焊上桥式量电桥两中点压差,应接近 0mV偏差大说明 R1、R2 不对称或 VR2 未调好
3换成 138.51Ω 电阻(对应 100℃)量放大输出,与「压差乘增益」的估算值对比明显偏小查运放输入阻抗和反馈网络,偏大查增益取值
4接真实 Pt100,做冰水浴和沸水两点校准0℃ 和 100℃ 两点读数偏差偏差是固定值就调零点,是比例误差就重算增益
5连续通电 30 分钟,每 5 分钟记录一次读数漂移量漂移大先查基准,再查运放供电是否该改双电源
6按实际增益和基准生成查表,烧进 EEPROM全温区抽三点复测复测偏差超预期就回到第 3 步重算

这张表里第 1 步和第 2 步最容易被跳过,大家都想赶紧看到温度数字,结果一上电就是错的,然后从 AD 一路往回查,花的时间反而更多。把基准和电桥单独验证掉,后面每一级出问题都能快速定位到具体环节。

还有一个细节值得单独说:第 4 步的两点校准,冰水浴要用冰水混合物而不是纯冰,沸水的沸点随当地气压变化,严格一点应该查一下当地沸点温度再代入,差个零点几度在 0.1℃ 级别的系统里是能看出来的。校准点的电阻值也别用标称值,用实测值代进公式,这一点和前面说的「式中的电阻以工作时的实测值为准」是同一个道理。

回过头看,我最早那版设计最大的问题是把别人的口头结论当成了自己的经验,正反馈那句话让我白白重做一版板子。从那以后我每次打板之前都强制走一遍「先算摆幅、再定增益、最后核基准」这三步,任何一个数算不出来就先不动烙铁。这份调试顺序和查表代码我整理成了一份文档,需要的话可以拿去对着改板子,希望帮到你。

本文还有配套的精品资源,点击获取