☰
ADS122U04IPWR+STM32L162ZE:工业精密测温前端实战指南
2026/11/5 5:03:51 网站建设 项目流程

做工业温度测量时间长了,你会发现真正麻烦的往往不是传感器本身,而是从毫伏级微弱信号到主机能用的温度数值这一段链路。最近用 TI 的 ADS122U04IPWR 搭配 STM32L162ZE 搭了一套测温前端,同时覆盖工业和 HVAC 两个场景,从 PT100/热电偶接入到串口输出温度数值,整个过程踩了不少坑,也沉淀下来一些可以直接抄作业的经验。

先说结论:这套组合解决的核心问题是“微弱模拟信号 + 低功耗 MCU + 可靠数字传输”三者之间的衔接。ADS122U04IPWR 是一颗带 UART 接口的 24 位 Δ-Σ ADC,内置可编程增益放大器和两路激励电流源;STM32L162ZE 则负责系统控制、数据读取和运算。相比直接用 MCU 内置 ADC,这个方案在分辨率、噪声抑制和长线传输能力上都要稳得多。适合做温度变送器、楼宇自控温控器、冷链监测节点、HVAC 机组数据采集这类产品,也适合想认真搞懂精密测温链路的人参考。

1. 方案拆解与选型逻辑

1.1 为什么是独立 ADC,而不是 MCU 内置 ADC

很多工程师第一反应是:STM32 自带 12 位 ADC,用几个 IO 加一个 NTC 分压不就行了?这话在消费级场景成立,但放到工业和 HVAC 现场,问题立刻暴露。

RTD 和热电偶的输出信号范围非常窄。PT100 在室温附近温度系数大约是 0.385 Ω/℃,用 1 mA 激励电流时对应的电压变化只有 0.385 mV/℃。热电偶更夸张,K 型热电偶灵敏度约 41 μV/℃,像 B 型热电偶在低温段甚至只有 1 μV 级别的变化。12 位 ADC 满量程假设 3.3 V,一个 LSB 对应约 0.8 mV,这意味着热电偶信号根本无法有效分辨,RTD 信号也只能粗略感知“温度变了”,谈不上“精确测量”。

独立 Σ-Δ ADC 的价值就在于它把“模拟前端”做到了芯片内部。ADS122U04IPWR 是 24 位分辨率,内置 PGA,可以把微伏级信号放大到 ADC 量程内;内置 IDAC 电流源可以直接给 RTD 供电,省掉外部恒流源电路;内部基准电压又让整个测量链路形成“比率式”结构,电流源漂移和基准漂移可以相互抵消。这些特性决定了它不是简单替代 MCU 内置 ADC,而是一个完整的传感器采集方案。

1.2 ADS122U04IPWR 的核心特性解析

这颗芯片的型号后缀 IPWR 是 TSSOP 封装。它属于 TI 的 ADS122U 系列,最大特点是数字接口走 UART,而不是传统的 SPI 或 I2C。UART 接口在工业现场有天然优势:抗干扰能力比 I2C 好,线束比 SPI 少(两线即可),很多老工程师调试起来也更顺手。

内部结构上,几个关键模块必须理解清楚:

  • 24 位 Δ-Σ ADC 核心,支持可编程数据速率,典型范围从 20 SPS 到 2000 SPS,具体档位看数据手册的 CONFIG1 寄存器;
  • 可编程增益放大器 PGA,增益从 1 到 128 可调,对应不同幅度的传感器信号;
  • 两路 IDAC 激励电流源,电流大小可编程,用于 RTD 激励或热电偶偏置;
  • 内部 2.048 V 基准电压,也支持外部基准输入;
  • 内部温度传感器,可以用来做热电偶冷端补偿的辅助参考;
  • 内部故障检测功能,可以检测传感器开路或短路。

