news 2026/11/5 5:02:33

高精度RTD测温:ADS122U04与RA4M2的24位ADC信号链实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
高精度RTD测温:ADS122U04与RA4M2的24位ADC信号链实践

做工业测温的这些年,我有个很深的体会:传感器信号链的选择,往往比 MCU 选哪家更重要。最近把一个温度采集设备从 8 位单片机方案换到了瑞萨 RA 系列的 R7FA4M2AD3CFP,前端 ADC 用的是 TI 的 ADS122U04IPWR,目标场景就是工业现场和 HVAC 风管、水管温度监测。这套组合最让我满意的地方在于,24 位 ADC 直接把 RTD 信号变成数字量并通过 UART 输出,Cortex-M33 主控只负责通信和业务逻辑,整个信号链非常干净。如果你也要做多路温度采集,想在抗干扰、线性度和系统功耗之间找一个平衡点,这篇文章值得看完。

我会从芯片选型、硬件搭接、寄存器配置、数据换算、HVAC/工业场景落地以及实际调试踩坑这几个维度挨个说,尽量把能直接复用的细节都写出来。中间会穿插一些我自己的实测数据,不一定适合所有项目,但至少能帮后面做同类方案的人少走弯路。

1. 拆解这套组合:为什么要用 24 位 ADC + 通用 MCU

1.1 信号链的核心思路

温度测量看着简单,实际上最考验系统设计。以 PT100 铂电阻为例,0°C 时阻值 100Ω,温度每升高 1°C 阻值大约增加 0.385Ω,对应到毫伏级甚至更小的电压变化。如果用普通 MCU 内置的 12 位 ADC 去读,不加前级放大很难分辨出 0.1°C 的差异,而且 MCU 内部参考电压温漂、数字开关噪声都会叠加在采样结果上。

所以典型做法是把“模拟前端”和“数字处理”分开。ADS122U04IPWR 负责模拟信号调理和模数转换,R7FA4M2AD3CFP 负责控制、运算和通信。ADC 通过 UART 把 24 位转换结果发给 MCU,MCU 不需要关心基准、PGA、恒流源这些模拟细节,只需要处理“收到数据、换算温度、上传或显示”。

这样的好处是隔离。模拟部分集中在 ADC 周围,数字噪声难耦合进去;MCU 可以跑操作系统、协议栈、HMI 界面,不会因为采样而干扰信号测量。

1.2 ADS122U04IPWR 为什么比同门其他 ADC 更适合

ADS122U04IPWR 是 24 位 delta-sigma ADC,带 4 通道输入,内部有可编程增益放大器(PGA)、两个激励电流源(IDAC)、内部基准、温度传感器和 CRC 校验。这些资源几乎是给工业 RTD 测量定制的。

相比 SPI 接口的 ADS1220 这类 ADC,ADS122U04 最大的区别是 UART 通信。SPI 在主控端需要至少三根线加片选,从机模式还依赖主机的时序,长线传输时时钟抖动和回波容易造成通信异常。UART 只要 TX、RX 两根线,双方各跑各的时钟,9600 波特率下几十米线缆基本不用太担心时序问题。IPC 类产品里很多主控的 UART 资源非常充足,用 UART 也能避开引脚冲突。

ADS122U04 内部还带了传感器开路检测和偏置电压检测。实际项目中最怕探头断线后系统给出一个离谱温度值,HVAC 控制器如果读到 -50°C 可能会切错运行模式。有了内部诊断寄存器,固件能直接判断探头是否开路、是否短路,这在工业现场很实用。

1.3 R7FA4M2AD3CFP 在系统里扮演的角色

R7FA4M2AD3CFP 属于瑞萨 RA4M2 系列,Arm Cortex-M33 内核,主频最高 100MHz 左右,片上有足够的 Flash 和 SRAM,同时具备丰富的串行通信接口。这个性能放在一个温度采集节点里确实有冗余,但我选择它不是因为算力,而是因为生态和扩展性。

