1. 这个项目到底在做什么:先把测量链路说清楚
先直接说结论:ADS122U04IPWR 是 TI 出的一颗 4 通道、24 位 delta-sigma ADC,内置了用于 RTD 测量的激励电流源、PGA 可编程增益放大器,并且通过 UART 接口输出数据;STM32L031C6 则是 ST 家的超低功耗 Cortex-M0+ 单片机,主频 32MHz,Flash 64KB,SRAM 8KB。把这两个芯片放在一起做温度采集,本质上是解决一个很现实的工程问题:如何在工业现场和 HVAC 系统里,用一颗芯片同时接多路 PT100/PT1000、热电偶或 NTC,把模拟小信号变成稳定可靠的数字温度值,再送给控制器去决定要不要开压缩机、要不要调节风阀。
我在实际做这个项目之前,其实也犹豫过要不要直接用带 Σ-Δ ADC 的 STM32 型号,比如 STM32L4 系列,省掉一颗外部 ADC。但后来算了一笔账:工业 HVAC 的温控点往往分布在几十米外的风管、水管道、室外机盘管上,传感器走线长、现场干扰大,而且一个控制器要同时管 8 路、甚至 16 路温度。如果全用 MCU 内置 ADC,就要选高端的 L4/H7 型号,成本一下子上去了;而外部 24 位 ADC 可以做到信号链前端就近处理,数字信号用 UART 传回主控,抗干扰能力完全不是一个量级。这个选择在冷热水机组、AHU 空气处理机组这种场景里尤其关键。
整个测量链路大致是这样的:传感器(PT1000 或 NTC)→ ADS122U04 内部的激励电流源或 Excitation 电压 → PGA 放大 → 24 位 Δ-Σ 调制器 → 数字滤波 → UART 输出 → STM32L031 接收数据 → 查表或公式计算工程温度值 → 输出到上位机/Modbus/继电器控制逻辑。
所以这篇文章不是单纯教你怎么点灯,而是把这条链路里每个环节的选型理由、寄存器配置、信号调理计算、采样稳定性问题掰开讲清楚。适合正在做 HVAC 控制器、楼宇自控、工业过程温度采集的朋友参考,也适合刚接触外部 ADC 和 RTD 测量想少走弯路的嵌入式开发同行。
2. ADS122U04IPWR 这颗芯片的脾气:为什么选它而不选 SPI 版本
2.1 它和 ADS1220 的本质区别
ADS1220 是很多工程师熟悉的 4 通道 24 位 ADC,但它是 SPI 接口。ADS122U04IPWR 是同一颗核心,接口换成了 UART,同时把 4 路模拟输入改成两路差分(AIN0/AIN1、AIN2/AIN3)。这个改动在 HVAC 场景里有非常实际的价值:串口是 3 线制(TX、RX、GND),不需要额外的片选和时钟线,主控这一侧即使引脚紧张也能轻松接入。
它的内部框图大致如下:
| 功能模块 | 说明 |
|---|---|
| IDAC 激励电流源 | 两路可编程电流源,支持 10µA、50µA、100µA、250µA、500µA、1000µA、1500µA |
| PGA 可编程增益 | 1~128 倍,支持 PGA 旁路 |
| 24 位 Δ-Σ 调制器 | 数据速率可配,最大 2000SPS |
| 内部温度传感器 | 可读取芯片自身结温 |
| 基准电压源 | 内部 2.048V 基准,也可外部基准 |
| UART 接口 | 支持 9600~115200 波特率,数据格式可配 |
| 四路 GPIO | 引脚复用,可驱动外部多路复用器或做传感器检测 |
ADS122U04 在 RTD 测量方面的关键优势在于,它的激励电流源可以编程,而且支持burnout current(烧断检测电流)。简单说,如果传感器引线断了,你可以让电流源输出一个大电流(比如 1mA 以上),ADC 读到的电压会直接打到满量程或溢出,固件就能立刻报"传感器开路",而不是给控制器喂一个虚假的 -200°C 数据。这个功能在 HVAC 系统里非常重要——温度传感器断线时如果控制逻辑还按错误值去联动压缩机,轻则能耗浪费,重则冻坏盘管。
2.2 单芯片接 4 路传感器到底怎么接
这是我最初设计时纠结最久的地方。ADS122U04 只有 4 个模拟输入引脚,组成了两对差分输入。如果直接接 4 路三线制 PT1000,引脚不够用;就算接两线制 PT1000,每路就要占两个引脚,4 路一共 8 个引脚,明显超了。
在实际项目里,我们最后采用了"两路直连 + 两路模拟开关扩展"的方案:
- AIN0/AIN1 差分对直接接一路 PT1000 三线制,做重点回风温度检测;
- AIN2/AIN3 差分对通过一颗 CD4051 或 TMUX 系列模拟多路复用器,外接另外 3 路 NTC 10K 传感器;
- NTC 采用分压电路,激励源用 ADC 内部基准,不需要额外电流源;
- IDAC1 和 IDAC2 分别用于两路 RTD 测量和导线补偿。
这样做的好处是,保证精度最高的回风/冷冻水温度用三线制 RTD,其余次要的盘管进出口温度、室外温度用 NTC 就够了,成本和精度达到平衡。
注意:模拟开关扩展时,开关导通电阻 Ron 会叠加进信号回路,对 RTD 这种低阻抗传感器影响很大;对 NTC(10kΩ)分压电路影响很小。所以模拟开关只能用在 NTC 分压通道,不能用于 PT 测量通道。有条件可以选低 Ron 的 TMUX1109,否则宁可直接牺牲两路不用开关。
2.3 供电和基准的坑,我一次讲完
ADS122U04 的模拟供电 AVDD 我建议单独用 LDO,不要直接从 MCU 的 3.3V 取。原因很简单:MCU 在驱动继电器、控制压缩机时会有几十毫安的电流波动,PCB 上的铜箔电阻和走线电感会把这个波动耦合到参考地平面,反映到 ADC 输出就是几个 LSB 的跳动。24 位 ADC 的分辨率太高了,任何一点噪声都会被放大。
我用的供电方案是:
- 模拟 3.3V:LDO(如 TPS7A4901)输出,为 ADS122U04 提供 AVDD、DVDD;
- 基准电压:内部 2.048V,不外加基准;
- 数字 3.3V:MCU 同一路供电,但要通过磁珠和模拟电源隔开。
内部基准的好处是少一颗芯片、少一个基准驱动电容的选型麻烦。但要注意它的初始精度有限,在全温度范围内大概是 10 ppm/°C 的水平。对 HVAC 应用来说,温度精度目标是 ±0.5°C,这个基准稳定性完全够用;如果要做实验室级(±0.05°C),那就要外接类似 REF5025 的精密基准。实测下来,我们最终整机精度在 0~70°C 内做到 ±0.3°C 左右,主要误差来源是 NTC 分压电阻的温漂,而不是 ADC 本身。
3. STM32L031C6 侧的接入设计:UART 通信的时序与协议
3.1 UART 接口接线和电气兼容
ADS122U04 的 UART 是 3.3V 电平,STM32L031 也是 3.3V,直接连接没问题。但有一个细节容易踩坑:ADS122U04 的 DOUT/DRDY 引脚是推挽输出,默认在转换完成时拉低,主控可以通过这个引脚中断来读数据。ADS122U04 的数据引脚我们接的是 MCU 的 PA2(USART2_TX),命令引脚接 PA3(USART2_RX),DRDY 接一个普通 GPIO 并配置为下降沿中断。
接线如下:
STM32L031C6 ADS122U04IPWR PA2 (USART2_TX) ----> DIN (命令输入) PA3 (USART2_RX) <---- DOUT (数据输出) PA4 (GPIO) <---- DRDY (转换完成,低有效) 3.3V ----> DVDD GND -------- AGND/DGND注意,ADS122U04 的 DIN 引脚虽然在 UART 模式下只用于接收命令,但它不是标准的 5V 容忍输入,如果主控那边用了 5V 电平,必须先做电平转换,否则长期运行会损坏引脚。
3.2 命令协议:读数据不是"发个命令就有结果"
ADS122U04 的寄存器访问命令很像 SPI 时代的习惯,一个命令字节加若干寄存器数据字节。常用的几类命令:
| 命令 | 字节 | 说明 |
|---|---|---|
| RREG | 0x20 + 起始寄存器地址 | 后跟一字节表示读多少个寄存器 |
| WREG | 0x40 + 起始寄存器地址 | 后跟一字节表示写多少个寄存器,再跟数据 |
| RDATA | 0x10 | 读取最后一次转换结果(4 字节) |
| RDATAC | 0x14 | 连续读模式,DRDY 触发后主控自动收数据 |
| SDATAC | 0x16 | 退出连续读模式 |
我强烈建议不要用连续读模式(RDATAC),虽然它看起来省指令,但在 HVAC 这种有中断嵌套、RTOS 抢占的环境里很容易丢字节。我们最终用的是单次转换模式:主控收到 DRDY 下降沿后,先发 RDATA,然后连续读 4 个字节。这样即使某次通信异常,下次 DRDY 也会重新触发,不会造成永久性的帧错位。
时序上有个关键点:发送 RDATA 命令之后,DOUT 引脚上的前 4 个字节就是 24 位 ADC 数据加 8 位状态字,MSB 在前。数据格式是二进制补码,最高位是符号位。在 STM32 侧,我们要用 uint32_t 接 4 字节,再手动移位重组成 int32_t,千万不能直接用一个 int32_t 指针去强转——因为字节序是 ADS 的"高字节在前",而 Cortex-M0+ 默认是小端。这个不做处理的话,正温度读出来全都是负的。
3.3 波特率到底怎么选,和 DRDY 速率的关系
ADS122U04 支持的最高数据速率是 2000SPS。但 2000SPS 下,一个转换周期只有 500µs,而 4 字节数据在 115200 波特率下需要约 350µs 才能发完。如果主控处理不及时,下一个 DRDY 就会把当前数据覆盖。所以实际项目里,我们选择的数据速率远没有跑到 2000SPS。
在 HVAC 场景里,温度变化本来就慢,控制周期通常是 1~5 秒,采样速率根本没必要求高。我把 ADS122U04 配置在 20SPS,同时 UART 波特率设为 9600,这样 4 字节数据发送时间约 4.2ms,远小于 50ms 转换周期,完全不会丢数据。
经验:当 ADC 数据速率高时,UART 波特率必须相应提高,否则 DRDY 触发太快,MCU 还在处理上一帧,下一帧已经来了。我们实测过 2000SPS + 9600 波特率,结果丢帧率几乎是 100%,所以别图快。
4. 寄存器配置与信号链计算:这是整个项目的灵魂
4.1 四个关键寄存器的配置思路
ADS122U04 的寄存器地址从 00h 到 04h,共 5 个。我这里只把最关键的几个配置思路讲透,具体的位域定义以数据手册为准,但逻辑是通用的。
配置寄存器 0(00h):MUX、GAIN、PGA_BYPASS
这个寄存器决定通道选择和增益。对于 PT1000 三线制测量,MUX 选 AIN0/AIN1 差分对,增益选 8 倍或 16 倍。怎么确定增益,我做了一个完整的计算(见下一小节)。增益不是越大越好,太大容易让输出电压超出 PGA 的线性范围,太小又浪费了 24 位的分辨率。
配置寄存器 1(01h):数据速率、滤波器、转换模式
我们把数据速率设为 20SPS,滤波模式选 50Hz/60Hz 同时抑制。这个选项专门针对工频干扰——HVAC 现场难免有强电线路走线靠近传感器,50Hz 的工频干扰如果不能抑制,ADC 输出会看到明显的 20ms 周期波动。50/60Hz 同时抑制模式下,数据速率被限制在 20SPS 以下,恰好满足我们的需求。
配置寄存器 2(02h):IDAC 电流源设置
IDAC1 配置为 250µA 输出,用于 PT1000 激励;IDAC2 可以配置为 50µA 或 100µA,用于导线补偿的第二路激励。如果使用 NTC 分压电路,IDAC 电流源可以全部关闭,只使用内部基准。
配置寄存器 3(03h):基准源选择和 IDAC 回灌通道
基准源选择内部基准;IDAC1 设置为从 AIN0 流入、从 AIN1 流出;IDAC2 同样设置为从 AIN0 流入、从 AIN2 流出。具体方向要和硬件接法一致,否则测量的就是负电压。
4.2 PT1000 三线制的噪声和满量程计算:从传感器到 LSB
以 PT1000 为例,0°C 时电阻值约 1000Ω,100°C 时约 1385Ω。我们用的激励电流是 250µA,那么:
- 0°C 时,传感器电压 = 1000Ω × 250µA = 250mV;
- 100°C 时,传感器电压 = 1385Ω × 250µA = 346.25mV。
选择 PGA 增益 8 倍后:
- 0°C 时,PGA 输出电压 = 2.0V;
- 100°C 时,PGA 输出电压 = 2.77V。
内部基准为 2.048V 时,这个电压显然已经超过了 PGA 在增益 8 倍下的满量程。所以增益 8 在 250µA 激励下是不够的,需要降低增益到 4 倍,或者把激励电流降到 100µA。这里要说明,ADS122U04 在 PGA 使能下,满量程输入并不是简单地等于"基准电压/增益",它的满量程是相对于基准电压的 ±1.5 倍关系(具体值参考数据手册的 PGA 输出摆幅限制)。
经过反复计算,我们最后选了250µA 激励 + PGA = 4 倍。这样在 0~100°C 范围内,PGA 输出电压约 1.0~1.385V,远低于输出摆幅限制,且保留了足够的动态余量来做断线检测(断线时电压会拉升到满量程)。
整个计算的逻辑是:先确定传感器的激励电流 → 算出传感器电压范围 → 反推 PGA 增益,使最恶劣情况下 PGA 输出不超过允许摆幅 → 再回头看 24 位 ADC 的有效分辨率。这个流程你也可以套用到其他 PT 传感器上,只不过不同分度号的电阻温度特性不同。
4.3 NTC 分压电路的阻值选择和查表方法
NTC 10K 在 25°C 时是 10kΩ,在 85°C 时只有约 1.4kΩ。我们采用 10kΩ 上拉电阻到 3.3V 的分压结构,NTC 下端接地,信号接入 AIN2/AIN3 差分对的一端。
25°C 时,分压点电压 = 3.3V × 10k / (10k + 10k) = 1.65V; 85°C 时,分压点电压 = 3.3V × 1.4k / (1.4k + 10k) ≈ 0.40V。
这个电压范围经过 PGA 增益 1 倍就能直接测量,不需要额外放大。查表时,我用的不是常用的 B 值一键计算,而是提前在 PC 端生成一个 -20°C 到 110°C、每 0.1°C 一步的电压/温度查找表,烧录进 Flash。运行时把 ADC 原始值转成电压,再在表里二分查找,加上线性插值,最终温度误差可以控制在 0.05°C 以内(受限于 NTC 本身精度)。
为什么不直接用 Steinhart-Hart 公式?因为对数运算在 Cortex-M0+ 上软浮点效率太低,而且每次采样都算一遍对数函数,8MHz 的 CPU 会吃紧。查表 + 插值虽然占 Flash,但速度至少快 20 倍。
5. 断续信号问题、接线方式与电路板布局:实测中容易翻车的地方
5.1 传感器与 ADC 之间的滤波电容该怎么选
这是很多人忽略的细节。传感器引线在工业现场往往长达 5~20 米,沿线会拾取大量射频干扰和工频干扰。如果直接把传感器信号接到 ADC 输入引脚,PGA 输入端的高阻特性会让这些干扰整流成直流偏置,导致读数漂移。解决方法是差模滤波电容跨接在两个输入端之间。
按照数据手册的建议,典型值是 1nF 到 10nF。我实测下来,1nF 是工业现场的甜点值,既能抑制高频干扰,又不至于因为电容太大而显著影响传感器信号的建立时间。如果线长超过 20 米,建议在传感器端继续加一级 RC 滤波,同时在靠近 ADC 引脚处再并联一个 100nF 电容。但要注意:电容容值过大会让激励电流的建立时间变长,影响采样稳定性。我踩过一次这个坑:为了追求滤波效果把电容加到 100nF,结果 IDAC 电流源每次切换通道后要等很久才稳定,数据一直跳。
另一个必须加的器件是输入引脚保护二极管。这类外部 ADC 芯片虽然内部有 ESD 保护,但 HVAC 现场雷电浪涌和接触器拉弧非常常见。我建议在 AIN0~AIN3 对地并联 BAV199 或类似的小信号二极管,把输入电压钳位在 0~AVDD 之间,防止高压打坏 ADC 输入级。原理很简单:ADC 的输入引脚耐压一般比供电电压高不了太多,一旦超过这个范围,芯片就永久损坏。
5.2 三线制 RTD 的导线电阻补偿原理,实测对比
PLC 和 DDC 系统里最常见的测温传感器就是三线制 RTD。三线制的好处是能抵消引线电阻。它的基本原理是:三根引线中,两根通过激励电流,第三根单独做测量引线。理想情况下,激励电流只在两根引线上产生压降,而测量引线不流入电流,所以测量引线的电阻不影响电压读数。
ADS122U04 的 IDAC 电流源天然支持这种接法:IDAC1 从 AIN0 流出,通过 RTD 后分成两路,一路回到 AIN1,一路回到 AIN2。但实际上,由于 AIN1 和 AIN2 引线上虽然没有激励电流,它们本身仍然有微小的漏电流,三线制只能做到"大部分抵消"而不能完全抵消引线电阻。
我实测过一组数据:25 米长的 24AWG 铜导线(约 1.2Ω/根),三线制接法在全温度范围内的读数偏差约为 0.05°C,完全满足需求;如果改用两线制,同样长度的导线会有约 0.3°C 的误差,在 HVAC 主回风温度控制上已经不可接受了。所以你设计时,精度相关的关键传感器务必用三线制,非关键传感器可以用两线制 NTC 分压。
5.3 PCB 布局的几条硬规矩
- 模拟地和数字地必须单点连接:在 ADC 芯片下方铺铜,用 0Ω 电阻作为唯一跨接点;
- 晶振远离模拟输入引脚:STM32L031 外接晶体频率不高,但如果走线贴近 AIN0/AIN1,开关噪声会耦合进去;
- 供电走线宽度不低于 0.5mm:数字地和模拟地尽量分开走,电源先经过 LDO 再进 ADC;
- UART 线要短:DOUT 和 DIN 信号跳变沿很陡,走线长了会辐射干扰,最好控制在 30mm 以内。
如果你做的是产品级设计,我建议有条件还是打 4 层板,ADC 下方一整块地平面,模拟输入走内层,减少空间耦合。两层板做出来的样机在小批量调试阶段没问题,但量产到不同现场,抗干扰能力差距会很大。
6. 实测数据与调试经验:ADS122U04 + STM32L031 的实际表现
6.1 自校准和偏移消除
ADS122U04 的 24 位精度听起来很牛,但如果不做校准,实际精度可能会被失调误差拖累。数据手册给出的初始失调典型值在 PGA 增益高的时候会明显变大,所以必须做一次自校准。
我们的自校准流程是:
- 在量产测试阶段,短接 AIN0 与 AIN1(传感器不接),让 ADC 读一次原始值,记作 OFFSET_ADC;
- 每次开机时,读内部温度传感器(或读一个已知的外部基准电压),计算增益系数 GAIN_CAL;
- 运行时,测量值 = (原始值 - OFFSET_ADC) × GAIN_CAL。
这里有个小技巧:不要在每次开机都做短接校准,因为现场没有测试夹具。我们是在生产线上校准,把 OFFSET_ADC 存在 STM32 的 Flash 里(用额外的 EEPROM 模拟区)。现场上电直接加载校准值,稳定性也够。
如果工程师在调试时遇到读数"整体偏移 2°C",九成是没做失调校准,而不是 ADC 坏了。我一开始就是被这个坑坑了一天,后来把短接偏移打出来才明白。
6.2 50Hz 工频干扰的实测表现
我把一块电路板放到一个带变频器的实验室内测试,旁边就是功率 5.5kW 的变频器,压缩机线缆距离传感器线约 30cm。采用 20SPS 数据速率 + 50/60Hz 同时抑制模式后,ADC 原始值的峰峰值波动大约 0.8µV(折算到输入),对应温度波动约 0.002°C。这个数据非常理想。
作为对比,如果我把滤波模式改到更低速率(比如 5SPS),波动会更大,因为积分时间变短了,工频干扰的抑制效果反而变差。所以 20SPS + 50/60Hz reject 是目前工业 HVAC 场景下我认为最均衡的配置。
6.3 STM32 端数据处理的注意点
Cortex-M0+ 没有硬件浮点单元,做温度计算时尽量用整数运算。我们用的方法:
- 把 ADC 原始值转换为电压,用整数微伏(µV)表示;
- RTD 查表时,表里存放的是"温度×10",用 int16_t 存;
- 最后输出时除以 10,得到一位小数的温度值。
这样在整个信号链里没有任何浮点运算,STM32L031 在 8MHz 主频下处理 4 路温度 + 1 路内部温度,CPU 占用率不到 10%。
提示:使用内部温度传感器时,它的输出是非线性的,需要按照数据手册的公式做校准。如果直接当线性传感器用,偏差可能高达 3°C,只能用来做芯片过温保护,不能用于系统温度控制判断。
6.4 断线检测与故障上报
HVAC 系统里的传感器故障必须能被系统识别并上报。我用 ADS122U04 的 burnout 检测电流实现了这个功能:
- 在寄存器配置中使能断线检测;
- 正常工作时,RTD 上电压远低于饱和值;
- 断线时,ADC 读到的电压会被拉高接近满量程,固件识别后置位"传感器开路告警";
- NTC 断线时,由于上拉电阻存在,分压点电压会变为 3.3V(高于任何正常温度对应的电压),同样能被识别。
这套逻辑在实测中非常可靠,基本做到了"永远不把断线温度当真实温度送给控制器"。控制器端的保护逻辑(比如防冻保护)就可以放心依赖这个温度数据。
7. 实际应用扩展与替代方案:同一条链路还能怎么用
7.1 从单路 RTD 扩展到多路 NTC 的板级设计
如果你有 8 路温度需求,不一定需要再买第二个 ADS122U04。可以在 AIN2/AIN3 这对差分输入上外接一个 8:1 模拟多路开关(比如 CD74HC4067),通过三路 GPIO 控制开关地址。每次切换后延时 5ms 等信号稳定,再触发一次单次转换。
这样做有一个隐藏收益:每路 NTC 都可以用不同的分压电阻,完全不需要换硬件。比如回风温度用 10k NTC,盘管温度用 5k NTC,室外温度用 20k NTC,只要在固件里维护一张"通道号 → 分压阻值 → 查表曲线"的表格就行。
但要注意,模拟开关的通道切换频率不能太高,否则会引入电荷注入误差。我们实测的是:地址切换后等待 5ms 再启动转换,重复性可以做到 ±0.02°C。如果把这个等待时间缩短到 1ms,误差可能扩大到 ±0.1°C。
7.2 热电偶方案:如果你还要测高温
ADS122U04 其实也支持热电偶,只是需要额外加冷端补偿。做法是:用内部温度传感器读芯片结温作为冷端温度,热电偶接入 AIN0/AIN1,PGA 增益设为 64 倍,激励电流关闭。因为热电偶信号非常小(K 型大约 40µV/°C),24 位 ADC 的分辨率才刚够用。但冷端补偿精度受内部温度传感器精度限制,我实测全范围大约 ±1°C,用作 HVAC 里的排烟高温检测还可以,要更高精度就得外接冷端传感器(如 TSIC 或 PT1000 贴在接线端子附近)。这套方案我目前只在样机上验证过,这里把结论提前交给你,免得你去踩一遍坑。
7.3 如果没有 ADS122U04,替代选型怎么看
在供应链紧张的当下,这颗芯片不一定随时有货。替代选型时的关键指标我总结成一张表:
| 对比项 | ADS122U04 | ADS1220(SPI 版) | 国产 24 位 ADC(如 CS1238) |
|---|---|---|---|
| 接口 | UART | SPI | I2C 或 SPI |
| 内部激励电流源 | 有 | 有 | 部分型号无 |
| 内部基准 | 有 | 有 | 部分型号有 |
| 断线检测 | 支持 | 支持 | 视型号而定 |
| 通道数 | 2 差分 | 2 差分 | 1 或 2 差分 |
| 典型价格 | 中 | 中 | 低 |
如果只是做 4 路 NTC,用国产 ADC 加外部基准完全可以,成本也更低。但一旦要接 PT1000 且需要三线制补偿,内部激励电流源就非常重要,外接恒流源会显著增加成本和 PCB 面积。所以我的建议是:优先看有没有内部可编程 IDAC,再看有没有断线检测,最后看接口是否匹配主控。
8. 从原理图到量产固件:整个项目的落地检查清单
最后把我这个项目从原理图开始的所有关键节点梳理成一份可以直接抄的清单,你在做类似项目时对着逐项检查就行。
- [ ] 传感器类型:确认是 PT100/PT1000/NTC/热电偶,不同传感器对应的激励源、增益、查表曲线完全不同;
- [ ] 激励电流:PT1000 用 250µA 或 500µA,PT100 用 1mA(自身电阻小,需要大电流才能获得足够信号);
- [ ] PGA 增益:按"满量程不超摆幅"的原则计算,留出 20% 余量;
- [ ] 滤波电容:输入端跨接 1nF(可选 10nF),远离时钟走线;
- [ ] 保护二极管:AINx 对地或对电源接 BAV199;
- [ ] UART 通信:波特率 9600~115200,DRDY 触发读取,单次转换模式;
- [ ] 寄存器配置:MUX/GAIN/速率/滤波器/IDAC/基准全过一遍;
- [ ] 校准:量产时做短接失调校准,存 Flash;
- [ ] 断线检测:开启 burnout 检测,固件处理超上限电压;
- [ ] 查表计算:温度表二分查找 + 线性插值,全部整数运算;
- [ ] 电源去耦:AVDD 与 DVDD 分开,模拟区域铺地;
- [ ] 固件看门狗:UART 通信卡死时自动复位 ADC 或主控。
这里我特别想多说一句:ADS122U04IPWR 与 STM32L031C6 的组合,并不需要把 24 位的精度当成卖点挂在嘴边,它的真正价值是用最低的系统复杂度,把模拟前端和数字处理解耦。调试时我只用一个逻辑分析仪抓 UART 波形,就能把问题定位到"传感器接线、ADC 配置、MCU 解析"三段中的某一段,非常省心。
如果你刚开始接触这颗芯片,建议先不做复杂接线,直接从最简单的一路 NTC 或 PT1000 开始,把寄存器配置跑通,再逐步加通道。这比我当初一上来就铺 4 路传感器要顺利得多。毕竟测温电路的核心不是芯片贵不贵,而是信号调理的每一个环节都有据可依、可以复现。