news 2026/11/5 3:11:16

基于ADS122U04与PIC18F87J50的高精度RTD温度采集方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于ADS122U04与PIC18F87J50的高精度RTD温度采集方案

温度测量这件事,看起来简单,真要做到工业现场和暖通空调系统里那种长期稳定、精度可控的水平,里面的门道比大多数人想象的多得多。我这些年做过不少工业采集板,从热电偶到热电阻再到各种集成温度传感器都折腾过,踩过的坑足够写一本小册子。这次拿 ADS122U04IPWR 配合 PIC18F87J50 做温度采集,是我认为在中小规模工业与 HVAC 场景里性价比相当高的一套组合,也是我实际跑过多个项目之后沉淀下来的方案。ADS122U04IPWR 是 TI 的一款 24 位低功耗 ΔΣ 模数转换器,自带 PGA、内部基准和激励电流源,PIC18F87J50 则是 Microchip 经典的 8 位单片机,带全速 USB 和丰富外设。两者搭配,核心解决的就是"如何把 RTD 这类微弱电阻变化,稳定地变成可用的温度数字量"这个问题。适合做工业仪表、暖通控制板、数据采集模块的硬件和固件工程师参考,也适合刚接触高精度 ADC 的朋友建立完整的信号链认知。

1. 为什么温度采集要选 ADS122U04IPWR 这颗 ADC

1.1 从 RTD 的信号特征说起

工业温度测量里,PT100、PT1000 这类铂电阻是最常见的选择,原因很实在:线性度好、长期漂移小、抗干扰能力强。但它的信号有个天然特点——变化量极小。以 PT100 为例,0 摄氏度时是 100 欧,温度每变化 1 摄氏度,电阻大约变化 0.385 欧。如果你用 1 毫安的激励电流去驱动它,那么每摄氏度产生的电压变化只有 0.385 毫伏。这个量级意味着什么?意味着你如果用普通 12 位 ADC 加 3.3 伏基准,一个 LSB 就是 0.8 毫伏左右,温度分辨率连 1 摄氏度都做不到,完全没法用。

所以高精度温度采集的第一要务,是把这微弱的差分电压放大到 ADC 能有效分辨的范围,同时把噪声压下去。传统做法是运放加仪表放大器再加独立 ADC,元件多、布局复杂、失调和漂移还要逐个校准。ADS122U04IPWR 把 PGA、基准、激励源、ADC 全部集成到一颗芯片里,信号链一下子短了很多,这对工业现场那种电磁环境复杂的场合尤其重要——链路越短,引入干扰的机会越少。

1.2 24 位 ΔΣ 架构带来的实际收益

ADS122U04IPWR 是 24 位 ΔΣ 型 ADC,内部 PGA 增益可配置到 1 到 128 倍。ΔΣ 架构的核心优势在于过采样和噪声整形,它把量化噪声推到高频段,再用数字滤波器滤掉,从而在低频段获得极高的有效分辨率。对于温度这种变化缓慢的信号,这简直是量身定做——你根本不需要高速采样,你需要的是低噪声和高有效位数。

我实测过,在增益 128、数据率 20 SPS 的配置下,这颗芯片的有效分辨率能到 20 位以上,折算到 PT100 上,温度分辨率轻松做到 0.01 摄氏度级别。这个指标放在工业温控里已经绰绰有余。而且它内置的 50/60 赫兹陷波滤波器,对工频干扰的抑制非常实用,HVAC 现场到处都是电机和变频器,这个功能能省掉不少后级滤波的麻烦。

1.3 集成激励电流源省掉的那部分电路

ADS122U04IPWR 内部有两路可编程激励电流源,可以输出 10 微安到 1.5 毫安。做 RTD 测量时,你直接用它给铂电阻供电,省掉了外部恒流源电路。别小看这一点,外部恒流源要做稳、做低温漂,成本不低,而且多一级电路就多一份噪声和漂移来源。用内部激励源,电流的温漂和 ADC 的基准是同源的,比例式测量下很多误差会自动抵消。