整个系统最终要接 RS485、输出 4-20mA、驱动 LCD 显示,甚至还要跑 Modbus 从站协议。RA4M2 的 SCI 串口模块、DMA、GPT 定时器这些外设可以很灵活地完成多路通信,Cortex-M33 对 Modbus CRC、浮点换算这类任务的执行效率也足够。ADS122U04 是 UART 从机设备,RA4M2 的 UART 可以做中断接收,配合 FIFO,基本不会丢数据。

选型时要注意一点:ADS122U04IPWR 中的 PWR 后缀一般是 TSSOP 封装,焊接和布线比 QFN 友好,适合产品打样到量产过渡。IPC 项目里如果你不熟悉 QFN 手工焊,PWR 后缀会省很多事。

2. 硬件搭建:保证 24 位分辨率不白费

2.1 供电、基准与地的处理

这类高精度 ADC 最怕电源脏。ADS122U04 的模拟电源 AVDD 和数字电源 DVDD 我都建议单独走线,用磁珠或小电阻把模拟电源从数字 3.3V 处隔离出来,再配合 10µF + 0.1µF 电容就近去耦。基准电压如果选内部基准,它的精度已经足够大多数 HVAC 应用;如果你想要更好的温漂表现,可以外接一个精密基准,比如 2.048V 的 REF 系列,注意基准输出要加电容稳定。

地线方面,我自己习惯把 ADC 的 AGND 作为整个模拟信号区域的参考地,MCU 的数字地在单点汇合。PCB 上模拟地和数字地不要大面积乱连,最好在 ADC 芯片下方的局部位置通过一个 0Ω 电阻或铜箔桥接。这个细节平时看不出区别,当现场有变频器、接触器这些干扰源时,地回路处理得不好,采到的数据会频繁跳几个 LSB。

2.2 RTD 的接线方式:两线、三线、四线怎么选

PT100 接到 ADC 上,最简单的两线制只需要两根线,但导线电阻会直接叠加到传感器阻值上。普通两芯线每米可能有 0.05~0.1Ω,如果线长 10 米,就会引入 0.5~1Ω 误差,相当于 1.3~2.6°C 的偏差。所以两线制只能用在探头和电路板距离非常近的场合。

三线制是最推荐的折中方案。它从 RTD 的一端引出两根线,另一端引出一根线,配合 IDAC 恒流源进行激励,用差分测量抵消掉引线电阻的影响。原理是两根引线上流过相同电流,产生的压降在差分输入端呈现出共模分量,被 ADC 的差分输入抑制掉。

四线制是精度最高的方案,激励线和感应线完全分离,基本不受导线电阻和接触电阻影响。但四线制需要多一根线缆,工业现场成本会上去。我个人的习惯是:HVAC 风管温度、水管温度用三线制,实验室校准设备用四线制,机柜内部的板级 NTC 直接用两线制没关系,反正热敏电阻本身精度不高。

ADS122U04 有两个 IDAC,可以配置成同时激励,也可以一个给 RTD、一个给参考电阻。我做比例测量时,用一个 IDAC 输出 1mA 电流流过 RTD,另一个 IDAC 输出 1mA 流过精密参考电阻,ADC 内部以参考电阻两端电压作为基准。这样做的好处是恒流源的温漂和电压变化不会影响最终换算结果,整个测量变成比例关系,精度只取决于参考电阻的温度系数。

2.3 UART 接口与电平匹配细节

ADS122U04 和 RA4M2 的 UART 都是 3.3V 逻辑,直连没有问题。唯一要注意的是 UART 空闲状态的电平。上电初期 MCU 的 GPIO 如果处于浮空或输出低电平,ADC 的 RX 引脚可能被拉低,导致 ADC 误认为有起始位,进入异常状态。

