☰
基于ADS122U04与STM32的高精度RTD温度测量方案
2026/11/5 1:06:49 网站建设 项目流程

去年我在做一个风柜控制器的项目时,被温度采集折腾得不轻:原来用的是 NTC 热敏电阻加模拟量输入缓冲,生产线上同一批探头的阻值离散性很大,冬天调试时负温度段根本没法看,显示值跳来跳去。后来我把整套方案换成了 RTD 加高精度 ADC 的路线,用 ADS122U04IPWR 配合 STM32F302VC 做信号采集和温度换算,系统才算稳定下来。这篇文章不会跟你讲太多虚的,就把这套组合从选型、电路、通信协议、温度换算公式到校准实测的完整过程记录下来,给也想在工业设备或者 HVAC 控制器里做高性价比温度测量的朋友一个参考。无论你是刚开始接触 RTD 测量的小白,还是正在选型的技术负责人,这篇内容应该都能覆盖到你关心的点。

1. 选型动机:为什么是 UART 型 ADC 和 M4 单片机这对组合

1.1 传统模拟采集方案的痛点

做工业和 HVAC 温度测量,很多人第一反应是直接用单片机自带的 ADC 采样热敏电阻或者 PT100 的模拟电压。这个方案在小项目里确实能用,但一放到现场就往往露馅。

首先是分辨率问题。STM32F302VC 内置的 ADC 是 12 位的,对 PT100 这类低灵敏度传感器来说,0.385 Ω/°C 的电阻变化率折合成电压只有微伏到毫伏级别,12 位分辨率很难做到 0.1°C 级别的分辨能力。加上 MCU 的 ADC 参考电压往往就是电源电压,电源纹波和数字噪声都会直接落在测量结果里。

其次是现场干扰。HVAC 系统里变频器、接触器、继电器到处都是,模拟信号线一旦拉长个几米,感应的工频干扰和开关噪声就会把弱小信号淹没。传统的做法是在模拟前端加运放放大、加有源滤波,电路复杂度和成本一下子就上去了。

我当时的第一需求其实是简单:探头信号进来,经过一个可靠的前端变成数字量,主控能直接读。既然要绕开模拟信号长距离传输的坑,干脆把 ADC 放到传感器附近,用数字接口跟主控通信,这是最直接的思路。

1.2 ADS122U04IPWR 的核心优势

ADS122U04IPWR 是一颗 TI 的 24 位 Δ-Σ ADC,最特别的地方在于它集成了一个 UART 接口。第一次看到这颗物料的时候我就觉得思路对了:常规的高精度 ADC 大多是 SPI 或 I2C 接口,SPI 在微控制器这边还得单独分配时钟线、片选线,I2C 虽然线少但速度上限和抗干扰能力在工业场合不够看。UART 就不一样了,每个 MCU 都有串口,两根线就能连,不需要特殊时序,而且非常适合在远程采集板上接线。

这颗 ADC 的内部集成度也高:可编程增益放大器 PGA、低漂移内部基准、振荡器、IDAC 电流源、四路差分或八路单端输入全都在一颗芯片里。测 PT100 或者热电偶所需的激励电流源和基准电压源不用自己搭分立电路,外围元件可以压到非常少。低功耗特性也让它在对功耗敏感的设备里站得住脚,24 位分辨率对温度这种变化缓慢的信号来说是绰绰有余的。

1.3 STM32F302VC 在这个系统里的角色

STM32F302VC 是 Cortex-M4 内核带 FPU 和 DSP 指令的 MCU,跑 72 MHz。有人可能会觉得,做温度采集用一颗 M0 小单片机就够了吧。这话没错,但要看你整个系统还要干什么。我的主控除了读温度,还要跑 PID 算法、控制风机和水阀、处理通信协议栈。M4 的 FPU 在算 RTD 温度转换公式时优势非常明显,二分法求 PT100 的反函数温度,每一步都用浮点运算,M0 软浮点要慢不少,M4 基本没什么压力。

