news 2026/11/5 1:03:02

基于ADS122U04与STM32F303VE的工业级温度采集方案实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于ADS122U04与STM32F303VE的工业级温度采集方案实战

工业现场和楼宇暖通系统里的温度测量,看起来是个再普通不过的需求,但真正做过项目的人都知道,这里面的坑一点都不少。PT100、PT1000、热电偶、热敏电阻,每种传感器的信号特性不同,现场电磁环境又复杂,长线缆引入的干扰、共模电压、引线电阻,随便哪一个处理不好,测出来的温度就能飘出好几度。我最近用 ADS122U04IPWR 配合 STM32F303VE 做了一套温度采集方案,专门针对工业和 HVAC 场景,从选型到布板再到软件滤波,踩了不少坑,也积累了一些实战经验。这篇文章就把整套方案的来龙去脉讲清楚,包括为什么选这颗 ADC、STM32F303VE 在里面扮演什么角色、硬件怎么设计、软件怎么配置、现场调试遇到问题怎么排查。不管你是刚接触高精度温度采集的新手,还是已经做过几套方案想找参考的老手,应该都能从里面找到有用的东西。

1. 为什么工业与 HVAC 温度采集不能随便选一颗 ADC

1.1 工业现场对温度测量的真实要求

很多人做温度采集,第一反应是找个带 ADC 的单片机,接上传感器就完事。在实验室里这么干没问题,但放到工业现场或者 HVAC 系统里,很快就会发现问题。工业现场的温度测量有几个硬性要求,是消费级方案根本扛不住的。

第一是精度和分辨率。HVAC 系统里,送风温度、回风温度、冷冻水进出水温度的测量,通常要求误差控制在 ±0.5°C 以内,有些精密场合甚至要求 ±0.1°C。PT100 在 0°C 时阻值 100Ω,温度系数大约 0.385Ω/°C,也就是说 0.1°C 对应 0.0385Ω 的阻值变化。要分辨这么小的阻值变化,ADC 的有效分辨率至少要达到 16 位以上,而且是在增益放大之后仍然保持这个有效位数。

第二是抗干扰能力。工业现场的变频器、接触器、电机启停,都会在信号线上耦合大量噪声。温度信号本身变化缓慢,属于低频小信号,很容易被工频干扰和共模噪声淹没。如果 ADC 没有良好的共模抑制和差分输入能力,测出来的数据会跳得没法看。

第三是长期稳定性。HVAC 设备往往要连续运行好几年,温度采集电路的温度漂移、长期漂移必须足够小。这就对 ADC 的基准源、内部 PGA 的漂移特性提出了要求。

第四是接口和隔离。工业现场经常需要多路温度采集,传感器可能分布在几十米甚至上百米外,信号传输和电源隔离都是必须考虑的问题。

1.2 ADS122U04IPWR 在温度采集中的定位

ADS122U04IPWR 是 TI 的一款 24 位、4 通道、低功耗、ΔΣ 型 ADC,内置 PGA、基准电压源和振荡器,支持 SPI 接口。把它放到温度采集场景里,几个关键特性直接对上了工业需求。

24 位的分辨率,配合内部 PGA 最大 128 倍增益,意味着它可以分辨非常微弱的差分信号。对于 PT100 这种小信号传感器,PGA 可以把信号放大到接近基准电压的范围,充分利用 ADC 的满量程,从而获得更高的有效分辨率。ΔΣ 架构本身对低频噪声有很好的抑制,配合内部的数字滤波器,可以进一步压制工频干扰。

它内置的基准电压源虽然精度一般,但对于大多数 HVAC 应用已经够用。如果追求更高精度,可以外接高精度基准。4 个通道可以灵活配置成差分输入,方便接多路传感器或者做比例测量。

U 系列(ADS122U04)相比不带 U 的版本,主要区别在于接口和封装。IPWR 后缀表示 TSSOP-16 封装,工业级温度范围,适合在设备里长期运行。

1.3 STM32F303VE 为什么适合做这个方案的主控

STM32F303VE 是 ST 的 Cortex-M4 系列 MCU,带 FPU,主频 72MHz,有丰富的定时器、SPI、UART、I2C 资源。选它做温度采集主控,主要看中几点。

