简介:这份PDF文档围绕铂电阻Pt100测温电路的设计与调试展开,面向电子设计、传感器应用及嵌入式采集方向的初学者与工程实践者,重点解决非线性校正、两线制/三线制接法选择、桥式与恒流源采样电路搭建等实际问题。压缩包共1个PDF文件,约201KB,篇幅集中,便于快速查阅电路原理、元件参数与调试要点。文档结合TL431基准源、LM324/LM358运放及AD接口,梳理桥式测温电路和恒流源式测温电路的典型结构,并给出放大倍数调整、零点设定、负反馈接法、基准稳定性与自热误差控制等注意事项。已有1354人学习,适合作为Pt100测温方案选型、原理验证和调试排错的参考材料。
1. 热电阻 Pt100 测温电路:从一次正反馈翻车说起
热电阻 Pt100 测温电路看着简单——电桥、运放、AD,教科书上三页纸。真动手调才知道,坑全在那些“大家都这么说”的默认前提里。我第一次做的时候,有人拍胸脯告诉我放大电路必须接正反馈才“更灵敏”,我没做实验就照着画,上电输出直接顶死,板子重画,两周白干。
后来桥式和恒流源两套电路我都自己打了板、也跑过现场,才把选型的边界摸清楚。这篇按我踩坑的顺序讲:两线制和三线制的账怎么算、桥式电路的压差和放大倍数怎么定、恒流源那条 1mA 红线为什么不能越、五条真实翻车记录,最后给一个能直接抄的选型结论。做温度采集的,新手能照着算,老手能看到判断依据。
2. 两线制还是三线制:先把导线电阻这笔账算清
拿到 Pt100 直接两根线接上去,读数也“正常”,很多人就这么一路用下去了。误差不是不存在,是被藏在电缆长度里。温度采集最怕的就是这种恒定偏差——它不跳、不抖,你会以为那就是真值,等到跟标准表对不上,线已经埋进管道里了。
2.1 导线电阻到底吃掉多少温度误差
Pt100 在 0~100℃ 区间的平均灵敏度是 (138.51−100)/100 ≈ 0.385 Ω/℃。这个数字是后面所有判断的基准:回路里每多出 1Ω,读数就偏 2.6℃。
铜的电阻率按 0.0172 Ω·mm²/m 算,0.5 mm² 的线单程约 0.0344 Ω/m,两线制要算往返,也就是每米 0.0688 Ω。20 米线串进去 1.376Ω,折算成温度就是 1.376/0.385 ≈ 3.57℃。这还没算端子接触电阻、氧化层和焊点,每个 0.05~0.2Ω,几个串起来又是 1℃ 量级。
| 线径(单程长度) | 往返电阻 | 10 m | 20 m | 50 m |
|---|---|---|---|---|
| 0.5 mm² | 0.0688 Ω/m | 1.79℃ | 3.57℃ | 8.93℃ |
| 0.75 mm² | 0.0459 Ω/m | 1.19℃ | 2.38℃ | 5.95℃ |
| 1.0 mm² | 0.0344 Ω/m | 0.89℃ | 1.79℃ | 4.47℃ |
所以“换粗线”只能缓解,不能解决——1.0 mm² 拉 50 米照样偏 4.5℃。真正的解法是接法。
2.2 三线制靠什么把导线电阻抵消掉
三线制的做法是:Pt100 一端引一根线,另一端引两根线,这两根线分别串进电桥的两个相邻桥臂。设两根引线电阻都是 r,桥式电路两路分压变成:
V1 = 4.096 × (Rp + r) / (R1 + Rp + r) V2 = 4.096 × (Rv + r) / (R2 + Rv + r)
当 R1 = R2 且 r 相等时,0℃ 平衡点上是完全抵消的:Rp = Rv = 100Ω、r = 1Ω 代入,两路算出来都是 0.19690V,差压为 0。100℃ 时 Rp = 138.51Ω,算得 V1 = 0.26708V,减去 V2 = 0.19690V,差压 70.18mV;而不带 r 的理想值是 70.20mV,差 0.02mV,折算不到 0.03℃。
这个抵消是一阶的,残余只有二阶小量。前提必须守住三条:两根线同规格同批次、等长、分别落在相邻的两个桥臂上。见过有人把两根补偿线一根接桥臂、一根接在电源侧,那等于白接,误差一分没少。
提示:三线制的抵消效果取决于 r 的一致性,不取决于 r 的大小。两根线差 0.5Ω,就还剩下 1.3℃ 的不对称误差。
2.3 接线与验证:三步确认接法没接错
接法对不对,不用等整机跑起来才发现,上电前十五分钟能验证完:
- 断电,万用表量三根引线两两之间的电阻,两根补偿线的差值控制在 0.05Ω 以内(对应 0.13℃),超了就换线或剪短重接。
- 用一支 100Ω、0.01% 的精密电阻代替 Pt100 焊在端子上,上电看运放输出:桥式电路应当在零点附近(几 mV 以内),恒流源电路应当是 4.096/R1 × 100 × 放大倍数。偏得多,先查桥臂和运放反馈,不要急着怀疑 AD。
- 有电阻箱的话扫三点:80.31Ω(−50℃)、100.00Ω(0℃)、138.51Ω(100℃),每点读三次看重复性。三次跳动超过 0.2℃ 的,问题在基准或电源,不在传感器。
这三步做完,接法和静态通道基本就干净了,后面调不出来才有资格怀疑算法。
3. 桥式测温电路:压差、放大倍数和基准源
桥式是大多数人上手 Pt100 的第一套方案,元件少、成本低、原理直观。但它有三个参数必须自己算出来,照抄别人的阻值十有八九要翻车:压差大小、放大倍数、基准从哪来。
3.1 电桥输出的 mV 压差是怎么算出来的
典型结构是 TL431 加电位器分压产生 4.096V 基准,R1、R2、VR2、Pt100 组成测量电桥,R1 = R2,VR2 用 100Ω 精密电阻(或调好的电位器),从两个分压点取差压送差动放大。实际输出不是简单的“压差 × 倍数”,而要按分压公式来:
Vout_diff = 4.096 × [ Rp / (R1 + Rp) − Rv / (R2 + Rv) ]
R1 = R2 = 2kΩ、Rv = 100Ω 时,各温度点的压差实测计算如下:
| 温度 | Pt100 阻值 | 压差(mV) |
|---|---|---|
| 0℃ | 100.00 Ω | 0 |
| 50℃ | 119.40 Ω | 35.7 |
| 100℃ | 138.51 Ω | 70.2 |
| 200℃ | 175.86 Ω | 136.0 |
| 400℃ | 247.09 Ω | 255.3 |
| 600℃ | 313.71 Ω | 360.3 |
改变 R1、R2 的阻值(两个同幅度改)能改变压差大小:阻值调小,同样温度变化产生的压差变大,但流过 Pt100 的电流也变大,自热跟着上来。2kΩ 配 4.096V 时,0℃ 下流过 Pt100 的电流约 1.95mA,已经在自热边缘了,这一条后面第 4 章会展开算。想再压小自热,R1、R2 取到 5.1k~10k,代价是压差变小、对运放失调和 AD 分辨率要求更高。
3.2 放大倍数和量程的对应关系
放大倍数由反馈网络定:R3 = R4、R5 = R6,倍数 = R5/R3。麻烦在于很多人直接抄一组 100k/1k 就上了,没算过满度输出够不够摆。
按上一节的压差表推:如果倍数取 100,100℃ 时压差 70.2mV,理论输出 7.02V——单 5V 供电的运放根本出不来,信号在 40℃ 左右就顶死了。这不是玄学,是没做除法。
正确顺序是先定量程和输出上限,再倒推倍数。单 5V 供电的普通运放(非轨到轨),输出上限按 3.6~3.8V 留余量比较安全:
| 目标量程 | 满度压差 | 建议倍数 | R5/R3 取值示例 |
|---|---|---|---|
| 0~100℃ | 70.2 mV | 50 | 100k / 2k |
| 0~200℃ | 136.0 mV | 27 | 274k / 10k |
| 0~400℃ | 255.3 mV | 15 | 150k / 10k |
| 0~600℃ | 360.3 mV | 10 | 100k / 10k |
几点经验:单级放大别超过 50 倍,倍数越大,运放失调电压 Vos 被放大得越狠——LM324 的 Vos 典型 2mV、最大 7mV,乘 10 就是 20~70mV 的零点偏移,必须在软件里做零点校准;乘 100 直接就没法看了。R3/R4、R5/R6 的匹配精度按 0.1% 选,四颗电阻不匹配,共模抑制会明显变差。放大电路必须接成负反馈:输出经 R5 回到反相输入端,同相端经 R6 接地。这一条是硬约束,接成正反馈就是第 5 章第一条要讲的翻车。
3.3 基准源为什么不能用 VCC 直接顶
看式(1)就知道,整个输出都是 4.096 的比例。如果电桥正电源直接接 VCC,VCC 掉 3%,输出跟着掉 3%,而你的温度-电阻表是按 4.096V 建的,600℃ 满度 3.6V 掉 3% 就是 108mV,折算近 18℃ 的误差。现场开关电源、继电器动作、电机启停都会让 VCC 抖,这种误差是间歇性的,最难查。
TL431 做基准的接法是:Vout = 2.495 × (1 + R1/R2),要 4.096V,比值取到 1.6417,即 R1/R2 ≈ 0.642,比如 6.4k 配 10k。两个细节容易忽略:TL431 需要最小阴极电流约 1mA 才能正常工作,分压电阻不能取得太大;基准输出端加 100nF 加 10μF 做退耦,基准走线单独走,不要和数字地、继电器回路混在一起。
还有一条更省事的做法:直接把基准芯片的输出同时作为 AD 的参考电压。这样基准漂移在“测量”和“转换”两端同步发生,比例关系抵消,对精度是净收益。
3.4 从压差到温度:查表怎么在 MCU 里落地
Pt100 的阻温关系是非线性的,工程上有两条路:模拟校正和数字化校正。模拟校正用现成电路做线性化,精度不高还受温漂影响;数字化校正就是把电阻-温度对应关系存进 EEPROM 或 Flash,用实测 AD 值查表。我一般直接建“AD 码值 → 温度”的表,跳过中间换算,少一层误差。
/* adc_lin.c — 12 位 ADC、4.096V 基准、桥式 0~600℃、放大 10 倍 * 表内为标定值,实际以电阻箱实测为准,不要直接抄 */ #include <stdint.h> typedef struct { uint16_t adc; /* AD 原始码值,0~4095 */ int16_t t10; /* 温度 ×10,单位 0.1℃,避免浮点 */ } adc_pt_t; static const adc_pt_t g_adc_tab[] = { { 0, 0 }, /* 0℃ */ { 702, 1000 }, /* 100℃ */ {1360, 2000 }, /* 200℃ */ {1976, 3000 }, /* 300℃ */ {2553, 4000 }, /* 400℃ */ {3095, 5000 }, /* 500℃ */ {3603, 6000 } /* 600℃ */ }; int16_t adc_to_t10(uint16_t adc) { const int n = sizeof(g_adc_tab) / sizeof(g_adc_tab[0]); /* 断线/短路判定:低于下限说明回路断,高于上限说明 Pt100 短路 */ if (adc < 20 || adc > 4050) return INT16_MIN; if (adc <= g_adc_tab[0].adc) return g_adc_tab[0].t10; for (int i = 1; i < n; i++) { if (adc <= g_adc_tab[i].adc) { int32_t dz = g_adc_tab[i].adc - g_adc_tab[i - 1].adc; int32_t dt = g_adc_tab[i].t10 - g_adc_tab[i - 1].t10; /* 分段线性插值,整数运算,单条指令级开销 */ return (int16_t)(g_adc_tab[i - 1].t10 + (int32_t)(adc - g_adc_tab[i - 1].adc) * dt / dz); } } return g_adc_tab[n - 1].t10; }代码里几个参数值得说清楚:t10用 0.1℃ 为单位存整数,是为了在 8 位机上避开浮点;dz和dt都是正数,除法可以直接截断不必四舍五入,误差在 0.05℃ 以内;断线判定的 20 和 4050 两个阈值按你的实际零点偏置调整,桥式电路 0℃ 时输出接近 0V,码值很低,所以下限必须留出余量,否则冬天会误报断线。
表项间隔 100℃ 够不够?Pt100 的二次项系数是 −5.775e-7,区间中点相对线性插值的偏差是 5.775e-7 × 50² ≈ 0.0014Ω,折算 0.004℃,远小于 AD 分辨率带来的误差。12
本文还有配套的精品资源,点击获取