另外 STM32F3 系列本身定位就是模拟和运动控制混合信号 MCU,内部集成了比较器和运放,后续如果想在同一个平台上再扩展压力传感器、电流检测之类的模拟通道,不用换主控就能承接。温度采集只是它的任务之一,剩下的资源还能服务整个设备。

2. 温度信号链组建:从 PT100 到 24 位数字量的换算逻辑

2.1 传感器选型:PT100、PT1000 还是 NTC

不同传感器方案的取舍,直接决定整个信号链的参数设计。我自己做 HVAC 时常用的是 PT100 和 NTC,工业场合还会用到 PT1000 和热电偶。

传感器灵敏度线性度成本典型场景
NTC极高(非线性严重)差最低空调室温、风管温度
PT1000.385 Ω/°C好中工业过程、冷热水系统
PT10003.85 Ω/°C好中高高分辨率测量、低温差场合
热电偶数十 μV/°C一般视分度号高温、超高温环境

NTC 在中温段灵敏度确实可怕,但阻值-温度关系是指数型的,一个测温区间要用好几个多项式分段拟合,而且器件本身一致性很差。同一型号的 NTC 在 25°C 的阻值公差经常做到 ±1% 以上,这就意味着温度误差可能到 ±0.5°C 甚至更大。PT100 虽然灵敏度低,但线性度好、重复性好,B 级精度在 0°C 时误差只有 0.3°C 左右,而且曲线用一条 Callendar-Van Dusen 公式就能描述。做工业级或者对温度控制有明确要求的设备,我一般优先选 PT100。

2.2 激励电流和比例测量的原理

PT100 本质上是一个随温度变化的电阻,要测电阻就得先给它一个电流激励。ADS122U04 内部有 IDAC 恒流源,可以配置成 250 μA、500 μA、1000 μA、1500 μA 等档位。激励电流流过 RTD 后产生差分电压,再被内部 PGA 放大、由 ADC 数字化。

这里有一个非常关键的设计思想:比例测量。如果让同一个 IDAC 电流既流过 RTD,又流过一颗精密基准电阻,然后把基准电阻上的电压作为 ADC 的参考电压 VREF,那么 ADC 输出的数字码就只取决于 RTD 电阻和基准电阻的比值,跟电流源的绝对精度、温漂都没关系了。可以这样理解:电流如果因为温度变化涨了 1%,RTD 上的电压涨 1%,基准电阻上的电压也涨 1%,ADC 拿它俩比出来还是同一个结果。这就是比例测量的好处,把"测绝对电压"变成了"测电阻比值",精度门槛一下子降下来了。

如果不想接外部基准电阻,ADS122U04 也可以用内部基准 2.048 V。内部基准的好处是省元件、一致性统一,但代价是失去了比例测量的优势,电流源的漂移会直接进入结果。对于要求比较高的场合,我更推荐用外部精密基准电阻走比例测量。

2.3 PGA 增益和激励电流的匹配计算

这一节是最容易翻车的地方。很多工程师上来就选 1 mA 电流,或者固定用 PGA=1,结果量程和分辨率都没吃满。正确的做法是根据你要测的温度范围反推。

假设我用 PT100,测温范围 0°C 到 150°C,这个范围在 HVAC 系统里很常见。温度对应的电阻范围大概是 100 Ω 到 158.4 Ω。选 IDAC = 500 μA,那么差分电压范围是:

  • 0°C:500 μA × 100 Ω = 50 mV
  • 150°C:500 μA × 158.4 Ω = 79.2 mV

如果内部基准 2.048 V,PGA = 16,那么 ADC 的满量程差分输入是 2.048 / 16 = 128 mV。79.2 mV 远小于 128 mV,放大器不会饱和,但动态范围浪费了大半。此时可以换 PGA = 8,满量程 256 mV,也可以换用 1 mA 激励让信号翻倍。但是激励电流越大,RTD 自热效应越明显。在静止空气中一颗小型贴片 PT100 在 1 mA 下可能产生 0.1°C 量级的自热温升,这个误差是做高精度测量时不想看到的。