这些模块放在一个芯片里,最大的好处是模拟前端的一致性有保证。自己用分立运放搭 PGA,温漂和噪声很难控制到芯片内部集成的水平,而且 PCB 面积会大好几倍。ADS122U04IPWR 把这个问题统一解决了。

1.3 STM32L162ZE 在系统里的角色

STM32L162ZE 是 ST 的低功耗系列,Cortex-M3 内核,512 KB Flash,144 脚封装,内置 LCD 控制器。放在这个系统里,它不需要做模拟信号处理,主要任务有三个:一是通过 UART 与 ADS122U04IPWR 通信,下发配置命令、读取转换结果;二是做线性化、滤波、单位换算;三是管理功耗——在两次采样之间的空闲窗口内进入低功耗模式。

选这颗 MCU 的原因是低功耗与运算能力的平衡。工业现场很多测温节点靠电池或 4-20 mA 环路供电,功耗预算非常有限。STM32L162ZE 的 STOP 模式可以达到微安级电流,配合 UART 唤醒或 RTC 定时唤醒,可以实现“每秒醒来一次、采完就睡”的工作模式。如果只是做研发验证,换任何一颗带 UART 的 STM32 也能跑通,L162ZE 是为后续产品化预留了余量。

2. 硬件连接设计与电路搭建

2.1 RTD 激励电流与基准电压的“比率式”接法

测温链路的性能瓶颈往往不在 ADC 本身,而在传感器激励和参考电压的稳定性。用 ADS122U04IPWR 做 RTD 测温,官方推荐的方式是“比率式”测量,我实际验证下来这个接法确实能显著降低温漂误差,原理值得展开说。

比率式接法的核心思路是:让 ADC 的参考电压和 RTD 的激励电流来自同一个源头,这样电流源的绝对精度和温漂就会被抵消掉。具体接法上,我习惯用 IDAC1 作为 RTD 的激励源,电流从 AIN0 引脚流出,流经 RTD 后经过一个精密基准电阻 RREF 回到地。同时把 RREF 两端的电压接入 ADC 的 REFP 和 REFN 作为参考电压。这样当激励电流发生变化时,RTD 上的压降和参考电压会同比例变化,最终转换结果只取决于 RTD 和 RREF 的电阻比例,电流绝对值不再重要。

这个原理很多工程师知道,但实际接线时容易犯一个错误:把 RREF 放在 RTD 上游而不是下游。RREF 必须在 RTD 的同一电流路径上,并且要靠近 RTD 的地端,才能保证参考电压和 RTD 电压共享同一个电流。RREF 阻值选择也讲究,我一般取 RTD 满量程电阻的 1.1 到 1.2 倍,比如测 PT100 用 120 Ω 或 150 Ω,这样参考电压接近 ADC 量程上限,充分利用分辨率。

2.2 三线制 RTD 的引线电阻抵消

两线制接法最简单,但引线电阻全部串进测量回路,误差随线长线性增加。工业现场如果 RTD 离采集板比较远,必须用三线制。

三线制抵消引线电阻的原理是:两根引线分别走 RTD 的两端,第三根引线作为采样线。用两组 IDAC 分别驱动两根引线,使流经两根引线的电流相等,这样它们在各自引线上产生的压降也相等。ADC 测量 RTD 两端的差分电压时,两个相等压降做减法抵消,引线电阻的影响就基本消除了。

ADS122U04IPWR 有两路 IDAC,刚好够用。实际接法是 IDAC1 和 IDAC2 分别接到 RTD 的两根激励线上,两块电流都流经 RTD 后汇合,这与两线制略有不同,具体可以查数据手册中三线制 RTD 接法示意图。我调试时第一步就是检查两路 IDAC 的电流设置是否完全一致,IDAC1 和 IDAC2 的编程电流档位必须相同,否则会产生额外的差分误差,这比引线电阻本身还难排除。

2.3 热电偶测量的冷端补偿处理

热电偶测的是“温差”,不是“绝对温度”,冷端补偿必须做。很多新手在这里翻车:直接拿热电偶电压查表换算温度,结果差出十几度。