我通常在 MCU 端两个 GPIO 配置为带上拉的 UART 功能,或者在线上加 10kΩ 上拉电阻。工业生产中如果 UART 线走线距离超过 30cm,建议 TX、RX 两线单独包地,不要和 220V AC、继电器输出线走同一线束。这里多说一句:ADS122U04 的 UART 波特率支持范围足够宽,但我不建议为了追求速度选太高波特率。9600 或 19200 已经能满足温度采样需求,低波特率下误码率更低,现场抗干扰能力更强。

2.4 PCB 布局和 EMC 经验

ADC 芯片底下不要铺大片实铜连接模拟地和数字地,要规划好回流路径。RTD 输入走线尽量短,靠近 ADC 引脚处放 RC 滤波,比如 1kΩ + 0.1µF,时间常数约 100µs,对 50Hz/60Hz 工频干扰有明显抑制作用,也不会拖慢采样速率。

如果输入可能受到浪涌或静电冲击,低通滤波后再加一对背靠背的二极管或者 TVS 管钳位到电源轨。工业环境里,探头线缆经常长距离走线,雷击感应、电机启停产生的瞬态尖峰都能导致 ADC 输入引脚损坏。我在批量产品上加了一颗 3.3V 双向 TVS,成本很低,但返修率明显下降。

3. 底层驱动:让 ADS122U04 稳定吐出温度数据

3.1 UART 指令时序和 DATARDY 的处理方式

ADS122U04 是通过 UART 指令进行配置和读取的,它没有片选线,主控必须严格按规定的帧格式发送命令。使用这种通信芯片,我建议把驱动封装成独立模块,给出清晰的接口:初始化、写寄存器、读数据、诊断。

驱动流程上,上电后不要急着配置,先等 ADC 完成内部上电复位,再根据 DATARDY 引脚判断当前是否忙。DATARDY 拉低表示有新的转换结果可以读取;每次读走数据后它会被拉高。如果你的 MCU 引脚充裕,最好把 DATARDY 接成一个外部中断引脚,这样固件可以在数据就绪时被唤醒,不用循环轮询。RA4M2 的 GPIO 中断配置很方便,能大幅降低 CPU 占用。

我记得第一次接触这款芯片时犯过一个错误:上电后直接发配置命令,结果收到的是全 0,因为芯片还在启动状态。后来加了 10ms 延时,再检测 DATARDY,就稳定多了。

3.2 寄存器配置示例与参数含义

ADS122U04 的配置寄存器主要用来设置输入通道选择、PGA 增益、数据速率、激励电流大小、基准源和滤波模式。我这里用一个参考配置模板来说明,具体位定义以最新版数据手册为准。

// 伪代码,表示配置意图,实际宏定义需对照寄存器位域 typedef struct { uint8_t mux_sel; // 输入多路复用选择,例如差分AIN0-AIN1 uint8_t pga_gain; // 可编程增益,例如 1/2/4/8/... uint8_t data_rate; // 转换速率,例如 20SPS / 100SPS uint8_t idac_current; // 激励电流,例如 250uA / 500uA / 1000uA uint8_t vref_sel; // 基准源选择,内部或外部 uint8_t mode_config; // 连续转换/单次、滤波器是否使能 } ads122u04_config_t; static void ads122u04_apply_config(ads122u04_config_t *cfg) { // 组装4个配置寄存器的值 uint8_t regs[4]; regs[0] = ads122u04_encode_mux_pga(cfg->mux_sel, cfg->pga_gain); regs[1] = ads122u04_encode_data_rate(cfg->data_rate); regs[2] = ads122u04_encode_idac_vref(cfg->idac_current, cfg->vref_sel); regs[3] = ads122u04_encode_mode(cfg->mode_config); // 写寄存器命令示例: // 发送 WREG 命令,紧随其后为寄存器数量和4个字节内容 ads122u04_uart_send(ADS122U04_CMD_WREG); ads122u04_uart_send(ADS122U04_REG_COUNT_4); ads122u04_uart_send(regs[0]); ads122u04_uart_send(regs[1]); ads122u04_uart_send(regs[2]); ads122u04_uart_send(regs[3]); ads122u04_uart_wait_tx_done(); }

