ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

工业测温必备:24位ADC比例测量与STM32信号链设计

工业测温必备:24位ADC比例测量与STM32信号链设计

做工业或HVAC测温,最先要过的坎不是传感器选型,而是把微伏级的传感器信号可靠地变成数字量。我之前在做一个风机盘管温控采集模块时,最初图省事直接用STM32内置ADC,结果在50Hz工频干扰、引线压降和电源纹波的叠加下,测量重复性差到没法看。后来换成了“24位外置ADC + 独立信号链”的方案,整套系统的稳定度一下就拉开了。

这篇就拿TI的ADS122U04IPWR和意法半导体的STM32F745ZG组合来拆解:从传感器信号特征、硬件连接、寄存器配置、STM32固件状态机,到比例测量与校准流程,把一条完整的工业级温度采集链路讲清楚。适合正在做工业传感器采集模块、HVAC分布式测温节点、高精度温度变送器的同学参考,也适合想弄明白“为什么测温系统不能只靠MCU内置ADC”的人。

1. 为什么这套组合适合测温:从传感器信号本质到ADC选型逻辑

1.1 温度信号的真实形态:为什么12位ADC根本不够用

先看一组数据。K型热电偶的塞贝克系数大约是41µV/℃,也就是说温度变化1℃,输出只变化41微伏。如果你要求测量误差在±0.5℃以内,意味着系统至少要能稳定分辨出20µV左右的电压变化。12位ADC在3.3V参考电压下的最低分辨率大约只有806µV,连1℃的信号都分辨不出来,更别提0.1℃了。这就是为什么测温系统里外置高精度ADC不是可选,而是必选。

PT100铂电阻信号比热电偶稍好一些,它在0℃时的阻值是100Ω,温度系数约0.385Ω/℃,用1mA激励电流可以得到约0.385mV/℃的电压变化。信号大了十倍,看似12位ADC勉强够用,但工业现场还有另外两个麻烦:一是传感器线缆可能长达几十米,引线电阻本身就有几欧姆,这直接叠加在测量结果上;二是激励电流源的温漂会带来额外误差。这些误差和分辨率是不同层面的问题,必须靠电路结构来解决,也就是后面要说的比例测量。

ADS122U04IPWR这颗芯片的核心参数正好切中这些痛点:24位Δ-Σ ADC、内置可编程增益放大器(PGA增益1到128)、内部2.048V参考电压、两个可配置激励电流源,还集成了内部温度传感器用于热电偶冷端补偿。四个单端/两组差分输入,采集多路传感器时芯片资源也更灵活。封装是TSSOP-16,后缀IPWR对应的就是这种封装和卷带包装形式,做小尺寸采集模块很合适。

1.2 选UART版本而不是SPI版本的实际考量

ADS122U04这个型号和常见的SPI版本ADS1220并不是同一颗东西,U04版本把SPI通信换成了UART串口通信,但这种变化在实际系统里带来的好处非常明显。

先说SPI的问题。SPI需要SCK、MOSI、MISO再加上片选信号,最少四根线,如果从控设备多,每个设备还得单独挂一条CS。在工业环境里做隔离时,每根线都要过一个数字隔离器通道,隔离通道多意味着成本上升、PCB面积变大。而且SPI时钟翻转快,高速信号在长距离走线上对寄生电容、串扰都很敏感,线一长就出问题。

UART只需要TXD、RXD两根线,半双工场景甚至一根线加方向控制也能跑。做电气隔离时两个通道就够,比如ISO7721这类双通道数字隔离器,价格和面积都更友好。而且UART本身就是异步串口,只要双方波特率一致就能通信,对时序的要求比SPI宽松得多,长线传输时抗干扰能力也更好。ADS122U04还支持通过地址配置实现多设备挂接,多个ADC节点可以挂在同一条总线上轮询采集,这个特性在HVAC系统这种“大量测温点、布线距离长”的场景里非常实用。

1.3 ADC数据速率与工业HVAC需求的匹配