首先是SPI 接口的灵活性。STM32F303VE 有多个 SPI 外设,可以配置成主机模式,时钟极性和相位都能调,跟 ADS122U04 的 SPI 时序匹配起来很顺手。而且 SPI 速率可以拉得比较高,读取 ADC 数据不会成为瓶颈。

其次是运算能力。温度采集不只是读 ADC 原始值,后面还要做线性化、冷端补偿、滤波、标定。STM32F303VE 带硬件浮点,做这些运算绰绰有余,不用为了省算力而牺牲算法精度。

第三是外设资源丰富。多路温度采集往往需要配合多路模拟开关、继电器输出、通信接口。STM32F303VE 的 GPIO、定时器、UART 资源足够支撑一个完整的温度采集模块,不需要额外挂太多外围芯片。

第四是生态成熟。STM32 的 HAL 库、LL 库、CubeMX 工具链都很完善,开发效率高,遇到问题也容易找到参考资料。

2. 硬件设计:从传感器到 ADC 的完整信号链

2.1 传感器选型与接口方式

工业和 HVAC 场景里,温度传感器主要有几类:PT100、PT1000、热电偶、NTC 热敏电阻。它们的特点和适用场景差别很大。

传感器类型输出特性精度测温范围典型应用
PT100电阻,0°C 时 100Ω高-200~850°C工业过程、HVAC 水温
PT1000电阻,0°C 时 1000Ω高-200~600°CHVAC、楼宇自控
K 型热电偶电压,约 41μV/°C中-200~1350°C高温工业
NTC 10K电阻,非线性中低-50~150°C家电、低成本 HVAC

PT100 和 PT1000 是 HVAC 里最常用的,线性度好,长期稳定性高。PT1000 的阻值更大,同样的引线电阻带来的误差更小,长线传输更有优势。热电偶适合高温场合,但需要冷端补偿,信号更微弱,对 ADC 要求更高。

这套方案以 PT100 和 PT1000 为主,因为它们在 HVAC 里最典型。ADS122U04 的差分输入和 PGA 正好适合处理这类电阻型传感器。

2.2 比例测量法与基准选择

PT100 的阻值测量,有两种常见方法:恒流源激励和比例测量。

恒流源激励是用一个精密电流源流过 PT100,测量其两端电压,再换算成阻值。这种方法对电流源的精度和温漂要求很高,电流源本身的漂移会直接变成温度误差。

比例测量法是用一个参考电阻和 PT100 串联,用同一个激励源供电,分别测量 PT100 和参考电阻上的电压,然后取比值。因为激励源的波动同时影响两个电压,取比值后就被抵消了。这种方法对激励源的要求大大降低,精度主要取决于参考电阻的精度和 ADC 的线性度。

ADS122U04 支持外部基准输入,正好可以做比例测量。具体做法是:用一个精密参考电阻 Rref 与 PT100 串联,Rref 两端的电压接到 ADC 的基准输入,PT100 两端的电压接到 ADC 的差分输入。ADC 输出的码值直接正比于 PT100 与 Rref 的比值,激励源的漂移被完全抵消。

参考电阻的选择有讲究。Rref 的阻值应该接近 PT100 在测量范围内的中间值,这样两个电压都在 ADC 的合适量程内。对于 PT100,0~100°C 对应 100~138.5Ω,Rref 可以选 100Ω 或 120Ω。对于 PT1000,对应 1000~1385Ω,Rref 选 1kΩ 或 1.2kΩ。

注意:参考电阻必须用低温漂的精密电阻,比如 0.1% 精度、10ppm/°C 温漂的金属箔电阻。普通厚膜电阻的温漂能达到 100ppm/°C 以上,直接毁掉测量精度。

2.3 模拟前端电路设计细节

模拟前端的设计,决定了整个方案的精度上限。几个关键点必须处理好。

输入滤波。ADS122U04 的差分输入端需要加 RC 低通滤波,截止频率根据信号带宽来定。温度信号变化很慢,截止频率可以设得很低,比如 10Hz 以下。但要注意,滤波电容和 ADC 输入阻抗会形成额外的极点,影响建立时间。一般建议差分电容取 0.1μF 左右,共模电容取 0.01μF 左右,串联电阻取 1kΩ 以内,避免引入太大噪声。