ADS122U04IPWR 有内部温度传感器和一个额外的模拟输入通道,我建议用一颗高精度 NTC 或 PT100 贴在热电偶冷端(接线端子附近),用另一个测量通道读冷端温度,然后在固件里做软件补偿。不用内部温度传感器做冷端补偿的原因是:芯片本身会发热,而冷端温度需要贴近热电偶端子,芯片内部温度与端子温度之间存在热阻,精度不够。

K 型热电偶信号放大配置:PGA 增益设 64 或 128,数据速率 20 SPS。K 型热电偶在测量范围内输出约 -6 mV 到 50 mV,经过 64 倍增益后变成 -0.4 V 到 3.2 V,在 3.3 V 供电下要确保输入范围没有超过 ADC 允许范围。ADS122U04IPWR 支持双极性输入,这一点要提前配置好,否则负温度段读出的数据全是零。

2.4 UART 通信与硬件抗干扰设计

ADS122U04IPWR 的 UART 接口是 TTL 电平,直接和 STM32 的 USART 对接就行,不用加收发器。连接时注意 RX/TX 交叉:ADC 的 TX 接 MCU 的 RX,ADC 的 RX 接 MCU 的 TX。

我建议在 UART 线上串联 100 Ω 到 1 kΩ 电阻,位置靠近 MCU 端。这个电阻不是必需的,但对 EMI 有抑制作用,尤其当线缆长度超过 10 cm 时效果明显。工业现场强干扰环境下,可以在 UART 线上加 TVS 管到地,防止静电或浪涌打坏引脚。

电源部分要格外留意。ADS122U04IPWR 的模拟供电最好用 LDO 单独供给,不要直接用开关电源的输出。开关电源的纹波会通过电源引脚耦合到模拟前端,在 24 位分辨率下任何毫伏级噪声都会被放大。我用的是 TPS7A 系列 LDO,前级加磁珠和 10 μF + 100 nF 去耦电容,实测数据稳定性提升明显。

PCB 布局上,模拟地要单点汇聚,数字信号线(UART)尽量远离模拟输入走线。RTD 和热电偶输入走线要短,必要时加铜皮屏蔽。

3. 固件实现与数据处理

3.1 寄存器配置流程:先理解命令再动手

ADS122U04IPWR 和普通 SPI ADC 不一样,它的控制方式是“命令帧 + 寄存器写读”。所有操作通过 UART 发送命令字节,比如软件复位、启动转换、读取数据、写寄存器。建议固件调试时先把命令字节表打印出来帖在工位旁边,依次验证每条命令的返回数据,再做完整流程。

初始化顺序我总结为四步:

  1. 发送 RESET 命令(0x06),等待至少 10 ms,让芯片回到确定状态;
  2. 写 CONFIG0 寄存器,配置输入通道选择、PGA 增益、单双极性模式;
  3. 写 CONFIG1 寄存器,配置数据速率和转换模式;
  4. 写 CONFIG2/CONFIG3 寄存器,配置 IDAC 电流值、基准电压源、IDAC 输出通道。

每次写寄存器之后,最好回读一遍,确认写入值与预期一致。UART 通信受干扰时最容易出现“写失败但芯片报成功”的假象,回读能第一时间发现问题。这个习惯让我省了几个小时的排查时间。

3.2 数据读取状态机实现

固件层面,我建议把 ADC 数据读取写成一个状态机,而不是简单地“发命令、等数据”。因为 UART 是异步的,转换完成时间与 MCU 接收时间不一定对齐,一旦出现丢字节,状态机可以自恢复,而简单死等逻辑往往卡死。

状态机大致分四态:

  • IDLE 态:发送 START 命令,进入等待态;
  • WAIT_DRDY 态:等待转换完成标志。ADS122U04IPWR 在连续转换模式下,转换完成后会自动通过 UART 输出数据,注意数据帧格式的起始字节;
  • READ_DATA 态:接收完整的 24 位数据帧,检查校验字节;
  • PROCESS 态:把裸 ADC 码代入换算公式,得到温度,然后回到 IDLE。

