做环境温度记录仪那阵子,我需要在-20~60℃区间把温度测准,于是把PT100传感器接进系统。第一版图省事,用了最常见的二线制接法,结果拿冰水混合物做参比一测,最大偏差接近1℃,引线加粗、缩短都没实质改善。换成四线制测量法之后,再用24位ADC做比例测量,整个量程偏差直接压到0.1℃以内。这篇文章就把整个思路、电路和我在调试验证中积累的经验完整写出来,适合正在设计温度采集、工业变送器或者只是想把PT100精度榨干的工程师参考。
四线制听起来像多接两根线,实际上是把“激励回路”和“测量回路”彻底分开,去掉导线电阻对读数的影响。这个思路不仅适用于PT100,对任何低阻值电阻测量都成立。文章核心会覆盖PT100和四线制原理、ADS1220硬件电路、转换算法、校准流程以及我踩过的坑,配套一个可直接参考的电路结构。
1. 方案选型:为什么最后选了四线制PT100
1.1 PT100的电气基础与标称特性
PT100属于铂电阻温度传感器,核心是铂金属的电阻随温度近似线性变化。0℃时标称阻值100Ω,所以叫PT100。IEC 60751标准给出了铂电阻的标称分度表,常见温度点参考值可以记一下:-20℃约92.16Ω,0℃正好100Ω,60℃约123.24Ω。做工程选型时,这个“近似线性”的电阻-温度关系是底层基础,但要注意它并不是绝对线性,后续软件处理要么查表,要么用多项式拟合。
选PT100而不是NTC热敏电阻或者DS18B20数字传感器,主要看三点。第一是稳定性,铂材料长时间老化漂移远小于NTC;第二是可互换性,不同厂商PT100只要符合同一精度等级,撤换时不需要重新标定;第三是测温范围,-200℃到850℃量级,把-20~60℃这种环境监控场景覆盖得绰绰有余。缺点是电阻变化量很小——整个量程只有31Ω左右的变化量,所以测量电路必须解决小信号提取和导线电阻干扰这两个问题。
这也就解释了为什么PT100本身不贵,但“用得好”比用DS18B20麻烦得多。DS18B20把数字转换做在传感器内部,直接输出数字量;PT100把原始电阻量裸着交给用户,测量链路的好坏完全取决于外围电路。四线制测量法就是针对这种低阻高精度场景的标准解法。
1.2 二线、三线、四线到底差在哪
先看二线制。两根线一端接传感器,另一端接测量仪表。仪表测到的阻值等于PT100阻值加上两根导线的总电阻。普通铜导线,截面0.5平方毫米,每米直流电阻大概0.035Ω左右。如果导线长度10米,两根线来回20米,额外电阻约0.7Ω。PT100在0℃附近灵敏度约0.385Ω/℃,0.7Ω对应大约1.8℃的误差。对-20~60℃这种量程来说,这个误差完全不可接受。
三线制做了改进,把导线电阻拆成等效的三部分,利用电桥或者恒流源测量,在两根导线阻值对称的前提下可以抵消大部分线阻误差。工业现场用得很普遍,但前提是“两根线阻值一致”,实际端子氧化、压接不紧、线材批次差异都会破坏对称性,残余误差难以完全消除。
四线制则从根本上解决问题。四根线分成两组:一对外加恒流源,专门负责给PT100提供激励电流;另一对接到高输入阻抗的差分测量端,专门用来感测PT100两端的电压。感测端内部输入阻抗极高,流过感测线的电流趋近于零,所以感测线上的电阻不会产生额外压降。电流回路里的导线电阻虽然存在,但影响的是电流源需要多付出多少电压,不会影响PT100两端的真实压降。
做个不严谨但好记的比喻:二线制等于量水管两端的压力,却把连接水管的弯头压降也算进去了;四线制等于把压力表的取压管路接到水管的真正两端,取压管里基本不走流量,弯头压降自然不相关。接法解释清楚,就能理解为什么我说“四线制的极限取决于仪表自身精度,而不是导线”。
1.3 四线制带来什么,付出什么代价
四线制最直接的收益是导线电阻、接触电阻、端子压降这些“寄生量”全部从测量路径中剔除。实测体验是,即使把传感器用十几米的普通屏蔽线接到设备端,读数也不会有肉眼可见的偏差。这正是工业现场和设备分离场景最需要的一点。
代价也不算小。一是传感器引线从两条变成四条,线缆成本约增加一倍;二是后级电路必须有恒流源或等效激励,同时要用差分放大器或24位ADC的高阻抗输入做电压采样,硬件复杂度比二线制高;三是如果接四根线还带着屏蔽层,屏蔽层、接地点处理不当会引入共模干扰,反而比三线制更考验布线功底。
所以方案选型的结论很直接:短距离、精度要求一般的场景,二线和三线够用;追求参考级精度、长距离传输或者传感器与仪表物理分离的场景,直接上四线制,别犹豫。下面进入原理和电路实现层面。
2. 四线制测量原理:误差消除的数学过程
2.1 开尔文连接的误差消除原理
四线制在专业上叫开尔文连接,也叫四端法。核心思路是给被测电阻提供一条专用的电流路径,再用另一条独立路径测量电压。只要电压测量回路的输入阻抗足够高,感测线上的电流就趋近于零,感测线上的电阻再大也不产生压降,于是电压表量到的就是RTD两端电压的真实值。
简单推导一下。设激励电流为I,PT100阻值为Rt,激励线电阻为RL1、RL2,感测线电阻为RL3、RL4,电压测量端输入阻抗为Rin,感测回路电流为In。当Rin足够大时:
- 激励回路:I从恒流源流出,经过RL1、Rt、RL2回到电源地,这条回路上有压降,但这是电流源内部要处理的事情。
- 测量回路:电压测量端跨接在RTD两端,流过RL3和RL4的电流In基本为0。
- 电压测量值V = I × Rt + In×(RL3+RL4) ≈ I × Rt。
只要把In控制在极小范围,线阻的影响就只取决于“感测回路电流乘以线阻”这个残余项,而不是“激励电流乘以线阻”。这就是四线制能消除线阻的数学本质。有一个容易被忽略的前提:恒流源的精度直接影响V=I×Rt的换算准确性。所以实际设计时我经常用比例式测量绕开这个问题,后面硬件章节细说。
2.2 激励电流、自热、共模电压怎么取舍
激励电流选多少,是四线制设计里最需要权衡的参数。电流太小,RTD两端产生的电压信号弱,容易被噪声和ADC量化噪声吞掉;电流太大,传感器自热效应显著,电阻还没反映环境温度,先把自身加热了。
自热可以用焦耳定律估算:P = I² × R。PT100在0℃时100Ω,激励电流1mA时功耗0.1mW,在空气中封装条件下温升可以忽略;电流5mA时功耗2.5mW,空气中小封装PT100可能产生约0.1~0.5℃的附加温升,贴片封装的散热更差,会更敏感。所以我的经验是常规场景用0.5mA~1mA,极低功耗场景可以考虑降到0.25mA,但需同步提升后续放大的增益。
还要注意共模电压问题。恒流源从高端注入、从低端流回,RTD两端相对地的电位会落在某个范围内。后级ADC或者仪表放大器的输入共模范围必须覆盖这个电位范围,否则即使差分信号正确,前级也已经进不了线性工作区。这也是“电路图看着简单,实际调试容易翻车”的高发区,后面ADS1220方案里再展开。
2.3 比例式测量与参考电阻
如果直接用恒流源激励,读RTD两端的电压然后除以电流,那么电流源的漂移和温漂会直接折算成温度误差。更稳妥的做法是比例式测量。
思路是让同一个激励电流同时流过RTD和一个精密参考电阻RREF,然后用ADC分别测量RTD两端电压和RREF两端电压。因为两者电流相同,比一下电压就能得到:
Rt / RREF = Vrtd / Vref
电流源的绝对值在计算中自动消掉了,温漂、老化都不再是问题。这就是24位ADC内部集成可编程电流源的时候,为什么推荐用“外部RREF + RTD串联”接法的原因。既然要做-20~60℃的量程,RREF选多大、激励电流选多大都需要精细计算。下面就以ADS1220这个热门方案为例,把完整电路和参数算清楚。
3. 硬件电路实现:ADS1220比例式方案与分立方案
3.1 ADS1220方案基础接法与电路图
ADS1220是TI出的一款24位ΔΣ ADC,内部自带两个可编程激励电流源(IDAC1、IDAC2)、可编程增益放大器(PGA)、内部基准和温度传感器。做PT100比例测量属于它的经典应用。我给出一版我在环境采集板上实测通过的接法。
电路连接关系整理如下:
- AVDD接3.3V,AVSS接GND,DVDD也接3.3V,模拟地和数字地单点汇合。
- 用外部基准或内部基准均可,最稳的是把RREF接成比例式参考:IDAC1输出接入RREF(精密电阻,阻值取2kΩ),RREF另一端接PT100的一根激励线。
- PT100另一根激励线接回IDAC2,形成电流回路。
- PT100两端分别用另外两根感测线引到ADC的AIN1+和AIN1-差分输入端。
- 如果要用外部基准做比例式,RREF两端同时接到REFP1/REFN1;如果嫌麻烦,直接用内部2.048V基准也行,但这样电流源漂移就会进入误差链,精度会差一截。
配一个简单的四线制示意,方便对照:
IDAC1 ─→ [RREF 2kΩ] ─→ 节点A ─→ [PT100] ─→ IDAC2(电流回路) │ │ 感测线+ 感测线- │ │ AIN1+ AIN1- REF+ REF-由于IDAC1和IDAC2的电流在同一串联回路里,RTD上的电压和RREF上的电压严格成正比,ADC转换结果直接等于RTD与RREF的比值,电流源精度完全不影响最终读数。这就是我坚持用比例式的原因。
3.2 参数计算实例:-20~60℃量程怎么定
按量程-20~60℃来计算。PT100电阻范围约92.16Ω到123.24Ω,跨度31.08Ω。假如激励电流取500μA:
- RTD两端电压:92.16Ω×500μA = 46.08mV,60℃时为123.24Ω×500μA = 61.62mV。
- RREF取值2kΩ时,基准电压 = 2kΩ×500μA = 1V。
- ADS1220的满量程差分输入范围是±VREF/Gain。若PGA增益取8,满量程=±0.125V=±125mV。
- 61.62mV的信号相对于±125mV满量程,约占用49.3%的ADC正半量程,余量充足,不会因系统误差导致饱和。
- 等效分辨率方面,24位ADC理论上能分辨0.298μV,对应电阻分辨率约0.0006Ω,完全够用。真正限制精度的往往是RREF精度、RTD本身等级和噪声温度。
电流源和PGA的配置一般通过寄存器写。由于串接2kΩ RREF加上RTD上的压降,总回路压降约1.046~1.062V,再加上IDAC自身需要的净空电压,3.3V供电完全合理。如果改用5V供电,净空更宽裕,不过需要注意ADC输入共模范围不要越界。
芯片默认的电流源输出能力从0.25mA到1.5mA可选。我这边测试结论是500μA档配2kΩ RREF是综合体验最好的组合。你也可以按量程和自热预算来套上面的公式:先定激励电流,再定RREF阻值使基准电压落在1V~2V区间,最后选PGA增益让最大信号占量程的50%~80%。
3.3 分立方案:恒流源+仪表放大器+ADC
如果没有ADS1220这种集成方案,用分离器件也能做出很能打的四线制电路。核心三件套是恒流源、仪表放大器、ADC。
恒流源可以用三端可调稳压器LM334或者运放加基准电压源实现。LM334调个电阻就能输出毫安级电流,但温漂偏大,精度要求高的时候我更推荐用REF200这种专用恒流芯片,或者“运放+TL431基准+采样电阻”搭的精度稍高的恒流源。仪表放大器用INA128/INA828之类,放大倍数设几十倍,把RTD的毫伏级信号抬到ADC合适的输入范围。ADC用ADS1115或STM32内部ADC都行,但内部ADC的参考源和噪声性能一般,想做到0.1℃级别需要校准。
这套分立方案的优点是元件成本低、逻辑透明,哪里出问题一眼能看出来,适合教学和快速验证;缺点是温度漂移性能完全取决于每个环节的器件参数,很难达到集成方案的自然一致性。如果产品化,我更推荐ADS1220这类集成方案。
3.4 布线、去耦、输入保护等工程细节
PCB布线对整个四线制性能的影响比很多人想象中大。这里必须注意几点:
- 感测线和激励线从RTD引脚处独立引出,不要在PCB上就近并到一起。四线制一旦在某个点合并成三线,精度优势就折损。
- RTD信号属于低频微弱信号,走差分线要等长、平行或者双绞,避免两路感测线上耦合不对称的噪声。
- 电源去耦要靠近ADS1220的AVDD和DVDD引脚,模拟电源建议加磁珠隔离。参考电阻RREF和RTD周围不要铺大块铜皮,否则铜皮温度变化会通过热传导影响测量点。
- 输入保护方面,RTD有引线到外界,雷击浪涌环境和工业现场建议串几kΩ的输入保护电阻,并联TVS管到电源轨。注意保护电阻必须对称地放在差分输入两端,否则会破坏差分平衡。
- 长距离传输时,屏蔽层应在采集端单点接地,不要在传感器端同时接屏蔽,否则容易形成地环路电流。
这些细节看着不起眼,但我在调试中确实遇到过:因为RREF附近铺铜导致温度漂移,因为感测线在PCB端子处合并导致精度退化,因为屏蔽层两端接地导致50Hz工频毛刺。很多时候曲线不对,根源不在原理,而在工艺。
4. 软件与算法:从ADC码值到真实温度
4.1 采样、滤波与断线检测
拿到ADC原始码值后,第一步是滤波。工业现场最容易混入50Hz工频干扰,我一般先做滑动平均滤波,再做一次中值滤波,剔除偶发尖峰。窗口长度根据采样率调整,比如ADS1220设为20SPS,滑动窗口取8~16个点,即可兼顾响应速度和稳定性。
断线检测是温度采集系统里容易被漏掉但很重要的功能。RTD断开时,IDAC电流没有回路,ADC输入会被恒流源拉到某个极限电压,转换结果通常会跳到接近正满量程或负满量程。判断逻辑可以这样:若换算出的电阻值大于比如1kΩ(远大于RTD正常范围)或小于比如50Ω(短路),就置故障标志。这个逻辑要放在滤波之后、温度换算之前,避免把异常值带入PID控制逻辑。
4.2 电阻转温度的查表法
PT100的电阻-温度关系虽然接近线性,但直接线性换算会带来最高约0.4℃的额外误差,工业级应用一般都要做补偿。最快速直接的方法是查表法:查IEC 60751分度表,把-20~60℃范围内的表按1℃间隔存成数组,然后对实测电阻做二分查找,找到相邻温度点后线性插值。
查表法好在计算量小、直观、调试方便。负温度段和正温度段密度可以一致,1℃间隔的表已经能保证线性插值误差小于0.01℃。缺点是分辨率受限,表要占一点Flash空间。对STM32这类单片机来说,几十个浮点数的数组完全不算负担。
4.3 Callendar-Van Dusen多项式与C语言实现
不用查表,也可以用标准方程把电阻换成温度。IEC 60751里常用的Callendar-Van Dusen方程分为模式:
- 0℃以上:Rt = R0 × (1 + A×t + B×t²)
- 0℃以下:Rt = R0 × (1 + A×t + B×t² + C×(t-100)×t³)
其中R0=100Ω,A=3.9083×10⁻³,B=-5.775×10⁻⁷,C=-4.183×10⁻¹²。用这个方程做正温度范围拟合,精度很高。如果只做-20~60℃区间,也可以简化处理,用一元二次拟合甚至分段线性拟合,工程上完全够用。
R0偏移问题也值得提一句。前面输出的是比值Rt/RREF,如果PT100的实际0℃电阻不是严格100Ω(不同精度等级有允许偏差),按R0=100Ω算出来的温度会整体偏移。所以更健壮的处理方式是把“实际标定的R0”作为可配置参数。下面给一段C语言的核心换算代码:
#define R0 100.0f #define A 3.9083e-3f #define B -5.775e-7f float rtd_resistance_to_temperature(float resistance) { float t; // 先做初步线性估计,再迭代修正 t = (resistance - R0) / (R0 * A); // 初始值约等于一次近似 for (int i = 0; i < 3; i++) { float r_calc = R0 * (1.0f + A * t + B * t * t); t += (resistance - r_calc) / (R0 * (A + 2.0f * B * t)); } return t; }这段代码用牛顿迭代做逆运算,迭代三次后误差已经远低于0.01℃。有单片机基础的同学很容易移植到STM32、ESP32等平台上。需要说明的是,这里以0℃以上模型为主,负温区间要在方程里加C项,否则低温误差会被放大。
5. 校准与精度实测:数据不会骗人
5.1 校准前准备与几种标定点
硬件和软件跑通之后,别急着相信读数,校准是必须的。校准前检查两件事:第一,RREF实际阻值,用万用表或电阻计实测;第二,传感器精度等级。即使电路做到完美,一根普通B级PT100本身的允许误差就可能有±(0.3+0.005×|T|)℃,折算下来在60℃附近约±0.6℃,好电路也救不回来。
标定点选择取决于手头条件。最方便的0℃标定点是冰水混合物,用保温杯装满碎冰和少量水,做到0℃稳定,误差可控制在0.02℃以内。100℃标定点用沸水,但受大气压影响较大,海拔不同沸点不同,精度要求高的话需要按当地大气压修正。另一个实用做法是用精密电阻箱模拟PT100阻值,这样可以不用实际控温,而且在-20~60℃范围内的每个目标点都能快速完成静态标定。
5.2 两点/三点校准操作与记录表
最少做两点校准:一个低端点,一个高端点。记录实测ADC换算温度和实际温度,修正系统增益和偏移。常见处理方式是对“电阻比值”做线性校正:
Rcorr = R_measured × gain + offset
实际操作流程是:首先在冰水混合物中稳定10分钟,记录换算出的温度T0_calc,得到偏移量;然后在热水浴或者电阻箱设置到接近60℃的点,记录读数T1_calc,计算增益补偿;最后把gain和offset写进系统的参数区。
记录表示意如下:
| 标定点 | 参比温度/电阻 | 校正前读数 | 校正后读数 |
|---|---|---|---|
| 0℃冰水 | 0.00℃ | 0.43℃ | 0.01℃ |
| 60℃电阻箱 | 123.24Ω | 60.35℃ | 60.04℃ |
三点校准就是在中间再加一个点,比如-20℃或者30℃,把残余的非线性误差进一步压低。对四线制+比例式来说,线性度通常已经很好,两点校准基本够用。
5.3 实测结果如何解读
我在实测中把校准后的系统接到水浴槽,设定温度从-20℃到60℃步进,每个点稳定后连续采集100次。最终统计结果是:最大偏差约0.06℃,均方根偏差约0.02℃,这已经是相当漂亮的结果。这个数据里,RTD本身的精度等级贡献了主要分量;如果想继续往下压,就只能换更高等级的传感器,并考虑散热套管设计、尾端导线温度梯度等物理因素。
同一套接线,如果把ADS1220换成普通16位ADC加仪表放大器,整体精度大约会劣化到0.1~0.2℃量级,具体取决于噪声、增益误差和参考源温度系数。所以结论很明确:方案选型和校准投入直接决定你能拿到多少精度,四线制只是把路修平,真正开车的还是整套系统的底子。
6. 常见问题与排查技巧实录
6.1 读数异常原因速查表
把调试中遇到的现象、可能原因和解决办法整理成一张表,方便遇到问题时快速定位:
| 现象 | 可能原因 | 处理建议 |
|---|---|---|
| 读数偏高且接近满量程 | RTD断线,IDAC无回路 | 检查端子、线缆、传感器是否断路 |
| 读数偏低且接近0 | RTD短路或感测线短路 | 断开传感器,分别测RTD和线缆 |
| 读数整体偏移固定量 | RREF实际值偏移或系统未校准 | 实测RREF,重新做两点校准 |
| 读数大范围跳变 | 50Hz工频干扰/屏蔽不良 | 加滤波,检查屏蔽层接地方式 |
| 读数随环境温度缓慢漂移 | RREF温度系数大或PCB布局热耦合 | 换低温漂RREF,远离发热器件 |
| 接线是四线但精度不高 | 感测线在端子处与激励线合并 | 从RTD引脚独立引出四线,禁止中途并接 |
6.2 几个我踩过的坑
第一个坑是“伪四线”。我把四根线从传感器引到PCB端子,但为了省事在端子处把感测线和激励线并到同一个铜箔节点,最后测量结果和两线制几乎一样。原因是并接后电流路径又混进了测量回路,感测线上开始走激励电流,四线制的优势被直接短路。检查方法是用万用表确认从RTD引脚到ADC差分输入之间的通路不经过任何激励电流节点。
第二个坑是自热效应被低估。有一次我为了追求更强的信号,把激励电流从500μA调到1.5mA,结果读数在通电后持续上升,10分钟稳定后高了0.2℃。后来按P=I²R一算,1.5mA下的功耗是0.5mA档的9倍,传感器热阻稍大就会出现明显温升。从那以后,我喜欢把激励电流往小调,再把PGA增益往大调,信号和自热之间取平衡。
第三个坑是地环路。传感器和采集板之间用了屏蔽线,屏蔽层两端都接地,结果采集到的信号叠加了明显工频干扰。把传感器端屏蔽层悬空,只在采集板端单点接地后,噪声大幅下降。这是模拟小信号采集的经典教训,再强调一次:屏蔽层只能单点接地。
文章写完,我还在想这次排查的经验到底能帮大家省多少时间。四线制的电路本身并不复杂,但工程细节决定成败。如果你按照文中的方案做一套,建议先从ADS1220的寄存器配置和比例式电路入手,再逐步加入校准、滤波和故障检测。这样即使手头没有太昂贵的设备,也能把PT100的潜力真正用出来。