我的常用配置是 PGA = 8、数据速率 20SPS、IDAC = 500µA 或 1mA、内部基准。20SPS 的好处是内置滤波器对 50Hz 工频有不错抑制,数据也足够平滑。如果现场工频干扰特别严重,可以选 20SPS 以下;如果要做快速响应,可以选 100SPS,但后级滤波要跟上。

PGA 增益不是越高越好。PT100 在 1mA 激励下,0°C 时信号只有 100mV,PGA=8 后变为 800mV,接近基准电压,充分利用 ADC 的量程,信号分辨率最高。但如果探头线缆长、高频噪声大,PGA 高了反而会把噪声一起放大。工业现场我会先看输入噪声水平,再决定增益。

3.3 RA4M2 端 UART 接收的工程实现

R7FA4M2AD3CFP 的 SCI 串口在瑞萨 e2 studio 的 FSP 配置工具里配置非常直接。我建议把 ADC 的 UART 接收做成环形缓冲加空闲中断的方式,不要在主循环里一个字节一个字节地收。因为 ADS122U04 的数据帧长度固定,主控可以通过空闲中断知道一帧结束,然后从环形缓冲取出整帧解析。

接收缓存至少要能存下好几帧数据。调试时遇到过主控 UART FIFO 溢出导致丢帧,后来把环形缓冲加大、同时降低 ADC 输出速率,问题就解决了。对于 20SPS 的数据率,UART 只有 9600 波特率也完全不会成为瓶颈。

一个很容易忽略的点:UART 通信是异步的,ADC 端可能因为配置错误或上电时序问题导致一帧数据只发了半个字节,主控这边要设置超时判断,比如超过 5ms 没收到完整帧就丢弃,避免长时间卡在等待状态。这个超时逻辑在 MCU 里用一个普通定时器就能实现。

3.4 ADC 码值到实际温度的换算方法

ADS122U04 是 24 位 ADC,配置成差分输入时,输出码是一个有符号数。换算的基本步骤如下:

首先计算 ADC 看到的输入电压。假设参考电压为 VREF,PGA 倍数为 G,那么理论上:

VIN = ADC_Code / 0x7FFFFF * VREF / G

这里的0x7FFFFF对应正满量程。接着,根据恒流源电流 I 和测量到的电阻 R 的关系:

R = VIN / I

得到 PT100 的实时电阻值,再查表或按公式换算温度。0°C 到 100°C 之间,PT100 电阻近似线性,可以用:

T ≈ (R - 100) / 0.385

其中 R 单位是 Ω,T 单位是 °C。这个近似够工程用,但要追求更高精度,建议用 Callendar-Van Dusen 公式或直接做温度-电阻查表,再在代码里线性插值。

我算过一组数据:用 1mA 激励、VREF=2.048V、PGA=8 时,LSB 约为 2.048 / (8 × 2^23) ≈ 30.5nV。PT100 每变化 1°C 产生约 0.385mV,折算到 ADC 码值大约对应 12600 个 LSB。也就是说分辨率富余量非常大,真正的误差来源不是 ADC 位数,而是基准温漂、PGA 失调和噪声。这也是为什么我更看重整个模拟前端的稳定性,而不是单纯盯着 ADC 位数。

4. HVAC 和工业场景的落地细节

4.1 HVAC 里的温度测量有哪些特殊要求

HVAC 系统里,温度传感器分布在风管、冷冻水管、AHU 机组回风口、室内温控面板等位置。这些点位往往离主控板有几米到几十米距离,现场环境有风机电机、变频器、电磁阀,空间里充满电磁干扰。用传统模拟信号直接传回主板,长线传输容易耦合噪声,而且传感器导线电阻会引入不可忽略的分压误差。

用 ADS122U04 + RA4M2 的方案可以把 ADC 放在探头附近,数据以数字形式传回主控。比如把一颗 ADS122U04 做成一个小模块,直接装在风管温度探头的接线盒里,模块通过 UART 把温度值发给中央控制器。RA4M2 负责协议汇总,再通过 RS485 上传到楼宇自控系统。

