news 2026/11/5 5:05:08

ADS122U04+TM4C1294多通道工业温度采集方案

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ADS122U04+TM4C1294多通道工业温度采集方案

这几年做工业温度采集,手头项目里最常用的一对组合就是 ADS122U04IPWR 和 TM4C1294NCZAD。前者是一颗自带 24 位 Δ-Σ ADC 的模拟前端,后者是一颗工业级 Cortex-M4F 主控,两颗芯片搭在一起,能把 HVAC 温控系统、工业过程控制里的温度信号,从传感器那一端一直处理到上位机通信口。这篇文章就是围绕这个方案,把整体思路、模拟链路设计、固件实现和现场调参时踩过的坑完整捋一遍。适合正在做多通道温度采集、RTD/热电偶信号调理,或者想用独立 ADC 代替单片机内置 ADC 的工程师参考。

1. 方案整体思路:为什么是“精密ADC + 独立MCU”

1.1 温度测量场景的现实约束

先说说工业和 HVAC 场景里温度测量到底难在哪。传感器本身的非线性和长线缆引入的噪声是一方面,更麻烦的是系统里还跑着压缩机、风机、变频器这类强干扰源,而这些设备恰恰又和温度采样点挨得很近。如果把温度采集交给 MCU 内置 ADC 去做(比如 TM4C1294 内置的 12 位 ADC),结果往往是读数跳动几百个 LSB,精度和稳定性都不够看。而温度信号本身变化慢,却对分辨率和稳定性要求极高,这就决定了它天然适合外挂一颗高精度、带数字滤波器的过采样 ADC。

1.2 两颗芯片的分工逻辑

ADS122U04IPWR 负责所有模拟信号处理:4 路多路复用输入可以接 RTD、热电偶或者 NTC,内部集成了可编程增益放大器 PGA、两颗激励电流源 IDAC 和精密基准源,24 位分辨率足够把微伏级的传感器信号挖出来。TM4C1294NCZAD 则负责系统控制:初始化 ADC、轮询转换结果、做线性化补偿、跑控制算法、驱动显示屏或者上报数据。它自带 1MB Flash、256KB SRAM、多个 UART/以太网口,跑一个完整的温度监控节点绰绰有余。

很多工程师会问:现在很多 MCU 不是也带 24 位 ADC 了吗?确实有一些高端 MCU 集成了高精度模拟前端,但成本和供货灵活性往往不如“独立 ADC + 通用 MCU”的组合。尤其当项目需要 4 路温度采集、不同传感器混接时,ADS122U04 灵活的输入多路复用器和两个 IDAC 能省去大量外部运放和恒流源电路,这是集成方案很难替换的优势。

1.3 选择 UART 接口的实际意义

ADS122U04 这个型号最大的特点是 UART 接口,这也是它和自家兄弟 ADS1220 最大的区别。SPI 接口需要额外管理 CS 时序,线缆一长容易受串扰;UART 只有 RX、TX 两条线,逻辑简单,对主控的引脚占用也更少。而且 UART 可以当作普通串口调试口去抓包分析,主机只要按波特率发命令就能读数据,排查问题非常方便。代价是通信速率上限不如 SPI 高,可温度转换本身是个慢过程,哪怕最高数据速率 2000SPS 也完全够用。

注意:ADS122U04 是 UART 从机,MCU 是主机。MCU 必须严格按照时序发命令,ADC 才会响应。任何波特率不匹配或总线空闲电平配置错误,都可能导致通信完全无响应,这一点后面专门讲。

2. 模拟链路设计:从传感器信号到数字码值的几个关键环节

2.1 传感器选型与输入方式

温度传感器的选择基本决定了整个前置电路的复杂度。我按工程经验列一张对照表:

传感器量程精度水平信号幅值电路复杂度典型场景
Pt100/Pt1000-200~850℃高,0.1℃量级毫伏级,随激励增大简单,需恒流激励工业管道、HVAC 冷媒温度
热电偶-200~1300℃+中,冷端补偿是关键微伏~数十毫伏中,需 CJC锅炉烟道、高温设备
NTC 热敏电阻-50~150℃低~中,非线性严重数十毫伏~伏级简单室内温控、低成本 HVAC

HVAC 场景里,室内回风温度、送风温度用 NTC 就够,成本低、灵敏度高,但 25℃ 以上线性度差,得靠查表法补偿。冷媒管壁温度、压缩机排气温度则建议用 Pt1000,抗腐蚀、稳定性好,测量精度能撑住整个系统能效计算的误差预算。

