
做工业测温的这些年我有个很深的体会传感器信号链的选择往往比 MCU 选哪家更重要。最近把一个温度采集设备从 8 位单片机方案换到了瑞萨 RA 系列的 R7FA4M2AD3CFP前端 ADC 用的是 TI 的 ADS122U04IPWR目标场景就是工业现场和 HVAC 风管、水管温度监测。这套组合最让我满意的地方在于24 位 ADC 直接把 RTD 信号变成数字量并通过 UART 输出Cortex-M33 主控只负责通信和业务逻辑整个信号链非常干净。如果你也要做多路温度采集想在抗干扰、线性度和系统功耗之间找一个平衡点这篇文章值得看完。我会从芯片选型、硬件搭接、寄存器配置、数据换算、HVAC/工业场景落地以及实际调试踩坑这几个维度挨个说尽量把能直接复用的细节都写出来。中间会穿插一些我自己的实测数据不一定适合所有项目但至少能帮后面做同类方案的人少走弯路。1. 拆解这套组合为什么要用 24 位 ADC 通用 MCU1.1 信号链的核心思路温度测量看着简单实际上最考验系统设计。以 PT100 铂电阻为例0°C 时阻值 100Ω温度每升高 1°C 阻值大约增加 0.385Ω对应到毫伏级甚至更小的电压变化。如果用普通 MCU 内置的 12 位 ADC 去读不加前级放大很难分辨出 0.1°C 的差异而且 MCU 内部参考电压温漂、数字开关噪声都会叠加在采样结果上。所以典型做法是把“模拟前端”和“数字处理”分开。ADS122U04IPWR 负责模拟信号调理和模数转换R7FA4M2AD3CFP 负责控制、运算和通信。ADC 通过 UART 把 24 位转换结果发给 MCUMCU 不需要关心基准、PGA、恒流源这些模拟细节只需要处理“收到数据、换算温度、上传或显示”。这样的好处是隔离。模拟部分集中在 ADC 周围数字噪声难耦合进去MCU 可以跑操作系统、协议栈、HMI 界面不会因为采样而干扰信号测量。1.2 ADS122U04IPWR 为什么比同门其他 ADC 更适合ADS122U04IPWR 是 24 位 delta-sigma ADC带 4 通道输入内部有可编程增益放大器PGA、两个激励电流源IDAC、内部基准、温度传感器和 CRC 校验。这些资源几乎是给工业 RTD 测量定制的。相比 SPI 接口的 ADS1220 这类 ADCADS122U04 最大的区别是 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 时信号只有 100mVPGA8 后变为 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 看到的输入电压。假设参考电压为 VREFPGA 倍数为 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 激励、VREF2.048V、PGA8 时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、以太网网关都相对容易硬件层面不需要再改模拟前端。对产品规划来说选型时留出这些余地后面迭代会舒服很多。