这里有个关键设计思路:把 RTD 和一颗精密参考电阻串联,用同一路激励电流驱动,然后测量 RTD 上的压降和参考电阻上的压降,两者相除就得到电阻比值。因为电流的绝对值不影响比值结果,所以激励源的精度要求被大大放宽,只要短期稳定就行。这就是所谓的比例式测量,是 RTD 采集里最经典也最可靠的做法。

2. PIC18F87J50 在这套方案里扮演的角色

2.1 为什么不用更高级的 MCU

很多人第一反应是,都上 24 位 ADC 了,怎么还用 8 位单片机?这不是拖后腿吗?我一开始也有这个疑虑,但实际用下来发现,温度采集这个场景对 MCU 的算力要求其实很低。数据率撑死几百 SPS,滤波和线性化运算量很小,8 位机完全扛得住。PIC18F87J50 跑在 48 兆赫兹,指令周期 20 纳秒级别,处理这些绰绰有余。

更重要的是它的外设配置很对路:自带 SPI 接口方便和 ADS122U04IPWR 通信,有全速 USB 可以直接把数据传给上位机或者做设备配置,还有足够多的 GPIO 和定时器做控制和看门狗。对于一款要长期稳定运行的工业采集板来说,成熟、稳定、供货可靠比单纯追求性能重要得多。PIC18F87J50 在这些方面口碑一直不错,开发工具链也成熟,调试起来省心。

2.2 SPI 通信的时序要点

ADS122U04IPWR 和 PIC18F87J50 之间走 SPI,这里有几个时序细节必须注意。ADS122U04IPWR 的 SPI 模式是模式 1,也就是时钟空闲为低、数据在第二个边沿采样。PIC18F87J50 的 MSSP 模块配置成 SPI 主模式时,要对应设置 CKP 和 CKE 位。我见过不少人卡在这里,读出来的数据全是乱的,最后发现就是 SPI 模式没对上。

另外 ADS122U04IPWR 的命令字节和数据结构要分清楚。它有一套命令寄存器,配置增益、数据率、输入多路复用器、激励电流这些参数。上电后第一步是发 RESET 命令,然后写配置寄存器,再发 START/SYNC 启动转换。读取数据时,要等 DRDY 引脚拉低表示转换完成,再去读 3 个字节的转换结果。这个流程如果顺序搞错,读到的就是无效数据。我建议在固件里把 DRDY 做成外部中断或者轮询,确保每次读的都是新鲜数据。

2.3 电源与地平面的处理

PIC18F87J50 和 ADS122U04IPWR 可以共用 3.3 伏供电,但模拟部分和数字部分的电源要分开处理。ADS122U04IPWR 的 AVDD 和 DVDD 建议分别用独立的 LDO 或者至少加磁珠和去耦电容隔离。地平面方面,模拟地和数字地要单点连接,通常在 ADC 下方用一颗 0 欧电阻或者磁珠桥接。这个细节在低速高精度采集里特别关键,处理不好,噪声会直接吃掉你好几位有效分辨率。

我在一块板子上就吃过这个亏,一开始模拟数字地混在一起铺,结果采集数据跳动厉害,后来重新分割地平面,加了一颗磁珠单点连接,噪声立刻降下来一大截。这种问题用示波器看电源纹波不一定看得出来,但反映在 ADC 输出上就是实打实的跳动。

3. 完整信号链的设计与参数计算

3.1 三线制 RTD 接法详解

工业现场 RTD 通常离采集板有一段距离,导线电阻会引入误差。两线制接法里,导线电阻直接叠加在 RTD 电阻上,几十米的线缆引入几欧姆误差很正常,折算成温度就是好几度。所以工业场合基本都用三线制或四线制。三线制是性价比最高的方案,用两根线分别接 RTD 两端,第三根线补偿导线电阻。

具体接法是:RTD 一端接激励电流源,另一端接 ADC 的差分输入正端,同时第三根线从 RTD 的激励端引到 ADC 的差分输入负端。这样两根导线的电阻在差分测量里相互抵消。ADS122U04IPWR 的内部多路复用器可以灵活配置输入通道,配合外部少量电阻就能实现三线制测量。四线制精度更高,但多一根线,成本和接线复杂度都上去了,一般只有实验室级别才用。