输入通道的接法上,RTD 和热电偶强烈建议用差分输入,也就是 AINP/AINN 一对。单端接法虽然省引脚,但长线上共模干扰、地环路电流都会直接叠进信号里。ADS122U04 的多路复用器可以灵活配置每个通道是差分还是单端,项目设计阶段就尽量把所有温度点都规划成差分方式。

2.2 RTD 激励方法:两个 IDAC 才是精髓

RTD 本身是电阻,必须给它施加一个激励电流,让它两端的压降成为可测信号。用电压源分压给 RTD 供电当然可以,但电源电压的波动会直接变成测量误差。ADS122U04 内部集成了两个可编程电流源 IDAC1 和 IDAC2,输出电流从 10μA 到 1.5mA 可调,这才是这颗芯片最好用的地方。

最标准的接法是比例测量:IDAC1 的电流流过 RTD 后,同一个电流再流过一只高精度基准电阻 R_REF。ADC 的参考电压输入 REFP/REFN 直接跨接在 R_REF 两端。这样测得的数字码值只取决于 RTD 阻值和 R_REF 的比值,与激励电流的绝对值几乎无关。IDAC 电流即使随温度漂移了 1%,由于输入电压和基准电压按同样比例变化,最终码值基本不受影响。

举个例子,用 IDAC 设置为 500μA,R_REF 选 2.7kΩ 精密电阻,那么 REFP/REFN 之间的基准电压大约 1.35V。Pt100 在 0℃ 时阻值 100Ω,输入电压 50mV;250℃ 时阻值约 194Ω,输入电压约 97mV。选 PGA 增益 4 时,ADC 满量程对应 337.5mV,即使测量最高温也保留了三倍以上的裕量,而 24 位分辨率折算到温度,依然有百万分之几的量化精度,真正限制性能的早就不是分辨率而是噪声了。

2.3 三线制 RTD 消除导线电阻误差

两线制接法简单,但导线本身有电阻,而且导线电阻随环境温度变化。比如 100m 长铜线线阻可能有 5~10Ω,对 Pt100 来说这个误差等效于十几摄氏度,完全不可接受。

工业现场常用三线制:RTD 两端接出三根规格相同的导线。ADS122U04 的双 IDAC 结构正好可以在这里发挥作用。一路 IDAC 给 RTD 通电,另一路 IDAC 给基准电阻通电,同时把导线的压降引入差分输入和基准电压中,经过比例测量,导线电阻引起的误差会被消掉一大半。具体实现时需要在输入多路复用器和 IDAC 路由寄存器里做好配置,让电流路径和差分采样点覆盖同一段导线。

如果追求最高精度,就上四线制。四线制的激励电流线与被测电压线完全分开,电压采样回路里几乎没有电流,导线电阻对精度的影响从原理上被消除了。HVAC 项目中三线制已经足够,工业计量级项目建议四线制,代价是多一根线缆的敷设成本。

2.4 增益、数据速率与工频干扰的权衡

PGA 增益怎么选,很多新手容易拍脑袋。原则是让最小信号放大后尽量接近满量程,但绝不能超量程。对于上述 50~97mV 的 RTD 信号,PGA=4 比较合适;如果只测 0~100℃(50~69mV),PGA=8 分辨率更好;要是量程覆盖 -50~400℃(80~256mV),PGA=2 才有足够余量。这个权衡其实就是满量程电压 VREF/PGA 与最小可检测电压之间的博弈。

数据速率和数字滤波密切相关。Δ-Σ ADC 内部有数字低通滤波器,速率越低对带外噪声和工频干扰的抑制越强。20SPS 档位能对 50Hz 和 60Hz 都形成较强的衰减,相当于内置了一个工频陷波器。HVAC 现场供电就是 50Hz,周围变频器开关噪声动不动几伏跳变,我习惯把采样率定位在 20SPS,再在 MCU 侧做一次 16 次滑动平均,效果比单纯提高采样率好得多。如果是在实验室环境,可以考虑 100SPS 或更高,但现场长期跑下来,低速率才稳。

3. TM4C1294 固件实现与温度换算方法

3.1 UART 接口通信与寄存器配置

TM4C1294 和 ADS122U04 之间就是普通 UART,波特率我常用 115200。ADS122U04 上电后默认定时转换模式,也可以由 MCU 发命令触发单次转换。实际项目中我更喜欢单次转换模式:MCU 发一条开始命令,等 ADC 转换完成后再读数据,这样便于和传感器轮询逻辑对齐。