很多人一看是24位ADC就担心速度慢,实际上ADS122U04的数据速率覆盖范围非常宽,常见的档位从20 SPS一直到1000 SPS、2000 SPS级别都可以配置。HVAC温度采集的典型场景是什么?冷却水主管道温度、风管送风温度、回水温度,这些量本身就是慢变的,1秒采一次都嫌快,20 SPS足够了。工业过程控制里如果需要跟踪变化稍快的温度,可以选90 SPS或者175 SPS档,同时打开内部数字滤波把50Hz工频干扰压下去。

低速档还有一个额外好处:Δ-Σ ADC内部有数字滤波器,数据速率越低,对带外噪声的抑制越强,有效分辨率越高。在HVAC场景里使用20 SPS档位,得到的有效位数往往比高速档位高不少,这是白白赚到的精度。

2. 硬件连接的关键细节:电源、参考电压、传感器接口与通信电平

2.1 电源与地:Δ-Σ ADC对干净电源的要求

ADS122U04的电源设计是整板最容易被低估的部分。很多人直接拿数字3.3V往AVDD引脚一接,结果发现数据跳动非常大。原因在于Δ-Σ ADC内部的模拟调制器对电源噪声非常敏感,尤其是电源上的高频毛刺,会直接调制进输入信号。

我习惯的做法是:整个板子先由一个低噪声LDO(比如TLV70033或LM1117-3.3)输出3.3V,然后经过磁珠隔离分成两路。一路直接给DVDD和STM32F745ZG供电,另一路再经过一个RC滤波(比如10Ω电阻加10µF电容)进AVDD。模拟地和数字地在ADC芯片下方单点连接,整个PCB使用完整的地平面。这样做的原理是:让模拟电源路径的阻抗尽可能低、噪声尽可能小,同时避免数字部分的开关噪声通过共同的电源路径耦合进模拟前端。

参考电压方面,ADS122U04有内部2.048V参考电压,短距离、中等精度场景直接用内部参考没问题。但如果追求更好的温漂特性,可以外接精密基准,比如REF5025这类低温漂基准。不过要特别说一句,在做PT100比例测量时,参考电压根本不需要外部基准,因为参考电压由外部精密电阻和激励电流共同产生,这是后面专门讲的重点。

2.2 PT100三线制与四线制接口设计

PT100测温的经典接法有两种:三线制和四线制。四线制的原理最干净:每个RTD端子各接两条线,一条承载激励电流,一条用于电压采样。采样线几乎没有电流流过,因此线缆电阻完全不产生测量误差。四线制适合需要最高精度的工业场景,缺点是传感器探头需要四根引出线,成本高一些。

三线制的思路是让“测量线”无电流、只承担电压感知任务,从而抵消一根回线的影响。具体接法上,RREF和RTD串在同一路激励电流回路中,ADC的参考电压取自RREF两端,模拟输入则跨接在RTD两端。这里有个关键选型计算:PT100在300℃时的阻值大约是212.02Ω,400℃约247.04Ω。如果选择PGA增益为8、RREF为1.8kΩ,则满量程输入电压对应“RREF/G”等于225Ω,能覆盖到接近300℃。如果测温范围要到600℃以上,就得把增益降到4,此时理论满量程对应450Ω,可以覆盖到850℃的PT100上限。这个计算关系要记住:RREF必须大于等于“最大目标温度对应的RTD阻值与增益的乘积”,否则ADC的输入范围会饱和。

电流源的档位选择也需要注意。PT100激励电流推荐1mA,再高一点的自热效应会明显增加测量误差。ADS122U04的激励电流输出打开后,要给它留出稳定时间,让参考电容和传感器回路的寄生电容充完电之后再启动转换,这个细节后面踩坑部分会专门讲。

2.3 热电偶接口与冷端补偿

热电偶的信号是微伏级的,所以PGA增益要设到64或128。K型热电偶在测量端和参考端之间产生热电势,参考端通常是接线端子所处的环境温度,因此必须在靠近热电偶接线端的位置测量环境温度,然后用软件补偿。ADS122U04内部集成了一个温度传感器,可以直接读取芯片附近的环境温度,精度大约在±2℃级别,配合出厂校准能做得更好。如果PCB上芯片位置和热电偶端子距离较远,则应该在端子旁边放一颗高精度板级温度传感器,比如TMP117,冷端补偿的准确度会好很多。