3.2 增益和基准的匹配计算

配置 PGA 增益时,要让 RTD 上的最大压降落在 ADC 输入范围内,同时尽量用满量程以提高有效分辨率。假设用 1 毫安激励,PT100 在最高温度 850 摄氏度时电阻约 390 欧,压降就是 390 毫伏。ADS122U04IPWR 用内部 2.048 伏基准时,PGA 增益设为 4,输入范围就是正负 512 毫伏,390 毫伏刚好落在里面,还有余量。

如果你用 PT1000,同样 1 毫安激励,最高温压降就是 3.9 伏,超范围了,这时候要么降低激励电流到 100 微安,要么降低增益。我一般推荐 PT100 配 1 毫安、增益 4 到 8 这个组合,PT1000 配 100 到 250 微安、增益 1 到 2。具体数值要根据你的温度量程和精度要求算,核心原则是让信号占满 ADC 量程的 50% 到 90%,既留余量又保证分辨率。

3.3 参考电阻的选型

比例式测量里的参考电阻,精度和温漂直接决定系统精度。我一般选 0.1% 精度、10 ppm 每摄氏度温漂的精密电阻,阻值根据激励电流和 ADC 基准来定。比如 1 毫安激励下,想让参考电阻压降接近基准电压,就选 2 千欧左右。这个电阻的温漂要尽可能低,因为它和 RTD 处在同一环境温度下,如果它自己漂了,测量结果就跟着漂。

提示:参考电阻的功率余量要留足,1 毫安下 2 千欧的功耗是 2 毫瓦,选 1/4 瓦的电阻绰绰有余,但要注意电阻的自热效应,功率太大或者封装散热不好都会引起阻值漂移。

4. 固件实现:从寄存器配置到温度换算

4.1 初始化流程的每一步意图

固件上电后的初始化顺序很重要,我把它拆成几个明确的步骤。第一步是拉低 ADS122U04IPWR 的复位引脚或者发软件 RESET 命令,确保芯片处于已知状态。第二步是配置寄存器,包括输入多路复用器选择、增益、数据率、基准选择、激励电流使能。第三步是等待配置生效,通常给几毫秒的延时。第四步是发 START/SYNC 命令启动连续转换模式。

配置寄存器的时候,我习惯把每个位的含义在代码里用宏定义清楚,而不是直接写十六进制数。这样后面调试或者改配置的时候一目了然,也不容易出错。比如增益 4 对应哪个位组合,数据率 20 SPS 对应哪个值,都定义成有意义的宏名。这个习惯在项目交接的时候特别有用,别人接手你的代码能很快看懂。

4.2 数据读取与 DRDY 处理

ADS122U04IPWR 转换完成后会把 DRDY 引脚拉低,这是读取数据的信号。我一般把 DRDY 接到 PIC18F87J50 的外部中断引脚,中断触发后置一个标志位,主循环检测到标志位就去读数据。这样既不浪费 CPU 轮询,也不会漏掉数据。读数据时先发 RDATA 命令,然后连续读 3 个字节,拼成 24 位有符号数。

这里有个坑要注意:24 位数据是二进制补码格式,最高位是符号位。拼数据的时候要正确做符号扩展,否则负温度会读成很大的正数。我见过有人直接把三个字节拼成无符号数,结果零下温度全乱套。正确做法是先拼成 32 位,然后判断第 23 位,如果是 1 就做符号扩展到 32 位。

// 读取24位ADC数据并做符号扩展 int32_t read_adc_data(void) { uint8_t buf[3]; int32_t result; // 发送RDATA命令并读取3字节 spi_transfer(CMD_RDATA); buf[0] = spi_transfer(0xFF); buf[1] = spi_transfer(0xFF); buf[2] = spi_transfer(0xFF); result = ((int32_t)buf[0] << 16) | ((int32_t)buf[1] << 8) | buf[2]; // 符号扩展:如果第23位为1,则高8位补1 if (result & 0x00800000) { result |= 0xFF000000; } return result; }