共模电压设置。ADS122U04 的差分输入有共模电压范围要求,必须保证输入信号在 AVDD 和 AVSS 之间,且满足 PGA 的共模限制。在比例测量电路里,PT100 和 Rref 串联,中间节点的电压就是共模电压。要合理选择激励电流和电阻值,让共模电压落在合适范围。

激励源设计。比例测量需要一个稳定的激励源,可以是恒流源,也可以是恒压源加分压。用恒流源时,电流流过 PT100 和 Rref,产生电压。电流大小要权衡:电流太大会导致 PT100 自热,影响测量精度;电流太小则信号太弱,容易被噪声淹没。PT100 的自热效应,一般建议激励电流不超过 1mA。对于 PT1000,可以更小,比如 0.1~0.5mA。

电源和去耦。ADS122U04 的模拟电源和数字电源要分开,用磁珠或电感隔离。每个电源引脚都要加 0.1μF 和 1μF 的去耦电容,尽量靠近引脚放置。基准输入引脚也要加去耦电容,保证基准稳定。

布板要点。模拟部分和数字部分要分区布局,模拟信号线尽量短,远离时钟线和数字信号线。差分走线要等长、靠近,保持对称。地平面要完整,模拟地和数字地在 ADC 下方单点连接。

2.4 STM32F303VE 与 ADS122U04 的接口连接

ADS122U04 支持 SPI 接口,STM32F303VE 作为 SPI 主机。连接方式如下:

ADS122U04 引脚STM32F303VE 引脚说明
SCLKSPIx_SCKSPI 时钟
DINSPIx_MOSI主机输出,从机输入
DOUT/DRDYSPIx_MISO从机输出,主机输入,兼数据就绪
CSGPIO 输出片选
RESETGPIO 输出复位控制
CLK悬空或外部时钟使用内部振荡器时悬空

DOUT/DRDY 是复用引脚,既做数据输出,又做数据就绪指示。在读取数据时,要特别注意这个引脚的时序。STM32 端可以用外部中断监测 DRDY 下降沿,或者用 SPI 查询方式配合延时。

SPI 模式要配置成 CPOL=0、CPHA=1,这是 ADS122U04 要求的模式。时钟速率不要超过器件手册规定的上限,一般 4MHz 以内比较稳妥。实际调试时,先用低速跑通,再逐步提高。

3. 软件实现:寄存器配置、数据读取与温度换算

3.1 ADS122U04 的寄存器结构与初始化流程

ADS122U04 有 4 个配置寄存器,分别控制输入多路选择、增益、数据速率、工作模式、基准选择等。初始化流程大致是:复位、配置寄存器、启动转换、等待数据就绪、读取数据。

复位可以通过 RESET 引脚拉低,或者发送复位命令。上电后建议先硬件复位,确保寄存器处于已知状态。

配置寄存器 0 主要设置输入多路选择(MUX)和增益。对于 PT100 差分输入,MUX 要选对应的差分通道,增益根据信号幅度选。比如 PT100 在 0~100°C 时输出 0~38.5mV(1mA 激励),基准 1.2V,增益选 32 倍,放大后 0~1.23V,接近满量程。

配置寄存器 1 设置数据速率、工作模式、转换模式。数据速率有 20SPS、45SPS、90SPS、175SPS、330SPS、600SPS、1000SPS 可选。温度测量不需要高速率,20SPS 或 45SPS 就够,而且低速率下噪声抑制更好。工作模式有正常模式和多种低功耗模式,连续转换模式适合持续采集。

配置寄存器 2 设置基准选择、温度传感器模式、数据就绪模式等。基准选外部基准,因为要做比例测量。数据就绪模式选 DOUT/DRDY 引脚指示。

配置寄存器 3 设置 IDAC 电流大小、IDAC 路由等。如果用内部激励电流源,就在这里配置。IDAC 电流有 10μA、50μA、100μA、250μA、500μA、1000μA、1500μA 可选。对于 PT100,选 500μA 或 1000μA;对于 PT1000,选 100μA 或 250μA。

初始化代码示例(基于 STM32 HAL 库):

