☰
基于ADS122U04与TM4C129的工业多通道高精度温度采集方案设计
2026/11/4 1:05:42 网站建设 项目流程

做工业温控和HVAC项目的人,对温度测点应该都有同感:系统里几十上百个模拟量,真正决定产品性能的往往是那几路温度。RTD、热电偶、热敏电阻各有各的脾气,现场又有变频器、动力线、地环路各种干扰,想稳定测得零点几度,光有传感器远远不够。我这次搭了一套基于ADS122U04IPWR和TM4C129XKCZAD的温度测量方案,目的是满足工业现场和 HVAC 场景下的多通道高精度采集需求。ADS122U04IPWR 是 TI 的 24 位 delta-sigma ADC,自带 UART 接口,四通道差分/单端输入,非常适合挂在控制板外面做分布式采集;TM4C129XKCZAD 则是带 Ethernet、USB、多路 UART 的 Cortex-M4F 主控。两颗芯片搭配起来,能直接把温度数据变成网络数据,单个节点覆盖一路冷端补偿加多路传感器,整体架构比传统 SPI ADC 拉线进机箱的方式灵活得多。

这篇文章我会把从硬件接法、UART 通信协议、温度计算公式,到校准和现场调试的完整过程写出来,顺便整理一些文档里不会写的经验。如果你正准备做多通道工业温度采集,或者想把模拟前端独立出去、让主控专心跑协议栈,这篇内容可以直接当参考。

1. 项目定位:为什么需要一颗带 UART 的 24 位 ADC

1.1 工业与 HVAC 现场的温度测量难点

工业现场和 HVAC 系统的温度测量,表面看就是"把传感器信号读到 MCU 里",实际落地时会遇到几个共性问题。

第一是传感器种类多。管道上可能用 PT100 铂电阻测冷冻水回水温度,风道里用 NTC 测送风温度,压缩机排气口用 K 型热电偶测高温,这三种传感器的输出特性完全不同:RTD 是阻值随温度变化,热电偶是毫伏级电压信号,NTC 是非线性电阻。如果全部让主控直接处理,ADC 前端电路要做三套,板子面积和成本都扛不住。

第二是信号幅度差异极大。PT100 在 0℃ 时阻值 100Ω,用 1mA 激励电流只产生 100mV 压降;K 型热电偶在 1000℃ 时输出电压约 41mV,常温下只有几十微伏到几毫伏。这种动态范围跨度,普通 12 位或 16 位 SAR ADC 根本不够用,需要高分辨率加可编程增益放大器(PGA)。第三是干扰问题,HVAC 现场有变频器、水泵电机、电磁阀,地电位随时在漂,模拟信号布线稍长一点,采集到的数据就带着工频和高频噪声。

这些问题叠加起来,意味着单纯靠"MCU 内置 ADC + 运放调理"的方案很难做到全方位满足。内置 ADC 位数不够,运放电路要调增益、偏置、滤波,每路传感器都是一次电路设计工作,量一大就失控。

1.2 ADS122U04IPWR 与 TM4C129XKCZAD 的组合优势

ADS122U04IPWR 的核心优势,在于它把"高精度模拟前端"和"数字接口"做了很好的分离。芯片内部集成了 24 位 delta-sigma 调制器、可编程增益放大器(PGA,1 到 128 倍)、温度传感器、内部基准和两个恒流源,四路输入可以任意配置成差分或单端模式。更关键的是它带 UART 接口,MCU 只需要两根线(TX、RX)就能读写所有寄存器,不需要 SPI 的 CS/SCLK/MOSI/MISO 四根线,远距离传输时还可以通过 RS-485 收发器转成差分信号。

TM4C129XKCZAD 在系统里的角色是主控和数据出口。它本身就是 Tiva C 系列的旗舰型号,120MHz 主频的 Cortex-M4F,带浮点单元,做温度算线性化和 PID 计算绰绰有余。外设方面,它有多个 UART、USB、CAN 和以太网 MAC+PHY,温度数据采集进来之后既可以本地显示,也能通过 MQTT、Modbus TCP 或者简单 TCP 协议直接上送。

