news 2026/11/5 1:03:30

基于ADS122U04与PIC18F87J11的高精度RTD测温方案设计与实现

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于ADS122U04与PIC18F87J11的高精度RTD测温方案设计与实现

1. 工业测温方案的选型逻辑与整体架构

工业现场和暖通空调(HVAC)系统里的温度测量,跟消费电子里随便挂个热敏电阻完全是两码事。消费级产品温度误差一两度没人跟你较真,但工业场景下,管道温度、换热器进出口温差、冷库库温这些数据直接参与闭环控制,偏差超过零点几度就可能触发误报警或者让压缩机频繁启停。所以这套方案的核心诉求从一开始就很明确:高精度、抗干扰、长期稳定。

标题里出现的两颗芯片分工非常清晰。ADS122U04IPWR是一颗 24 位、四通道、带 PGA 的 ΔΣ 型模数转换器,专门干一件事——把 RTD(铂电阻)上那点微弱的电阻变化,精准地变成数字量。PIC18F87J11是一颗 8 位 MCU,负责配置 ADC、读取转换结果、做线性化运算、跑状态机、对外通信。一个管"感知",一个管"决策",这是工业测温最经典的组合。

为什么不用 MCU 自带的 12 位 ADC 直接测?因为 RTD 的信号实在太"小"了。以最常见的 PT100 为例,0℃ 时 100Ω,每升高 1℃ 电阻只增加约 0.385Ω。如果激励电流是 1mA,那么每摄氏度产生的电压变化只有 385μV。12 位 ADC 在 3.3V 参考下,一个 LSB 就是 0.8mV,连 1℃ 的分辨率都保证不了,更别提工业要求的 0.1℃ 甚至 0.01℃。24 位 ADC 配合 PGA,等效分辨率能到微伏级别,这才是能打的基础。

整个信号链我梳理成这么一条路径:恒流激励 → RTD 电压采集 → 差分输入 ADC → 数字滤波 → MCU 线性化 → 温度输出。每一环都有坑,后面逐个拆。

提示:选型阶段最容易犯的错是"只看 ADC 位数"。24 位是理论分辨率,实际有效位数(ENOB)受噪声、参考源、PCB 布局影响极大。ADS122U04 在增益 128、20SPS 数据率下,有效分辨率能到 21 位以上,这才是它值钱的地方。

这套架构适合谁参考?做工业仪表、PLC 温度模块、HVAC 温控器、冷链监控的硬件和嵌入式工程师,以及需要把 RTD 测温做扎实的开发者。如果你只是做个室温显示的小玩具,那大可不必上这套,成本划不来。

2. ADS122U04IPWR 核心特性与 RTD 测量原理拆解

2.1 为什么是 ΔΣ 架构而不是逐次逼近

ADS122U04 用的是 ΔΣ(Delta-Sigma)调制器,不是常见的 SAR 架构。这个选择背后有明确的逻辑。ΔΣ 的核心是"用时间换精度"——通过过采样和噪声整形,把量化噪声推到高频段,再用数字滤波器滤掉。代价是转换速度慢,但工业测温根本不需要快,20SPS 到 2000SPS 完全够用,换来的是极高的分辨率和出色的抗工频干扰能力。

SAR ADC 快是快,但在微伏级信号面前,它的噪声底和失调漂移往往压不住。工业现场 50Hz 工频干扰无处不在,ΔΣ 配合 sinc 滤波器可以在 20SPS 时天然形成对 50Hz/60Hz 的陷波,这是 SAR 很难做到的。所以这个选型不是随便挑的,是冲着"抗干扰 + 高分辨率"去的。

2.2 四通道与 PGA 的实战价值

ADS122U04 的"04"代表四路差分输入(或八路单端)。为什么需要四路?工业现场经常要同时测多点温度,比如一个换热器要测进水温、出水温、管壁温、环境温。四通道可以轮询采集,省掉外部多路复用器,减少信号路径上的误差源。

内置 PGA 支持 1 到 128 倍增益。RTD 信号小,PGA 把它放大到 ADC 满量程附近,能最大化利用动态范围。举个例子:PT100 在 0~100℃ 范围,1mA 激励下电压是 100mV~138.5mV,跨度只有 38.5mV。如果 ADC 参考是 2.048V,直接测的话只用了满量程的不到 2%,浪费了大部分分辨率。开 32 倍 PGA 后,信号被放大到 3.2V~4.4V 区间(需要调整激励或参考匹配),分辨率利用率大幅提升。

2.3 激励电流源与比例式测量的关键