ADS122U04 的寄存器组一共四个,分别是输入多路复用器与增益配置、数据速率与工作模式、基准源与 IDAC 电流选择、IDAC 路由与额外功能。以 RTD 测量为例,核心配置如下:

// 寄存器0:AIN0=AINP,AIN1=AINN,差分输入,PGA增益4 // 寄存器1:数据速率20SPS,正常工作模式 // 寄存器2:使用外部基准REFP/REFN,IDAC电流500uA // 寄存器3:IDAC1路由到AIN0,IDAC2路由到AIN1(或专用引脚)

写寄存器是标准的多字节帧,MCU 发送固定格式的写命令地址和数据字节,ADC 完成写入后返回响应帧。读取转换结果时先发读取命令,再收取 3 字节的 24 位补码数据。如果是轮询模式,还需要读状态字节判断数据是否更新。

3.2 温度换算核心公式与代码实现

很多人拿到 24 位码值不知道怎么变成温度,这里必须把比例测量的公式理清楚。ADS122U04 的输出码值是二进制补码,满量程码为 2^23。由于输入电压是被 PGA 放大后才送入调制器的,而基准电压是 R_REF 上的压降,RTD 阻值可以这样算:

[ R_{RTD} = \frac{code + 0x800000}{2^{23}} \times \frac{R_{REF}}{PGA} \times R_{CAL} ]

实际工程中温度换算更常用查表法配合分段线性插值,因为 Pt100 的阻值-温度关系是标准化的,查表法精度可控、代码直观。如果追求全量程精度,用 Callendar-Van Dusen 方程最合适。0℃ 以上温度 T 和阻值 R 的关系简化为:

[ R(T) = R_0 \times (1 + A T + B T^2) ]

其中 R0=100Ω,A=3.9083e-3,B=-5.775e-7。反解出温度:

double rtd_resistance_to_temperature(double rtd_ohm) { const double R0 = 100.0; const double A = 3.9083e-3; const double B = -5.775e-7; double ratio = rtd_ohm / R0; if (ratio >= 1.0) { // 0℃以上,直接求根 double disc = A * A - 4.0 * B * (1.0 - ratio); if (disc < 0) return NAN; return (-A + sqrt(disc)) / (2.0 * B); } // 0℃以下,包含C项的三次方程理解较麻烦, // 工程上我更推荐用二分法配合阻值-温度表。 return lookup_table_interpolation(rtd_ohm); }

注意 0℃ 以上这个反解公式已经能覆盖大部分 HVAC 和工业常温测量场景。负温段(比如冷媒温度 -30℃)必须用带三次非线性项的完整 CVD 公式或者查表法,否则误差会到零点几度。查表法不需要求解复杂方程,只要把 PT100 分度表按 1℃ 间隔做成 const 数组,再用二分查找加线性插值,精度轻松到 0.01℃ 量级,缺点是占用一点 Flash——TM4C1294 有 1MB Flash,根本不用省。

3.3 系统级轮询与数据诊断

TM4C1294 端的固件框架不复杂,核心是状态机:空闲状态发开始转换命令,等待转换完成中断或标志位,读取码值,换算温度,然后进入下一个通道。四个通道轮流巡检,即使每个通道都按 20SPS 采样,整个周期也就 200ms 左右,对温度闭环完全够用。

比较容易被忽略的是断线检测。RTD 开路时,IDAC 电流没有回路,输入电压会直接打到负满量程或正满量程,码值表现为 0xFFFFFF 或 0x800000 附近的饱和值。我一律在固件里做了判断:当码值小于某个阈值或大于某个阈值时,直接上报传感器故障,而不是显示一个离奇的温度。比如 0℃ 时码值大约在满量程的 14% 左右,断线时是满量程,很容易识别。

4. 现场问题与排查技巧实录

4.1 通信异常:一帧都读不出来怎么办

ADS122U04 最常见的故障就是 MCU 发命令后没有任何响应。出现这个问题,首先要查电压域匹配。TM4C1294 是 3.3V 逻辑,如果 ADS122U04 直接由 5V 供电,其 UART 高电平阈值接近 4V,3.3V 的电平很可能判断不到有效高电平。这种情况要么让 ADC 也跑 3.3V(在允许范围内),要么在 UART 线上加电平转换。

另一个坑是上电时序。ADS122U04 的复位或启动需要一定时间,MCU 如果上电后立刻发命令,ADC 还没准备好,命令会被丢弃。我习惯在初始化 UART 前先延时 100ms 以上,然后再发一个复位命令,等 ADC 返回响应后再进入正常配置流程。之前有同事为了省 100ms,把这段延时去掉,结果有约两成设备上电后通信失败,问题就在这。

4.2 读数跳动大:先区分噪声来源

温度读数不稳定,排查方向要分层次。先用金属短接块短接差分输入端,看码值是否稳定。如果短接后码值稳定,说明 ADC 本身没问题,干扰来自外部传感器或长线。如果短接后码值也在跳,那问题可能是电源纹波、基准电阻或者 PGA 设置。

现场工况下,变频器和继电器是最大的干扰源。处理手段首先是让传感器线缆远离动力线,并采用屏蔽双绞线,屏蔽层单端接地。其次是 ADC 的 AVDD 供电,最好用独立的 LDO,不要在数字电源后面串个电阻就完事。ADS122U04 的 REFP/REFN 引脚之间的走线要尽量短,R_REF 电阻最好用温度系数低于 25ppm 的精密电阻,因为它是基准电压的一部分,它的漂移会直接折算进温度误差。

4.3 PCB 布线与自热效应的经验教训

ADS122U04 这类高精度 ADC 对 PCB 布局很敏感。模拟输入走线要走成差分对,路径尽量对称,避免形成环路面积。R_REF 要靠近 REFP/REFN 引脚,并且周围用地铜皮包裹,减少热电势影响。AVDD、DVDD 的滤波电容要放在芯片电源引脚正下方,走线先过电容再进芯片。

IDAC 激励电流过大时,RTD 自身会发热,这就是自热效应。比如 1mA 电流流过 100Ω Pt100,发热功率 0.1mW,在静止空气中可能引起 0.2℃ 以上的温升。HVAC 管道里空气流速高,散热好一些,但也建议激励电流控制在 500μA 以下。如果现场传感器露在外面,而管道里流速很低,更要把电流调小,让传感器尽量反映真实介质温度。

4.4 热电偶冷端补偿的连线技巧

如果现场需要接热电偶,冷端补偿是绕不过去的坎。ADS122U04 内部自带一个温度传感器,可以用来估算结温,但我更推荐在接线端子附近放一颗数字温度传感器测冷端温度,或者用 NTC 紧贴接线端子做冷端补偿。补偿精度取决于冷端传感器与热偶冷端的热耦合程度,两者必须贴得非常近,最好共用一块铜质接线段子,避免两面有温差。

热电偶信号非常微弱,K 型热偶大约 40μV/℃,24 位 ADC 处理它没有压力,但 PGA 增益要选大一些,建议 64 或 128 档。输入滤波电容不可省,在 AINP/AINN 各串一个 10kΩ 电阻,再对地并一个 1nF 电容,构成射频低通滤波。这里注意串阻不能太大,否则和 PGA 输入偏置电流相互作用会引入额外的电压误差,这个我在调试时一度被折腾了很久。

最后补充两点个人经验

这套方案我在 HVAC 机组控制器和工业设备健康监测项目里用过多次,最深的感受是:硬件连接正确只是起点,真正决定精度的往往是那些不起眼的细节。比如基准电阻的温度系数、传感器线缆的屏蔽接地、激励电流大小带来的自热效应,每一个都可能吃掉本该属于 24 位 ADC 的精度。

调试顺序上建议分步走:先单独测 UART 通信,把寄存器读写跑通;再短接输入测零点;然后接固定精密电阻代替 RTD 验证换算公式;最后才接真实传感器做整机标定。每步都确认数据符合预期再往下走,别指望一次把模拟链路、数字通信和固件算法全部调通。

如果后续想扩展,这套硬件还能同时接入 NTC 和热电偶通道,把 HVAC 的室内温湿度、管道温度、压缩机温度统一到一个采集板。四输入通道用满,一块 TM4C1294 板子管理整套系统绰绰有余。

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

ADS122U04+RA2L1高精度PT100测温方案:UART接口与抗干扰设计

/* 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 5:03:45

基于ADS122U04IPWR与STM32F207ZG的工业测温方案全解析

/* 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 5:02:46

工业温度测量方案:ADS122U04IPWR与PIC18F47Q10高精度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 5:01:58

ADS122U04与STM32F439实现高精度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 5:00:54

ADS122U04IPWR工业温度测量实战:高精度信号链设计与STM32协同

/* 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 5:00:06

基于ADS122U04与dsPIC30F的高精度温度采集系统设计

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

作者头像 李华