HVAC 的另一个特点是实时性要求不高。风管温度变化本来就很慢,20SPS 的采样率配合滑动滤波,反而能得到更稳定的显示值。控制器需要的温度曲线是缓慢变化的,没有人会关心单次采样的高速抖动。

4.2 工业应用:长线传输和干扰防护

工业现场比 HVAC 更苛刻,可能需要把采集模块放在设备配电柜里,探头接引到电机轴承、液压站、冷却水路这些位置。我一般会在 ADC 输入前端加共模电感或 RC 滤波,并且把三线制 PT100 的激励电流和感应线绞合在一起,减少磁场耦合。

RA4M2 主控这边,我建议把 Modbus RTU 通信协议做进同一个固件。这样工业 PLC 可以通过 RS485 直接读取温度值,无需额外转换器。Modbus 的 CRC 校验和超时重发机制对工业总线通信非常重要。温度数据以 0.01°C 为单位上传,高位存整数部分,低位存小数部分,上位机解析也方便。

工业现场断线检测是刚需。ADC 配置好开路检测后,主控一旦读到诊断标志,就上报“探头故障”,而不是报一个异常温度。这个逻辑虽然简单,但能避免很多安全事故隐患。

4.3 采样数据的后期处理和精度评估

我拿到 ADC 原始数据后,一般会做三件事:中值滤波、温度换算、温漂补偿。因为即使 ADC 内部有滤波,偶发的脉冲干扰仍可能在单次采样中出现。代码里保留最近 5 次采样,取中位数作为有效值,再对中位数做一阶低通滤波,既消除毛刺,又不会产生太大的延迟。

精度评估方面,我在实验室用过标准电阻箱和精密铂电阻温度计做过对比:0°C 到 100°C 范围内,三线制接法下系统误差能控制在 ±0.2°C 以内。如果换成四线制、并用标准电阻做比例参考,误差可以进一步压缩到 ±0.05°C 左右。这个指标在工业 HVAC 里已经足够。

5. 调试与踩坑记录

5.1 采样数据跳变,先查基准而不是查 ADC

有一块样板刚焊回来时,读数总是跳来跳去,尤其是 MCU 启动瞬间跳得最厉害。一开始我以为 ADC 配置不对,后来用示波器抓基准电压,发现波形上有明显的周期性毛刺。查了一圈,是 MCU 的 SPI 通信和 ADC 共用了一路电源,数字开关噪声串到了模拟侧。

解决办法是把 ADC 的模拟电源单独拉出来,用磁珠隔离,并确保基准电容足够大。实际项目中如果基准稳定,24 位 ADC 的数据低几位有波动很正常,但不会大幅跳变。如果你的数据跳变幅度超过几百个 LSB,八成不是 ADC 本身的问题,而是电源或参考源。

5.2 UART 帧同步丢失,别急着换芯片

ADS122U04 的 UART 数据帧是有固定格式的,但调试时会遇到主控收到一帧长度对不上、解析失败。我的排查顺序是:波特率有没有偏差?ADC 的 RX 线上有没有被主控的 TX 空闲电平干扰?ADC 和主控之间有没有在初始化时序上抢速度?

有一次问题出在主控上电时 GPIO 默认状态没配置,TX 引脚输出了一个低电平脉冲,ADC 把那个低电平当成了起始位,后面所有数据都错位了。解决方法是初始化所有串口 GPIO 到确定状态后再打开外设,并且在 ADC 上电后加固定延时。

5.3 探头断线被误判成 0°C

事情是这样的:固件里如果读到一个很大的负阻值,就简单把它归为 0°C,实际情况是 PT100 引线脱落了。后来我在配置里使能 ADC 的传感器开路检测功能,每次数据读取时同时返回诊断状态。MCU 检测到开路标志后,直接把显示温度置为“---”或者上报故障,不再参与控制逻辑。