还有一个冷端补偿的工程细节:因为热电偶输出的电压幅度很小,任何接触热电势、PCB上不同金属连接处的温度梯度都可能产生干扰。不要小看这个问题,我们实际测过,如果在热电偶端子附近有功率器件在工作,冷端误差很容易超过2℃。所以PCB布局时,热电偶的接线端子要尽量远离发热器件,并且接线端子两脚之间不要有大的温度梯度。

2.4 UART电平匹配与隔离方案

ADS122U04的UART接口电平以DVDD供电为准,如果DVDD接的是3.3V,UART逻辑电平就是3.3V,可以直接和STM32F745ZG的USART引脚相连。但建议在通信线路上各串一个100Ω电阻,靠近ADC引脚处加ESD保护管,因为工业现场的电缆插拔很容易引入静电。

到了真正需要长距离传输的工业现场,我会在STM32和ADS122U04之间加数字隔离器。UART只有两路信号,所以一颗双通道隔离器就够了。隔离后的UART波特率如果保持在9600或19200,延时完全不影响吞吐量。需要注意隔离器和ADC之间是否跨了地平面,如果隔离器两边分属不同的电源域,ADC侧电源必须是干净的隔离电源,比如用隔离DC-DC模块或者低功耗LDO从隔离后的电压取电。

3. ADS122U04的寄存器配置与UART通信协议实现

3.1 寄存器配置思路:先把要做什么写在纸面上

ADS122U04的寄存器配置并不复杂,但如果不提前把测量需求列出来,很容易配出几个互相矛盾的值。我每次做新板都先按下面的清单过一遍:

  • 温度范围:决定输入多路选择器、PGA增益和RREF取值
  • 传感器类型:PT100用差分输入+激励电流,热电偶用单端输入+高增益,NTC用单端输入+外部上拉到参考电压
  • 数据速率:20 SPS适合HVAC,175 SPS适合工业动态过程
  • 转换模式:连续转换适合固定调度轮询,单次转换适合按需采集

配置时把PGA设为合适的增益,把输入多路选择器选到对应的通道,把激励电流源使能并配置输出引脚,把参考电压源设置为外部RREF差分模式,这些配置分布在四个寄存器里。寄存器0处理输入通道和增益,寄存器1处理转换模式和数据速率,寄存器2处理参考电压和滤波选项,寄存器3处理激励电流参数。

有个反面教材值得讲一下:有人把PGA增益设成128,又选了较大的激励电流,结果输入信号在常温下就超出参考电压的范围,ADC输出一直顶在满量程上。排查了半天,最后用万用表测RREF压降才发现,满量程输入电压远小于实际的RTD压降。所以配置完一定要自己动手算一遍最坏情况下的信号幅度,不要想当然。

3.2 UART命令帧结构:从读写操作到CRC校验

ADS122U04通过UART接收命令帧、返回响应帧。虽然具体帧格式要看TI最新datasheet,但总体结构比较典型:前导字节、命令字、寄存器地址、数据域和校验字段。比较关键的一点是UART模式下没有硬件DRDY引脚,转换完成状态要么通过读状态寄存器、要么通过数据输出帧中的状态位来感知。

在实际工程里,我强烈建议不要跳过CRC校验。UART在工业环境下偶尔会被干扰拉低一条帧,如果没有校验,接收方会把坏数据当成正常测量结果,温度显示瞬间跳变。有了CRC,丢掉一帧数据比收进一个错误数据好得多。对20 SPS的采集速率来说,偶发丢帧完全不影响整体表现。

3.3 状态机与数据流:单次转换还是连续转换

单次转换模式的流程是:写配置寄存器、发送启动转换命令、等待状态标志、读取转换结果。这种模式适合主从式查询架构,每次采集由主控发起,逻辑清晰,功耗也更可控。但要注意,每次启动转换后必须等够转换时间再读数据,否则读到的是旧数据或者正在转换中的不稳定数据。

连续转换模式则是配置完成后芯片自动按设定速率转换,主控只需要定时从芯片拉取最新结果。HVAC多点采集场景我推荐连续转换模式,配合UART的DMA接收,主控CPU几乎没有负担,只需周期性解析最新数据。对于STM32F745ZG这种主频216MHz的M7内核来说,这个任务轻得像热身运动。

3.4 推荐的PT100测量配置