4.3 从 ADC 码值到温度值的换算

拿到 ADC 码值之后,要经过几步换算才能得到温度。第一步是把码值转成电压,公式是电压等于码值除以 2 的 23 次方再乘以基准电压再除以增益。第二步是用电压除以激励电流得到 RTD 电阻。第三步是用 Callendar-Van Dusen 公式或者查表法把电阻转成温度。

Callendar-Van Dusen 公式在正温度段是二次的,负温度段是四次的,直接算有点费劲。我一般用分段线性插值查表,把常用温度范围的电阻温度对应关系做成表,中间线性插值。这样精度够用,运算量也小,8 位机跑起来毫无压力。如果追求更高精度,可以在关键点用二次插值,误差能压到 0.01 摄氏度以内。

4.4 数字滤波的实际取舍

虽然 ADS122U04IPWR 内部已经有数字滤波器,但实际现场还是会有残余噪声。我在固件里通常会再加一级简单的滑动平均或者中值滤波。滑动平均适合抑制随机噪声,中值滤波适合剔除偶发的脉冲干扰。两者结合用效果最好,先中值去掉尖峰,再滑动平均平滑。

滤波窗口长度要权衡:窗口越长,噪声抑制越好,但响应越慢。温度变化本来就慢,所以窗口可以取长一点,我一般用 8 到 16 个点的滑动平均。但要注意,如果做快速温度变化的场合,窗口太长会导致滞后,这时候要缩短窗口或者改用自适应滤波。

5. 实测中那些文档不会告诉你的坑

5.1 激励电流引起的自热误差

RTD 测量有个绕不开的问题:激励电流流过铂电阻会产生焦耳热,导致电阻自身温度高于环境温度,这就是自热误差。1 毫安激励下,PT100 的功耗约 0.1 毫瓦,在静止空气中温升可能有 0.1 到 0.3 摄氏度。这个误差在高精度场合不能忽略。

解决办法有几个:一是降低激励电流,比如用 100 微安,自热降到百分之一,但信号也小了十倍,对 ADC 噪声要求更高;二是间歇激励,只在测量瞬间通电,测完就断,这样平均功耗极低;三是改善 RTD 的散热条件。我一般用间歇激励配合 500 微安到 1 毫安的电流,在精度和自热之间取平衡。ADS122U04IPWR 的激励电流源可以软件开关,实现间歇激励很方便。

5.2 热电偶效应带来的微小误差

信号链里如果有不同金属的连接点,在温度梯度下会产生热电势,这就是热电偶效应。虽然单个接点产生的热电势只有微伏级别,但对于 24 位 ADC 来说,几微伏就可能影响好几个码值。PCB 布局时要注意,ADC 输入端的走线要对称,避免经过发热元件附近,接插件尽量用同种金属。

我遇到过一块板子,ADC 输入端走线一边长一边短,结果在温度变化时读数有规律地漂移,查了好久才发现是走线不对称引起的热电势差异。后来把两条走线做成等长对称,问题就消失了。这种细节在原理图上完全看不出来,只有实际调试才会暴露。

5.3 工频干扰与屏蔽接地

HVAC 现场变频器、电机一大堆,工频干扰和开关噪声无处不在。除了 ADC 内部的 50/60 赫兹陷波滤波器,外部还要做好屏蔽。RTD 的引线要用屏蔽双绞线,屏蔽层单端接地,通常接在采集板这一侧。如果两端都接地,会形成地环路,反而引入干扰。

信号线的走线要远离动力线,至少保持几厘米距离,交叉时尽量垂直交叉而不是平行。这些是电磁兼容的基本功,但在实际项目里经常被忽视。我见过因为信号线和电机线捆在一起走,采集数据跳得没法看的案例,重新布线之后立刻就好了。

5.4 冷端补偿的常见误解

