
ADS122U04IPWR 和 STM32F722VE 放在一起不少朋友第一反应是这不是拿大炮打蚊子吗24 位 ADC 配一颗 M7 内核的 MCU做测温是不是有点浪费。但真把一个同时要管 HVAC 冷冻水温度、又要管工业电机绕组温度的项目跑起来之后我才确认这套组合的合理性。ADS122U04IPWR 负责把微伏级传感器信号变成稳定的数字量STM32F722VE 负责跑滤波、线性化、标定和现场通信分工干净利落。这篇文章就把这套测温链路的选型原因、传感器接法、电路布局、固件处理和现场校验收尾全部拆开讲一遍给正在做温度变送器、采集模块或者设备改造的工程师一个可以直接参考的完整方案。先说明一下这串后缀的含义。ADS122U04 是 TI 的 24 位 ΔΣ ADCIPWR 里的 I 代表工业级温度范围PW 是 TSSOP 封装R 表示卷带包装。所以 ADS122U04IPWR 就是那款带 UART 接口的 4 通道 24 位 ADC。它最大的特点就是把常规 ADC 的 SPI/I2C 接口换成了 UART 从机接口MCU 不用盯着时序图一点点抠协议只需要组帧、发送、读取这在模拟前端和主控之间有一定距离的工程场景里省了非常多的事情。1. 系统拆解这两颗芯片各自干了什么1.1 为什么高端温度测量必须把 ADC 从 MCU 里搬出来大多数 MCU 内置 ADC 还是 12 位的这对温度测量来说是硬伤。PT100 的灵敏度大约是 0.385Ω/℃若激励电流为 1mA温度每变化 1℃ 对应的电压变化只有 0.385mV。12 位 ADC 在 3.3V 基准电压下一个 LSB 大约是 0.8mV简单除一下就知道量化误差本身就对应差不多 2℃。这还没算参考电压漂移、电源纹波和引脚串扰。有些朋友说那我用 MCU 内置的 PGA 或者过采样不就行了先不说内置 PGA 增益和噪声指标远不如独立 ADC过采样确实能提高有效分辨率但无法解决参考电压不稳定的问题更无法处理热电偶这种微伏级信号。于是工程上做高精度测温几乎无一例外要外挂高分辨率 ADC。ADS122U04IPWR 这一类芯片存在的意义就是把“信号调理 模数转换 数据输出”整套脏活累活包下来MCU 只负责结果加工。1.2 ADS122U04IPWR 的核心能力拆解这颗 ADC 最值得说的有三块。第一是前端模拟链路4 个输入通道可配置成差分或单端内部集成可编程增益放大器 PGA增益从 1 到 128 可调。这个 PGA 对热电偶测量是决定性的因为 K 型热电偶的灵敏度只有约 41μV/℃若不放大再好的 ADC 也白搭。第二是内部集成了两个可编程激励电流源 IDAC输出从微安级到毫安级可调。做 RTD 测量时不再需要外部搭恒流源电路直接用 IDAC 给传感器供电再配合精密电阻做比例式测量。第三才是它最特殊的地方通信接口直接暴露为 UART 从机主机按帧格式发命令、收数据而且支持较高的波特率实时性完全够用。芯片本身工作电流在微安级别非常契合 HVAC 这类长期带电运行的设备。别忘了它内部还有一个温度传感器可以用来做热电偶冷端补偿参考或者做系统自检。后面我会说到实际工程里我更倾向于外接 NTC 做冷端测量原因到时候细讲。1.3 STM32F722VE 在这个项目里的定位STM32F722VE 是 STM32F7 系列中的一颗中等规模芯片Cortex-M7 内核最高主频 216MHz带单精度硬浮点 FPU。温度换算、滤波、查表插值这些算法里全是浮点运算M7 的 FPU 能把计算耗时压到微秒级这对需要同时跑多通道采集、显示刷新和通信协议的设备来说非常关键。选它还有几个次要但实际的理由。LQFP100 封装下外设资源充裕多个 UART 可以分配给 ADC、RS485 和调试口512KB Flash 不仅能装下完整的通信协议栈还能存多组标定参数和线性化查表数据。项目后期如果要把数据上传到楼宇自控系统这颗芯片还带以太网 MAC扩展空间也留出来了。1.4 同场竞技为什么不选其他方案为了说明选型逻辑我整理了一张对比表都是实际项目里被反复比较过的方案方案优势劣势适用场景MCU 内置 12 位 ADC成本最低电路最简单精度差参考电压不稳精度要求 ±2℃ 以上的粗略监测ADS111516 位 I2C便宜I2C 时序简单无内置 PGA 配合热电偶吃力增益误差偏大0.5℃ 精度要求的低成本场合ADS1220 / ADS1232SPI性能稳定资料多需要 MCU 做 SPI 时序和通信调度已有成熟 SPI 驱动代码的团队ADS122U04IPWR STM32F722VEUART 通信省心PGA/IDAC 齐全芯片单价略高需要理解其专属命令帧多传感器、RTD/热电偶混合、工业现场MAX31865 等专用 RTD 芯片集成度极高上电即测只能测 RTD无法扩展热电偶只用 PT100/PT1000 的固定场景综合看下来ADS122U04IPWR 的优势在于一芯多用RTD 能测、热电偶能测、NTC 也能测配合 STM32F722VE 的算力一套硬件平台就把工业现场和 HVAC 的常见温度传感器类型全部覆盖了。2. 传感器链路设计从探头到 ADC 引脚的完整路径2.1 RTD 接法三线制是工业基础四线制是精度上限PT100 这类电阻式温度传感器的接线方式直接影响最终精度。两线制最简单但引线电阻全部叠进测量结果里。算个账现场走 20 米 0.5mm² 的铜导线来回 40 米电阻少说也有 1.5Ω 到 2Ω而 PT100 从 0℃ 到 100℃ 总共才变化 38.5Ω。2Ω 的引线电阻等效出来的温度误差大约是 5℃这在任何控制系统里都是不能接受的所以两线制基本只适合短距离且精度要求很低的场合。三线制是工业现场的主流做法。原理上两个 IDAC 分别从传感器两端供电ADC 测量 RTD 两端的差分电压和参考电阻上的电压通过两次测量做差就能把等长引线的电阻抵消掉。工程上要求传感器到 ADC 的引线尽量等长、同材质、同线径这样共模的引线电阻才能被完美对消。我用三线制在现场实测20 米线缆下依然能保持 0.1℃ 级别的稳定度。四线制又叫开尔文接法理论上可以把引线影响降到接近零但代价是线缆成本翻倍。我的建议很直接现场布线能用三线制就用三线制只有实验室计量、或者对精度有极致要求的特殊工位才值得上四线。激励电流的选择同样有讲究。PT100 在 1mA 的激励下0℃ 时功耗约 0.1mW对常见封装的传感器来说自热温升大约在 0.02℃ 到 0.05℃基本可以忽略。如果把电流加到 5mA功耗变成 2.5mW自热可能拉到 0.5℃ 甚至更高这就是不可接受的误差了。所以我在这套系统里默认把 IDAC 设在 0.5mA 到 1mA宁可让信号小一点也要把自热压住。2.2 热电偶测量放大和冷端补偿两个致命细节热电偶本质上是一个电压源K 型热电偶在 0℃ 到 100℃ 范围内输出电压大约 0 到 4.1mV就算测到 1000℃也只有约 41mV。这个信号不经过 PGA 放大根本无法让 24 位 ADC 发挥出应有的分辨率。ADS122U04IPWR 的 PGA 增益设置到 32 或 64配合内部基准可以把热电偶的全量程信号映射到最佳输入范围内实测下来峰峰值噪声能控制在很小的水平。冷端补偿是另一个绕不过去的话题。热电偶测出来的是测量端和冷端接线端子处的温差电势如果不测冷端温度端子处温度变化 1℃整个测量结果就偏 1℃。工程里常见的错误是把冷端传感器贴在 PCB 上但端子通过长导线连到远处导热路径太长冷端传感器测到的温度和实际端子温度完全对不上。我的做法是在端子排下面垫一块铜排或铝排做等温块把冷端 NTC 紧贴在端子根部让热电阻和热电偶端子尽量处于同一温度场。ADS122U04IPWR 内部虽然也有温度传感器但它测的是芯片自身管芯温度离接线端子物理距离太远中间还有铜箔散热路径误差不好控制。所以冷端补偿我坚持用外接 NTC在固件里做电压查表换算用实测数据做多项式拟合冷端测量精度能做到 ±0.2℃。2.3 HVAC 场景里的 NTC 与 PT1000 取舍HVAC 行业对成本极其敏感水系统和风系统里大量使用的是 NTC 热敏电阻和 PT1000。NTC 10kΩ B3950 是绝对的主流价格便宜、响应快、灵敏度高在 25℃ 附近每变化 1℃ 阻值大约变化 4%对 ADC 的挑战反而比 PT100 小得多。缺点是非线性严重但有了 STM32F722VE 的算力查表和线性插值完全不是问题。PT1000 则出现在对精度要求更高的风管温湿度传感器和冷冻水回水温度测点上。它的基础电阻是 1000Ω引线电阻占比更小两线制也能凑合用配合 24 位 ADC 做出来的系统长期稳定度很可观。另外提一句HVAC 的深度控制经常要算露点也就是干球温度加相对湿度推露点温度用 Magnus 近似公式就能算。这里多嘴说明一点露点计算的输入温度若来自 NTC那么 NTC 的线性化精度就直接决定了露点结果的可信度所以 HVACS 现场通道的测温链路同样值得认真对待。3. 电路设计与 PCB 布局24 位精度的生死线3.1 电源和基准干净干净还是干净24 位 ADC 对电源的敏感程度远超一般人的直觉。工业现场如果直接拿 24V 开关电源的输出给模拟部分供电那读数上的跳动幅度会让你怀疑芯片是坏的。我的做法是24V 先过一级 DC-DC 降到 5V再用低噪声 LDO 降到 3.3V 给模拟部分供电。选 LDO 时看电源抑制比和输出噪声像 LP5907 这类超低噪声器件就很合适。ADS122U04IPWR 的内部基准虽然是集成的但基准引脚旁边的去耦电容必须按手册参数紧贴引脚放置。我见过不少板子把电容放远了半厘米结果噪声明显劣化。如果做比例式测量也就是用外部精密电阻做参考那么基准路径上任何一根走线杂散电感或者地弹噪声都会直接进入测量结果这部分布局优先级是最高的。3.2 输入滤波和保护先让信号活下来再谈精度温度传感器探头的线缆在工业现场很容易耦合各种干扰。RTD 和热电偶的输入前端我做了三件事一是进 ADC 之前加 RC 低通滤波用 100Ω 配 100nF 是最常用的组合截止频率大约 16kHz既能滤掉大部分高频干扰又不会对几十 Hz 的温度信号造成影响二是在传感器线入口处并联 TVS 管防静电和浪涌三是针对室外长距离走线加了共模电感。这里有个容易踩的坑RC 滤波电阻不能选太大。24 位 ADC 的输入漏电流虽然很小但若电阻用到 10kΩ 级别漏电流在电阻上产生的压降会造成不可忽略的偏置误差而且这个误差还随温度变化。所以滤波电阻我一般控制在 1kΩ 以内和滤波电容搭配后既有效又不会引入新的系统误差。3.3 布局布线模拟地与数字地的实际处理很多人一说到 ADC 布线就要求模拟地数字地彻底分开但真正单点接地怎么接手册里往往含糊。我的实践经验是在 ADC 芯片下方把模拟地平面和数字地平面用一个窄桥连起来所有模拟信号的参考回路都回到这一侧的 AGND所有数字信号回 DGND。STM32F722VE 的数字部分和 ADC 的数字接口尽量远离模拟输入引脚。输入走线还有一条军规绝对不要和 PWM、开关节点、通信线平行走长距离。我原版布线时把一路传感器线从电机驱动板的 PWM 线旁边过读数跳动超过 ±20 个 LSB重新布板拉开距离后噪声立刻降到 ±2 个 LSB。温度信号本身就是缓变信号抗干扰能力天然弱布局上的一点点讲究换来的是长期稳定的读数非常值得。4. 固件实现从原始码到工程温度值的换算链4.1 UART 命令链路先把通信打通ADS122U04IPWR 是 UART 从机主机必须主动发命令它才会响应。具体命令字节我不在这里逐个列数据手册写得很清楚重点是理解它的通信模型主机发命令帧、ADC 返回数据帧帧结构包含起始位、数据位、停止位可以配校验和。实际项目中我强烈建议把波特率固定在 460800 或更高不要为了省事用 9600因为多通道连续采样时低速波特率会拖慢数据刷新率。STM32F722VE 侧我用的是 DMA 空闲中断接收。ADC 返回数据是定长的但主机无法精确预知每个字节到达的时刻空闲中断可以在数据帧结束后自动触发配合 DMA 直接搬运到内存缓冲区CPU 占用几乎为零。还要在协议层加超时重试机制如果发送命令后超过规定时间没收到完整帧就要重新发起通信防止偶发干扰导致的数据失步。4.2 原始码到电阻值比例式测量的妙处RTD 测量如果用内部基准直接测电压等于默认内部基准是绝对准确的但实际上基准电压会随温度和供电漂移。比例式测量的思路是让同一个 IDAC 电流既流过 RTD也流过一颗精密参考电阻ADC 以参考电阻两端的电压为基准分别测量 RTD 电压和参考电阻电压的比值。这样得到的 RTD 电阻值为R_RTD R_REF × (Code_RTD / Code_REF)电流源的绝对值被完全消掉了基准电压的漂移也被约掉了只剩参考电阻本身的温漂影响。这个测量方案在精密测温里的地位怎么强调都不过分。选参考电阻时用低温漂、高精度的金属箔电阻比如 6.8kΩ 0.1% 25ppm/℃这样整个系统的稳定性骨架就立住了。4.3 电阻到温度查表插值和多项式计算的取舍拿到电阻值之后PT100 转温度有两个常见路线直接解 Callendar-Van Dusen 方程或者查表加线性插值。CVD 方程在 0℃ 到 850℃ 范围用简化式R(t) R0 × (1 A×t B×t²)其中 R0100ΩA3.9083e-3B-5.775e-7。反解这个二次方程可以写进固件里float pt100_res_to_temp(float r) { const float R0 100.0f; const float A 3.9083e-3f; const float B -5.775e-7f; float c 1.0f - r / R0; float t (-A sqrtf(A * A - 4.0f * B * c)) / (2.0f * B); return t; }这个公式在 0℃ 以上精度非常高0℃ 以下因为 CVD 方程有 C 项需要做迭代或直接查表。我实际项目里是查表为主把 -50℃ 到 200℃ 每隔 5℃ 用一个电阻值建表再在相邻两点之间做线性插值。STM32F722VE 有 FPU 和很强的 Flash 访问能力每次换算耗时可忽略而且查表法天然覆盖低温区的非线性问题。4.4 滤波策略针对温度信号的三种处理温度信号本质上是缓变信号基本能量都集中在低频段但现场会叠加高频干扰脉冲。我在这套系统里用了三级处理先做滑动平均再做中值滤波最后加一阶低通滤波平滑输出。滑动平均窗口选 16 点在 20SPS 的数据速率下大约需要 0.8 秒稳定时间HVAC 水系统完全接受如果用在工业报警场景可以把数据速率提到 1000SPS 以上。关于工频干扰ΔΣ ADC 内置的数字滤波器在数据速率的整数倍处有陷波点选择 50Hz 整数倍的数据速率可以天然压制工频。如果现场混有变频器的高频噪声我还会在软件里加一个 20Hz 的低通滤波让最终输出曲线保持平滑。这些滤波参数最好做成可配置项HVAC 和工业现场的响应速度要求完全不同。5. 校准、验证与实测数据5.1 校准基准怎么搭电阻箱比水浴更可控很多入门工程师喜欢用冰水浴做 0℃ 校准听着很标准实际操作又是打冰又是保温重复性还差。我更推荐用精密电阻箱直接模拟 RTD电阻箱精度做到 0.01%比冰水浴的重复性好得多而且随时可以回到任意温度点。热电偶标定则用干井炉配合标准探头把标准探头和被测探头绑在一起插进同一个恒温块做多点比对。5.2 两点校准的完整流程两点校准的目的是消除放大链路里的增益误差和偏移误差。我在 0℃ 对应的 100Ω 和 100℃ 对应的 138.51Ω 两个标准点上分别记录 ADC 换算出来的电阻值和标准值的偏差然后做一次线性校正。校正模型很简单T_corrected Scale × T_raw Offset。把两个点的数据代进去解二元一次方程组就能得到 Scale 和 Offset。得到的参数存进 STM32F722VE 的 Flash 预留区每次上电时加载。这里有个提醒Flash 的擦写次数有限标定参数要用“读取-修改-写入”的方式管理不要在设备运行时频繁回写。5.3 实测精度和误差来源分析用 0.01% 精密电阻箱模拟 PT100 做端到端验证实测一组数据如下标准温度标准电阻系统读数误差0.0℃100.00Ω100.01Ω0.01Ω约 0.03℃25.0℃109.73Ω109.76Ω0.03Ω约 0.08℃50.0℃119.40Ω119.38Ω-0.02Ω约 -0.05℃75.0℃129.01Ω128.98Ω-0.03Ω约 -0.08℃100.0℃138.51Ω138.49Ω-0.02Ω约 -0.05℃这个精度在 RTD 测温系统里已经属于很好的水平。真正现场接上传感器后误差会略大一点因为引线电阻、端子接触电阻和传感器自身互换性都会叠进来。需要注意误差里占比最大的往往不是 ADC而是传感器本身的精度等级比如 PT100 的 A 级允差是 ±0.15℃B 级是 ±0.3℃就算采集链路零误差传感器自身误差也摆在那里。6. 现场实战记录那些年踩过的坑6.1 读数乱跳从 ±20 LSB 到 ±2 LSB第一版 PCB 布完上电ADC 读数在室温下跳得离谱峰峰值超过 ±20 个 LSB换算成温度大约 0.1℃ 到 0.2℃。排查下来发现是传感器输入走线和一路 PWM 风扇控制线在 PCB 背面平行走了约 4 厘米。把 PWM 线移到另一层并用地平面隔开后噪声立刻降到 ±2 个 LSB。这件事给我的教训是任何高速开关信号都是模拟链路的敌人布线阶段宁可绕远路也不要贪近。6.2 温度整体偏高IDAC 自热并不遥远设备上电运行半小时后读数稳定在一个比实际环境温度高约 0.3℃ 的位置。一开始怀疑是传感器探头质量问题后来把 IDAC 电流从 1mA 降到 0.5mA读数立刻降了 0.25℃说明是传感器自热。工业现场的传感器很多封装在金属套管里散热条件比实验室差很多0.1mW 都可能带来可感知温升。所以现场用的激励电流能小则小若信号幅度确实不够优先调大 PGA 增益而不是加激励电流。6.3 UART 偶发丢帧时钟源和中断优先级都要查系统连续运行几天后偶尔会出现某次读取数据完全错误的现象。排查后有两个原因叠加一是 STM32F722VE 的 UART 波特率依赖系统时钟如果直接从 HSI 启动频率偏差可能达到 1% 以上高速率下就会丢帧二是 ADC 数据接收中断被别的中断卡住时间过长导致 UART 溢出。解决办法是把系统时钟切换到 HSE 外部晶振并把 UART 接收中断提到最高优先级同时协议层加了 CRC 校验和失败重发机制。6.4 从 HVAC 到工业现场的扩展思考最后提一下这套方案的扩展性。HVAC 项目里 ADC 和 MCU 通常是同一块 PCB但到了工业电机控制柜里模拟前端和主控之间往往隔着几十厘米甚至几米。得益于 ADS122U04IPWR 的 UART 接口我可以把 ADC 单独做成一块小前端板直接放在传感器端子旁边UART 信号经过数字隔离芯片拉到主控板。长距离传输时再在 UART 后面接 RS485 收发器这样整套固件和算法基本不用改只是换了下物理层架构上的灵活性正是当初选这颗带 UART 接口 ADC 的最大回报。我个人在这套系统上最大的体会是高精度温度采集的瓶颈从来不在那颗 24 位 ADC 上而在传感器热路径设计、激励电流的自热管理、接地的干净程度这些“土”问题里。ADS122U04IPWR 和 STM32F722VE 只是给了你足够的硬件上限能不能把精度做实取决于你有没有把每一个细节都按它对物理世界的要求去对待。希望这篇记录能帮你少走一些我走过的弯路。