这里给一组经过实测的PT100连续测量配置做参考(以寄存器域位定义实际赋值时,请以你手中批次datasheet为准):

配置项参数值说明
输入通道AIN0/1差分接PT100正端和负端
PGA增益8配合RREF=1.8kΩ,覆盖300℃量程
激励电流源IDAC1,1mA流入RREF和RTD回路
参考电压外部RREF差分比例测量核心
数据速率20 SPSHVAC场景足够
转换模式连续转换配合DMA轮询

这套配置在室温下的典型输出稳定度可以达到0.01℃级别的码值波动,换算成温度便于理解:20 SPS下码值抖动一般不超过几位,对应温度跳动小于0.01℃。

4. STM32F745ZG固件实现:从状态机解析到温度换算

4.1 工程结构和任务划分

STM32F745ZG在这里的角色是主控和数据汇聚节点。很多工业采集板会把“和ADC通信”“解析数据”“温度换算”“显示或上报”全部塞进一个中断里,结果一个中断里干了好几件耗时的事,实时性一塌糊涂。

我的做法是把任务分成三层:底层驱动层只有USART收发和DMA缓冲,不碰任何业务逻辑;协议解析层负责从字节流里提取完整帧、校验CRC、识别有效载荷;应用层拿到原始码值之后,调用温度换算函数生成最终的物理温度值。用F745ZG的USART3配DMA接收,数据到达后触发空闲中断,在处理函数里解析帧。主循环只需要检查环形缓冲区里有没有新数据,有就取出来换算。

4.2 帧解析状态机:从字节流到完整消息

UART通信的本质是字节流,没有硬件帧边界,所以必须自己在软件层做帧同步。我使用的帧解析状态机包含以下几个状态:等待前导字节、接收长度字段、接收数据载荷、接收校验字段、校验验证。每一步都检查超时,防止一帧损坏导致解析器卡死。

伪代码是这样的:

typedef enum { FRAME_IDLE, FRAME_SYNC, FRAME_LEN, FRAME_PAYLOAD, FRAME_CRC, FRAME_DONE } FrameState; void frame_parse(uint8_t byte) { switch (state) { case FRAME_IDLE: if (byte == FRAME_SYNC_BYTE) state = FRAME_SYNC; break; case FRAME_SYNC: if (byte == HEADER_LEN) { frame_len = byte; state = FRAME_LEN; } else state = FRAME_IDLE; break; // ... } }

这个功能不复杂,但一定要单独写成模块,因为我见过很多人在主循环里直接写if-else处理接收,一帧数据还没收完又被别的任务打断,帧同步就乱了。状态机最大的好处是每个字节只做一次状态迁移,绝不在中断里阻塞等待下一个字节。

4.3 PT100比例测量的温度换算代码

码值到电阻的换算公式是:

R_RTD = Code × RREF / (PGA_Gain × 2^23)

代码实现如下:

float rtd_resistance(int32_t raw_code, float rref, float pga_gain) { return ((float)raw_code * rref) / (pga_gain * 8388608.0f); }

拿到电阻之后,温度用查表或者分段线性化换算。PT100在0到100℃之间近似线性,每摄氏度0.385Ω,但全温区其实呈轻微非线性。工程中我推荐两个方案:纯高精度需求用Callendar-Van Dusen公式;HVAC这种窄范围场景,直接查一个0到100℃的1℃间隔小表,线性插值就够了。查表法的好处是快、可控、代码短,而且校准偏移可以通过校准流程吸收掉。

4.4 数字滤波与实时性取舍

和ADC自身的数字滤波相比,后面的软件滤波作用比很多人以为的要小。因为ADS122U04在20 SPS档位下已经做了很强的内部滤波,外部再加一个移动平均只是为了进一步平滑偶发的尖峰。

HVAC场景我建议用最简单的滑动平均:取最近4到8次转换结果取平均,配合丢点判断,如果某一帧码值偏离中值超过设定阈值,先丢弃再补采。不要用复杂度太高的FIR滤波器,因为温度本身是慢变量,不需要强烈的滤波,反而要避免滤波引入的滞后延迟。对控制系统来说,温度反馈滞后10秒可能就会让PID控制器出现振荡,这是很多人在HVAC控制器上调了半天参数才发现的坑。

5. 比例测量与校准流程:误差预算拆解和HVAC简化方案

5.1 比例测量为什么是RTD测温的正解

这个部分我要重点展开,因为它是整个系统设计的核心。PT100测量的本质是“测电阻”,而电阻测量离不开电流激励和电压测量。如果使用芯片内部固定参考电压,那激励电流的温漂会直接折算成误差:激励电流变化0.1%,测量结果就变化0.1%。对1mA电流来说,0.1%漂移大约是1µA,对应PT100上0.1mV级的电压变化,换算成温度误差可能超过0.2℃。

比例测量的做法是把参考电压也取自同一路激励电流。具体来说,激励电流I先流过精密电阻RREF,在RREF两端产生参考电压VREF=I×RREF;同一路电流继续流过RTD,在RTD两端产生信号电压Vin=I×R_RTD。ADC输出码值:

Code = (Vin × PGA) / VREF × 2^23 = (I × R_RTD × PGA) / (I × RREF) × 2^23

注意I从分子分母同时约掉了。这意味着激励电流的绝对值对测量结果没有任何影响,电流漂移被完全抵消。RREF的精度才是误差来源。这就是为什么这套方案可以用普通精度的激励电流源,却能达到高精度电阻测量的原因。我用生活化的类比说一下:这就好比你先量了一把尺子的长度,再用这把尺子去量桌子,尺子本身热胀冷缩带来的误差就不重要了,重要的是尺子刻度是否均匀。

5.2 两点校准流程与系数存储

即使有了比例测量,系统的残余误差还来自ADC的偏移、PGA的增益误差以及RREF的绝对精度。把这些压下去最简单有效的方法是两点校准。

工程上推荐用精密电阻箱替代真实温度源做校淮,因为电阻箱的阻值可以精确设定,且不必等温度稳定。校准步骤是:第一步,把输入短接,记录零点偏移码值;第二步,接一个标准电阻比如100Ω,记录增益码值;第三步,再换一个比如200Ω的标准电阻,验证线性。然后计算斜率:

Slope = (R_ref2 - R_ref1) / (Code2 - Code1)

校准系数建议存到STM32F745ZG内部Flash的最后一页,每次上电时读出来,校验标志位合法才使用。还要注意每一路模拟输入通道都要单独校准,因为多路选择器的导通电阻、PGA的偏移在每个通道上略有不同,共用一套系数会引入通道间误差。

5.3 误差预算拆解

一套配置得当的比例测量系统,误差主要由下面几项构成:

误差来源典型量级说明
ADC量化/噪声0.01℃以下20 SPS下有效位数很高
PGA增益误差±0.02%量级对应温度误差约0.05℃
RREF温漂取决于电阻25ppm/℃对应约0.03℃/10℃温变
ADC偏移校准后接近0两点校准吸收
引线电阻0.1Ω约0.26℃四线制消除,三线制需两线等阻

如果使用0.1%精度、25ppm温漂的RREF,做一次两点校准,整套系统在-40到150℃范围内的总误差可以控制在±0.3℃以内。对于HVAC场景,通常要求是±0.5℃,而且温度范围只有0到50℃,所以只需要出厂做一次两点校准,后面长期运行完全不用管。工业场景如果探头的引线很长、环境温度变化大,建议每半年做一次现场校准,使用标准温度源验证漂移量。

6. 实测调试中的七个坑:从波形抓取到PCB布局

6.1 UART帧边界误判:空闲判定不能只用超时

第一个坑来自UART帧解析。ADS122U04在连续转换模式下会持续输出帧,帧与帧之间间隔很短。如果只用串口空闲中断作帧结束标志,偶尔会碰到两个帧之间的间隔时间不稳定,空闲中断提前触发,结果把一帧数据切成了两半,解析器就开始错乱。处理办法是:在帧结构里显式包含长度字段,解析器必须先收满长度字段声明的字节数,再检查CRC,只有CRC通过了才算完整帧。空闲中断只作为异常恢复机制,不作为正常的帧结束判据。这条经验在做任何UART协议解析时都通用。

6.2 刚上电时前几帧偏大:激励电流回路的稳定时间

现象很典型:板子上电后,连续模式输出前五六个数据点明显偏大,之后才慢慢落到正常值。原因在于激励电流源刚使能时,RREF两端的旁路电容和传感器线缆寄生电容需要充电到稳态。PT100上的电压一开始偏高,随着电容充满,电流全部流入RTD之后才回到正确的阻值。

解决办法很粗暴但有效:在驱动初始化里,使能激励电流后强制延时至少100ms,或者直接丢弃转换结果中的前16帧。对于20 SPS的数据速率,16帧也就0.8秒,HVAC系统完全没有感知。

6.3 模拟地和数字地:不要迷信分割地平面

关于模拟地、数字地分割,网上说法很多,我在低速测温应用里的实际经验是:不分割,统一地平面,把模拟器件尽量靠近放置,数字信号线远离模拟输入引脚。分割地的本意是阻止数字噪声回流污染模拟区,但如果两片地之间有信号线跨过,回流路径被切断,地弹反而更严重。温度采集板的信号带宽极低,根本不会因为共用地平面导致性能问题。

真正要注意的是ADC输入引脚的走线要短而粗,远离板上开关电源的电感区域,RTD的回流路径就近回到ADC下方的模拟地参考点,不要把小信号线和PWM输出线平行走线。

6.4 三线制也救不了线径不一致的引线

三线制设计的前提是两根引线电阻近似相等。实际线缆如果一根是0.5mm²、一根是0.75mm²,或者长时间使用后某段氧化导致接触电阻变化,补偿就会失效。我在现场见过最极端的案例:一根引线在端子处有锈蚀,接触电阻跟温度变化一起漂,数据怎么校准都偏。排查手段是先用万用表量各引线的环路电阻,如果两线阻值差超过0.1Ω,在PT100测温上对应的就是0.26℃误差,这时候要么上四线制探头,要么在软件里做线阻修正。

6.5 板载电源纹波在低速ADC上的表现非常隐蔽

有用示波器抓UART波形时看不到毛刺,但ADC读数确定性跳动的案例。后来排查发现是LDO的输出端电容选小了,负载瞬态导致电源在几十kHz频率上有振铃,频率虽然远超ADC带宽,但还是能通过参考输入引脚耦合。解决方法是AVDD引脚上加大容量钽电容并联小容量陶瓷电容,并且用示波器探针直接夹在AVDD引脚上看纹波,这个位置的波形才代表ADC的真实电源环境。

6.6 冷端补偿的“隐藏温度源”效应

做热电偶采集时,如果PGA增益设成128,芯片周围只要有一个发热元件产生1℃的局部温度梯度,冷端补偿的温度误差就直接变成测量误差。测量板的布局必须把热电偶端子放在板边,让端子区和主控、电源、驱动芯片之间拉开距离。实在拉不开的时候,在端子下方铺一小块独立铜皮,和主地平面之间形成一个小热岛,可以有效降低主板上热源对冷端的影响。

6.7 校准系数丢失后的安全行为

最后提一个防呆设计:校准系数存Flash时,我用一个双字校验值,先写备份区,再写主区。上电时先读主区,若校验失败再读备份区,两个都失败就直接进入“出厂默认系数+报错状态”。这样现场即使芯片Flash异常,模块也不会输出一个偏差极大的温度值,而是主动告警。工程上“安全失效”比“硬算一个错误值”重要得多,特别是HVAC和工业设备里温度参与保护逻辑时,一个离谱的温度值可能导致错误关停或错误启动。

我自己做完这套系统后的最大体会是:测温系统的精度,百分之七十由信号链设计和校准流程决定,固件反而是最轻松的部分。ADS122U04IPWR和STM32F745ZG这套组合的优势在于,UART总线让硬件连接大幅简化,而STM32F745ZG的USART DMA和M7主频又让协议解析的延迟影响几乎可忽略。如果后续要做分布式多点测温,还可以利用ADS122U04的地址配置能力做一主多从结构,把多个ADC节点串在一条总线上逐一巡检,扩展成本非常可控。最后再分享一个小习惯:每版硬件回来,先不写业务代码,只把ADC当普通24位采集器把所有寄存器过一遍,确认码值和目标电阻量级对得上,再往上搭协议和滤波,这样排查问题的时候就能一层一层剥开,不会被多数据源混在一起搞到头大。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进