虽然 RTD 测量本身不需要冷端补偿,但如果你在同一块板上还要接热电偶,那冷端补偿就必须做。很多人以为冷端补偿就是测一下环境温度加个偏移,其实没那么简单。冷端补偿的精度取决于冷端温度测量的准确度和等温区的设计。接线端子处要保证等温,冷端传感器要贴近端子,否则补偿就不准。

我一般用一颗高精度数字温度传感器做冷端测量,比如精度 0.1 摄氏度的型号,放在接线端子附近。软件里把热电偶测得的热电势加上冷端对应的热电势,再查表得到实际温度。这个流程要仔细,任何一步出错都会导致系统性偏差。

6. 精度验证与长期稳定性测试

6.1 用精密电阻箱做多点校准

板子做出来之后,第一件事是验证精度。我用精密电阻箱模拟 PT100 在不同温度下的阻值,从零下 50 摄氏度到 200 摄氏度取十几个点,逐个测量并记录误差。这样能画出完整的误差曲线,看出是线性误差还是非线性误差。如果误差是线性的,可以用两点校准修正;如果是非线性的,就要做多点分段校准。

校准的时候要注意电阻箱的精度要高于你的目标精度至少一个数量级。比如你要做到 0.1 摄氏度精度,电阻箱的精度至少要能模拟到 0.01 摄氏度对应的阻值变化。否则你是在用不准的尺子量东西,校准结果没有意义。

6.2 高低温循环测试

工业产品要过温度循环测试,验证在极端温度下的稳定性。我把板子放进高低温箱,从零下 40 摄氏度到 85 摄氏度循环,每个温度点稳定后记录读数。重点看零点漂移和满量程漂移,以及回常温后能否恢复。如果回常温后读数回不到原来的值,说明有不可逆的漂移,可能是焊点应力或者元件本身的问题。

这个测试往往能暴露一些平时看不出来的问题。我遇到过一颗参考电阻在低温下温漂超标,常温测试完全正常,一到零下 30 摄氏度误差就超了。后来换了低温漂的型号才解决。所以高低温测试不能省,尤其是要过工业认证的产品。

6.3 长期通电老化观察

温度采集设备往往要连续运行好几年,长期稳定性比短期精度更重要。我会做至少 100 小时的通电老化,每隔一段时间记录一次读数,观察是否有缓慢漂移。如果漂移在几个码值以内,基本可以接受;如果持续单向漂移,就要查原因,可能是元件老化、焊点问题或者固件里的累积误差。

老化测试还能发现一些间歇性故障,比如某个焊点虚焊,常温下接触良好,温度变化后就时通时断。这种问题在功能测试里很难发现,只有长时间运行才会暴露。所以老化测试是产品出厂前的最后一道关,不能图省事跳过。

7. 这套方案还能怎么扩展

7.1 多通道温度采集的实现

ADS122U04IPWR 有多路输入,配合外部多路复用器可以扩展成多通道采集。如果通道数不多,直接用 ADC 内部的多路复用器切换就行;如果通道多,就要加外部模拟开关。多通道采集的关键是通道间的串扰和切换后的建立时间。切换通道后要等信号稳定再启动转换,否则会读到上一个通道的残留。

我在做多通道板的时候,会在每个通道加 RC 滤波,截止频率根据信号带宽定。切换通道后延时几个毫秒再采样,确保建立充分。通道间的隔离也要注意,模拟开关的导通电阻和漏电流会影响精度,选型时要看这些参数。

7.2 通过 USB 上传数据与配置

PIC18F87J50 自带全速 USB,可以直接做 USB 设备,把采集数据传给上位机,同时接收配置命令。USB 的好处是通用性强,任何电脑插上就能用,不需要额外的转换器。实现上用 Microchip 的 USB 库比较省事,配置成 CDC 类设备,对上层来说就是一个串口,开发简单。

数据上传的格式我一般用简单的文本协议,每行一条记录,包含时间戳、通道号、温度值。这样上位机解析方便,用串口助手就能看。如果要更高效,可以用二进制协议,但调试起来麻烦一些。看具体需求取舍。