这套组合的工程价值在于架构清晰:模拟采集部分交给专门的 ADC 芯片,主控不参与毫伏级信号的直接测量,只负责发命令和读取转换结果,抗干扰能力和可维护性都提升一个量级。ADS122U04 的汇编指令风格是典型的 TI 寄存器式控制,整体设计灵活度很高。

2. 硬件电路设计要点

2.1 传感器接法:RTD 与热电偶的通道分配

我这次做的是一个四通道温度采集板,实际配置是两路 PT100 测空调冷冻水供回水温度,一路 PT1000 测风管温度,一路 K 型热电偶测压缩机排气管温度。这种混合配置在 HVAC 系统改造中很常见,所以我把通道分配逻辑讲清楚。

ADS122U04IPWR 有四个模拟输入引脚 AIN0、AIN1、AIN2、AIN3,可以两两组成差分对,也可以各自对 GND 做单端测量。我的接法如下:

  • 通道一:AIN0 接 PT100 差分正端,AIN1 接 PT100 差分负端,使用 IDAC1 恒流源 1mA 激励,电流从 IDAC1 流出经过 PT100,再到基准电阻 R_BIAS 回流入地,同时在 AIN2 上取基准电压。
  • 通道二:AIN2 接另一路 PT100,AIN3 接 PT100 负端,同样 IDAC2 激励。
  • 通道三:AIN1 和 AIN2 临时组合测 PT1000(通过双路复用切换),或者直接用单端方式把 PT1000 挂在 AIN3 上。
  • 通道四:热电偶接在 AIN0、AIN1 上,PGA 设置成 32 倍或 64 倍增益,冷端用 ADS122U04 内部集成温度传感器测芯片附近的温度来补偿。

这里要强调的是,RTD 和热电偶千万不能混用同一组恒流源通道。RTD 需要电流激励,热电偶需要高输入阻抗电压测量,如果把恒流源接到热电偶上,会把热电偶的塞贝克电压直接淹没,读数必然是乱的。ADS122U04 的输入多路复用寄存器(MUX 寄存器)允许每个转换周期切换通道,实际使用时我会分时采集:先扫两路 PT100,再切通道读热电偶,切换之间留出建立时间。

2.2 ADS122U04IPWR 的供电、基准与隔离布局

ADS122U04IPWR 的供电范围是 2.3V 到 5.5V,模拟电源 AVDD 和数字电源 DVDD 建议分开走,虽然芯片内部有电源隔离,PCB 上还是要注意地平面处理。我给的电源方案是:AVDD 和 DVDD 都用 3.3V,只要主控 TM4C129XKCZAD 也是 3.3V 逻辑,UART 电平就能直接对接,不需要电平转换。

基准电压的选择直接决定了测量精度。ADS122U04 内部基准是 2.048V,精度高但温漂参数有限;如果追求更好的稳定性,可以在 REFP0/REFN0 引脚外接精密基准如 REF5025,或者用恒流源加精密电阻的方式。我在 PT100 通道上使用的是外部基准模式:IDAC 电流流过 R_BIAS(低温漂 1kΩ 电阻)产生的电压作为 ADC 参考电压。这样做的巧妙之处在于,激励电流波动会被参考电压同步抵消,最终转换结果与电流绝对值无关,只取决于 PT100 与 R_BIAS 的阻值比例。这是比例式测量(ratiometric)的核心思路,误差源从"电流源精度"变成了"电阻比例",而电阻比例很容易用低温漂电阻做到 0.1% 以内。

隔离方面的经验:HVAC 现场如果有变频器,建议在 ADS122U04 与 TM4C129XKCZAD 之间加数字隔离器,型号我用的 ISO7721,UART 两线各一个通道。模拟部分和数字部分的地用单点连接,模拟电源入口加磁珠和 10uF/0.1uF 电容组合,避免数字噪声串进模拟地回路。

2.3 与 TM4C129XKCZAD 的 UART 连接细节

