简介:这是一份围绕PT100高精度温度采集的完整嵌入式设计资源,面向FM33LC系列微控制器开发者,解决RTD测温中的引线电阻补偿、ADC选型与温度换算等实际问题。包内共有344个文件,包含76个h头文件与60个c源码、56个o等编译中间文件,以及hex/axf固件、schdoc/pcbdoc原理图与PCB文件、pdf文档,整体约24.89MB,目录结构完整,适合直接参考或二次开发。目前已有1479人学习下载。资源核心价值在于提供基于FM33LC的PT100采集全链路实现:既有硬件电路设计便于理解三线制/四线制接线,也有ADC配置、查表法或多项式逼近的温度转换算法,还涉及系统校准与环境补偿思路,可帮助工程师从原理到代码快速落地高精度测温方案。 我第一次做PT100高精度温度采集时,直接拿了两根导线接到传感器上,输出的温度在稳定热水中跳了将近1℃,而同一杯水用水银温度计量纹丝不动。排查到最后,问题根本不在ADC精度,而在测量回路的接法和参考方式。那次之后我花了不少精力把PT100的三线接法、激励电流、ADC基准全部理顺,才真正做出稳定在±0.1℃以内的温度采集。这篇文章就把这套高精度温度采集设计里最关键的逻辑,以及我趟过的坑完整拆一遍,适合正在做温度采集、想把精度做上去的嵌入式工程师参考。
1. 为什么“高精度”温度采集绕不开PT100
1.1 PT100与热电偶、NTC的定位差异
很多人一开始会在PT100、NTC、热电偶之间摇摆。我的结论很直接:在工业级高精度测量场景,PT100是性价比最稳的选择。NTC在常温附近灵敏度确实高,B值可以做到很大的负温度系数,但它的曲线一致性差,换一颗料就得重新校准,而且老化漂移比铂电阻明显。热电偶则是另一个极端,测温范围宽到上千摄氏度,但信号只有毫伏级,还要处理冷端补偿,做0.1℃精度是非常痛苦的工程挑战。
PT100本质是铂热电阻,0℃时标称100Ω,100℃时约138.51Ω,平均灵敏度约0.385Ω/℃。铂的物理化学性质稳定,在IEC 60751标准下,Class A的允差可以做到±(0.15 + 0.002·|t|)℃,这个指标是NTC很难长期保证的。换句话说,如果你要做的温度采集系统期望在-50到150℃范围内达到0.1℃量级的重复性和稳定性,首选就是PT100。
1.2 “高精度”到底指什么:先定目标再谈设计
高精度不是一个模糊形容词,必须先量化,否则后面所有设计决策都会打架。我一般把需求拆成三档:
| 目标精度 | 结构要求 | 参考源要求 | 传感器等级 |
|---|---|---|---|
| 0.5℃ | 两线制校准后勉强可用 | 0.1%精密电阻 | Class B |
| 0.1℃ | 三线制/四线制 | 比率测量,低温漂基准 | Class A |
| 0.01℃ | 四线制+实验室恒温槽校准 | 高稳定恒流源/标准电阻 | 法规计量级 |
如果你的需求只是判断水温有没有到60℃,0.5℃完全够用,没必要为多余精度买单。但如果你做的是医疗设备、工业过程控制、环境监测这类对温度趋势和绝对精度都有要求的场景,那就必须从一开始按0.1℃级别设计。这篇文章后续讲的都是围绕0.1℃级别展开。
1.3 模块化捷径与分立方案的选择
市面上有现成的MAX31865模块,也有把放大器和ADC做在一起的采集板卡。我建议:如果你的目标是快速出结果,直接用MAX31865这类集成芯片;如果你想真正掌握高精度采集的原理,至少要自己做一版分立电路。这里面有个容易踩的坑——搜PT100模块的时候经常搜到MAX6675,注意那是热电偶专用芯片,不是PT100用的。MAX31865才是RTD专用,内置了激励电流源、PGA和基准,支持两线、三线、四线接法。
分立的优势在于每个环节都可控:激励电流多大、PGA增益多少、基准从哪里取、滤波器放在哪一级。模块化则帮你把内部逻辑封装好了,但一旦精度不对,你根本不知道是接法问题还是芯片温度问题,排查起来反而麻烦。二级标题说白了,“如果你只会接模块的线,却不懂内部拓扑,那高精度设计就是玄学”。
2. 三线制接法的原理:为什么能消除导线电阻
2.1 两线制为什么天然带压降
已经不止一次有人问我为啥两线制在高精度场景下不行。我直接用公式讲明白。激励电流I从仪表出发,经过两根导线和PT100回到地,整条回路上测到的电压是:
V_measure = I × (R_lead1 + R_pt100 + R_lead2)
假设用的是普通铜导线,20米线阻大约0.35Ω,两根就是0.7Ω。按PT100灵敏度0.385Ω/℃折算,光导线电阻就带来约1.8℃误差。更麻烦的是,导线电阻会随环境温度变化,传感器从车间拉到现场,夏天和冬天的读数偏移都不一样,软件根本无法用一个固定值补偿。这就是为什么我最早那版两线制在热水中读数乱跳,其实线阻变化占了大部分。
2.2 三线制如何用第三根线抵消导线电阻
三线制的核心思想是:我不能取消导线电阻,但我可以想办法让它在测量公式里被减掉。常见接法是PT100的一端接两根线,另一端接一根线。恒流源经导线L1流入PT100,再从导线L2流回,仪表放大器的高端采样点接在PT100的正端,低端采样点通过第三根线L3接到PT100的负端。
由于L3上的采样电流几乎为零(运放高阻输入),所以L3不会引入压降误差。此时高端电压是I×(R_lead1 + R_pt100),低端电压是I×R_lead2(相当于把L2的压降引出来作为参考),差分结果:
V_diff = I×(R_lead1 + R_pt100) - I×R_lead2 = I×R_pt100 + I×(R_lead1 - R_lead2)
如果三根导线等长、同材质、同温度环境,R_lead1和R_lead2基本相等,误差项就趋近于零,最终测得的就是纯PT100上的压降。这也是为什么买PT100探头时三根线必须是一整束线缆里剪出来的,不要自己乱接不同规格的延长线。你如果延长线红黑粗细不一,三线制补偿效果直接打折。
2.3 实物接线:RTD+、TC+端子怎么认
我见过不少新手拿到模块后盯着丝印发懵,尤其是出现“RTD+”、“TC+”、“RTD-”、“TC-”这种混标。说清楚一点:RTD和TC是两类完全不同的传感器,RTD指热电阻(PT100、PT1000都属于RTD),TC指热电偶(Thermocouple)。接PT100时,认准“RTD+”和“RTD-”端子,不要接到“TC+”上去。有些变送器模块为了兼容测温类型,把同一物理引脚复用了,丝印会同时出现两组名字,这时务必查手册确认引脚定义,而不是靠猜。
三线制在模块上的物理接法通常是这样:激励正端和采样正端都接到PT100的一端(红线上),采样负端和回流端一起接到PT100的另一端(白线上)。具体到MAX31865这类芯片,就是FORCE+和RTDIN+并在红线,RTDIN-和FORCE-并在白线。我在自己的板子上会把接线端子做成四线制兼容,只焊三个端子进去做三线制,留一根线做备用,方便后续升级。
3. 硬件设计:激励、放大、ADC选型与误差预算
3.1 比率测量:让恒流源漂移变成浮云
高精度设计的第一个关键决策就是比率测量(ratiometric)。做法很简单:用同一个恒流源同时激励PT100和一只精密参考电阻R_ref,ADC的参考电压直接取R_ref上的压降,而不是用独立基准。
恒流源I激励PT100产生电压V_rtd = I × R_pt100,又流过R_ref产生V_ref = I × R_ref。ADC转换结果的比例为:
X = V_rtd / V_ref = (I × R_pt100) / (I × R_ref) = R_pt100 / R_ref
电流I在这个公式里被消掉了。这意味着即使恒流源存在温漂、噪声,只要它的变化对两个电阻是同步的,对最终结果几乎没有影响。整个系统的精度就压到一只R_ref上,这只电阻选0.1%精度、低温漂(比如10ppm/℃)的精密电阻就足够。很多集成芯片设计时把这个原理内置了,ADS1220的IDAC和内部基准就是这种架构。
3.2 激励电流与关键电阻选择
激励电流不是越大越好。电流大了信号电压高、抗噪声能力强,但自热效应也会变大。PT100在1mA激励下功耗仅0.1mW,微弱自热基本可以忽略;如果用到5mA,虽然信号大,但探头在密闭套管里温度可能往上偏0.2℃以上,高精度场景不能接受。我做常规设计时取1mA,遇到实验室精密测温会降到0.25mA或0.5mA。
参考电阻的取值要配合ADC基准电压范围。以1mA激励为例,PT100在-50到150℃范围对应大约79.7Ω到157.3Ω,信号电压只有80到157mV。如果R_ref取2kΩ,参考电压就是2V,很好落在ADC的输入范围内。选型时注意R_ref的功率不用大,0603封装足够,但温漂系数一定要看,普通厚膜电阻不要用,起码选金属箔或薄膜精密电阻。
3.3 从ADS1115到MAX31865/ADS1220的选型思路
| 方案 | 内置资源 | 实测能达到的精度 | 适合场景 |
|---|---|---|---|
| MAX31865 | 恒流源、PGA、查表寄存器 | 0.1℃级别 | 快速集成、减少布板 |
| ADS1220/ADS1247 | 双IDAC、PGA、内部基准 | 0.05℃级别 | 需要三线制灵活配置 |
| ADS1115 | PGA,无恒流源 | 0.5℃级别 | 低成本、精度要求低 |
| 分立运放+ADS1115 | 需外部恒流源/基准 | 0.2~0.5℃ | 学习原理、定制化 |
如果你用24位或更低的ΔΣ ADC做0.1℃目标,不需要盲目追高位数。PT100在1mA激励下灵敏度是0.385mV/℃,ADS1115在PGA=16时一个LSB约0.5μV,理论分辨率远够,实际瓶颈在于基准稳定性和导线电阻。这也是为什么我推荐先把三线接法和比率测量搞定,再谈用哪颗ADC。
3.4 四线制什么时候必须上
三线制能消除等长导线电阻的一阶影响,但前提是两根电流线阻值一致。如果你需要长距离引线(比如几十上百米),或者线缆经过的区域存在温度梯度,导致两根线温不完全相等,三线制就会残留误差。四线制通过让电压采样回路完全不走电流,彻底解决这个问题。
四线制的代价是多一根导线,PT100探头贵一些。我在实验室校准和医疗温度模块上都会直接上四线,工业现场能用三线就不错了,毕竟线材成本也是钱。记住一条经验:板内走线做四线,现场远传做三线,极短距离且精度要求低用两线加软件补偿,这是很多从业者的通用选择。
4. 固件算法:从电阻到温度的还原与滤波
4.1 分度表与CVD公式的分段处理
硬件拿到的是电阻值,固件的任务是把电阻精确换算成温度。最规范的做法是查IEC 60751标准分度表,但表只能离散存,公式还得懂。工业界通用的是Callendar-Van Dusen方程(CVD方程):
0到850℃: R_t = R_0 × (1 + A·t + B·t²)
-200到0℃: R_t = R_0 × (1 + A·t + B·t² + C·(t - 100)·t³)
其中R_0=100Ω,A=3.9083×10⁻³,B=-5.775×10⁻⁷,C=-4.183×10⁻¹²。0℃以上用前两个系数就够,0℃以下如果不加C项,误差会在低温端快速跑到几摄氏度以上。我之前有个项目只在常温附近跑,省略C项问题不大,但产品宣称覆盖-40℃,就必须把C项写进去。
4.2 反算温度:查表插值、牛顿迭代与多项式近似
固件里实现电阻到温度的转换,常见三条路。第一条是查表加线性插值:把分度表按1℃间隔存成数组,二分查找找到当前电阻落在哪两个点之间,再按比例内插。表格占内存不大,几十字节到上百字节,插值误差小于0.05℃,足够绝大多数场景。
第二条是直接用CVD方程做牛顿迭代。以电阻100Ω对应0℃作为初值,迭代几次就能收敛到很高精度。代码比查表多几行,好处是不依赖表格,适合MCU内存小的场合。
第三条是固定小范围内用二次多项式拟合反解,比如我只关心0到100℃,可以预先拟合出t = a + b·R + c·R²的系数,直接代入算,速度最快但适用面窄。我的习惯是:产品化固件用查表插值为主,因为容易审查、可预计;实验室工具则用牛顿迭代,省得维护分度表。
4.3 滤波与“先平均还是先查表”
温度信号本身有惯性,系统采样率不需要太高,1到10Hz足够。但数据调理还是需要做,我在多数项目里用滑动平均加中值滤波,先剔除异常尖峰,再对剩余数据取平均。有一个细节很多人没注意:应该先对原始电阻值做平均,再一次性查表转温度,而不是先转温度再对温度求平均。原因很简单,CVD方程不是线性函数,电阻与温度之间存在非线性弯曲,先转再平均会在0到100℃产生约0.4℃的系统偏差。虽然平均的样本量越大偏差越小,但养成“先物理量平均、再非线性换算”的习惯,能少踩很多隐藏误差。
5. 校准、验证与实测坑点
5.1 电气级标定:用电阻箱代替温度源
我不建议一开始就拿热水壶去验证精度,因为水温和环境气压带来的不确定性太大。更可复现的做法是使用高精度电阻箱,把它当做传感器接入电路,分别设定100.00Ω、119.40Ω、138.51Ω,分别对应0℃、50℃、100℃。
标定流程我通常这样执行:电阻箱调到标准值,等待读数稳定,记录系统显示的温度偏差,做一次两点或三点校准,把增益和偏置写进固件。电阻箱的精度等级很关键,至少选0.01级,比被测系统高一个数量级别,否则标定过程本身就在引入误差。
| 标定点 | 电阻箱设定 | 理论温度 | 实测显示 | 偏差 |
|---|---|---|---|---|
| 第1点 | 100.00Ω | 0.00℃ | 0.02℃ | +0.02℃ |
| 第2点 | 119.40Ω | 50.00℃ | 50.06℃ | +0.06℃ |
| 第3点 | 138.51Ω | 100.00℃ | 100.03℃ | +0.03℃ |
5.2 冰水混合物与沸水验证的细节
温度源验证里,0℃是最容易复现的。用碎冰加纯水混合,充分搅拌后等温区可以稳定在0℃附近,关键要让探头浸入足够深,不要碰壁底。等待时间至少要10分钟,因为探头套管导热有滞后。
沸水不太适合作为绝对标定点,因为水的沸点随大气压变化,海拔几百米的地方沸水可能只有98℃。要做100℃验证,最好用标准水银温度计或精密测温仪做相对对比,而不是默认沸水就是100℃。这也是很多业余项目精度做不上去的原因——校准源本身就是错的,后面全是白费。
5.3 实测高频坑:接触电阻、共模范围、屏蔽走线
漏掉接触电阻是三线制最可惜的翻车方式。普通端子压接处的接触电阻可能有几十毫欧,虽然看着小,按0.385Ω/℃折算也对应零点几摄氏度。高精度电路里,我习惯用镀金端子或直接焊接传感器引线,线缆屏蔽层只在接收端单点接地,避免形成地环路干扰。
还有一个不容易注意的点:PT100信号本身很小,如果ADC输入共模范围设计得离地太近,PGA很容易超出允许范围,导致读数非线性。选用像MAX31865这种内部已经处理好的芯片就会省心很多;如果用ADS1115加外部恒流源,必须仔细看数据手册的共模电压指标,必要时把模拟地稍微偏置抬起。最后说说现场电磁干扰,变频器、电机、继电器都可能耦合噪声,对这种小信号采集系统,双绞屏蔽线的优势非常明显,别图省事用普通杜邦线连接探头。
最后再分享一个小技巧:做完校准之后,把板子和传感器放进恒温箱做一次8小时连续监测,记录偏移漂移。很多短时间精度达标的系统,开机半小时到两小时之间会有一段明显的自热漂移,排查下来往往是板内基准电阻温度没稳定。如果发现这个规律,别急着换方案,先优化一下R_ref周围的PCB散热布局,效果往往立竿见影。
本文还有配套的精品资源,点击获取