// 复位 ADS122U04 HAL_GPIO_WritePin(ADS_RESET_PORT, ADS_RESET_PIN, GPIO_PIN_RESET); HAL_Delay(1); HAL_GPIO_WritePin(ADS_RESET_PORT, ADS_RESET_PIN, GPIO_PIN_SET); HAL_Delay(1); // 配置寄存器 0:MUX = AIN0/AIN1 差分,增益 = 32 uint8_t reg0 = 0x00 | (0x01 << 4) | (0x05 << 1); // MUX[3:0] = 0001 对应 AIN0/AIN1 // GAIN[2:0] = 101 对应增益 32 // 配置寄存器 1:数据速率 20SPS,连续转换 uint8_t reg1 = (0x00 << 5) | (0x00 << 3); // DR[2:0] = 000 对应 20SPS // MODE[1:0] = 00 对应连续转换 // 配置寄存器 2:外部基准,50/60Hz 抑制 uint8_t reg2 = (0x01 << 6) | (0x00 << 4); // VREF[1:0] = 01 对应外部基准 // 滤波配置根据实际需要 // 配置寄存器 3:IDAC = 500μA,路由到 AIN0/AIN1 uint8_t reg3 = (0x04 << 4) | (0x01 << 2); // IDAC[2:0] = 100 对应 500μA // 路由配置根据实际电路 // 写入寄存器 ADS122_WriteReg(0, reg0); ADS122_WriteReg(1, reg1); ADS122_WriteReg(2, reg2); ADS122_WriteReg(3, reg3); // 启动转换 ADS122_StartConversion();

3.2 数据读取的时序与中断处理

ADS122U04 的数据读取,关键是处理好 DRDY 信号。在连续转换模式下,每次转换完成,DRDY 会拉低,表示数据就绪。STM32 可以用外部中断捕获 DRDY 下降沿,在中断里读取数据。

读取数据的 SPI 时序:先拉低 CS,然后发送读取命令(0x10 或 0x12,取决于是否连续读),然后读取 3 个字节的数据。数据是 24 位,MSB 在前。读完后拉高 CS。

