1. 测温方案选型:为什么最终会走到Pt100
上个月帮朋友做一个恒温槽的项目,测温方案倒来倒去,最后朋友甩给我一句话:别整那些花里胡哨的,就Pt100。三个字堵死所有讨论。说实话,这个选择一点都不意外。工业测温场景里,Pt100几乎就是默认答案,但默认归默认,真要把它用明白,尤其是先在LTspice里把整个测温电路跑一遍,还是有不少门道的。
1.1 三种常用传感器的"性格"差异
很多新手第一反应是NTC热敏电阻,毕竟便宜、灵敏度高,电桥一搭就能出结果。NTC的问题在于阻值随温度按指数规律变化,0到100°C之间还算勉强可用,一旦跨度拉大,非线性能把人逼疯。而且NTC批次一致性差,同一型号不同批次可能差出2°C以上,做成产品后每台都要单独校准。
热电偶则是另一个极端,测温范围确实宽,几千度都能碰,但输出信号只有几十微伏每摄氏度,对后级放大器的噪声和失调要求极高,还必须做冷端补偿。冷端补偿要是没做好,误差轻轻松松超过2°C。
Pt100的定位正好卡在中间:温度范围覆盖-200°C到850°C,对绝大多数工业应用完全够用;输出信号虽然不算大,但比热电偶强一个数量级;更关键的是铂电阻的重复性和长期稳定性极好,十年用下来漂移通常小于0.1°C。实验室级别的铂电阻甚至可以当传递标准用,这是NTC和热电偶都做不到的。
下面的对比表可以比较直观地看出三者的定位:
| 传感器 | 灵敏度 | 线性度 | 长期稳定性 | 典型成本 | 主要痛点 |
|---|---|---|---|---|---|
| NTC热敏电阻 | 高(-4%/°C) | 差 | 一般 | 低 | 互换性差、非线性严重 |
| 热电偶 | 低(μV/°C) | 较好 | 一般 | 低 | 需冷端补偿、信号微弱 |
| Pt100 | 中(0.385Ω/°C) | 好 | 极好 | 中 | 激励需恒流/恒压、信号需放大 |
1.2 Pt100阻值与温度的数学关系
Pt100的"100"指的是在0°C时阻值为100Ω。它的阻值随温度变化不是简单的直线,而是遵循IEC 60751标准定义的多项式。0°C到850°C范围内用二次多项式表示:
R(T) = R0 * [1 + AT + BT²]
其中R0=100Ω,A=3.9083e-1/°C⁻¹,B=-5.775e-7/°C⁻²。-200°C到0°C的低温和区还要再加一个三次项:
R(T) = R0 * [1 + AT + BT² + C*(T-100)*T³]
C=-4.183e-12/°C⁻⁴。
很多人习惯用简化公式R(T)=100*(1+0.00385*T)来估算,这个线性近似在0到100°C误差还不算离谱,但到了200°C就会露出马脚。我算过一笔账:200°C时线性近似给出的阻值是177Ω,而标准多项式算出来约175.86Ω,差了1.14Ω。按每摄氏度0.385Ω换算,这就是约3°C的误差。所以只要测温跨度超过100°C,就别再用那个简化公式了,老老实实用二次多项式。
记住几个常用点的标准阻值,对后面验证仿真模型很有帮助:
| 温度 | 标准阻值 | 温度 | 标准阻值 |
|---|---|---|---|
| -50°C | 80.31Ω | 150°C | 157.33Ω |
| 0°C | 100.00Ω | 200°C | 175.86Ω |
| 25°C | 109.73Ω | 300°C | 212.05Ω |
| 100°C | 138.51Ω | 400°C | 247.09Ω |
1.3 为什么要在LTspice里先验证信号链
Pt100的灵敏度只有0.385Ω/°C,如果用1mA恒流源激励,电压变化也只有0.385mV/°C。这个信号量级直接进ADC是不现实的,必须经过放大。而一套完整的测温信号链至少包含传感器模型、恒流源或电桥、差分放大器、电平搬移和滤波这几个环节,其中任何一个环节的增益算错、偏置算错,到实物阶段都要花几倍时间排错。
LTspice这种SPICE仿真工具最大的价值,不是把电路"画"一遍,而是逼你把每个节点的电压、电流、增益、误差在数字上落实清楚。我以前吃过亏:画原理图的时候想当然觉得差分放大增益没问题,结果输出直接顶到电源轨,示波器一看傻眼了。如果当时先在LTspice里把温度扫描跑一遍,这个问题十秒钟就能发现。后面要讲的所有东西,都是围绕"让你在动手焊板子之前,把能踩的坑先在软件里踩一遍"这个思路来的。
2. 在LTspice里建立Pt100行为模型
LTspice默认元件库里有电阻、电容、二极管,但没有现成的Pt100传感器模型。不过这不影响使用,因为Pt100本质上就是一个阻值随温度变化的电阻,完全可以用一个参数化电阻来精确建模。
2.1 参数化电阻的写法
在LTspice原理图里放一个电阻R1,右键把Value改成花括号表达式:
{Rpt100}然后在原理图上添加SPICE指令(快捷键S,或点击工具栏里的.op图标):
.param Rpt100 = 100*(1+3.9083e-3*T-5.775e-7*T*T) .param T=25这里T是我们自定义的传感器温度参数,单位和温度一致。仿真时想扫描温度,就在后面再加一条:
.step param T -50 200 5这条指令的意思是让T从-50°C以5°C为步长一直扫到200°C,LTspice会把这个范围内的每一个T值都算一遍工作点。
电阻值用花括号表达式,这是LTspice的一个关键语法。凡是元件值不是固定数字、需要由参数计算得到的,都必须用花括号包起来。比如设置R1的Value为{Rpt100},仿真参数T变化时,R1的阻值就会跟着变。
如果不想用中间变量,也可以直接把表达式写在电阻值里:
R1 n001 0 {100*(1+3.9083e-3*T-5.775e-7*T*T)}两种写法效果一样,但用.param定义变量更清晰,后面想改成别的传感器类型,只需要改一处。
2.2 用1A恒流源校验模型精度
模型建好了,怎么确认它真的符合Pt100分度表?有个非常取巧的验证方法:在电阻上并联一个1A的理想电流源,然后测电阻两端的电压。欧姆定律V=I*R,电流源是1A,那么电压数值就直接等于电阻值。
具体操作是:在原理图里放一个直流电流源,设置Current为1A,接到参数化电阻两端。做一次直流工作点仿真或者直流扫描,然后把节点电压放到波形窗口里看。因为电压单位是V,而数值恰好是欧姆数,读起来非常直观。
我在前面列了几个标准阻值点,这里可以直接对照:T=0°C时读出来应该接近100V,T=100°C时应该接近138.5V,T=200°C时接近175.9V。当然,因为这是1A的大电流源,实际电压数值是100多伏,看起来有点吓人,但这是纯粹为了读取阻值,本身不构成实际电路。
实测几个点,如果二次项系数没写错,误差应该在0.01Ω以内。这一步相当于在仿真世界里给传感器模型校准,模型不准,后面所有仿真结果都不可信。
2.3 别用.temp全局温度来扫描传感器温度
LTspice的电阻确实有温度系数参数,可以用TC1、TC2,也可以设置环境温度.temp,但我不建议用这个来做Pt100仿真。原因有两个。
第一,.temp是一个全局仿真温度参数,它影响的不只是这一个电阻,还会改变三极管PN结、二极管、运放内部模型等所有半导体器件的温度。这样T一扫描,你的运放自身也在"变热",输出结果里混入了不必要的变量,没法单独评估传感器温度变化带来的影响。
第二,.temp对电阻的温度建模是线性TC模型,精度达不到Pt100二次多项式的要求。你可以在电阻属性里写R=100 TC1=0.00385,但这样只能做线性近似,200°C以上的误差会累积到几摄氏度。
更干净的思路是把传感器温度和电路工作温度彻底分开:电路工作温度固定在25°C不动,传感器温度用我们自定义的参数T来扫描。这样仿真结果里所有的变化都只来源于传感器阻值变化,问题定位起来非常舒服。这也是我坚持用参数化电阻建模的原因。
3. 信号链架构:恒流源激励 + 差分放大
3.1 先说结论:为什么不用电桥
教科书里Pt100测温电路的经典方案是惠斯通电桥:三个精密电阻+一个Pt100,桥路输出差分电压。电桥的好处是输出以0°C为参考零点,差分形式对电源波动有一定抑制能力,配合仪表放大器用起来很顺手。
但电桥有个绕不开的麻烦:桥臂电阻的匹配精度直接决定共模抑制效果。桥臂电阻用1%精度的普通电阻,共模抑制能力大概只有40dB左右,电源上的一点纹波都会被折进输出。想把共模抑制做到70dB以上,三个桥臂电阻都得选0.1%甚至0.01%的精密电阻,成本马上就上去了。
而且电桥的输出是非线性的:输出与ΔR/R的关系是R/(2R+ΔR)这种形式的分式,不像恒流源激励那样,V=I*R,电压和阻值成严格正比。非线性意味着后面查表补偿的工作量更大。
如果非要用电桥,LTspice里仿真的过程和恒流源方案差别不大,节点分析更简单,这里就不展开了。
3.2 低边采样恒流源:节点电压分析
我实际用得最多的方案是一个低边采样的恒流源,结构非常简单:
Vref=2.5V ──→ 运放同相输入端 运放输出 ──→ Pt100高端 ──→ Pt100低端 ──→ Rsense=2.5kΩ ──→ GND │ └─→ 运放反相输入端原理一句话讲清楚:运放通过负反馈迫使反相输入端电压等于同相输入端电压,也就是Pt100低端被固定在2.5V。那么流过Rsense的电流就是:
I = Vref / Rsense = 2.5V / 2.5kΩ = 1mA
这个电流从运放输出端出发,依次流过Pt100和Rsense回到地。因为运放输入阻抗极高,反相输入端几乎不取电流,所以流过Pt100的电流也是精确的1mA。于是Pt100两端的电压为:
V_pt100 = I * R(T) = 1mA * R(T)
以0°C为例,V_pt100=100mV;200°C时约175.9mV。这个电压是悬在2.5V共模电平之上的,后面的差分放大器负责把它提取出来。
这里每个参数都是有意选择的。Rsense选2.5kΩ是为了和2.5V基准配合得到1mA激励电流,这个电流量级是Pt100自热和信号幅度的折中,后面专门分析。运放用LT1001这类普通精密运放就行,在仿真里甚至可以先用理想运放。
3.3 差分放大器:增益怎么定
Pt100两端信号是共模2.5V上的一个毫伏级差分信号,所以必须用差分放大器把共模去掉、把差分部分放大。LTspice里用一个运放+四个电阻就能搭出单运放差分放大器:
Pt100高端 ──→ R1 ──→ 运放反相输入端 ──→ R2 ──→ 运放输出 Pt100低端 ──→ R3 ──→ 运放同相输入端 ──→ R4 ──→ GND增益由R2/R1决定,同时要保持R1=R3、R2=R4,这样才能保证差分平衡。我的常用参数是R1=R3=10kΩ,R2=R4=150kΩ,增益15倍。
增益的确定要先看信号范围和ADC输入范围。我打算测-50°C到200°C,这个范围内Pt100的压降从80.31mV变化到175.86mV,差分信号本身就有105.55mV的跨度。放大15倍之后,输出从1.205V变化到2.638V,落在一个5V单电源运放比较舒服的输出摆幅内,也给后级ADC留了足够的裕量。
这里要特别提醒一点:单运放差分放大器的共模抑制能力完全取决于四个电阻的匹配精度。仿真里LTspice的电阻是理想的,阻值绝对精确,所以共模抑制在仿真里看不出问题。但实物上1%电阻的共模抑制只有40dB左右,2.5V共模电压会产生可观的误差。想验证这个影响,可以在仿真里给电阻加一些不匹配的容差:
.tolerance R1=1% R3=1% R2=1% R4=1%不过LTspice默认不做蒙特卡洛容差分析,需要配合.step或自定义参数手动模拟。更省事的方案是直接用集成的仪表放大器模型,比如AD620或LT1167,内部激光调阻精度高,共模抑制天然就是100dB级别。如果只是验证信号链逻辑,单运放差分放大器足够;如果要做接近实物的仿真,建议换仪表放大器模型。
3.4 在LTspice里把整个电路搭起来
搭建步骤按照LTspice的常规操作来:
- 放一个电压源V1,设置DC=5V,作为整个电路的总电源。
- 放一个电压源V2,设置DC=2.5V,作为恒流源的参考电压。实板上这里用精密基准芯片,仿真里理想电压源就够。
- 放运放U1和U2。元件库路径是
[OpAmps],LT1001、AD8603这些模型都在里面。没有特别要求的话,先用[OpAmps]里的UniversalOpamp2理想运放模型,简单快速不出幺蛾子。 - 按前面的拓扑连好恒流源部分:U1同相接V2,输出接Pt100高端,Pt100低端接Rsense到地,同时接回U1反相端。Rsense设为2.5kΩ。
- Pt100用参数化电阻替代,Value写
{Rpt100},并在原理图上添加.param和.step指令。 - 接着连差分放大器:U2配合四个电阻,阻值按R1=R3=10kΩ、R2=R4=150kΩ设置。
- 给U2的供电脚接上V1和地。如果模型是理想运放,可能没有供电脚,这一步可以省略。
连接完成以后,在输出节点上放一个电压探针,直接跑直流工作点仿真。先看T=25°C这一单点,理论上输出应该是:
1mA * 109.73Ω * 15 = 1.646V
如果这个值对得上,说明信号链链路没有接错。对不上的时候,优先检查恒流源部分:直接用电压表测Rsense两端电压,是不是2.5V;再测Pt100两端电压,是不是109.7mV左右。分段确认,比盯着整条链路瞎猜效率高得多。
4. 仿真验证三步走:扫描、评估、线性度
电路搭建好之后,接下来就是让LTspice帮你把这个设计从头到尾审一遍。核心是三步:温度扫描看整体输出,失调扫描看误差边界,线性度计算看要不要补偿。
4.1 用.step做温度扫描,拿到Vout-T曲线
在原理图里加上:
.step param T -50 200 5然后跑一遍直流工作点仿真。LTspice会对每个T值计算一次静态工作点,输出节点会形成一条Vout随T变化的曲线族。之前单点仿真看到的1.646V@25°C,现在会变成一条平滑上升的曲线,从1.205V(-50°C)一路涨到2.638V(200°C)。
把鼠标移到曲线上,LTspice会显示对应点的T值和Vout值。随手记录几个关键点,建议做成一张表存档:
| 温度 | 输出Vout | 对应满量程百分比 |
|---|---|---|
| -50°C | 1.205V | 0%参考点 |
| 0°C | 1.500V | 20.3% |
| 50°C | 1.791V | 40.3% |
| 100°C | 2.078V | 60.1% |
| 200°C | 2.638V | 98.5% |
这张表是做标定的基础。后续无论用查表法还是直线拟合法,都从这组仿真数据出发。
曲线整体趋势应该是单调上升的,如果发现某段输出出现台阶、跳变甚至掉头,多半是运放输出饱和了。把输出范围压到运放的线性区里,这是第一步要确认的。
4.2 扫描运放失调电压,看误差边界
理想运放的失调电压是零,但实物不是。通用运放的失调电压通常在1-5mV,精密运放能做到50μV以内,斩波运放能做到亚微伏级。这个参数对测温电路的影响有多大?我算给你看。
差分放大器增益是15倍,如果运放输入端存在1mV的失调电压,等效到输出端大约是15mV左右的固定偏移(单运放差分结构的具体公式是Vos*(1+R2/R1),即16mV左右)。测温灵敏度是每摄氏度0.385mV放大15倍,也就是5.775mV/°C。拿16mV除以5.775mV/°C,算出来的结果是大约2.8°C。
也就是说,一个1mV失调的普通运放,直接让这台温度计产生将近3°C的零点误差。这在很多工控场景里是不可接受的。LTspice里验证这个影响很简单:在差分放大器的同相输入端串联一个低值电压源Voff,然后扫描它:
.step param VOS -1m 1m 0.5m在Voff的Value里写{VOS},配合上面的扫描,输出曲线会呈现一组平行线。从这组曲线能直观看到:失调电压每变化1mV,输出端偏移大约16mV,等效温度误差约2.8°C。
解决思路有三个方向。一是选低失调运放,比如OP07(失调150μV)、LT1001(失调60μV)、LTC2057(失调0.5μV);二是采用自动调零或斩波架构;三是在软件里做单点校准,把固定偏移消掉。工程上通常是硬件选低失调+软件单点校准双管齐下。
4.3 线性度计算与软件补偿策略
接下来是把仿真曲线和理想直线做对比,看看Pt100的非线性在这个量程内到底会造成多大误差。
最简单的方法是用端点连线作为参考直线。在我这个-50°C到200°C的量程内,两个端点分别是(1.205V, -50°C)和(2.638V, 200°C),理想直线斜率正好是5.775mV/°C。用这条直线回算各个温度对应的理想输出电压,再与仿真实际输出对比。
算出来最大的偏差出现在中间某个位置,具体数值因量程而异。我在0到200°C范围评估时,最大非线性误差折合温度大约是0.5°C到1°C;如果把量程扩展到-50到500°C,这个误差会急剧放大到好几摄氏度。
处理这个误差有两条路线。如果系统里用的是带查表功能的微控制器,最稳妥的办法是存储一组温度-输出对照表,用线性插值计算温度。以5°C步长生成一张51点的表,插值误差可以控制在0.05°C以内。如果存储资源紧张,就用最小二乘法拟合一个二次多项式:
T = aVout² + bVout + c
把仿真数据导出,在Excel或者Python里做一次多项式拟合,就能得到系数。二次拟合在这个量程内可以把残余误差压到0.1°C以下。
我自己的习惯是:前期仿真阶段先不纠结补偿算法,把原始的非线性误差算清楚、记录好,等到确定ADC分辨率和处理器资源之后,再来决定用查表还是多项式。因为补偿算法的写法取决于最终系统的算力,而误差数据本身是线路硬件决定的,提前算清楚不会白费功夫。
5. 仿真里容易忽视的工程细节
很多人在LTspice里跑通了电路就觉得万事大吉,结果焊完板子却差好几摄氏度。这是因为仿真里的理想条件在现实里并不存在。以下这几个坑,我建议在仿真阶段就有意识地把它们加进模型里。
5.1 自热效应:1mA这个值不是随便定的
恒流源激励电流越大,Pt100上的压降越大,信噪比越高,但同时自热效应也越严重。自热本质上是激励电流在传感器电阻上消耗功率,产生焦耳热,导致铂电阻自身温度高于被测介质温度。
自热功率公式是P=I²R。我选的1mA电流,在200°C时R=175.86Ω,功率是0.176mW。Pt100的自热系数根据封装和安装方式不同,大约在2到40°C/W之间。以最不利的空气环境计算,0.176mW产生的自热温升约0.007°C,可以忽略不计。
但如果把电流调到5mA,功耗变成4.4mW,自热温升可能达到0.1°C以上,在某些低导热介质里甚至到0.5°C。这个误差比很多运放失调还严重,而且它不像失调电压那样可以通过单点校准消掉,因为它随被测温度变化而变化。
所以激励电流的选择原则是:在系统ADC分辨率允许的前提下,尽量用小电流。0.5到1mA是Pt100应用里的常见选择。如果后续把恒流源改成2.5V桥路激励,记得也按这个逻辑核算一下传感器的发热。
5.2 引线电阻:二线制、三线制、四线制的误差量化
仿真原理图里,传感器和放大器之间没有导线电阻,但实际上一米长的普通铜导线就有毫欧到百毫欧级电阻。这个电阻是串联在测温回路里的,会直接叠加到Pt100的阻值上。
我做一个简单的二线制估算:假设每根引线电阻0.1Ω,两根就是0.2Ω。注意,Pt100的灵敏度是0.385Ω/°C,那么这0.2Ω折合成温度就是0.2/0.385≈0.52°C。如果引线再长一点、线径再细一点,误差轻松超过1°C。更麻烦的是引线电阻还随环境温度变化,如果线缆一段在热区一段在冷区,误差根本没法用固定值补偿。
三种接线制式的对比:
| 接线方式 | 误差来源 | 典型误差(引线0.1Ω/根) | 适用场景 |
|---|---|---|---|
| 二线制 | 两根引线电阻全部串联 | 约0.52°C | 短距离、精度要求低 |
| 三线制 | 等价于抵消一根引线 | 约0.26°C | 工业现场常规 |
| 四线制 | 测量回路无电流 | 理论上为零 | 高精度计量 |
三线制和四线制在LTspice里怎么验证?很简单,在Pt100两端各串一个电阻模拟引线,然后在差分放大器的输入端从Pt100本体的两端引出,而不是从引线远端引出。四线制的本质是激励电流走两根线,测量电压走另外两根线,测量回路里没有电流,所以线上没有压降,误差自然为零。
如果你打算做二线制,我强烈建议在仿真里把引线电阻显式加上去,然后跑一遍温度扫描,看看在你的测温量程内引入了多少绝对误差。很多时候仿真跑完,你就不想用二线制了。
5.3 给ADC的一阶RC滤波
信号链的末端是ADC。如果ADC直接采样放大器的输出,高频噪声和工频干扰会被一起采进去。常规做法是在放大器和ADC之间加一个一阶RC低通滤波。
截止频率的选择要兼顾抑制噪声和响应速度。我的经验是取信号带宽的10倍以上,同时把截止频率放在远离工频干扰的位置。假设测温环路本身的响应是10Hz量级,RC滤波截止频率可以设在100Hz左右。计算方法是:
fc = 1 / (2πRC)
取R=10kΩ,C=0.1μF,算出来fc=159Hz,符合预期。这个组合对50Hz和100Hz干扰都有比较明显的衰减。在LTspice里可以用交流分析跑一版频率响应,直接验证这个滤波器对带外噪声的抑制能力。
关于RC滤波还有一个细节:滤波电阻本身的小温漂和误差会在ADC输入端引入分压误差,如果ADC输入阻抗不够高的话。所以仿真时看一下ADC输入端的直流负载效应,如果差得多,就把R改小、C改大。
5.4 从LTspice到实物:别把仿真当成终点
最后说点仿真之外的事。LTspice能帮你解决增益、偏置、噪声、误差分配这些"电路级"的问题,但有几样东西仿真里看不到。
电阻容差。仿真电阻值是精确的,实物电阻有1%甚至5%的误差。差分放大器的共模抑制直接受电阻匹配度影响,我在3.3节里算过,1%电阻就能造成好几摄氏度的等效误差。所以实物选型时,差分部分的四个电阻要么用0.1%的薄膜精密电阻,要么直接用集成仪表放大器。
运放的偏置电流和失调温漂。偏置电流流过外部电阻会产生额外压降,失调温漂是温度变化后失调电压跟着漂,这两样在高精度场合都不能忽视。选型时优先考虑偏置电流在纳安级以下、失调温漂在0.1μV/°C量级的运放。
ADC前端的输入阻抗和采样保持特性。有些ADC的输入端在采样瞬间会抽取脉冲电流,如果之前的RC滤波电阻太大,会充不上电导致采样偏差。这块就需要结合具体的ADC数据手册来看了。
如果你不想自己搭模拟前端,也可以用集成了恒流源、PGA和24位ADC的专用芯片,比如AD公司的ADS1220就是这类方案的典型代表:两个内部IDAC可以直接给Pt100提供激励,内置可编程增益放大器和温度传感器,几行寄存器配置就能跑起来。LTspice对这类混合信号芯片的仿真支持很有限,通常只能仿它前面的分立前端,但前面讲的传感器建模、自热核算、引线误差估算这些方法,放到集成方案里一样成立,因为物理规律不会因为芯片集成度变了就失效。
我自己通常的做法是:在LTspice里把分立前端方案完完整整跑一遍,取得各点电压、误差分配和滤波参数,然后对照集成芯片的数据手册,看哪些指标需要由芯片内部资源来保证,哪些指标还得靠外围电路兜底。这样既能把原理吃透,又不至于在方案选型上钻牛角尖。