TM4C129XKCZAD 有多路 UART,我选用的是 UART0,映射到 PA0(U0RX)、PA1(U0TX),通过 ISO7721 连接到 ADS122U04IPWR 的 DIN(数据输入)和 DOUT/DRDY(数据输出/数据就绪)引脚。ADS122U04 的 UART 协议比较特殊,它不是普通的异步串口带帧尾,而是需要通过指令与状态返回值来判定数据是否有效。具体来说:

  • 主机发送 8 位指令字节,ADS122U04 在 SCLK 时钟下,用 UART 波特率匹配的方式回复状态字节或数据字节。
  • 片选 CS 引脚低电平有效,可以在与 ADC 通信前拉低,通信完成后拉高。
  • 数据就绪引脚 DRDY 会输出低脉冲,表示转换结果已准备好,可以作为 TM4C129 的外部中断源或者查询引脚。

连接 TM4C129XKCZAD 的 UART 时,波特率我用的是 115200,8 位数据无校验,1 停止位。ADS122U04 的 UART 接口最需要注意的坑是:它不支持任意波特率,必须按照芯片手册配置;而且主机发送指令后,要等待 ADS122U04 的响应时钟周期,不能连续高速灌命令,否则状态机容易错位。这个过程可以理解为"一问一答"式的访问。

3. 固件侧的关键实现

3.1 UART 命令帧与寄存器操作

ADS122U04IPWR 的寄存器空间不多,核心操作围绕几个寄存器展开:配置寄存器 0(对 PGA、MUX 和输入模式)、配置寄存器 1(基准、转换模式、数据速率)、配置寄存器 2(IDAC 电流大小)、配置寄存器 3(IDAC 输出选择和内部温度传感器使能)。

对芯片下指令时,我封装了几个 C 语言函数,让操作看起来像 SPI 一样清晰:

void ADS122U04_WriteRegister(uint8_t reg_addr, uint8_t reg_value); uint8_t ADS122U04_ReadRegister(uint8_t reg_addr); void ADS122U04_StartConversion(uint8_t mux_setting); uint32_t ADS122U04_ReadData(void);

写单个寄存器时,先发"写寄存器指令码"(例如 0x40 或 0x44 代表不同起始地址),随后发寄存器地址和值。读寄存器时发 0x20 开头的指令,之后芯片会回传寄存器内容。这里有个细节:ADS122U04 的指令响应是带状态字节的,我在调试时第一版程序直接读 DOUT 上的数据流,结果发现返回的第一个字节往往是状态而不是测量数据,后来对照手册才明白芯片会有"状态字节提醒",需要根据状态位判断是转换数据还是寄存器内容。

3.2 配置通道、PGA 与采样速率

这块是整个固件里最需要抠细节的部分。入口是配置寄存器 0 的低三位 MUX 位,用来选择当前激活的输入通道组合。比如 MUX=000 表示 AIN0-AIN1 差分,MUX=001 表示 AIN2-AIN3 差分,MUX=101 表示 AIN1-AIN3 差分等等。在扫描多通道时,需要按顺序切换 MUX 然后启动一次转换。

PGA 增益的设置直接和传感器类型挂钩。PT100 我设置 PGA=1 倍,因为 1mA×100Ω=100mV 的信号经过内部基准后已经足够;热电偶需要 PGA=32 倍或 64 倍,因为 K 型热电偶在常温下电压只有 0.4mV 左右,不放大就浪费了 24 位 ADC 的动态范围。但 PGA 拉高后有效分辨率会下降,手册给出的数据是:PGA=1 时最高有效分辨率约 21.1 位,PGA=128 时约 17.8 位。做暖通温度控制,实际需要的大概 0.1℃ 精度对应 PT100 大约是 0.04Ω,也就是有效分辨率到 16 位就够,所以 PGA 高一点问题不大。

采样速率我使用 20SPS(每秒采样次数),对应 50Hz 工频干扰有很好的抑制效果。ADS122U04 内部有个 50/60Hz 抑制数字滤波器,在 20SPS 模式下对工频的衰减可以达到 100dB 以上。这是选择 20SPS 而不是更高采样率的根本原因,并非为了省电。

3.3 温度值计算与线性化

温度计算公式是整个系统最核心的部分,我分别实现了 PT100/PT1000 和热电偶两套计算逻辑。