void ADS122_ReadData(int32_t *data) { uint8_t rxBuf[3]; uint8_t cmd = 0x10; // 读取数据命令 HAL_GPIO_WritePin(ADS_CS_PORT, ADS_CS_PIN, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, &cmd, 1, 100); HAL_SPI_Receive(&hspi1, rxBuf, 3, 100); HAL_GPIO_WritePin(ADS_CS_PORT, ADS_CS_PIN, GPIO_PIN_SET); // 组合 24 位数据,注意符号扩展 *data = ((int32_t)rxBuf[0] << 16) | ((int32_t)rxBuf[1] << 8) | rxBuf[2]; if (*data & 0x00800000) { *data |= 0xFF000000; // 负数符号扩展 } }

中断处理要注意几点。第一,DRDY 中断频率不能太高,否则会占用太多 CPU。20SPS 时,每 50ms 一次中断,完全没问题。第二,中断里只做数据读取和标志置位,复杂运算放到主循环。第三,如果 SPI 总线还有其他设备,要注意 CS 的互斥。

3.3 从 ADC 码值到温度值的换算链路

ADC 读到的原始码值,要经过几步换算才能变成温度值。

第一步,码值转电压比。ADS122U04 是 24 位 ADC,满量程码值是 ±2^23。在比例测量中,ADC 码值正比于输入电压与基准电压的比值:

VIN / VREF = Code / 2^23

第二步,电压比转电阻比。在比例测量电路里,PT100 和 Rref 串联,流过相同电流,所以电压比等于电阻比:

RPT / Rref = VPT / VREF

其中 VPT 是 PT100 两端电压,VREF 是 Rref 两端电压(作为基准)。

第三步,电阻转温度。PT100 的电阻-温度关系,在 -200~0°C 和 0~850°C 有不同的公式。工业上常用 Callendar-Van Dusen 方程:

对于 T ≥ 0°C:

R(T) = R0 * (1 + A*T + B*T^2)

对于 T < 0°C:

R(T) = R0 * (1 + A*T + B*T^2 + C*(T-100)*T^3)

其中 R0 = 100Ω,A = 3.9083e-3,B = -5.775e-7,C = -4.183e-12。

实际工程中,为了减少运算量,常用分段线性插值或者查表法。但 STM32F303VE 带 FPU,直接解方程也很快。对于 T ≥ 0°C,可以解一元二次方程:

T = (-A + sqrt(A^2 - 4*B*(1 - R/R0))) / (2*B)

对于 T < 0°C,方程有四次项,直接解比较麻烦,可以用迭代法或者查表。

float PT100_ResistanceToTemperature(float resistance) { const float R0 = 100.0f; const float A = 3.9083e-3f; const float B = -5.775e-7f; const float C = -4.183e-12f; float ratio = resistance / R0; if (ratio >= 1.0f) { // T >= 0°C float disc = A*A - 4.0f*B*(1.0f - ratio); if (disc < 0) return -999.0f; // 错误 float temp = (-A + sqrtf(disc)) / (2.0f*B); return temp; } else { // T < 0°C,用迭代法 float temp = -50.0f; // 初值 for (int i = 0; i < 10; i++) { float r_calc = R0 * (1.0f + A*temp + B*temp*temp + C*(temp-100.0f)*temp*temp*temp); float error = r_calc - resistance; // 数值微分近似 float dr = R0 * (A + 2.0f*B*temp + C*(4.0f*temp*temp*temp - 300.0f*temp*temp)); temp -= error / dr; } return temp; } }

3.4 数字滤波与工频抑制的软件配合

ADS122U04 内部有数字滤波器,可以配置成不同的抑制模式。在 20SPS 数据速率下,默认滤波器对 50Hz 和 60Hz 都有较好的抑制。但如果现场干扰特别强,还需要在软件端加额外滤波。

常用的软件滤波方法有:滑动平均、中值滤波、一阶低通滤波、卡尔曼滤波。温度信号变化慢,滑动平均和中值滤波组合效果不错。

滑动平均取最近 N 个样本的平均值,N 根据需要的响应速度和噪声抑制效果来定。N 越大,噪声抑制越好,但响应越慢。对于 HVAC 温度测量,N 取 8 或 16 比较合适。

中值滤波取最近 N 个样本的中位数,对脉冲噪声特别有效。可以先用中值滤波去掉突发干扰,再用滑动平均平滑。

#define FILTER_SIZE 16 typedef struct { float buffer[FILTER_SIZE]; int index; int count; } Filter_t; float Filter_Update(Filter_t *f, float newValue) { f->buffer[f->index] = newValue; f->index = (f->index + 1) % FILTER_SIZE; if (f->count < FILTER_SIZE) f->count++; // 复制并排序,取中位数 float temp[FILTER_SIZE]; memcpy(temp, f->buffer, f->count * sizeof(float)); // 简单冒泡排序 for (int i = 0; i < f->count - 1; i++) { for (int j = 0; j < f->count - 1 - i; j++) { if (temp[j] > temp[j+1]) { float t = temp[j]; temp[j] = temp[j+1]; temp[j+1] = t; } } } float median = temp[f->count / 2]; // 滑动平均 float sum = 0; for (int i = 0; i < f->count; i++) { sum += f->buffer[i]; } float mean = sum / f->count; // 加权组合 return 0.5f * median + 0.5f * mean; }

提示:滤波参数不要照搬,要根据实际现场的噪声特性和响应要求调整。可以先采集一段原始数据,在电脑上分析噪声频谱,再决定滤波方案。

4. 现场调试:那些手册上不会写的坑

4.1 读数跳动大:从电源到布线的排查链路

第一版板子做出来,读数跳动能有 ±2°C,完全没法用。排查过程记录如下,希望能帮到遇到类似问题的朋友。

第一步,先确认是 ADC 问题还是前端问题。把 ADC 输入短接,读到的码值应该在 0 附近小幅跳动。如果短接后跳动仍然很大,说明是 ADC 本身或者电源、基准的问题。实测短接后跳动只有几个 LSB,说明 ADC 和基准没问题,问题在前端。

第二步,检查激励源。用示波器看 PT100 两端的电压,发现上面叠加了明显的工频干扰,峰峰值有几十毫伏。这说明干扰是从激励源或者布线耦合进来的。

第三步,检查布线。PT100 的引线用的是普通排线,没有屏蔽,而且和电机的电源线走在一起。把引线换成屏蔽双绞线,屏蔽层单端接地,干扰明显减小。

第四步,检查滤波。原来的 RC 滤波截止频率设得太高,改低之后,高频噪声被压制。但截止频率也不能太低,否则建立时间不够,影响测量速度。

第五步,检查电源。用示波器看 AVDD,发现有开关电源的纹波。在 AVDD 上加了 LC 滤波,纹波降到 1mV 以下,读数稳定性进一步提升。

经过这几步,读数跳动降到 ±0.1°C 以内,满足要求。

4.2 共模电压超限导致的非线性

调试第二路传感器时,发现低温段读数正常,高温段误差越来越大。检查电路发现,这一路的 PT100 引线特别长,引线电阻有十几欧姆。引线电阻与 PT100 串联,导致 PT100 两端的实际电压比预期高,共模电压也偏移了。

ADS122U04 的 PGA 有共模电压范围限制,超出范围后,输出会非线性。解决办法有两个:一是改用三线制或四线制接法,消除引线电阻影响;二是调整激励电流和参考电阻,把共模电压拉回合适范围。

三线制接法是用一根额外的线补偿引线电阻,适合引线电阻较大但三根线等长的场合。四线制接法用两根线供电、两根线测量,完全消除引线电阻影响,精度最高,但需要更多线缆。

在 HVAC 现场,传感器到控制器的距离可能很远,建议直接用四线制,虽然线缆成本高一点,但省去了很多调试麻烦。

4.3 自热效应与激励电流的权衡

PT100 的自热效应,是指激励电流流过 PT100 时产生的焦耳热,导致传感器温度高于环境温度。自热误差与激励电流的平方成正比,与传感器的散热条件有关。

在静止空气中,PT100 的自热系数大约是 0.2~0.5°C/mW。如果激励电流是 1mA,PT100 阻值 100Ω,功耗是 0.1mW,自热误差大约 0.02~0.05°C,可以接受。如果电流加到 5mA,功耗 2.5mW,自热误差就有 0.5~1.25°C,太大了。

所以激励电流不能随便加大。但电流太小,信号又太弱,容易被噪声淹没。折中方案是:用 0.5~1mA 的激励电流,配合足够的 PGA 增益,在保证信噪比的同时控制自热。

对于 PT1000,阻值大 10 倍,同样的电流下功耗大 10 倍,所以激励电流要相应减小。PT1000 一般用 0.1~0.5mA。

注意:如果传感器封装在保护套管里,散热条件差,自热效应会更明显。这种情况下,激励电流要取更小的值,或者采用间歇激励的方式,只在测量时通电。

4.4 长线传输的屏蔽与接地处理

工业现场传感器到控制器的距离,从几米到上百米都有。长线传输带来的问题主要是干扰耦合和地电位差。

干扰耦合可以通过屏蔽双绞线解决。双绞线让干扰在两根线上产生共模信号,差分输入可以抑制。屏蔽层要单端接地,一般接控制器端的地,不要两端都接,否则会形成地环路。

地电位差是更麻烦的问题。如果传感器端和控制器端的地电位不同,会在信号线上产生共模电压,严重时超出 ADC 的共模范围。解决办法是使用隔离放大器或者隔离 ADC,把两端的地隔开。

ADS122U04 本身不隔离,如果现场地电位差较大,需要在前端加隔离。可以用隔离运放做信号隔离,或者用数字隔离器隔离 SPI 接口。隔离方案会增加成本,但对于工业现场是必要的。

还有一种情况是传感器本身接地。比如 PT100 的金属保护套管接在管道上,管道又接地。这时候 PT100 的某根引线实际上是通过套管接地的,如果控制器端也接地,就形成了地环路。解决办法是让传感器浮地,或者用隔离方案。

5. 精度标定与长期稳定性保障

5.1 单点标定与多点标定的选择

任何测量系统都有误差,标定是消除系统误差的必要步骤。温度采集系统的标定,有单点标定和多点标定两种。

单点标定是在一个已知温度点(比如 0°C 冰水混合物)测量,计算偏移量,然后在后续测量中减去这个偏移。这种方法简单,但只能消除零点误差,不能消除增益误差。

多点标定是在多个温度点测量,拟合出偏移和增益,甚至非线性。常用的温度点有 0°C、25°C、50°C、100°C。用这些点的数据做线性回归,得到更准确的换算系数。

对于 HVAC 应用,如果测量范围是 0~100°C,建议至少做 0°C 和 100°C 两点标定。如果要求更高,可以加 25°C 和 50°C 点。

标定用的温度源,可以用恒温水浴或者干体炉。恒温水浴的稳定性好,但升温慢;干体炉升温快,但稳定性稍差。标定时要等温度稳定后再读数,一般等 10~15 分钟。

5.2 参考电阻温漂对精度的影响

比例测量法虽然抵消了激励源的漂移,但参考电阻自身的温漂仍然会影响精度。假设参考电阻的温漂是 10ppm/°C,在 0~50°C 的环境温度变化下,阻值变化 500ppm,对应温度误差约 0.13°C。如果温漂是 100ppm/°C,误差就有 1.3°C,完全不能接受。

所以参考电阻必须选低温漂的。金属箔电阻的温漂可以做到 2ppm/°C 甚至更低,但价格较贵。精密薄膜电阻可以做到 10~25ppm/°C,性价比更高。在 HVAC 应用里,25ppm/°C 的电阻已经够用。

除了温漂,参考电阻的初始精度也重要。0.1% 精度的电阻,初始误差对应约 0.25°C。如果标定时把这个误差一起标掉,初始精度就不那么关键了。但温漂是随温度变化的,标定只能在一个温度点标,所以温漂必须靠电阻本身保证。

5.3 长期运行中的漂移监测与自校准

HVAC 设备要连续运行几年,期间电子元器件的参数会缓慢漂移。为了保证长期精度,可以加入自校准机制。

一种方法是定期测量一个已知的参考电阻,比如在电路板上放一个高精度、低温漂的参考电阻,定期切换到 ADC 测量,根据测量结果修正增益。这种方法可以监测 ADC 和参考电阻的漂移。

另一种方法是利用 ADS122U04 内部的基准电压源做交叉检查。内部基准的长期稳定性一般,但短期稳定性好。可以定期切换内部基准和外部基准,比较测量结果,判断外部基准是否漂移。

还有一种方法是监测电路板温度。在 ADC 附近放一个温度传感器,测量电路板温度,根据事先标定的温度系数修正测量结果。这种方法对温漂的补偿效果不错,但需要事先做温度特性测试。

实际工程中,如果精度要求不是特别高,定期用标准温度计比对一下就够了。如果要求高,就要做完整的自校准系统。

5.4 电磁兼容性设计与现场防护

工业现场的电磁环境恶劣,温度采集系统要能扛住各种干扰。除了前面说的屏蔽和滤波,还要注意几点。

电源入口要加 TVS 管和压敏电阻,防止浪涌损坏。信号入口要加气体放电管或 TVS 管,防止静电和感应雷击。PCB 布局要保证足够的爬电距离和电气间隙,特别是高压场合。

外壳要接地,但要注意接地方式。如果传感器和控制器不在同一个地网,外壳接地可能引入地环路。这时候要用隔离方案,或者采用浮地设计。

软件上可以加看门狗和异常恢复机制。如果 ADC 通信异常,自动复位并重新初始化。如果读数超出合理范围,标记为无效数据,避免误报警。

6. 方案扩展:多路采集与通信集成

6.1 多路温度采集的通道扩展

ADS122U04 有 4 个输入通道,可以配置成 2 路差分输入,或者 4 路单端输入。对于 HVAC 应用,通常需要采集多路温度,比如送风、回风、冷冻水进水、冷冻水出水,至少 4 路。

如果 4 路不够,有两种扩展方式。一是用多片 ADS122U04,通过 SPI 片选切换。STM32F303VE 的 SPI 可以挂多个从设备,只要片选引脚够用。二是用外部模拟开关,把多路传感器切换到 ADC 的输入通道。模拟开关要选低导通电阻、低漏电流的,否则会影响精度。

多片 ADC 方案的好处是每片可以独立配置,采样率不受影响。模拟开关方案成本低,但切换时会引入额外的建立时间,而且模拟开关的导通电阻会与传感器串联,影响精度。

对于 HVAC 应用,4~8 路温度采集是常见需求。用两片 ADS122U04 可以覆盖 8 路差分输入,比较合理。

6.2 与上位机的通信协议设计

温度采集模块通常需要把数据上传给上位机或者楼宇自控系统。常用的通信方式有 Modbus RTU、BACnet、MQTT 等。

Modbus RTU 是工业现场最常用的协议,简单可靠,STM32F303VE 的 UART 配合 RS485 收发器就能实现。数据可以映射到保持寄存器,上位机轮询读取。

BACnet 是楼宇自控的标准协议,比较复杂,但兼容性好。如果要做成标准 HVAC 设备,BACnet 是更好的选择。STM32F303VE 的资源跑 BACnet 协议栈有点紧张,可能需要外挂协议处理芯片或者换更高性能的 MCU。

MQTT 适合物联网场景,通过以太网或者无线模块上传到云平台。这种方式适合远程监控,但实时性不如 Modbus。

通信协议的设计要考虑数据格式、更新频率、异常处理。温度数据一般用 16 位整数表示,单位 0.1°C 或 0.01°C。更新频率根据应用需求,HVAC 里 1~10 秒一次就够了。

6.3 低功耗设计与电池供电场景

有些 HVAC 场合,比如无线温度传感器,需要用电池供电,低功耗设计就很重要。

ADS122U04 本身支持多种低功耗模式,在两次转换之间可以进入休眠。STM32F303VE 也有多种低功耗模式,可以在不采集的时候进入 STOP 或 STANDBY 模式。

低功耗设计的关键是降低占空比。温度变化慢,不需要连续采集。可以每隔几分钟采集一次,采集时间几百毫秒,其余时间都休眠。这样平均功耗可以做到微安级,电池能用好几年。

唤醒方式可以用定时器或者外部事件。定时器唤醒最简单,STM32 的 RTC 可以定时唤醒。外部事件唤醒适合有报警需求的场合。

无线传输是耗电大户,要尽量缩短传输时间,提高传输速率。可以用 LoRa 或者 NB-IoT 等低功耗广域网技术,单次传输功耗低,覆盖范围广。

7. 写在最后的一些实操体会

这套 ADS122U04IPWR 加 STM32F303VE 的温度采集方案,我从选型到调试花了大概两个月时间,中间返工了两次板子,踩的坑基本都写在上面了。回过头看,最关键的几个点其实就那么几个:比例测量法一定要用,参考电阻一定要低温漂,模拟前端一定要认真做滤波和布板,现场调试一定要有耐心一步步排查。

很多人觉得温度测量简单,随便搞搞就行,但真正要做到工业级的精度和稳定性,细节太多了。ADS122U04 这颗 ADC 性能很好,但前提是你得把它用好。PGA 的共模范围、基准的选择、滤波器的配置,每一个参数都影响最终结果。STM32F303VE 作为主控,运算能力和外设资源都够用,配合 HAL 库开发效率也高。

如果你也在做类似的方案,我的建议是:先在实验室把单路跑通,精度标定好,再去现场调试。现场的问题往往不是电路本身,而是布线、接地、电源这些看起来不起眼的地方。多带一块备用板,多带几种传感器,现场换着试,能省很多时间。还有就是,示波器一定要带,很多问题看波形比看数据直观得多。

温度采集这个方向,技术不算新,但应用场景一直在扩展。从传统的工业过程控制,到现在的智能楼宇、冷链物流、数据中心热管理,需求越来越多。把基础打扎实,后面做任何场景都能迁移过去。

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

工业级温度采集系统:ADS122U04IPWR与PIC18F87J10实战设计

/* 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 1:02:44

ADS122U04+STM32F722VE:工业温度采集与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 1:02:44

24位串口ADC+STM32F334实现工业级高精度温度采集方案解析

/* 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 1:02:29

ADS122U04+STM32F439ZG多路高精度温度采集方案

/* 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 1:02:26

基于ADS122U04与RA4L1的高精度温度采集方案设计

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

作者头像 李华
网站建设 2026/11/4 23:42:21

React 18 useId钩子:SSR友好的唯一ID生成方案

1. useId 基础概念解析在React 18中引入的useId钩子函数&#xff0c;是专门用于生成唯一ID的工具函数。这个看似简单的API背后&#xff0c;实际上解决了前端开发中长期存在的ID管理痛点。我们先来看一个典型场景&#xff1a;当你在服务端渲染(SSR)应用中手动生成ID时&#xff0…

作者头像 李华