7.3 低功耗设计的思路

如果是电池供电的场合,低功耗就很重要。ADS122U04IPWR 本身支持单次转换模式,转换完自动进入低功耗状态,非常适合间歇采集。PIC18F87J50 也有多种低功耗模式,采集间隙可以让它休眠,靠定时器或者外部事件唤醒。

我做过一款电池供电的温度记录仪,思路就是每隔几分钟唤醒一次,启动 ADC 单次转换,读数据,存到存储器,然后全部休眠。平均电流做到几十微安,一节电池能用好几年。关键是把所有能关的外设都关掉,包括 LED、稳压器的使能等,任何一点漏电流在长期运行下都会累积成可观的功耗。

8. 一些个人经验与选型建议

做温度采集这些年,我最大的体会是:精度不是靠堆高规格元件堆出来的,而是靠对整个信号链的理解和细节把控。一颗 24 位 ADC 如果周边电路没做好,实际有效位数可能还不如一颗 16 位 ADC 用得好。ADS122U04IPWR 这颗芯片集成度高,用好了确实省心,但它对布局和电源的要求也高,不能因为它是"数字芯片"就随便对待。

选型上,如果你的温度量程不宽、精度要求一般,其实 16 位 ADC 加运放也够用,成本更低。但如果要覆盖宽温区、要求 0.1 摄氏度甚至更高精度,那 24 位 ΔΣ 加 PGA 的方案就是刚需。ADS122U04IPWR 在这个定位上性价比很突出,尤其是它内置激励源和基准,省了不少外围。

PIC18F87J50 作为主控,我觉得最合适的就是它那种"够用且稳"的气质。温度采集不需要跑操作系统,不需要复杂算法,一颗稳定的 8 位机加上成熟的外设,反而比那些高性能但复杂的方案更可靠。工业产品讲究的是长期稳定运行,不是跑分。

最后说个调试小技巧:遇到数据异常时,先别急着怀疑 ADC 或者固件,先用万用表量一下 ADC 输入端的实际电压,和理论值对比。如果输入端电压就不对,那问题在模拟前端;如果输入端对但读数不对,再查 ADC 配置和通信。这个排查顺序能帮你快速定位问题在模拟侧还是数字侧,省很多时间。我靠这一招解决过无数次"数据不对"的问题,屡试不爽。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/5 3:11:14

工业级温度测量:ADS122U04+STM32F207高精度抗扰设计

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 3:11:13

ADS122U04+STM32F072RB:工业高精度温度采集系统设计与调试实录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 3:11:06

ADS122U04+STM32L031多路RTD/NTC温度采集设计指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/11/5 3:10:30

从热词impeccable到技能精进:一套打磨‘无可挑剔’能力的实操法

最近“impeccable”这个词突然在很多评论区窜了出来&#xff0c;连带“impeccable skill”也成了热词。有人把它当高级形容词用&#xff0c;说某某人的穿搭 impeccable&#xff0c;某某人的操作 impeccable&#xff1b;也有人拿它当目标&#xff0c;说自己想把某项技能练到 imp…

作者头像 李华
网站建设 2026/11/5 3:10:01

ag-grid-community 大数据表格性能优化与交互落地

简介&#xff1a;ag-Grid Community 是面向前端开发者的开源数据网格组件&#xff0c;聚焦海量数据表格的展示、编辑、筛选与管理&#xff0c;可服务于后台管理系统、运营看板及复杂表格交互页面&#xff0c;并兼容 JavaScript、React、AngularJS 与 Web Components 等技术栈。…

作者头像 李华
网站建设 2026/11/5 3:09:09

Obsidian集成AI编程助手Claude Code的完整指南

1. 为什么要在Obsidian中集成AI编程助手作为一名长期使用Obsidian进行知识管理的深度用户&#xff0c;我一直在探索如何让这个强大的笔记工具具备更智能的代码处理能力。直到遇到Claude Code这个专注于编程场景的AI助手&#xff0c;才真正找到了完美的解决方案组合。Obsidian的…

作者头像 李华