对于 PT100,比例测量下的 ADC 转换值 CODE 和电阻值 R_RTD 的关系可以写成:

R_RTD = CODE / (2^24 - 1) × R_BIAS

这里 R_BIAS 是基准电阻,我选用 1.5kΩ 低温漂电阻。得到 R_RTD 后,用 Callendar-Van Dusen 方程做线性化,也就是经典的 ITS-90 多项式逼近。为了不让 MCU 算浮点太吃力,我预先把多项式系数放进常量表:

const float A = 3.9083e-3; const float B = -5.775e-7; const float C = -4.183e-12;

温度在 0℃ 以上时,直接解二次方程即可。在 0℃ 以下需要用到 C 系数做修正,公式做个简单的牛顿迭代也可以。多数 HVAC 场景测的是 0 到 50℃,我只保留 0℃ 以上分支,代码效率高不少。

热电偶计算分三步。第一步,把 ADC 原始码换算成电压:V_TC = CODE / (2^23-1) × (V_REF / PGA)。注意 24 位 ADC 在只使用正输入时是 23 位有效数据,符号位不能参与换算。第二步,加上冷端温度对应的热电势。冷端温度由 ADS122U04 内部集成温度传感器读取,然后查 K 型热电偶分度表得到冷端热电势 E_cold。第三步,查找总热电势 E_total = V_TC + E_cold 对应的温度值。我直接把 NIST 分度表压缩成查找表放进 Flash,二分查找后做线性插值,误差可控制在 0.1℃ 以内。

4. 校准、误差分析与现场调试

4.1 两点校准背后的数学

ADC 再精密,电阻和基准难免有偏差,所以一次实际测量后的校准环节不能省。我做的是两点校准,用精度 0.01% 的标准电阻箱模拟 PT100 在 0℃(100Ω)和 100℃(138.51Ω)下的电阻值,记录下 ADC 输出码,然后计算出实际增益系数和偏置。

校准的核心思想是"把 ADC 码到电阻值的转换关系做线性修正"。实际增益 Gain_actual 和偏置 Offset_actual 可以利用两个标准点的方程求解:

Ω_1 = Gain_actual × CODE_1 + Offset_actual Ω_2 = Gain_actual × CODE_2 + Offset_actual

解出这两个参数后,回写到固件里。每块板子单独校准,把参数存储在 TM4C129XKCZAD 的 Flash 末尾。虽然这样增加了一个生产流程,但好处是能把芯片级增益误差、电阻误差和 PCB 布线电阻统一修正掉。工业产品如果要求全温度范围误差 0.5℃以内,两点校准几乎是必须的。

4.2 冷端补偿与热电偶常见坑

热电偶的冷端补偿是最容易翻车的地方。ADS122U04 内部虽然集成了温度传感器,但那个传感器测的是芯片自身温度,不是真正的热电偶冷端温度。我板子的热电偶输入端在接线端子附近,冷端温度和使用 ADS122U04 内部温度传感器测出的数值可能有 1-2℃ 的差异,对 K 型热电偶来说就是 1-2℃ 的误差。

解决方法是板卡上加一颗精度 ±0.2℃ 的数字温度传感器,比如 TMP117,贴在热电偶接线端子下方,用它做冷端温度源。ADS122U04 内部温度传感器可以作为启动自检的粗略参考,但正式补偿时走外置传感器。另一个坑是热电偶线缆本身是屏蔽线,屏蔽层只能单端接地,防干扰但也要避免形成地环路。现场如果看到热电偶读数不停跳动,很大概率是冷端被风吹着散热不均,或者信号线与动力线太近,这两点排查优先级很高。

4.3 现场调试实录:噪声、地环路与通信不稳

我实际调试时遇到一个低频跳变问题:PT100 通道读数稳定,但热电偶通道总在 ±0.5℃ 之间波动。起初以为是 PGA 增益不够,后来用示波器才发现是热电偶线的屏蔽层在传感器端和板卡端都接地了,形成闭环地环路。解决办法是把传感器端的屏蔽层悬空,只保留板卡端接地,一个点改动后波动立即消失。