实际实现时,我在 STM32 端用的是串口接收中断 + 环形缓冲区,收到一个字节就进缓冲区,状态机在主循环里从缓冲区取字节解析。这样 MCU 永远不需要阻塞在等待上,功耗和实时性都能兼顾。初始化配置我用阻塞方式,读数据用非阻塞方式,两者分开,调试起来逻辑清晰。

3.3 数据换算公式与滤波

ADC 裸码要变成温度,中间有几步换算,每一步都要做单元测试。以 RTD 为例,我的换算链路是:

  1. 从 ADC 读回 24 位二进制码,转换成有符号整型;
  2. 根据参考电压和 PGA 增益计算 LSB 电压:LSB = 2 × VREF / (增益 × 2^24)。VREF 用 2.048 V、增益为 1 时,LSB 约 0.244 μV,这个值只做参考,实际精度靠比率式测量的比例关系保证;
  3. 由 RTD 上的电压和已知的 IDAC 激励电流,求出 RTD 当前电阻值,注意这里的电流值必须是实际编程值,而不是理论值;
  4. 把电阻值代入 PT100 的 Callendar-Van Dusen 方程或查表,得到温度。

热电偶链路更直接:ADC 码先换算成电压,然后加上冷端补偿电压,最后查 NIST 多项式得到温度。查表时注意分段多项式的系数,不同温度段系数不一样,用错段会导致高温段偏差突然变大。

滤波方面,我的经验是两级处理:第一级滑动平均,窗口长度对应 1 秒采样次数;第二级中值滤波,剔除粗大误差。工业现场偶尔会有电焊机、变频器带来的脉冲干扰,中值滤波能把这种单点毛刺直接滤掉。数据速率选 20 SPS 时,对应 50 Hz 工频的抑制效果最好,因为 Σ-Δ 调制器的数字滤波器在工频整数倍处有凹口,这是选 20 SPS 而不是 15 SPS 或 30 SPS 的核心理由。

3.4 低功耗唤醒机制调优

STM32L162ZE 的低功耗模式是这套方案的一个亮点。休眠时整机电流可以做到几十微安以内。

我的做法是:进入 STOP 模式前,先把 ADS122U04IPWR 设为单次转换模式并关断不必要的 IDAC,MCU 开启 RTC 定时唤醒。唤醒后 MCU 给 ADC 发 START 命令,进入连续转换,采集到足够的样本后滤波、换算、外发数据,再进入 STOP。

需要注意 ADC 本身也有活跃和待机状态,MCU 休眠前最好给 ADC 发 STOP 命令(0x04)让它也进入低功耗状态,否则 ADC 一直跑连续转换,电流会增加毫安级,MCU 再省电也没用。这个细节是功耗联调时发现的,一开始只关注 MCU 电流,忽略了前端 ADC,整体功耗一直压不下来。

4. 实战问题与排查记录

4.1 上电后 ADC 无响应或回读全 0xFF

这是遇到最多的问题,原因通常出在 UART 通信初始化和电平不匹配上。

如果回读寄存器全是 0xFF,先量一下 RX/TX 线的电平。ADS122U04IPWR 的 UART 是 TTL 电平,而好多调试工具或 USB 转串口模块是 RS232 电平,中间差一个电平转换芯片没加,通信自然失败。另外检查 RX/TX 是否交叉:ADC 的 TX 必须接 MCU 的 RX,接反了也会全 0xFF。

其次是波特率。这颗芯片支持自动波特率检测,但我实测下来,固定波特率模式更可靠。我在固件里固定用 9600 波特率,8 数据位、无校验、1 停止位。上电后先发一个 0x00 字节让 ADC 做波特率同步,再发 RESET 命令,之后才操作寄存器。这套时序在四块不同板子上都验证稳定。