ADS122U04 内部集成了两个可编程激励电流源(IDAC),可以输出 10μA 到 1.5mA。这个设计非常关键,因为它让"比例式测量"成为可能。

所谓比例式测量,就是让 RTD 和参考电阻共用同一个激励电流。RTD 上的电压是 I×R_RTD,参考电阻上的电压是 I×R_REF,两者相除,电流 I 被约掉,结果只跟电阻比值有关。这样一来,激励电流的温漂、长期漂移全部被抵消,测量精度只取决于参考电阻的精度。这是工业测温能做到高稳定性的核心技巧。

具体接法:IDAC 电流先流过 RTD,再流过一颗高精度参考电阻(比如 0.1% 精度、低温漂的 1.62kΩ),ADC 用差分方式分别采集 RTD 电压和参考电阻电压,或者用内部参考配合外部精密电阻。我实测下来,用比例式测量比用绝对电压测量,温漂能改善一个数量级。

注意:参考电阻一定要选低温漂的,普通厚膜电阻温漂几百 ppm/℃,直接毁掉整个方案的精度。建议用金属箔电阻或者精密薄膜电阻,温漂控制在 10ppm/℃ 以内。

2.4 数字滤波器与数据率的选择权衡

ADS122U04 提供多种数字滤波器模式,包括 sinc1、sinc2、sinc3 和 50/60Hz 陷波模式。数据率从 5SPS 到 2000SPS 可调。这里有个经典的权衡:数据率越低,噪声越小,分辨率越高,但响应越慢。

工业温度本身变化就慢,热惯性大,所以完全可以把数据率压到 20SPS,换取最高的有效分辨率和最好的工频抑制。如果做的是快速响应的温度保护,那可以提到 200SPS 甚至更高,但要接受噪声上升。我的经验是,绝大多数 HVAC 和工业测温场景,20SPS 是甜点值。

3. PIC18F87J11 的角色定位与状态机设计

3.1 为什么用 8 位 MCU 也够用

很多人一看 8 位 MCU 就皱眉,觉得配不上 24 位 ADC。其实这是个误区。温度测量的运算量并不大,线性化用查表加插值,或者用 Callendar-Van Dusen 公式做多项式计算,8 位 MCU 跑起来绰绰有余。PIC18F87J11 有 128KB Flash、4KB RAM,主频能到 40MHz,处理这些任务毫无压力。

它的真正价值在于外设丰富、工业可靠性好、开发资料成熟。它自带 SPI、I2C、UART、多个定时器,跟 ADS122U04 通信、对外输出数据都很方便。而且 PIC18 系列在工业领域用了很多年,抗干扰设计和代码库都很成熟,出问题好排查。

3.2 MCU 状态机的设计思路

网络热词里出现了"mcu 状态机",这确实是这套方案里 MCU 软件的核心。测温系统不能写成一个大循环里顺序执行,那样一旦某个环节卡住,整个系统就僵死。正确的做法是设计一个清晰的状态机。

我一般把状态机分成这么几个状态:初始化态、配置态、采集态、运算态、输出态、故障态。上电后先初始化外设,然后配置 ADS122U04 的寄存器(增益、数据率、滤波器、激励电流),配置成功后进入采集态,等待 ADC 的 DRDY(数据就绪)中断,读到数据后进入运算态做线性化,算完进入输出态更新对外接口,然后回到采集态循环。任何一步出错或者超时,跳到故障态做处理。

这种设计的好处是每个状态职责单一,超时可控,不会因为某个外设没响应就死等。工业设备最怕的就是"假死",状态机加超时机制能有效避免。

3.3 通信接口与数据读取时序

ADS122U04 支持 SPI 和 UART 两种接口。SPI 速度快、时序简单,是首选。PIC18F87J11 的 SPI 模块配置成主机模式,时钟极性、相位要跟 ADS122U04 匹配(通常是模式 1)。

读数据的流程是:MCU 检测 DRDY 引脚变低(表示转换完成),拉低 CS,发送读取命令,连续读 3 个字节(24 位数据),拉高 CS。这里有个细节,24 位数据是二进制补码格式,读回来要先做符号扩展再转成有符号整数,否则负温度会算错。

提示:DRDY 引脚一定要接到 MCU 的外部中断或者用轮询加超时。我见过有人用死循环等 DRDY,结果 ADC 没配置好一直不拉低,MCU 直接卡死。加个超时计数器,超时就报故障,这是保命的习惯。

4. 完整实操流程与关键参数计算

4.1 硬件连接与 PCB 布局要点

