简介:这是一份围绕基于AD590感温器的温度补偿电路设计的技术文档,面向电子测量、超声波测距及传感器应用相关学生与工程技术人员。文档从超声波测距误差来源切入,分析了工作频率、指向角及温度对声速的影响,进而提出以AD590集成温度传感器为核心的补偿方案;AD590为两端集成感温恒流源,工作温度范围-55℃至150℃,精度±0.3℃,其输出电流与绝对温度成正比,配合电压跟随器、齐纳稳压与差动放大器,可实现输出电压随温度线性变化,有效补偿温度引起的声速误差。实验表明,未补偿时测距误差较大,补偿后误差最大仅2.5%,通常为毫米级,测量精度大幅提升,且系统反应快、抗干扰能力强,并可推广至水文液位测量、障碍物识别、车辆自动导航等场景。资源为单个Word文档,大小约17KB,内容精炼、结构清晰,适合用作课程设计、毕业设计或技术调研的参考资料,目前已有157人学习。
1. 温度补偿电路设计:别让信号飘走了才想起来补
做传感器信号调理的人,大概率都经历过这种场面:板子在 25℃ 的实验室里校准得好好的,满量程精度 0.1%,结果设备一拉到现场,环境温度到了 60℃,输出直接偏了 8%。查了半天发现传感器本身没坏,漂的是后级信号链路——运放的失调电压、基准源的输出、电阻的阻值,全都在跟着温度跑。这就是温度补偿电路设计要解决的核心问题:让电路的温度敏感度降下来,或者用另一路温度敏感的信号把它顶回去,最终让输出在温度变化下保持稳定。
这篇文章,我按照做温度补偿电路最常见的一条完整路径来写:温漂从哪来→怎么补偿→参数怎么算→器件怎么选→板子怎么布→坑在哪→最后怎么再压一截精度。全程用可复现的计算方法和校验步骤说话,适合刚接手模拟前端的新手,也适合想把自己那套“玄学温补”变成系统化流程的熟手。
2. 先搞清温漂从哪来:温度补偿的三个基本面
2.1 器件级温漂的三个主要来源:运放、电阻、基准
温度补偿不是上来就加电路,而是先把温漂分配看清楚。一个典型传感器调理链路里,温漂主要来自三个地方。
第一个是运放的输入失调电压温漂,指标叫 dVos/dT,单位是 μV/℃。普通通用运放在 1~10 μV/℃,精密运放可以做到 0.05~0.5 μV/℃,斩波运放能做到 0.01 μV/℃ 以下。如果你的信号是 0~38.5 mV 的满量程,后级增益是 85 倍,运放 10 μV/℃ 的失调温漂等效到输出端就是 0.85 mV/℃,这已经足够吃掉你 0.1% 的精度预算了。
第二个是电阻的 TCR(电阻温度系数),单位是 ppm/℃。普通厚膜电阻是 ±100~±200 ppm/℃,精密薄膜电阻能做到 ±25 ppm/℃,金属箔电阻能到 ±5 ppm/℃ 以下。别小看这 100 ppm,一个 10 kΩ 反馈电阻在 40℃ 温升下变化 40Ω,在增益网络里产生 0.4% 的增益误差,比传感器本身的非线性还大。
第三个是基准源和稳压输出的温漂。常见的 TL431 是 50 ppm/℃ 级别,带隙基准能做到 5~20 ppm/℃,但很多便宜的 LDO 输出其实也在跟着温度走。如果你的 ADC 参考电压就是这个 LDO,那参考源一漂,整个测量就跟着漂。
这三类器件漂移有个共同特点:它们的方向和幅度在单个器件上是可预测的,但组合到链路上之后互相叠加,表现出来就是“零点偏了、增益变了、非线性更大了”。所以温度补偿电路本质上是一个预算分配过程——先确定哪个环节的温漂在吃掉你的精度,再去决定用哪种补偿方式。
2.2 NTC/PTC 的补偿数学:B 值与分压网络的四步计算
无源温补最常见的器件是 NTC 热敏电阻,它的阻值随温度升高按指数规律下降。工程上常用 B 值方程描述:
R(T) = R25 × exp(B × (1/T - 1/298.15))
其中 R25 是 25℃ 时的标称阻值,T 是绝对温度(开尔文),B 值(也称 B 常数)一般在 3000~5000 K 之间,B 越大,阻值随温度变化越剧烈。同样一颗 10 kΩ NTC,B=3435 时从 25℃ 到 85℃ 阻值大约从 10 kΩ 掉到 1.4 kΩ,B=3950 则掉到 1.0 kΩ 左右。选 B 值就是在选补偿曲线的“斜率”。
拿它做分压补偿网络的计算,我一般走四步:
第一步,确定补偿温区。比如你的设备工作范围是 -20℃~+85℃,那 NTC 只需要在这个区间里有足够大的阻值变化就够了,超出区间不用管。
第二步,确定 NTC 在温区两端和中间的阻值。直接查规格书的阻温表,或者用 B 值方程算。没有阻温表只有 B 值时,计算值和真实值在宽温区(超过 100℃)会偏差变大,这时候宁可用厂家给的 R-T 表格而不是纯公式。
第三步,设计分压网络。把 NTC 和一个固定电阻串联,从中间取电压。这个固定电阻的取值决定了你补偿曲线的线性度和“拐点位置”。经验值取 NTC 在温区中间点温度的阻值附近,这样分压输出在整个温区内近似线性。
第四步,验证方向。确认输出变化方向和你需要的补偿方向一致——比如传感器输出随温度升高而增益变大,你就需要 NTC 分压电压随温度升高而下降,送到运放的某个调零或反馈端去抵消这个趋势。
这四步做完,一个无源补偿网络的基本参数就定了。剩下的就是带着约束去仿真和实测微调。
2.3 三种补偿架构怎么选:无源、有源、数字
补偿方案在工程上分成三类,选型时先看手里有什么资源。
无源补偿是最简单的:用 NTC/PTC 加固定电阻组成分压网络,直接串进信号链的增益网络或偏置电路。优点是不用额外供电、没有额外噪声、成本低,缺点是你不能指望它做到很高的补偿精度,因为它只能“近似”抵消一条趋势线,二次非线性没法修正。
有源补偿是用运放组成专门的补偿放大级,把 NTC 分压出来的电压放大、反相、叠加到主信号链。优点是灵活,可以调整补偿方向和增益强度;缺点是引入了额外运放,运放自己的温漂又成了新误差源,所以补偿级用的运放反而要选比主链路更好的型号。
数字补偿是现在做高精度产品的主流方案:ADC 采一路温度(可以用板上的 NTC,也可以用 SoC 内部温度传感器),MCU 根据标定好的温度-误差模型做软件修正。优点非常明显——精度上限高、不用动硬件、可以建立非线性修正表;缺点是它只能修正“传感器的输出值”,修正不了信号链里的动态问题,而且要求 ADC 的参考源本身够稳,不然你补的是温度,实际漏掉的是参考电压的漂移。
三种方案不冲突。我做产品时最常见的组合是:基准源和主运放用手工器件参数压住温漂,NTC 做一级粗补顶住“快速温度漂移”,最后 MCU 里做一点查表细补。
3. 用 PT100 + 仪表放大器做一个可复现的温度补偿电路
3.1 设计目标与误差预算:把精度指标分配到每一级
拿一个最常见的场景来演示完整设计:用 PT100 铂电阻测 0~100℃ 的温度,输出 0~3.3 V 给 ADC,要求全温区(-20℃~+60℃ 环境)误差小于 0.5℃。
先把指标拆成预算。PT100 在 0℃ 时 100Ω,100℃ 时 138.5Ω,灵敏度约 0.385 Ω/℃。0.5℃ 的误差意味着信号链总误差折算到电阻侧不能超过 0.19Ω。做误差预算时我习惯分成传感器本身(PT100 的容差和非线性)、激励源(恒流源电流温漂)、放大器链路(增益温漂和失调温漂)、ADC 参考电压四块。
具体预算表我一般这样列:
| 误差来源 | 预算分配 | 说明 |
|---|---|---|
| PT100 非线性 | ±0.1℃ | 用二次修正或查表 |
| 恒流源温漂 | ±0.1℃ | 电流温漂 <10 ppm/℃ |
| 放大链路增益温漂 | ±0.15℃ | 电阻 TCR + NTC 补偿残余 |
| ADC 参考电压 | ±0.1℃ | 基准源选 5 ppm/℃ |
| 其余(噪声、焊接应力) | ±0.05℃ | 预留余量 |
注意 0.5℃ 是“系统级”指标,不是每一级都按 0.5℃ 来设计。如果每一级都做到极限,成本会炸,所以要把误差预算当成一种资源分配,精度压力大的地方用好料,压力小的地方用普通料。
3.2 电路计算:从电桥到增益网络的实际参数
信号链设计我常用恒流源激励而不是电桥激励。恒流源的好处是输出只跟 PT100 阻值和电流有关,不跟导线电阻纠缠,计算公式更干净。
给 PT100 通 1 mA 恒流,0℃ 时 V = 1 mA × 100Ω = 0.1 V,100℃ 时 V = 1 mA × 138.5Ω = 0.1385 V。差动输出电压就是 0~38.5 mV。
后面接仪表放大器或差分运放,增益计算如下:
G = 目标满量程输出 / 输入满量程 = 3.3 V / 38.5 mV ≈ 85.7
仪表放大器的增益通常由一颗外置电阻设定。以常见的三运放仪表放大器架构为例:
G = 1 + 2 × RF / RG
设内部 RF = 25 kΩ(常见值),则 RG = 2 × 25 kΩ / (G - 1) = 50 kΩ / 84.7 ≈ 590Ω。
这里的坑在于:RG 电阻的温漂会直接进入增益温漂。所以 RG 要选 TCR 小于 ±25 ppm/℃ 的精密电阻,而且走线要短,不要把它放在发热器件附近。这时候在 RG 回路里再串联一颗低温漂的微调电阻,就能获得一个手动校准点。
到这一步,链路是“恒流源 + PT100 + 仪表放大器 + 固定电阻”,在 25℃ 环境下可以调准,但温度一变就会漂。接下来做温度补偿设计。
3.3 用脚本验证补偿网络:一个可以直接改参数的计算脚本
我在设计阶段习惯先用 Python 把补偿网络“算”一遍,确认参数合理再画板。下面是补偿网络的计算脚本核心部分:
import math def ntc_resistance(r25, b, temp_c): """计算 NTC 在某温度下的阻值""" t_k = temp_c + 273.15 return r25 * math.exp(b * (1.0 / t_k - 1.0 / 298.15)) def voltage_divider(r_ntc, r_fixed, vcc): """NTC 与固定电阻串联分压,返回 NTC 两端电压""" return vcc * r_ntc / (r_ntc + r_fixed) # 参数区:可按你的器件规格书修改 r25 = 10000.0 # NTC 25℃ 标称阻值 b_value = 3950.0 # NTC B 值 r_fixed = 10000.0 # 分压网络固定电阻 vcc = 3.3 # 分压供电电压 print("温度 NTC阻值 分压输出") for temp in [-20, 0, 25, 40, 60, 85]: r_ntc = ntc_resistance(r25, b_value, temp) v_out = voltage_divider(r_ntc, r_fixed, vcc) print(f"{temp:>4}℃ {r_ntc:>9.1f}Ω {v_out:>5.3f}V")脚本逻辑分两段:第一段是 NTC 阻温方程,第二段是分压计算。参数区里改 R25、B 值和固定电阻,就能看到分压输出随温度的曲线。跑一组数据出来后,看两点:输出随温度变化是否单调,以及变化幅度够不够覆盖你要补偿的误差量。
例如用 10 kΩ NTC、B=3950、固定电阻也取 10 kΩ、供电 3.3 V 时,-20℃ 输出约 2.74 V,25℃ 约 1.65 V,85℃ 约 0.64 V。跨度大约 2.1 V,对应运放端补偿电压,配合反馈电阻折算后,可以覆盖增益误差 0.3% 到 0.5% 的修正范围。如果你的温漂比这个小,可以用更大的固定电阻把输出拉平,减小补偿斜率,防止过补偿。
脚本本身不复杂,但它在画板之前就能帮你判断“这颗 NTC 配多大固定电阻才能补住我的误差”,比拿到板子再去换电阻试要省好几轮打样。
4. 从仿真到实物:器件选型、PCB 布局与三点校准
4.1 关键器件选型的四个参数
有源补偿和无源补偿的器件选型各有各的侧重点,但有一个共同逻辑:被补偿环节的温漂要尽量小,补偿环节的温度特性要尽量准。
先看 NTC。四个必看参数是 25℃ 标称阻值、B 值容差、阻值精度和热时间常数。B 值容差很关键,便宜的 NTC 的 B 值容差能到 ±5%,意味着同一型号同一批次,补偿斜率差异很大;工业级 NTC 的 B 值容差一般是 ±1% 或 ±0.5%,做补偿用要选这个级别。热时间常数决定了 NTC 对温度变化的响应速度,一般规格书会给“静止空气中 5~20 s”这样的值,用在快速温变环境需要选小封装的 NTC(如 0603 封装的陶瓷头),并把导热介质处理好。
再看运放。补偿级运放的核心参数是 dVos/dT,而不是带宽或噪声。普通运放的失调温漂是 5~10 μV/℃,你补偿网络输出的电压变化可能只有几十毫伏,运放自身漂移零点几毫伏,直接吃掉补偿精度。这里我个人吃过亏:用了一颗 1 μV/℃ 的通用运放做补偿级,结果补偿级比被补偿级漂得还快。后来换了 0.05 μV/℃ 的精密运放,效果立刻出来了。有源补偿级的运放,预算允许就上精密或斩波运放,别省这个钱。
最后是电阻。分压网络的固定电阻和运放增益电阻建议统一用 ±25 ppm/℃ 的薄膜电阻,关键位置(RG、分压下臂)用 ±10 ppm/℃ 的封装,成本差异不大,但补偿效果的稳定性差异很大。
4.2 PCB 布局:热耦合与等温区的处理
很多温度补偿电路调不通,问题不在电路原理,而在 PCB 布局——NTC 放的位置不对,感知到的温度和被测对象的温度根本不是一回事。
判断标准是:你补的是“环境温度漂移”还是“介质温度变化”。如果补环境漂移,NTC 应该放在靠近主信号链器件(运放、基准、增益电阻)的位置,让它们处于同一个等温区,这样 NTC 感知到的是信号链自己的温度;如果补介质温度,NTC 才需要贴近被测介质或传感器探头。
一个常见错误是:把 NTC 放在板子的角落里,离运放十厘米远,中间还隔着一片铺铜地。铜是良导体没错,但板子内部温度梯度依然存在,特别是板子上有功率器件或 LDO 发热时,角落的温度比中心区能差 5~10℃,补偿误差一下子就出来了。
我的做法是:在运放和增益电阻周围留一个“等温小块”,把 NTC 放在这个块内靠近运放 V- 引脚的位置,并在这块区域下铺完整的地铜。热源器件(LDO、功率电阻)尽可能移到板边,至少离开信号链 3~5 mm 以上。实在分不开时,在热源和信号链之间开一条隔热槽,割断铜皮热传导。
4.3 三点标定与残差判断:让补偿效果可量化
补偿网络装好后,必须做标定而不是直接信任仿真。我习惯用恒温箱做三点标定:低温、室温、高温各取一个点,推荐取工作温区的 10%、50%、90% 位置,比如 -10℃、25℃、50℃。
步骤如下:先把 PT100 置于冰水混合物或标准温度计校准后,记录三个温度点下 ADC 输出值;然后把 NTC 分压输出也记录同一组温度下的电压;最后构建两点间的线性映射关系。如果三点标定后中间点的残差还是很大(超过 0.3℃),说明补偿曲线形状不对,不是“调一下系数”能解决的,需要重新检查 NTC 的 B 值或分压电阻取值。
残差判断我用一个笨但可靠的指标:把标定残差画成温度-误差曲线,看它是随机跳动还是系统性偏折。系统性偏折(比如低温正偏差、高温负偏差)说明补偿曲线斜率没对齐;随机跳动则说明噪声或热时间常数问题,重点检查滤波和 NTC 安装位置。
5. 温度补偿电路常见问题排查与避坑
5.1 现象:加了补偿后误差反而变大
这是最常见的翻车现场。现象是补偿电路接上以后,输出温漂朝反方向跑了,或者幅度比原来大一倍。
原因排查顺序我固定为三条:检查 NTC 分压电压的极性是否接反——补偿信号应该是“抵消”主信号链的漂移,方向反了就是叠加,误差翻倍;检查 NTC 的 B 值是否和计算时一致,重点看规格书的 B 值区间是 25℃/50℃ 还是 25℃/85℃ 定义的,同一个 NTC 不同定义区间的等效 B 值会有 2%~5% 的差异;检查分压网络固定电阻是否选得偏小,导致 NTC 分压电压在工作温区接近电源轨,输出饱和,补偿能力到顶。
解决方式:先把补偿放大级的增益调到原来的 1/2,确认误差下降,再逐步加大;如果误差仍然变大,直接断开补偿级,从半补偿状态开始重新核对极性。
5.2 现象:低温段补偿正确,高温段过冲
现象是 0℃ 附近补偿效果很好,到 60℃ 以上误差又冒出来,方向相反,而且温度越高越明显。
原因多半是补偿曲线和被补偿对象的温漂曲线斜率不匹配。NTC 的阻温曲线是指数型的,它的补偿作用随温度升高而加剧;而信号链的温漂往往是近似线性的。如果固定电阻取值太大,NTC 在高温段的分压变化过于剧烈,就出现“低温刚好、高温过冲”的典型形态。
解决方法是调大 NTC 串联固定电阻的值,把高温段的输出斜率压平,也可以在 NTC 两端再并联一个固定电阻,把高温段的阻值变化率进一步钝化,这会牺牲一点补偿范围,但曲线更可控。
5.3 现象:同一批板子,补偿效果一致性差
同一批 20 块板子,有 12 块补偿效果好,8 块效果差,差值在 0.5℃ 以上。
原因第一个是 NTC 的 B 值容差太大,±5% 的 B 值容差补偿斜率差异很大;第二个是补偿级运放的失调电压温漂个体差异,失调电压本身可以校准,但温漂没法统一校准;第三个是 PCB 贴片时 NTC 的位置漂移或回流焊热应力导致阻值偏移。
解决方式:B 值容差严选 ±1%,并要求供货商提供 B 值分档(Binned),在同档内贴片;把补偿级运放换成斩波或自稳零运放,消除个体温漂差异;对每一块板子做单板标定,把 NTC 分压系数和运放失调分别存入板载存储器,MCU 上电后读取并修正。
5.4 现象:仿真曲线完美,实测漂移量打一倍
这个“血泪经验”我踩过不止一次。仿真里把运放的失调设置为 0、电阻用理想 TCR、基准源温漂设为零,然后补偿网络仿真出来误差几乎是一条直线。到实测环节,运放失调温漂、电阻 TCR、基准漂移全部混进来,实际残余误差比仿真大一倍。
解决方式:仿真里每个关键器件故意设成最差工况——运放失调温漂设规格书最大值,电阻 TCR 设上限,基准源按 30 ppm/℃ 加入,再跑一遍补偿仿真。这一步能提前暴露“补偿余量不足”的问题,而不是等板子回来了才知道。设计阶段把预算留 30% 的余量,实测阶段会从容很多。
5.5 现象:数字补偿响应滞后,温度突变时误差尖峰
加了 MCU 查表修正后,稳态精度很好,但温度突然变化时(比如设备从冷房搬进热房)误差瞬间变大,然后慢慢恢复。
原因是 NTC 热时间常数导致的温度采样滞后,MCU 查表修正用的是滞后的温度值,在温度快速变化期间修正方向跟实际偏差错位。
解决方式:软件里对温度采样做低通滤波能解决噪声,但会加剧滞后;正确做法是提高温度采样频率(至少 10 Hz),用一阶差分做温度速率估算,当 dT/dt 超过阈值时暂时降低修正权重或做温度预估,等温度稳定后恢复全权重。硬件层面则要选热时间常数更小的 NTC 并缩短它与被测对象之间的热阻路径。
6. 进阶:把温漂压到极限的几个实际技巧
补偿做到后面,光靠一颗 NTC 显然不够。我常用的进阶组合是“混合补偿 + 上电自校准 + 局部查表”。
混合补偿的做法是用 NTC 做粗补,负责把大趋势压平,用 MCU 内的温度传感器(成本为零)做温度区段判断,在软件里再叠一个分区间的线性修正。粗补让硬件残余误差从 ±1.5℃ 降到 ±0.4℃,软件细补再压到 ±0.15℃ 以内。这样做的好处是软件修正量小,即使 SoC 温度传感器本身精度一般,也不会把误差引导到错误方向。
上电自校准是个性价比很高的习惯:每次上电时把测量输入端短接到零点,读一次 ADC 计数值,和出厂标定值比较,把差值存入工作变量里作为本次运行的失调修正。这能同时吸收老化漂移和环境温度引起的零点变化,不需要额外的精密基准源。
最后一个技巧是局部查表而不是全区间查表。全温区每隔 1℃ 建表,存储量大且标定费时;我一般在粗补之后只对“粗补残差超过 0.2℃”的温度点局部建立修正点,其他区域用线性插值。这样标定时只需要在关键温度点采样,生产线上效率高得多。
我在一个光功率监测项目里就被温补翻过车,当时太相信运放的规格书仿真,忽略了板子自身发热的局部热场。后来养成的习惯是:所有温度敏感电路,画板前先做温漂预算,板子回来后第一件事不是测精度,而是用热风枪吹一遍观察输出恢复曲线,判断热时间常数是否合理。这个习惯帮我挡掉了很多后期返工。
温度补偿没有一招鲜的万能电路,但它有一套可靠的设计路径:预算分配、选型、布局、标定、验证,每一步都有具体参数可查。希望帮到你。
本文还有配套的精品资源,点击获取