这条经验后来用到了风管温度采集上,维修人员接线松动时系统会报警,而不是默默输出一个错误值,给运维省了很多麻烦。

5.4 低功耗休眠后数据不更新的问题

在做电池供电的无线温度节点时,我让 RA4M2 休眠、ADC 保持单次转换模式,用 DATARDY 唤醒 MCU。第一次测试时,休眠后唤醒读到的温度和之前一模一样,后来发现原因:唤醒后没有重新发送 START 命令,ADC 还停在上一轮的状态。

ADS122U04 这类芯片在单次转换模式下,每次转换前都要触发启动,然后等待转换完成标志。我在休眠前的状态机里把“启动转换-等待完成-读取结果”串起来,唤醒后从头走一遍,数据就正常更新了。

下面把几个高频问题整理成了速查表:

现象可能原因排查重点
数据乱跳模拟电源噪声、基准不稳抓基准波形,磁珠隔离模拟电源,检查地去耦
全 0 输出上电即读数据,芯片未就绪增加初始化延时,等待 DATARDY
帧错位UART 初始电平异常检查 GPIO 初始状态,增加上拉电阻
温度整体偏差二线制导线电阻叠加改三线制或四线制,做零点校准
探头断线误报未使能开路检测读取诊断寄存器,上报故障状态
休眠后无新值单次转换模式忘发 START状态机中确保每次转换都触发启动

6. 后续扩展

这套 ADC + MCU 架构不只是能接 PT100。热电偶、热敏电阻、4-20mA 电流环路信号,都可以通过调整 IDAC 和 PGA 配置来适配。最近我在实验把两路 ADS122U04 挂到同一颗 RA4M2 上,一路测 PT100,一路测 NTC,两个 UART 并行通信,互不干扰。如果项目对通道数有更高要求,这个架构可以比较自然地扩展。另外,由于温度数据已经变成数字量在系统里传输,后续把它接入 Wi-Fi、LoRa、以太网网关都相对容易,硬件层面不需要再改模拟前端。对产品规划来说,选型时留出这些余地,后面迭代会舒服很多。

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

24位ADC与PIC18实现PT100高精度温度采集方案解析

/* 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 4:59:59

ADS122U04IPWR+STM32F030RC工业温度测量实战指南

/* 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 4:59:38

SAP OData DeepEntity开发实战:采购订单集成方案

1. 项目概述在SAP系统中,OData服务已成为现代应用集成的标准协议。作为ABAP开发者,我们经常需要创建能够处理复杂业务数据的OData服务。其中,DeepEntity(深度实体)是一种特殊的实体类型,它允许我们在单个HT…

作者头像 李华
网站建设 2026/11/5 4:59:17

ag-grid-community 高性能表格实战:行模型、虚拟滚动与编辑回写

简介:ag-Grid Community 前端开源数据网格库的完整工程包,面向使用 JavaScript、React、Angular、Vue 及 Web Components 搭建中后台系统的前端开发者,用于应对以下难题:万级数据表格的高性能渲染、数据绑定与单元格编辑。压缩包约…

作者头像 李华
网站建设 2026/11/5 4:59:11

从账户模型到支付对账:金融服务系统设计的关键实践

1. 金融服务的本质问题做“financial-services”这个方向,绕不开一个核心矛盾:业务看起来是一个简单的“收钱、付钱、记账”,但真正把它落地成一套可用、可审计、可对账的系统时,你会发现所有麻烦都藏在细节里。余额不准、重复扣款…

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

企业绩效管理系统中的部门考核统计功能设计与优化

1. 部门考核统计功能的价值解析作为一款企业级绩效管理工具,"陀螺匠企业助手"中的部门考核统计模块绝非简单的数据展示界面。我在多个企业的绩效系统实施过程中发现,这个看似基础的功能实际上承载着组织人才管理的核心逻辑。1.1 绩效数据的战略…

作者头像 李华