先把硬件搭起来。核心连接关系是这样的:ADS122U04 的 AIN0/AIN1 接 RTD 两端做差分输入,AIN2/AIN3 接参考电阻两端,IDAC 电流源从 RTD 一端流入,经过 RTD 和参考电阻后流回地。AVDD 用干净的 3.3V 模拟电源,DVDD 用数字 3.3V,两者之间用磁珠或者 0Ω 电阻隔离,各自配 0.1μF 加 10μF 去耦电容。

PCB 布局是这套方案成败的关键。模拟部分和数字部分要分区,地平面要完整,RTD 的走线要尽量短、等长、远离时钟和开关电源。RTD 引线如果长,建议用三线制或四线制接法消除引线电阻。四线制最准,但多两根线;三线制是工业折中方案,需要两次测量做补偿。

连接项引脚说明
RTD 正端AIN0差分输入正
RTD 负端AIN1差分输入负
参考电阻正端AIN2参考电压正
参考电阻负端AIN3参考电压负
激励电流输出IDAC1接 RTD 一端
数据就绪DRDY接 MCU 中断引脚
SPI 时钟SCLK接 MCU SCK
SPI 数据DIN/DOUT接 MCU MOSI/MISO

4.2 寄存器配置与增益计算

ADS122U04 的配置通过 4 个寄存器完成。关键配置项包括:输入多路复用器选择、增益、数据率、滤波器模式、激励电流大小、参考源选择。

增益怎么算?假设用 PT100,激励电流 500μA,参考电阻 1.62kΩ。RTD 在 0~100℃ 时电压范围是 50mV~69.25mV,参考电阻电压是 810mV。ADC 的满量程由参考电压决定,这里参考电压就是 810mV。信号最大 69.25mV,占满量程的 8.5%。开 8 倍增益后,信号放大到 554mV,占满量程的 68%,比较合理。开 16 倍会到 136%,超量程了。所以增益选 8 倍。

这个计算过程很重要,增益选小了浪费分辨率,选大了信号饱和。一定要根据实际 RTD 阻值范围、激励电流、参考电阻三者算清楚。

4.3 温度线性化算法实现

ADC 读回来的是电阻值,要转成温度。PT100 在 -200~0℃ 和 0~850℃ 用不同的公式。工业上常用 Callendar-Van Dusen 方程:

0℃ 以上:R(t) = R0 × (1 + A×t + B×t²) 0℃ 以下:R(t) = R0 × (1 + A×t + B×t² + C×(t-100)×t³)

其中 A=3.9083e-3,B=-5.775e-7,C=-4.183e-12,R0=100Ω。

反解温度比较麻烦,工程上一般用查表加线性插值,或者用分段多项式拟合。我习惯用查表法,把 -200~850℃ 按 1℃ 间隔建表,实测电阻落在哪两个点之间就线性插值。这样精度能到 0.01℃ 以内,运算量也小,8 位 MCU 跑起来很轻松。

// 简化的查表插值示例 float resistance_to_temp(float r) { int i; for (i = 0; i < TABLE_SIZE - 1; i++) { if (r >= r_table[i] && r <= r_table[i+1]) { float ratio = (r - r_table[i]) / (r_table[i+1] - r_table[i]); return t_table[i] + ratio * (t_table[i+1] - t_table[i]); } } return ERROR_VALUE; // 超范围 }

4.4 实测数据与校准流程

板子焊好、代码烧进去,先别急着信数据。第一步做零点校准:把 RTD 放进冰水混合物(0℃),读一批数据取平均,看偏差多少,把这个偏差作为零点补偿存起来。第二步做满量程校准:用标准温度源给一个已知温度(比如 100℃),同样取平均做增益补偿。

校准完再测几个点验证,比如 25℃、50℃、80℃,看误差是否在允许范围内。我实测下来,做好比例式测量和两点校准后,-50~150℃ 范围内误差能控制在 ±0.1℃ 以内,满足绝大多数工业需求。

注意:校准用的标准温度源精度必须比目标精度高一个数量级。你要做 0.1℃ 精度,标准源至少得是 0.01℃ 级别的,否则校准本身就把误差引进去了。

5. 常见故障排查与避坑经验实录

5.1 数据跳变与噪声问题

最常见的抱怨是"读数一直在跳"。原因通常有几个:激励电流太小导致信噪比不够、PCB 布局把数字噪声耦合进了模拟通道、参考电阻温漂大、或者数据率设太高。

排查顺序我建议这样:先把数据率降到 20SPS 看跳变是否改善,如果改善明显说明是噪声问题;然后检查 RTD 走线是否靠近时钟线或电源线;再确认参考电阻是不是精密低温漂的;最后看激励电流能不能适当加大。我遇到过一例,客户用 100μA 激励,跳变严重,改成 500μA 后立刻稳定,因为信号幅度上去了,相对噪声就小了。