还有一点容易忽略:上电时序。如果 ADC 的供电比 MCU 的 UART 引脚供电慢,MCU 可能会在 ADC 还没准备好时发出配置帧,这些帧会被丢失。我加了一个上电延时,MCU 等到 ADC 供电稳定 50 ms 后才发第一条命令。

4.2 温度读数跳动幅度大

读数值在 ±2 LSB 内跳是正常的,如果跳动过大,优先查电源纹波和输入回路。

我用示波器量过,ADC 的 AVDD 电源纹波若超过 10 mV,24 位数据低位就会明显抖动。解决办法是把去耦电容靠近 ADC 电源引脚放置,并且确保模拟地和数字地在 ADC 下方单点汇合。输入线如果走线太长,也会形成天线接收干扰,RTD 和热电偶的输入线尽量短。

PGA 增益设高时(64 倍以上),输入偏置电流的影响也会暴露。如果传感器阻抗过大,偏置电流与传感器阻抗乘积会叠加上一个误差电压,表现为读数随温度缓慢漂移。排查方法很简单:把传感器输入端短接到地,看输出码是否归零。不归零就说明 PGA 输入偏置电流或参考电压有问题。

4.3 长期运行后温度缓慢漂移

短期稳定、长期漂移的原因主要有三个:环境温度变化导致基准电压漂移、RTD 自热效应、传感器和接线端子的接触电阻变化。

比率式测量能消除第一项的大部分影响,这也是当初选这个方案的原因之一。但 IDAC 电流的长期稳定性还是会直接体现为 RTD 电阻测量的漂移,好在 ADS122U04IPWR 的 IDAC 温漂指标不错,实测漂移控制在可接受范围。

RTD 自热效应在 HVAC 风管测温里特别明显。风管里风速低,散热差,激励电流从 1 mA 降到 500 μA,自热误差能减小一半。我后来在程序里加了“高精度/快速响应”两档模式,快速响应用 1 mA 激励,高精度用 250 μA 激励,实测同一个 PT100 在两种模式下读数差大约 0.05 ℃ 到 0.1 ℃,这个量级在 HVAC 场景完全可以接受。

4.4 容易被忽略的几个细节

有几个坑是常规文档不会写明白的,我踩过之后总结出来:

第一,ADS122U04IPWR 内部基准电压的初始精度有限,如果产品要求全温范围内误差小于 0.1%,建议用外部精密基准。内部基准适合研发验证和精度要求不高的场景。

第二,UART 数据帧里有状态字节,第一次解析时容易忽略。状态字节包含转换完成标志和故障标志,我建议每次都解析它,而不是只看温度数据。传感器开路时状态字节会给出提示,省去外部设计诊断电路的麻烦。

第三,固件里做线性化时不要用浮点做大量查表运算,STM32L162ZE 虽然带 FPU,但浮点运算在低功耗模式下会拉高功耗。我后来把 PT100 查表改成二分查找 + 线性插值,整个过程用定点数运算,功耗和速度都有改善。

第四,PCBA 回流焊后首次上电,建议做一次 ADC 自校准。焊接应力会导致输入偏置和增益误差偏离标称值,ADS122U04IPWR 支持自校准命令,上电初始化流程里加一步,能显著改善批量一致性。

尾声:一点个人体会

这套方案前前后后调了两周,最深的感觉是:精密测温链路的稳定性不是某一颗料决定的,而是电源、布局、通信时序、固件状态机互相配合的结果。ADS122U04IPWR 把模拟前端的复杂度收进了芯片,但仍然需要设计者对噪声来源有清晰的感知。如果让我重新做一次,我会提前把电源纹波测试放在最前面,而不是等信号链跑通后再回头查干扰。测温这行没有玄学,所有异常最终都能在示波器或寄存器值里找到答案,关键是要把排查路径梳理干净。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询