UART 通信不稳定位到是一个很隐蔽的坑。最开始用杜邦线把 ADS122U04 和 TM4C129XKCZAD 连接,功能正常;做成 PCB 后偶尔出现寄存器读到 FF 或者 CRC 错。排查后发现问题出在 ISO7721 隔离器的供电上,隔离副边电源用了板卡上的 3.3V,但经过一根细长走线,电流波动导致电平抖动。在隔离器电源脚附近加上 100nF 去耦电容后,问题彻底解决。

另一个高频问题是从机不回复指令。ADS122U04 的 UART 是半双工还是全双工取决于配置,我用的是全双工模式,主机 TX 接芯片 DIN,芯片 DOUT 接主机 RX。要特别注意上电时序,芯片的复位引脚如果和 TM4C129 复位连在一起,TM4C129 复位期间 IO 状态不稳定可能把 ADC 锁死在复位状态。解决办法是 ADS122U04 复位脚独立 RC 延迟,让 ADC 先上电,主机晚 50ms 再初始化 UART。

5. 实测数据、选型建议与后续扩展

5.1 实测指标参考

这次板子在空调风柜现场跑了 48 小时,数据表现供参考:使用标准 PT100 温度校验仪(0.1℃ 精度)作为比对,板载 PT100 通道在 5-45℃ 范围内最大偏差 0.12℃,平均偏差 0.06℃;热电偶通道在 30-120℃ 区间,冷端用 TMP117 补偿后最大偏差 0.4℃。UART 通信在波特率 115200 下连续运行 48 小时无丢帧,CPU 占用率和功耗都很低。这颗 24 位 ADC 的优势是分辨率富余,低速采样下温漂仍然可接受。

需要说明的是,这些数据是特定布线和校准条件下得到的,不同板卡、不同传感器批次会有差异,但至少说明这套方案在 HVAC 这个场景里精度完全够用。

5.2 什么时候该换方案

ADS122U04IPWR 不是万能的。如果你的系统对同步采样要求很高(比如电机保护需要三相电流同步采集),那应该选 ADS131 系列;如果 ADC 要挂在 CPU 旁边,距离很近,用 SPI 接口的 ADS122C04 更省事;如果每块主板上需要 8 路以上温度通道,可以选 ADS124S08。ADS122U04 的优势主要体现在"传感器在现场、主控在机柜、两者之间要走几米线"的场景,UART 接口配合 RS-485 可以很自然地延长传输距离,这是它区别于同类 SPI 芯片的核心价值。

5.3 后续扩展思路

这套硬件我已经在规划扩展:一个是把 ADS122U04 挂到 RS-485 总线上,一个 TM4C129XKCZAD 主机同时管理 8 个采集节点,每个节点 4 通道,系统容量扩到 32 路温度;另一个是把测出的温度数据直接封装成 Modbus TCP 报文,从 TM4C129 的以太网口出去,接入楼宇自控系统。ADS122U04 的 UART 地址匹配功能支持多设备挂在同一条总线上,后续扩展工作量主要集中在协议层,硬件不需要大改。

6. 写在最后的一点体会

这套设计做下来,我最大的感触是"模拟链路不要贪多"。ADS122U04 看起来只是把一个 24 位 ADC 塞进了 UART 接口,但它实际上把"传感器调理、激励电流、温度基准、PGA 放大、数字滤波"全部整合成了寄存器配置,省掉了我之前用分立运放搭建的整套模拟电路。TM4C129XKCZAD 这边没有把时间花在写 ADC 驱动上,而是专注以太网协议栈和 PID 控制算法,分工明确后系统出问题的概率显著下降。

如果让我再做一个温度采集项目,我会更早地把校准流程设计进生产环节,而不是等现场反馈再补。每个传感器通道的 R_BIAS 电阻都单独校准,看起来增加工序,实际上省掉了后面大量的返工和客户投诉。高速 UART 接线注意走线长度匹配,电源与地平面完整,隔离器的去耦电容从原理图阶段就预留位置,这些小细节决定了现场能省多少事。这套方案在工业 HVAC 和楼宇自控场景里已经验证过稳定性,希望我的经验能帮你在类似项目里少走一段弯路。

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

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

立即咨询