5.2 通信失败与配置异常

网络热词里有个"failed to create module configuration mcu",这类问题在调试阶段很常见。SPI 通信失败通常查这几点:CS 时序对不对、时钟极性相位匹配不匹配、MCU 的 SPI 有没有使能、ADS122U04 的复位有没有做。

ADS122U04 上电后需要先发复位命令或者拉低 RESET 引脚,确保寄存器回到默认值,再开始配置。我见过有人跳过复位直接写寄存器,结果配置没生效,读回来全是 0 或者 0xFFFFFF。养成"上电先复位、写完寄存器回读验证"的习惯,能省掉大量排查时间。

5.3 状态机卡死与超时处理

"mcu 状态机"和"timer too close"这两个热词指向的是软件时序问题。状态机卡死多半是因为某个等待环节没有超时退出。比如等 DRDY 一直等不到,或者等 SPI 传输完成标志一直不置位。

解决办法是给每个等待环节都加超时计数器,用定时器中断递减,超时就跳故障态。另外"timer too close"这种问题,往往是中断里干了太多活,导致下一个中断来了还没处理完。中断服务函数要尽量短,只做标志位设置和数据搬运,复杂运算放到主循环里做。

故障现象可能原因排查方法解决措施
读数持续跳变噪声耦合、激励太小降数据率观察加大激励、优化布局
读数恒为 0配置未生效回读寄存器上电复位后重配
读数恒为满量程信号饱和检查增益降低 PGA 增益
SPI 无响应时序不匹配示波器看波形核对 CPOL/CPHA
状态机卡死无超时机制加日志定位每个等待加超时
温度偏差大未校准或参考漂移冰水/沸水验证两点校准、换参考电阻

5.4 长期稳定性与温漂控制

工业设备要连续跑几年,短期准不算本事,长期稳才是真功夫。影响长期稳定性的主要是参考电阻的长期漂移、焊点热电动势、以及 PCB 受潮。参考电阻选金属箔的,长期漂移能到 ppm 级。焊点尽量用同种金属,避免热电偶效应在温差下产生微伏级误差。PCB 做完三防处理,防潮防腐蚀。

我个人的经验是,样机阶段就要做高低温循环测试,-40~85℃ 来回跑几十个循环,看数据漂移多少。很多问题在常温下发现不了,一进高低温箱就原形毕露。

6. 方案扩展与不同场景的适配调整

6.1 多路测温的通道轮询策略

四通道不是摆设。做多点测温时,可以用 IDAC 轮流给不同通道的 RTD 供电,配合多路复用器切换输入。但要注意,切换通道后要留足够的建立时间,让 PGA 和滤波器稳定下来再采样,否则通道间会串扰。我的做法是切换后丢弃前两次转换结果,从第三次开始取数。

6.2 从 RTD 扩展到热电偶和热敏电阻

这套架构不只服务 RTD。换成热电偶,需要加冷端补偿,ADS122U04 内置的温度传感器可以测冷端温度。换成 NTC 热敏电阻,因为阻值高、非线性强,激励电流要调小,线性化要用 Steinhart-Hart 方程。硬件基本不用大改,改的主要是激励配置和算法。

6.3 对外通信接口的选型

PIC18F87J11 的 UART 可以接 RS485 收发器做工业总线,也可以接无线模块做远程监控。HVAC 场景常用 Modbus RTU 协议,把温度数据映射到保持寄存器,上位机轮询读取。这套组合在楼宇自控里非常常见,兼容性好,组网方便。

最后分享一个我在实际项目里踩过的坑:一开始为了省成本,参考电阻用了普通的 1% 精度电阻,常温下校准后挺准,结果一到冬天现场温度降到零下,读数偏了两度多。换成 0.1% 低温漂电阻后问题消失。测温这行,精度是花钱买来的,该省的省,不该省的千万别省。

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

基于ADS122U04与STM32F303VE的工业级温度采集方案实战

/* 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 1:03:00

工业级温度采集系统:ADS122U04IPWR与PIC18F87J10实战设计

/* 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 1:02:44

ADS122U04+STM32F722VE:工业温度采集与RTD热电偶设计实战

/* 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 1:02:44

24位串口ADC+STM32F334实现工业级高精度温度采集方案解析

/* 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 1:02:29

ADS122U04+STM32F439ZG多路高精度温度采集方案

/* 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 1:02:26

基于ADS122U04与RA4L1的高精度温度采集方案设计

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

作者头像 李华