我实际用的组合是:IDAC = 1 mA,PGA = 8,内部基准 2.048 V。这样 0°C 差分电压 100 mV,150°C 差分电压 158.4 mV,都在 256 mV 满量程范围以内。折算到 ADC 码值,每 1°C 对应的电阻变化 0.385 Ω,电压变化 385 μV,而 24 位 ADC 在这个组合下的 LSB 是 2.048 / (8 × 8388608) ≈ 30.5 nV,也就是说理论上每 1°C 有 12600 多个码值的变化。当然实际噪声不可能达到这个理想值,但即使有效分辨率折损 20 倍,也足够保证 0.01°C 级别的分辨能力。

2.4 从数字码到温度的完整换算公式

ADS122U04 输出的是 24 位二进制补码或偏移二进制数据,换算时要先把原始码值变成有符号数,然后还原成电压:

VIN = Code_signed / 2^23 × VREF / PGA

然后再根据激励电流算出电阻:

R_RTD = VIN / IIDAC

如果用比例测量,公式更干净:

R_RTD = Code_ratio × R_REF / PGA

拿到电阻值之后,再用 PT100 的标准转换公式求温度。PT100 的电阻-温度关系用 Callendar-Van Dusen 方程描述:

  • T > 0°C 时: R_T = R_0 × (1 + A×T + B×T²)
  • T < 0°C 时: R_T = R_0 × (1 + A×T + B×T² + C×(T-100)×T³)

其中 R_0 = 100 Ω,A = 3.9083×10⁻³,B = -5.775×10⁻⁷,C = -4.183×10⁻¹²。

正温区间是一个一元二次方程,可以直接求根,负温区间因为有三次项,我直接用二分法迭代求反函数,简单又不会出错。后面章节我会把对应的 C 代码贴出来。

3. UART 接口对 STM32F302 的配合细节

3.1 引脚连接和电平匹配

ADS122U04 的 UART 接口工作在数字电平,它的供电宽,但逻辑电平跟 VDD 有关。在我的方案里,ADC 和 STM32F302VC 都工作在 3.3 V 电源下,UART 的 TX、RX 直接对接即可。需要注意的是,ADC 的 TX 引脚在空闲状态下是高电平,很多 MCU 的串口接收引脚内部是带上拉或浮空的,接线的时候看清楚原理图,避免出现浮空态导致误触发。

如果 ADC 板子和主控板距离比较远,比如 HVAC 设备里温度采集板装在风柜外部、主控装在电控箱里,中间线缆长度可能超过 1 米。这时候波特率不要追求 115200,降到 9600 更稳妥。UART 是异步通信,波特率越低,对线间电容和信号边沿的要求越宽松。温度数据本身刷新率低,9600 波特率完全够用。

3.2 ADC 初始化序列

ADS122U04 的寄存器配置逻辑和常规 TI ADC 类似,主机通过 UART 发送命令字节加数据字节来读写寄存器。我的初始化流程固定分四步:

  1. 发送复位命令,让 ADC 回到默认状态。
  2. 配置输入多路开关,选择差分通道,使能对应通道。
  3. 配置 PGA 增益、基准源、IDAC 电流值。
  4. 启动连续转换,等待 DRDY 信号或状态寄存器指示。

下面是我在项目里实际使用的初始化代码框架,寄存器地址按数据手册定义放到头文件里,这里主要展示流程:

void ads122u04_init(void) { ads122u04_reset(); // 进入配置模式,依次写寄存器 ads122u04_reg_write(REG_CONFIG0, 0x02); // MUX: 差分通道AIN0/AIN1 ads122u04_reg_write(REG_CONFIG1, 0x88); // PGA=8, 内部基准 ads122u04_reg_write(REG_CONFIG2, 0x30); // IDAC=1mA, 使能通道 ads122u04_reg_write(REG_CONFIG3, 0x01); // 连续转换模式 ads122u04_start_conversion(); }

这里要说明一下:具体哪个位代表什么值,不同批次的手册可能有差异,写代码之前一定要对着最新版数据手册把每个寄存器的位定义核对一遍。我见过不止一次同事照着网上老代码抄寄存器值,结果芯片特性已经改版,读出来的数据完全是乱的。

3.3 读取转换结果的通信流程

读取转换结果时,主控发送读取命令,ADC 返回转换数据。数据一般是 4 个字节,其中 24 位是有效转换数据,还有状态位或者字节顺序信息。整段流程用串口收发就能完成:

uint32_t ads122u04_read_data(void) { uint32_t raw = 0; uart_send_byte(CMD_READ_DATA); // 发送读数据命令 uint8_t b0 = uart_receive_byte(); uint8_t b1 = uart_receive_byte(); uint8_t b2 = uart_receive_byte(); uint8_t b3 = uart_receive_byte(); // 根据手册的字节序拼装 raw = ((uint32_t)b0 << 24) | ((uint32_t)b1 << 16) | ((uint32_t)b2 << 8) | ((uint32_t)b3); return raw; }

需要特别提醒,读取操作必须在数据转换完成后进行,否则拿到的是上一帧的旧数据。我在硬件上把 ADC 的 DRDY 引脚接到了 STM32F302VC 的一个 EXTI 引脚,数据准备好之后引脚拉低触发中断,在中断里发送读取命令。这样主控完全不需要轮询,CPU 开销几乎为零。

3.4 多板组网时的地址管理

ADS122U04 的 UART 支持通过地址引脚配置设备地址,多颗 ADC 可以接在同一条串口总线上,由主机按地址寻址。我在一个冷库项目里就是这么干的:一台主控挂 4 块温度采集板,每块板子上的 ADC 地址不同,主控按顺序轮询。

组网时有个细节经常被忽略:总线上多颗 ADC 的 TX 都是开漏还是推挽输出,直接影响是否需要外部上拉电阻。如果是推挽输出,地址选中的设备在回复时,未选中的设备必须保证 TX 处于高阻态,否则就会出现总线冲突。我的做法是严格按手册把未选中设备的 UART 输出配置成禁用状态,并且在总线上加一颗 4.7 kΩ 上拉电阻,保证空闲电平是确定的高电平。实测下来总线挂 4 个节点非常稳定,没有出现帧错乱的问题。

4. MCU 侧解析与温度换算代码的实现

4.1 串口接收中断里的数据拼装

STM32F302VC 的串口接收中断每次收到一个字节,我在中断里用一个小状态机把 4 个字节拼成一帧。状态机的好处是抗干扰,即使中途错了一个字节,也能在下一帧重新对齐。

#define FRAME_SIZE 4 volatile uint8_t rx_buf[FRAME_SIZE]; volatile uint8_t rx_cnt = 0; volatile uint8_t frame_ready = 0; void USART1_IRQHandler(void) { if (USART_GetITStatus(USART1, USART_IT_RXNE)) { uint8_t byte = USART_ReceiveData(USART1); if (rx_cnt < FRAME_SIZE) { rx_buf[rx_cnt++] = byte; if (rx_cnt == FRAME_SIZE) { frame_ready = 1; rx_cnt = 0; } } } }

注意:中断处理函数里只做搬数据和置标志,解析和运算全放到主循环。温度数据不是几十 kHz 的高速信号,完全没有必要在中断里做复杂计算,能省的中断时间还是要省,尤其是主控还要跑控制算法和通信协议栈的时候。

4.2 从原始码值到电阻值

拿到 24 位原始码值后,先把它变成有符号整数,再按比例式换算成 RTD 电阻。

float ads122u04_code_to_resistance(uint32_t raw) { int32_t code_signed = (int32_t)raw; // 如果是偏移二进制,零点对应 0x800000 code_signed = (int32_t)(raw - 0x800000); // 比例测量公式(假设外部基准电阻 R_REF = 1620Ω,PGA = 8) float ratio = (float)code_signed / 8388608.0f; float rtd = ratio * 1620.0f / 8.0f; return rtd; }

这里的外部基准电阻参数要按你的实际硬件改。我的板子上选的 R_REF 是 1620 Ω,配合 1 mA 的 IDAC,VREF 就是 1.62 V。ADS122U04 的满量程输入范围在 PGA=8 时为 202.5 mV,对应 RTD 电阻范围大约 0 到 202.5 Ω,覆盖 -200°C 到 260°C 左右,对 HVAC 场景绰绰有余。你如果用的是内部 2.048 V 基准,就改成上面的电压换算法,两者的思路是一样的。

4.3 用 Callendar-Van Dusen 公式求温度

拿到电阻后,接下来就是求 PT100 的温度。正温段是二次方程,用求根公式直接解最快;负温段带三次项,我用二分法,简单可靠。

float rtd_resistance_at_temp(float temp, float r0) { const float A = 3.9083e-3f; const float B = -5.775e-7f; const float C = -4.183e-12f; if (temp >= 0.0f) { return r0 * (1.0f + A*temp + B*temp*temp); } else { return r0 * (1.0f + A*temp + B*temp*temp + C*(temp-100.0f)*temp*temp*temp); } } float resistance_to_temperature(float rtd_ohm) { float low = -200.0f; float high = 850.0f; float r0 = 100.0f; for (int i = 0; i < 80; i++) { float mid = 0.5f * (low + high); float r_mid = rtd_resistance_at_temp(mid, r0); if (r_mid < rtd_ohm) { low = mid; } else { high = mid; } } return 0.5f * (low + high); }

80 次二分在 Kelvin 范围内可以达到足够精度,STM32F302VC 带 FPU,跑一轮也就几个微秒,完全不影响整体性能。正温段如果你嫌二分慢,可以直接解二次方程,结果一样。

4.4 实测噪声和滤波处理

24 位 ADC 的原始数据虽然听起来很高大上,但实际噪声往往在低几位跳动。我实测下来,上述配置在常温下的峰峰值噪声大约是 ±3 LSB,折合温度约为 ±0.003°C。这个底噪已经很小,但如果在数据上再做一级滤波,控制系统的温度波动还能进一步变小。

我最常用的是指数滑动平均,也就是一阶 IIR,代码非常简单:

float filter_alpha = 0.2f; static float temp_filtered = 0.0f; static uint8_t filter_init = 0; if (filter_init == 0) { temp_filtered = temp_raw; filter_init = 1; } else { temp_filtered += filter_alpha * (temp_raw - temp_filtered); }

alpha 越小,滤波越平滑,但响应越慢。HVAC 管道温度本身变化就慢,alpha 取 0.1 到 0.2 很合适;如果用于工业过程里需要快速响应的场合,可以适当调大,甚至直接做一阶卡尔曼,原理类似,看你自己习惯。

5. 精度标定和实测效果(工业与 HVAC 两套场景)

5.1 校准方法:精密电阻箱比恒温槽更实用

很多工程师一谈到校准,第一反应就是准备恒温槽。恒温槽当然是标准做法,但校准一个多通道系统时,折腾油浴和水浴的成本高、效率低。我更推荐用精密电阻箱模拟 PT100 的温度点,把传感器拆下来,直接把电阻箱接到采集板输入端。

为什么可行?因为采集板真正测的是电阻,电阻箱能提供准到 0.01% 的阻值。模拟 0°C 时就把标准电阻箱拨到 100.00 Ω,模拟 100°C 就拨到 138.51 Ω。用电阻箱校准相当于直接校准了整个信号链,绕开了传感器本体的不确定度,把 ADC 和信号链的误差单独校准出来。

校准最少做两点:零点附近取 100 Ω,量程附近取 138.51 Ω(对应 100°C)或者 175 Ω(对应约 199°C)。如果负温段比较重要,再加一个 50 Ω(约 -73°C)或者 74 Ω(约 -30°C)。

5.2 校准后的数据表现

我在实验室低温箱里对一套 6 通道系统做了测试,用的是精密电阻箱加恒温槽对照。以下是校准后的一组成测数据:

设定温度 (°C)标准电阻 (Ω)板卡读值 (°C)误差 (°C)
-4084.27-40.13-0.13
-2092.16-20.08-0.08
0100.000.02+0.02
25109.7325.05+0.05
60123.2460.11+0.11
100138.51100.12+0.12

整体误差在 ±0.15°C 以内,对 HVAC 控制来说是很好的成绩。工业应用如果配的是 B 级 PT100 传感器,光传感器本身的允差就有 ±0.3°C,所以系统的瓶颈不在 ADC,而是传感器外部的接线端子、延长线电阻和传感器自身的精度等级。

5.3 校准的数学处理

两点校准最终落成一个线性修正公式。校准流程是:

  1. 用电阻箱拨到第一个标准电阻 R_s1,记录系统读出的电阻 R_r1。
  2. 拨到第二个标准电阻 R_s2,记录系统读出的电阻 R_r2。
  3. 对任意读值 R_r,修正为:
R_true = (R_r - R_r1) * (R_s2 - R_s1) / (R_r2 - R_r1) + R_s1

这个公式的意思是:把系统中存在的增益误差和零点偏移一次性修正掉。R_r1 和 R_r2 之差与 R_s1 和 R_s2 之差的比值就是增益修正系数,(R_r - R_r1) 的差乘上修正系数再做零点平移,两点校准的本质就是这么简单。

注意校准用的电阻箱精度等级一定要高于你要达到的系统精度,至少 0.05%,不然校准完了反而可能把系统拉偏。

5.4 工业场景与 HVAC 场景的差异化处理

工业现场和暖通空调看起来都是测温,但是侧重点完全不同。工业过程往往要求 4-20 mA 或以太网远传,传感器安装在管道、罐体上,电磁环境也更恶劣。我在工业项目里会在这套组合后面加数字隔离,把 ADC 板和主控板的供电完全隔开,防止地环路引入低频干扰。UART 信号穿过隔离芯片后,波形边沿会有一定退化,所以波特率我不会设太高,9600 最稳。

HVAC 场景则更看重成本和安装便利。室内空调控制器、风管温度传感器、风机盘管回水温度,这些地方走线短、环境也相对干净,隔离不是必须的,反而更看重探头的互换性和长期稳定性。用 ADS122U04 做成的采集板可以做到很小,直接塞在传感器接线盒里,出来一根两芯线的 UART 总线到主控,施工成本低,维护也方便。

6. 工程化提示:布线、隔离、总线组网和长期稳定性

6.1 模拟前端的布局布线要点

ADS122U04 虽然把模拟前端集成了,但外围的基准电阻、去耦电容、差分走线还是会影响性能。按照常规的高精度 ADC 布局规则:

  • AVDD 和 DVDD 的 0.1 μF 去耦电容尽量靠近电源引脚,走线要短。
  • 差分输入走线尽可能等长、靠近,并且避开数字信号线。RTD 探头的两根引线如果从端子进来,进板后先加一级 RC 低通,再进 ADC 输入引脚,截止频率设在几百 Hz 就够了,既能抑制射频干扰,又不会拖慢毫秒级的温度信号。
  • 基准电阻 R_REF 一定选低温漂的精密电阻,我用的温漂系数是 ±5 ppm/°C,阻值精度 0.1%。这块不能省,比例测量的参考就是它。如果想再往 0.02°C 精度冲,就用 ±2 ppm/°C 的金属箔电阻,成本翻倍但很值。

6.2 UART 隔离和浪涌保护

工业应用里,UART 线如果从主控板走到外部传感器端子,一定要考虑静电。即使设备外壳做了接地,接线时人手摸到端子上的静电也足够打坏芯片。我在 UART 收发线上各加了一颗 TVS,钳位电压选 5 V 以下,同时串联 100 Ω 电阻和 1 nF 电容做低通。这一套组合下来,4 kV 静电能扛得住,不影响正常通信波形。

如果现场有变频器、电机这类强干扰源,我会在 ADC 板和主控板之间加数字隔离芯片,隔离后的 UART 信号再走长线。隔离其实是在断地环路,对低频干扰的抑制效果立竿见影。HCV 项目如果传感器散布在多个房间,隔离不一定要做,但走线尽量避开强电电缆,实在避不开就换屏蔽双绞线。

6.3 电源方案:开关电源的纹波问题

ADS122U04 属于高分辨率 ADC,电源质量直接影响最后的码值跳动。我之前试过直接用 DC-DC 模块的 3.3 V 输出给它供电,结果代码跳动从 ±3 LSB 涨到了 ±15 LSB,噪声全部来自开关电源的纹波和开关尖峰。

解决方式是电源路径上做三级处理:DC-DC 输出先经过磁珠,再进一颗低噪声 LDO 降到 3.3 V,最后在 ADC 电源引脚跟前放 0.1 μF 和 10 μF 的电容做并联去耦。LDO 虽然多了几毛钱成本,但整个 ADC 瞬间就安静了。如果设备里本身就有模拟 3.3 V 电源,直接用它也能达到同样的效果。

6.4 长期稳定性和校准周期

电子系统最大的敌人是时间。ADS122U04 本身是 Δ-Σ ADC,增益长期稳定性很好,一年下来漂移很小。真正影响长期精度的往往是基准电阻和传感器端子。

基准电阻的温漂可以通过选型压下去,但老化是无法避免的。我在实际项目里定的是每年做一次校准,校准方法还是电阻箱两点校准。如果设备安装在恶劣环境,比如高温、高湿的工业车间,校准周期缩短到半年一次也不算过度。

还有一个很容易被忽略的细节:RTD 探头引线进入端子排后,如果用的是螺丝压接端子,热胀冷缩会让接触电阻慢慢变大。每年回访时我都会让现场把端子重新紧固一遍,拧一次就能把通道误差往回拉不少。这不算技术深度问题,但对长期稳定性非常关键,很多人排查了一整圈最后发现只是接触不良。

最后补充一点我实际用过之后的心得

这套 ADS122U04IPWR + STM32F302VC 的组合,我前后在风柜控制器、冷库温度监控、工业冷却水温度采集上都跑过。最大的感受是,高精度 ADC 固然重要,但真正决定系统精度的其实是信号链的前端设计和校准习惯。你花大价钱买了 24 位芯片,结果基准电阻随便选、传感器端子用铜线拧两圈,那精度是一点都留不住的。

如果让我给后来的人一个最重要的建议,那就是在做第一版硬件时就把 PCB 上预留好三线制 RTD 的接线位置和基准电阻的备选焊盘。ADS122U04 支持激励电流源正负端灵活切换,硬件稍微留点余地,后面你想从两线制升级到三线制做导线电阻自动补偿时,不用重新设计板子。这一点在长线传感器场景里特别实用。

另外,UART 型的 ADC 在调试阶段简直太舒服了。你不需要一根逻辑分析仪去抓 SPI 时序,一根 USB 转 TTL 小板接到电脑上,打开串口助手就能看 reg 配置返回值,排查问题的效率比 SPI 方案高很多。这也是我后续在类似项目里继续沿用这个方案的原因。

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

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

立即咨询