简介:面向工业温度测量与仪表设计人员,这份PDF文档围绕三线制PT100热电阻测温电路展开,重点解决长距离接线中导线电阻引入测量误差的问题。内容从三线制消除导线电阻的原理推导入手,给出恒流源电路与差动放大电路的设计思路,并结合LM385-2.5基准、OP07低噪声低温漂运放及电阻电容参数,说明电流设定、传递函数计算和低通滤波后送AD转换的实现过程,还附有测温范围、线性度与RTU应用结论。资源包共1个PDF文件,大小约1.22MB,结构紧凑,便于查阅公式与电路分析。已有4762人学习,适合需要理解PT100三线制测温原理、完成硬件选型与误差分析的工程师及学生参考。
1. 从一根三十米引线说起:三线制PT100热电阻测温电路设计到底在解决什么
某现场仪表的改造项目里,探头装在管道上,机柜在三十米外,最初按两线制接法把PT100直接拉到采集板,结果同一个工况点,夏天和冬天能差出三四度,换根线又变一次。问题不在传感器,而在那根线上——铜导线本身随温度变化,几欧姆的引线电阻直接叠加进了PT100的阻值里。三线制PT100热电阻测温电路设计要解决的正是这件事:用三条同规格引线,配合恒流激励和差动放大,在硬件层面把导线电阻从测量结果里减掉,而不是靠软件猜。这套方案适合做测温仪表、RTU采集板、温度变送器的课程设计和毕设,也适合需要把PT100接到几十米外、又不想上四线制增加成本的工程场景。下面按总体架构、恒流源、差动放大与数字化、避坑排查、标定验收的顺序,把整条链路拆开讲。
2. 总体架构与器件选型:恒流源加差动放大的两段式信号链怎么定
先说结论性的架构判断:这套电路不走电桥路线,而是用「恒压基准+运放+三极管」构成恒流源,把0.926mA的恒定电流灌进PT100,再拿差动放大网络把U1和U2按1:2的系数组合出来。之所以不用惠斯通电桥,是因为电桥的三臂电阻匹配精度直接决定零点和增益,调试时要反复配电阻;恒流源方案里,激励电流只由基准电压和一只采样电阻决定,变量少,出问题时能一眼定位到是两个元件中的哪一个。工业现场大量测温仪表沿用这个结构,原因就在这里——电路简单、调试方便、可靠性高。
2.1 信号链预算:从满量程反推增益和ADC位数
设计增益之前先把量级算清楚,不然选出来的电阻全是拍脑袋。PT100在0℃是100Ω,灵敏度约0.385Ω/℃;-200℃对应约18.52Ω,850℃对应约390.48Ω。以0.926mA激励计算,PT100两端电压从-200℃的17.2mV变化到850℃的361.6mV。这个电压太小,直接送ADC会被噪声和失调淹没,所以必须放大。
差动级按原文取值,等效增益为11倍,于是输出Uo从0.19V走到3.98V,跨度约3.79V。这组数字反过来验证了增益取11的合理性:满量程输出刚好压在4V附近,留出1V左右余量,不会顶到运放输出上限,也没有把低位浪费掉。
再看ADC。按每摄氏度折算,差动后是0.385Ω/℃ × 0.926mA × 11 ≈ 3.92mV/℃。若用12位ADC、5V参考,1个LSB约1.22mV,折合0.31℃,对0.5℃的精度目标明显不够;换成16位、5V参考,1个LSB约76μV,折合0.02℃,留出二十倍余量,才谈得上精度。这一步算完,位数就不用纠结了。我在给学生的方案里一般会把这个表格直接列出来,让评审一眼看到每级增益分配的依据。
| 环节 | 关键量 | 数值 | 说明 |
|---|---|---|---|
| 激励电流 | I | 0.926mA | 由2.5V基准与2.7k采样电阻决定 |
| PT100端电压 | -200℃ / 0℃ / 850℃ | 17.2mV / 92.6mV / 361.6mV | 按I×RT计算 |
| 差动增益 | A | 11 | 输出满量程约3.98V |
| 输出灵敏度 | dUo/dT | 约3.92mV/℃ | 决定ADC位数下限 |
| ADC位数 | 16位 @5V | 76μV/LSB ≈ 0.02℃ | 12位仅0.31℃,不够用 |
2.2 两段式职能切分:每一级只负责一件事
整条链路切成两段,责任边界清楚,调试才不会互相甩锅。
第一段是恒流源。它只干一件事:不管PT100阻值怎么变、引线多长,输出电流始终是0.926mA。这一级的误差直接变成全量程的比例误差,表现为「所有温度点同比例偏大或偏小」,单点标定就能修掉大半,所以对它的初始精度要求可以放低,但对温漂必须苛刻。
第二段是差动放大与滤波。它负责把U1和U2按1:2组合成U1-2U2,再乘11,最后经R10、C3低通滤波送AD。这一级的误差表现为「零点偏、斜率不对、读数跳」,需要靠电阻匹配和布线与滤波解决。
至于RT到温度的反算,交给软件查分度表加插值,硬件不参与。这条分界线很重要:硬件只保证「RT测得准」,软件只保证「RT到T换算得准」,出了偏差可以先判断是哪一半的问题。
2.3 关键器件选型与参数边界
器件不是越贵越好,是每一个都得对得上误差预算。
运算放大器选OP07,理由不是它快,而是它「慢得干净」:输入失调电压小于25μV,输入偏置电流小于±2nA,失调电压漂移0.5μV/℃。把25μV折合回PT100阻值,是25μV ÷ 0.926mA ≈ 0.027Ω,约0.07℃,可以接受;漂移项0.5μV/℃折合0.0014℃/℃,基本可以忽略。换一颗普通通用运放,失调动辄几毫伏,折合下来就是好几度,直接报废。
电压基准选LM385-2.5,提供2.5V的Ud。它决定激励电流的绝对值,所以要关注初始精度和温漂两个指标,初始精度靠标定消化,温漂只能靠选型。
采样电阻R1取2.7k,必须用金属膜低温漂电阻。原因在推导里:电流只由Ud和R1决定,R1漂多少,电流就漂多少,而且是全量程比例漂,软件补不回来。
三极管选9015并接成复合管,是为了把基极电流的影响压到万分之一以下,后面单独讲。其余阻容按常规取值,R10、C3组成低通,时间常数与采样率匹配即可。
注意:OP07不是轨到轨运放,满量程时差动级输出接近4V,若整机只用单5V供电,输出会顶到摆幅上限导致高温段读数卡死。这一点在选型阶段就要定下来,通常给OP07配±5V以上双电源,留出余量。
3. 恒流源电路设计:2.5V基准如何变成稳定的0.926mA激励
恒流源是整个方案的基准,它歪了后面全歪。这一段把推导、复合管的必要性、电阻选型和上电验证拆成四步讲,每一步都对应一个实际会遇到的判断。
3.1 从虚短虚断推电流:I只由Ud和R1决定
电路结构是这样的:LM385-2.5提供2.5V基准Ud,运放同相端③脚接到5V与Ud的差值处,即5V-Ud;由虚短,反相端②脚电压也等于5V-Ud;三极管Q1的发射极接在②脚同一节点,因此发射极电压是5V-Ud。
采样电阻R1一端接5V,另一端接Q1发射极,所以R1两端电压为:
U_R1 = 5V - (5V - Ud) = Ud = 2.5V
于是流过R1的电流:
I = Ud / R1 = 2.5V / 2.7kΩ ≈ 0.926mA
这个推导里最关键的一点是5V被减掉了。也就是说,电源电压从4.8V波动到5.2V,只要不超过运放和基准的工作范围,激励电流纹丝不动。误差只剩两个来源:Ud和R1。这也是为什么原文强调R1要选温漂小的金属膜电阻——电路已经把能消的都消了,剩下的全靠这两只元件的品质。
顺带算一下自热:0.926mA在100Ω上产生约86μW,即便按较保守的自热系数估算,引入的附加温升也只有零点零几摄氏度,对0.5℃级的目标不构成威胁。这也是选1mA量级而不是5mA、10mA的原因,电流再大,自热和引线压降都会开始咬人。
用一段脚本把不同温度点的量算出来,方便对照后面的实测:
# 三线制PT100恒流源信号链预算 Ud = 2.5 # LM385-2.5 基准电压,单位 V R1 = 2700.0 # 采样电阻,单位 Ω GAIN = 11.0 # 差动级等效增益 I = Ud / R1 # 激励电流,约 0.926 mA print("激励电流 I = %.4f mA" % (I * 1000)) # PT100 在几个典型温度点的阻值(按分度表取值) pts = [(-200, 18.52), (0, 100.00), (100, 138.51), (400, 247.09), (850, 390.48)] for t, rt in pts: u1 = I * rt # 差动级单端输入电压 uo = GAIN * u1 # 差动放大后的输出 print("T=%5d℃ RT=%7.2fΩ U1=%7.4fV Uo=%7.4fV" % (t, rt, u1, uo))跑出来的结果会和2.1节的预算对上:0℃时Uo约1.02V,850℃时约3.98V。写这段脚本的意义不只是算数,而是把「温度—阻值—电压—码值」这条映射固定下来,后面做标定时直接拿它当期望值对照,实测偏了就知道是哪一级出问题。
3.2 复合管的必要性:把基极电流误差压到万分之一
单只三极管做恒流源有个隐患:集电极电流IC和发射极电流IE并不严格相等,差的是基极电流IB,即 IC = IE - IB。假设β是100,误差就是1%,折合到温度上,850℃时就是8℃量级的系统偏差,完全不能接受。
原文用Q1、Q2两只9015接成复合管,把这个问题压下去了。复合后 IC1 = β1β2·IB2,而两只管子的β都在100以上,所以β1β2超过10000,基极电流折算到集电极的占比低于0.01%。这个量级对应到850℃也只有0.08℃左右,可以忽略。
这段推导值得在报告里写清楚,因为它是「为什么不用一只管子」的直接答案。答辩时被问到「为什么多一只三极管」,答β误差折算成温度是多少度,比答「书上就这么画的」有说服力得多。选9015还因为它常见、便宜、β一致性好,替换方便。
3.3 采样电阻与基准的温漂如何对齐
R1和Ud的初始误差和温漂要分开对待,这是很多人算错的地方。
初始误差可以标定。R1标称2.7k,实际2.673k,电流就偏大1%,所有温度点读数整体偏大1%。这种误差是纯比例误差,用一个标准电阻箱在单点(比如0℃对应100Ω)标一次,把修正系数写进软件即可。
温漂不能标定。R1用普通碳膜电阻,温漂可能到几百ppm/℃;现场机柜温度从20℃升到50℃,变化30℃,按300ppm/℃算是0.9%的电流漂移,850℃处就是7℃以上的误差,而且随季节变化,标定只能管一时。所以R1必须选金属膜低温漂型号,把温漂控制在25ppm/℃以内,30℃变化下漂移0.075%,850℃处约0.6℃,属于可接受范围。
Ud同理。基准芯片的温漂指标通常写在手册里,选型时按「温漂乘以机柜温度变化范围」估算贡献,再和R1的贡献做方和根合成,看是否还在总误差预算内。我一般会要求两者合计不超过总预算的一半,剩下的留给差动级和ADC。
提示:R1的功耗也要核一下。0.926mA在2.7k上约2.1mW,选0603封装都够,但为了温漂稳定,通常升到0805或1206,让自热温升更小。
3.4 上电验证:三步确认恒流源工作正常
焊完板子别急着接PT100,先把恒流源单独验证,三步走。
第一步,断开负载,把一只1k精密电阻接到恒流输出与地之间,用万用表测电阻两端电压,应为0.926V左右。这一步验证的是电流值本身,偏差超过1%就回去查R1的实际阻值和基准输出。
第二步,换成100Ω和300Ω两只电阻,分别测电压。两次算出的电流差值应小于0.1%,说明恒流特性成立;如果随负载变化明显,多半是运放自激或者三极管接错。
第三步,把电源从5V调到4.75V再调到5.25V,看100Ω上的电压变化。理论上应该看不出变化,如果跟着电源走,说明虚短的反馈环路没建立起来,检查运放供电和反馈节点有没有虚焊。
这三步加起来不到十分钟,但能挡掉后面一大半的玄学问题。跳过这步直接上整机,最后读数不对时根本分不清是恒流源、差动级还是软件的事,只能靠猜。
4. 差动放大与数字化:把U1-2U2变成ADC吃得下的电压
恒流源保证电流稳,差动级要做的就是把三线制那个漂亮的抵消关系真正实现出来。这一级的难点不在增益,而在系数比和共模抑制。
4.1 系数比1:2:三线制抵消关系在电路上的落点
回到三线制的核心式子。设三根引线电阻均为rL,U1端电压为:
U1 = I × (rL + RT + rL) = I × (RT + 2rL)
U2端因为接的是高阻抗输入,导线上没有电流流过,所以:
U2 = I × rL
两式相减并消去rL:
U1 - 2U2 = I × RT
这一步是整个方案的灵魂:rL被彻底消掉了,剩下的只有I和RT。但要在电路上实现,差动网络对U1路和U2路的传递系数之比必须是1:2,而不是1:1。
R4~R9这六只电阻构成的就是这个加权网络。通常的做法是让U1路经一级跟随或衰减后进入差放的同相端,U2路经分压网络取一半再进入反相端,两路在U3处相减,总的反馈电阻比决定最终增益为11。这样Uo = 11 × (U1 - 2U2),与推导完全对应。
需要提醒的是,U2路那个「除以2」不能靠软件做,必须在硬件上完成。原因是U2只有毫伏级,先放大再减去两倍,等于把U2的误差也放大两倍;先分压再减,误差同样按比例缩小。这条顺序很多人一开始会搞反。
4.2 增益11与量程的权衡:为什么满量程刚好压在4V
增益取11不是随便定的,它由两个约束夹出来。
下界约束来自分辨率。前面算过,增益11时输出灵敏度3.92mV/℃,配16位ADC能到0.02℃;如果增益只取5,灵敏度降到1.78mV/℃,同样16位ADC只剩0.04℃,还勉强;再低就吃紧。
上界约束来自输出摆幅。850℃时U1约361.6mV,乘11是3.98V。如果增益取13,就是4.7V,已经贴到±5V供电运放的上限,高温段必然削顶;取11刚好留出1V左右余量。
所以11是「够分辨率」和「不削顶」之间的一个落点。这个思路可以直接迁移到别的量程:先算满量程输出电压,再倒推最大可用增益,最后看这个增益够不够分辨率,两边一夹就出来了。
顺便说一句,如果被测温区只在0~200℃,完全可以把增益提到20以上,把低位用满,精度还能再上一截。方案里的参数不是圣旨,跟着量程走才对。
4.3 低通滤波与ADC接口:R10、C3怎么取值
差动输出后面接R10、C3组成的RC低通,再进AD。这一级看着不起眼,但它决定了读数的末位跳不跳。
截止频率按fc = 1/(2πRC)算。假设R10取10k、C3取1μF,fc约15.9Hz;若采样率是10Hz,这个截止频率偏高,工频和开关噪声还能漏进来。通常会取fc在采样率的1/10以下,比如采样10Hz时,fc取1Hz左右,对应R10=10k、C3=15μF,或者R10=100k、C3=1.5μF。
R10不能太大。ADC输入阻抗有限,R10过大会和采样保持电容形成分压误差,尤其是多通道轮询时,前一个通道的残留电荷会串到下一个。一般控制在几十k以内,配合足够的C3。
C3选型上优先薄膜或C0G/NP0陶瓷,别用高介电常数的Y5V,那种电容的容量随电压和温度变化能到50%,滤波特性完全跑偏,属于典型的翻车点。
进ADC之前还有一件事:确认输入共模范围。差动级的输出是相对地的单端信号,如果ADC是差分输入,要把它接到正端、负端接地,别悬空。
4.4 分度表插值与温度反算:软件怎么把RT变成T
硬件给出RT,软件负责查表。原文的路径是「查PT100分度表并经插值运算得到温度」,实现上有两种写法,我一般会两种都留着,互为校验。
第一种是直接查表加线性插值,贴合原文描述,实现简单,误差取决于表格步长。第二种是用Callendar-Van Dusen公式反解,代码短,精度高,但需要处理负温段的四次项。
import math A, B, C = 3.9083e-3, -5.775e-7, -4.183e-12 def r_to_t_cvd(rt): """用 CVD 公式把 PT100 阻值反解为温度(℃)""" r = rt / 100.0 # 归一化到 R0 t = (-A + math.sqrt(A*A - 4*B*(1 - r))) / (2*B) if t >= 0: return t # 负温段含 C 项,用不动点迭代修正,3 次即收敛到 0.01℃ for _ in range(3): f = 1 + A*t + B*t*t + C*(t-100)*t*t*t df = A + 2*B*t + C*(4*t*t*t - 300*t*t) t -= (f - r) / df return t def r_to_t_table(rt, table): """查分度表 + 线性插值,table 为 [(温度, 阻值), ...] 升序列表""" for i in range(1, len(table)): t0, r0 = table[i-1] t1, r1 = table[i] if r0 <= rt <= r1: # 落在相邻两点之间 return t0 + (rt - r0) * (t1 - t0) / (r1 - r0) raise ValueError("阻值超出分度表范围") # 分度表可只存 10℃ 步长,插值误差小于 0.02℃ print(r_to_t_cvd(100.0)) # 0℃ 附近应输出约 0.000 print(r_to_t_cvd(138.51)) # 100℃ 应输出约 100.0r_to_t_cvd的返回值直接是温度,注意rt/100.0这一步归一化不能漏,否则系数全部对不上。负温段那三次迭代用的是牛顿法,因为C项让方程变成四次,解析解写起来太丑,迭代三次精度已经足够。
r_to_t_table更贴近原文思路,适合分度表已经存在Flash里、主控算力有限的场景。两种方法算出来的值应该差在0.02℃以内,如果差得大,多半是分度表存错了或者归一化漏了。
注意:恒流源方案下测出的RT已经消除了引线电阻,不需要再在软件里做任何补偿。如果代码里还留着一句「减去引线电阻」,那一定是方案换过、旧代码没删干净,这种残留比不补偿更可怕。
5. 避坑与排查:三线制测温电路最容易翻车的五个地方
这一节按「现象—原因—解决」的形式,把调试阶段最常见的五个坑列出来。这些不是理论推演,是实测会遇到的。
5.1 三根引线不等长:补偿关系从根上不成立
现象:传感器在恒温槽里稳定后,读数仍随环境温度变化,而且每次换线后零点都变,变化方向和机柜温度正相关。
原因:三线制的抵消依赖rL1 = rL2 = rL3这个前提。如果三根线长度不同、线径不同,或者接线端子用了不同材质、接触电阻不一致,rL就不再相等,U1 - 2U2里会残留一项I×(rL1 + rL2 - 2rL3),随环境温度漂移。这时候软件做什么补偿都没用,因为它不知道三根线各自的真实阻值。
解决:三根线必须同规格、同长度、同一根电缆内的三芯,最好带屏蔽层;接线端子用同批次的,螺丝拧紧力矩一致;如果走线距离长,中间不要串接普通端子排,用接线端子直连或焊接。换线之后必须重新标定零点。
5.2 激励电流偏离设计值:全量程同比例偏移
现象:冰水混合物点(0℃)测出来偏高或偏低,而且是所有温度点都偏,100℃偏、400℃也偏,偏的比例大致恒定。
原因:电流的绝对值错了。可能R1用了普通碳膜电阻,实际阻值就有1%偏差,温漂还大;也可能LM385输出不是2.5V,旁路电容缺失导致基准抖动;还有一种隐蔽情况是运放本身失调偏大,把电流环路推偏了。
解决:先用精密万用表实测R1阻值,按I = 2.5 / R1实测重算期望电流,测实际电流对不对得上。对不上就查基准输出和运放。确认偏差之后,用标准电阻箱在单点标定,把修正系数写进软件。同时把R1换成金属膜低温漂型号,否则标定只管一个季节。
5.3 差动电阻不匹配:现场一开电机读数就跳
现象:实验室里读数很稳,装到现场后,旁边电机或变频器一启动,读数就跳几十个字,停下来又恢复。
原因:R4~R9用的是1%普通电阻,四只匹配电阻的比值失配导致差动级共模抑制比下降。现场的长引线就像天线,把共模干扰引进来,差动级抑制不住,直接叠加到输出上。
解决:四只匹配电阻换成0.1%的精密电阻或匹配电阻网络,同一批次的比值一致性更好;长引线用双绞屏蔽线,屏蔽层单端接地;R10、C3的截止频率往下压一档;软件上再加一层中值滤波或滑动平均兜底。
5.4 高温段读数卡死:运放输出顶到摆幅上限
现象:常温到400℃都正常,超过某个温度后读数不再上涨,稳定卡在一个值上,怎么升温都不动。
原因:差动级输出接近电源轨,OP07进入饱和。前面算过,850℃时输出约3.98V,如果OP07只给了单5V供电,其输出摆幅上限通常只有3.5V左右,高温段必然削顶。这不是软件问题,是供电和增益没对齐。
解决:给OP07配±5V或更高双电源,输出摆幅余量就够了;或者把增益降到8~9,让满量程输出压到3V左右;也可以在软件端做量程截断,但那是遮丑不是修bug,答辩时会被追问。
5.5 末位跳动大:滤波参数和布线一起出问题
现象:硬件各级都查过了,电流稳、输出正常,但ADC采回来的值末位一直跳,跳动能到几十个LSB。
原因:通常是三个因素叠加——R10、C3时间常数太小,工频和开关噪声没滤干净;地线走法不合理,数字地和模拟地在ADC处混在一起,数字回流进了模拟地;ADC参考本身就是从5V电源分出来的,电源上的纹波直接进了转换结果。
解决:先按fc重算RC,把截止频率压到采样率的1/10以下;再检查地线,模拟地和数字地单点连接,连接点放在ADC下方;ADC参考改用独立基准或加RC滤波;最后软件加滑动平均,把残余噪声再压一个数量级。这三步做完还跳,就要考虑是不是PT100本身接触不良,用万用表测探头两端电阻看是否稳定。
6. 标定与验收:从标准电阻箱到精度实测怎么走一遍
验收不是「读个数看着差不多就行」,要有可复现的流程和判据。
第一步做纯电路标定,把传感器摘掉,用0.01%精度的标准电阻箱替代RT,依次给定对应-40℃、0℃、100℃、300℃、600℃、850℃的阻值,记录每个点的输出码值和折算温度。这一步验证的是电路传输精度,不涉及探头本身。判据是各点折算温度与设定值之差在±0.3℃以内,且零点与满量程点的修正系数稳定。若某一段偏差明显大于其他段,多半是分度表插值区间或电阻箱接触电阻的问题。
第二步做整体比对,接上真实PT100探头,和标准温度计同槽比对。冰水混合物提供0℃参考,恒温槽提供中间点。判据按量程分档,低温段放宽、高温段收紧,通常0.5℃级仪表在0~400℃做到±0.5℃、400℃以上做到±1℃即可交差。测试记录建议按下面的表头填,答辩时直接拿这张表说话。
| 设定点(℃) | 标准阻值(Ω) | 输出码值 | 折算温度(℃) | 误差(℃) | 判定 |
|---|---|---|---|---|---|
| 0 | 100.00 | 8517 | 0.12 | +0.12 | 合格 |
| 100 | 138.51 | 11802 | 99.86 | -0.14 | 合格 |
| 400 | 247.09 | 21055 | 400.41 | +0.41 | 合格 |
| 850 | 390.48 | 33278 | 849.52 | -0.48 | 合格 |
答辩环节,被问得最多的三个问题是:为什么用三线制不用四线制、为什么增益取11、导线误差到底消掉多少。前两个前面已经算过,第三个可以给个量化答案:假设每根引线1Ω,两线制引入2Ω,折合约5℃误差;三线制把它消到接近零,残余误差只取决于三根线的一致性。三个问题答完,这个方案就站得住。
我自己的习惯是:板子焊接完先跑一遍恒流源三步验证,再上电阻箱做全量程扫描,最后才接探头,任何一步不过都不往下走。早年为了赶进度跳过电阻箱这一步,结果装到现场才发现高温段削顶,返工拆装花的时间是验证的五倍。从那以后我每次做测温板都强制走一遍这个顺序,不管工期多紧。希望这套流程能帮到你,少走一段弯路。
本文还有配套的精品资源,点击获取