这活儿是从一台组合式空调机组的改造开始的。甲方要求监控盘管进出水温度、混风段、送风段总共 7 个温度点,精度要求 ±0.2°C,现场已经有两条 100 米长的布线通道,环境里还并排跑着变频器和高功率风机。拿到需求后我没有马上画板子,而是先把信号链在脑子里过了一遍:传感器是什么,信号多微弱,走线有多长,电源稳不稳,采集板离主控板有多远。最终方案核心落在 ADS122U04IPWR 和 STM32L031C6 这一对组合上,也就是标题里提到的:用一颗带 UART 接口的 24 位 Δ-Σ ADC 配合一颗超低功耗 MCU,把工业级和 HVAC 场景里的多点温度测量做扎实。这篇记录适合正在做嵌入式测温、暖通控制器、工业采集模块,或者被模拟前端精度问题折磨过的朋友翻一翻。
1. 项目背景:为什么是 UART 接口的 24 位 ADC
1.1 工业与 HVAC 温度采集的现场约束
设计产品时,选型顺序从来不是"哪个芯片功能多",而是现场给了什么约束。HVAC 机组的测点类型其实很杂:盘管进出水是水管温度,用套管式 PT100 或贴片探头;风道温度有时用长探头;冷凝器排气温度量程相对宽;还有一些状态位只需要 NTC。这些传感器信号幅度从几百微伏到几百毫伏都不等,普通 MCU 内置 12 位 ADC 在精度和可编程增益上都差一口气,外接分立仪表放大器又面临温漂大、生产一致性差的问题。
这时候一颗集成度高的 Δ-Σ ADC 就非常有吸引力。ADS122U04IPWR 是 TI 的 24 位转换器,四个差分输入通道等效八个单端输入,内部带 PGA 可编程增益放大器、低温漂基准电压源、两个匹配的恒流源,而且直接引出 UART 接口。它等于把整个精密模拟前端全包了,外围基本就是几个电容电阻,硬件设计难度一下子降下来了。HVAC 现场另一个痛点是采集板和主控板经常分开安装,为了减少走线阻抗和噪声耦合,合理的拓扑是 ADC 小板尽量靠近传感器,通过数字接口把结果送回主控。SPI 虽然快,但四根线在稍长距离和强干扰下要额外做隔离和电平转换;UART 只有两根数据线,加光耦或数字隔离非常方便。STM32L031C6 自带的 USART 和 LPUART 正好配合这种结构。
1.2 方案对比:为什么不是 DS18B20、MAX31865 或 ADS1220
我常被人问:做温度采集用 DS18B20 不就行了吗?这里要分场景。DS18B20 便宜、单总线,但只有 12 位分辨率,长期稳定性和互换性都一般,做室温显示没问题,做 ±0.3°C 以内的工业测量底气不足。MAX31865 是专门做 PT100/PT1000 的芯片,集成度很高,但它只能测电阻型传感器,热电偶和电压型信号还得另想办法,接口又是 SPI,隔离时引脚多。
ADS1220 本身性能很强,但它和 STM32 之间走 SPI,在需要电气隔离的工业现场要多花成本。既然有 UART 接口的 ADS122U04,直接把 SPI 那几根线换成 TX、RX,隔离和布线都省事。从系统成本看,ADS122U04 加上一颗 STM32L031C6,总价并不比"专用 RTD 芯片 + 另一颗 MCU"贵,而且灵活性更高:既能测 RTD,也能测热电偶,以后传感器类型变了不用重新画板。
选这个组合的真正逻辑是:用高集成度 ADC 把模拟前端的不确定性降到最低,用 UART 接口降低系统连接成本,再用 STM32L0 系列的低功耗特性让整个节点可以长期通电,甚至未来改造成电池供电。这套架构不是某个单点的性能最强,而是整体方案最扎实。
2. ADS122U04 与 STM32L031 关键特性拆解
2.1 ADS122U04 的模拟信号链
先看 ADS122U04 内部结构,大致是:输入多路复用器 MUX、可编程增益放大器 PGA、Δ-Σ 调制器、数字滤波器、24 位转换结果,最后从 UART 接口输出。它内部还集成了低温漂基准源、两个 IDAC 激励电流源、一个内部温度传感器。
这里详细说下 Δ-Σ 架构。Δ-Σ 调制器用远高于奈奎斯特频率的速率对输入信号采样,把量化误差推向高频,然后通过数字滤波器把带外噪声滤掉。你可以把它理解成一把精度很高的秤,连续称很多次再取平均,最后的分辨率远高于单次称重。所以 ADS122U04 标称 24 位,不是说每次转换都能稳定输出 24 个有效位,而是在低数据速率下有效分辨率能达到 20 位以上。对于温度变化缓慢的 HVAC 场景,20 SPS 的数据速率正好换来了极低的噪声,温度分辨率做到 0.01°C 级别是够用的。
它测 RTD 的原理是比率式测量:用 IDAC 给传感器和参考电阻提供同一个电流,ADC 同时测量两个电压的比值。因为电流完全一致,恒流源的实际电流精度、温漂都不会进入最终结果,省掉了一大块校准工作。代价只是需要一颗高精度、低温度系数的参考电阻。
2.2 STM32L031C6 的角色定位
STM32L031C6 是 Cortex-M0+ 内核,主频最高 32 MHz,内置 32 KB Flash、8 KB RAM,运行模式功耗大约 87 μA/MHz,停止模式加 RTC 唤醒不到 1 μA。这颗芯片在项目里的定位很明确:它不负责复杂的信号处理,而是做 ADC 的初始化、数据读取、温度换算和控制逻辑。
在这个项目里,STM32L031C6 的具体任务包括:上电后配置 ADS122U04 的寄存器,设置输入通道、PGA 增益、转换速率和 IDAC 电流;定时读取转换结果,把原始码换算成电阻和温度;再把温度值通过 RS-485 或者本机总线送到主控。顺便还能驱动显示屏、按键、继电器等外设。8 KB RAM 对这类任务绰绰有余,32 KB Flash 存完固件和查找表之后还有不少余量。
有人可能会问,L031 的 UART 最高速率够不够?ADS122U04 在默认 8N1 格式下,我实际用 9600 波特率跑得很稳。HVAC 的温度数据量很小,单通道每秒读 20 次,一次读四个字节,加上命令字节也就 100 字节每秒,9600 波特率完全能承受。如果板上距离短,也可以直接上 115200,但现场长线环境还是低速更可靠。
2.3 工作温度、封装与供应链友好度
ADS122U04 的供电范围是 2.3 V 到 5.5 V,可直接用 3.3 V;STM32L031C6 同样是 1.8 V 到 3.6 V,系统统一 3.3 V,逻辑电平匹配,不用做电平转换。ADC 的工作温度范围是 -40°C 到 125°C,HVAC 户外机组的电控箱夏天可能到 70°C,冬天夜间零下,这个范围足够。STM32L031C6 也提供 -40°C 到 125°C 的工业级选项。
封装方面,ADS122U04IPWR 是 TSSOP-16,手工焊接、AOI 检测都方便;STM32L031C6 是 LQFP-48,常规 PCB 加工和贴片没有任何难度。选型落到这两个具体型号,是因为它们在市场上流通量大、采购周期短,不会出现画完板子买不到料的情况。
3. 硬件设计实操:信号链、电源与布局
3.1 传感器选型:NTC、PT100 还是 PT1000
先把传感器的选型说透。HVAC 里常见三类:
- NTC 热敏电阻:便宜、灵敏度高、响应快,但非线性严重、互换性差、时间长了会漂移。适合消费级室温探头,不适合做计量级温度。
- PT100:经典工业测温元件,0°C 时阻值 100Ω,精度高、稳定性好。缺点是自身阻值小,对导线电阻特别敏感,远距离测量必须三线或四线制。
- PT1000:阻值是 PT100 的十倍,自热效应更小,对线阻和接触电阻的敏感度低很多。HVAC 和仪表行业越来越流行。
我建议新项目优先用 PT1000。同样的 1 米长铜导线,在 PT100 上可能带来 0.3°C 级误差,在 PT1000 上就只有 0.03°C 级。如果现场传感器已经固定是 PT100,那就老老实实做三线制,把导线电阻的影响降到最低。
3.2 模拟输入电路:滤波、保护和差分对称
传感器信号很微弱,模拟前端必须做滤波和钳位保护。我用一阶 RC 差分低通滤波器,截止频率放在几百赫兹到 1.6 kHz 之间。以 20 SPS 的转换速率来说,这个带宽足够宽,不会拖慢温度响应,又能滤掉变频器产生的高频谐波。
算一下:R 取 1kΩ,C 取 100nF,截止频率约 1.6 kHz:fc = 1 / (2πRC) ≈ 1.6 kHz。电容务必选 C0G/NP0 材质,X7R 在直流偏压下容量会下降,介质损耗也会影响测量稳定。输入端我还加了一对肖特基二极管 BAT54S 做钳位,配合串联电阻限制电流,把瞬态高压限制在电源轨以内。HVAC 现场 220V 动力线和信号线走同一个线槽的情况不少见,这个保护成本很低,但能避免大量售后问题。
差分输入的两条走线必须等长、对称、紧贴走,不能跨分割区。如果板子上还有 DC-DC 或继电器驱动,ADC 的模拟电源要用磁珠加电容单独滤波,避免开关噪声通过电源耦合进参考电压。
3.3 参考电压与参考电阻的选择
比率式 RTD 测量中,最核心的器件是那颗参考电阻。以我常用的配置为例:PT1000,IDAC 电流 1mA,参考电阻选 2kΩ,那么在参考电阻两端产生的参考电压 Vref = 1mA × 2kΩ = 2V。PT1000 在 0°C 时阻值 1000Ω,测量电压 1V,约为参考电压的一半;150°C 时 PT1000 约 1573Ω,测量电压 1.573V,约为参考的 78%,动态范围用得很充分。
参考电阻的精度直接进最终结果,所以我选 0.1% 精度、温度系数 10ppm/°C 的精密薄膜电阻。量产成本压力大的话,25ppm/°C 也能用,但温漂性能要自己评估。这里不建议用普通厚膜电阻,温度系数动辄 100ppm/°C,现场温差一大,误差会非常难看。
3.4 PCB 布局的几条硬经验
布局这关我踩过几次坑,总结几条硬经验:
- ADC 放在传感器接口连接器旁边,模拟走线越短越好。
- 晶振、继电器驱动、DC-DC 这些噪声源远离 ADC 的 REFP/REFN 引脚。
- 底层大面积铺地,模拟地和数字地单点连接,不要在 ADC 下面走数字信号线。
- UART 的 TX、RX 串联 1kΩ 电阻,既能抑制振铃,又能在异常情况下保护引脚。
- REFP 和 REFN 之间放 10μF 低 ESR 陶瓷电容,这个很关键,后面调试部分还会提到。
4. 固件实现细节
4.1 ADS122U04 的 UART 命令协议
ADS122U04 的 UART 默认是 8 数据位、无校验、1 停止位。它把 ADC 的寄存器操作和转换结果都封装成命令帧,常用的命令如下:
| 命令 | 字节值 | 说明 |
|---|---|---|
| RREG | 0x20 + 寄存器地址 | 读寄存器,ADC 返回一个字节 |
| WREG | 0x40 + 寄存器地址 | 写寄存器,需要紧跟一个数据字节 |
| RDATA | 0x1C | 读取一次转换结果,返回 4 字节 |
| RDATAC | 0x1D | 进入连续读取模式,只要 ENS 拉低就一直输出 |
| SDATAC | 0x1F | 退出连续读取模式 |
| START | 0x08 | 启动一次转换 |
| PWDN | 0x02 | 进入掉电模式 |
| RESET | 0x06 | 复位所有寄存器 |
时序上需要注意:写寄存器是一发一应,但 ADC 的响应不是立即出现的,中间要留一点时间。读数据时,发送 RDATA 后等待响应帧,响应帧的第一个字节是状态字节,包含 DRDY 位,后三个字节才是 24 位转换结果。如果通信状态不明,最稳妥的办法是先发 RESET,再重新初始化。
4.2 STM32L031C6 的 UART 初始化
我用的是 HAL 库,也可以用寄存器操作,核心配置一样。这里给出一个最小初始化:
#include "stm32l0xx_hal.h" UART_HandleTypeDef huart1; void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 9600; huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); } }注意引脚复用:查一下 STM32L031 的数据手册,确认 USART1_TX 和 USART1_RX 对应的是哪两个引脚,然后在 HAL_UART_MspInit 里把 GPIO 模式改成 AF 模式。一个容易犯的错是 GPIO 时钟没开,UART 怎么调都不通。另外系统时钟如果用内部 HSI16,UART 波特率误差要算一下;如果误差超过 ±3%,ADC 端可能收不到正确的起始位。
4.3 ADS122U04 初始化与寄存器配置
ADS122U04 上电后,我建议先发 RESET 命令,等 100ms,再发 SDATAC 退出可能的连续读取状态,最后逐寄存器写配置。下面是一份可读性优先的演示代码,具体寄存器位字段要对着数据手册核对:
static void ads122u_write_reg(uint8_t reg, uint8_t value) { uint8_t frame[2] = { 0x40 | reg, value }; HAL_UART_Transmit(&huart1, frame, 2, 50); } void ads122u_init(void) { uint8_t cmd = 0x06; // RESET HAL_UART_Transmit(&huart1, &cmd, 1, 50); HAL_Delay(100); cmd = 0x1F; // SDATAC HAL_UART_Transmit(&huart1, &cmd, 1, 50); // REG0:AIN0/AIN1 差分输入、使能 PGA、增益 1 ads122u_write_reg(0, 0x00); // REG1:内部基准、单次转换模式、20SPS ads122u_write_reg(1, 0x00); // REG2:参考源配置保持默认,按原理图调整 ads122u_write_reg(2, 0x00); // REG3:IDAC 电流源路由和电流值按原理图设置 // 例如 ads122u_write_reg(3, 0xA0); }第 3 个寄存器一般要设 IDAC 的电流大小和流向,这个必须和硬件电路对应起来。如果你用 1mA 激励,就要在 REG3 里把 IDAC 电流设为对应的编码,同时把 IDAC 输出引脚映射到实际连接传感器的引脚上。不同批次的寄存器位可能略有差异,最稳妥的做法是每次拿到样品先读一遍所有寄存器,确认复位默认值和手册一致。
4.4 单次转换模式与读取流程
HVAC 多点测量我推荐用单次转换模式,流程清晰,功耗也可控。步骤如下:
- 配置 MUX 选择当前要测的通道。
- 发送 START 命令启动转换。
- 等待转换完成,20SPS 对应 50ms,代码里延时 60ms 比较稳。
- 发送 RDATA 命令,读取 4 字节响应。
- 把后 3 字节拼成 24 位有符号数。
读取代码示例:
int32_t ads122u_read_once(void) { uint8_t cmd; uint8_t buf[4]; int32_t code; cmd = 0x08; // START HAL_UART_Transmit(&huart1, &cmd, 1, 50); HAL_Delay(60); // 等待 20SPS 转换完成 cmd = 0x1C; // RDATA HAL_UART_Transmit(&huart1, &cmd, 1, 50); if (HAL_UART_Receive(&huart1, buf, 4, 100) == HAL_OK) { code = ((int32_t)buf[1] << 16) | ((int32_t)buf[2] << 8) | buf[3]; if (code & 0x800000) code -= 0x1000000; // 转成有符号数 return code; } return 0; // 读取失败 }如果切换通道后第一个转换结果不好,可以读两次,第一次的结果丢弃,第二次作为有效值。我的实测经验是,通道切换后残留电荷会让第一次读数偏移几个 LSB,丢掉第一次就干净了。
4.5 校准系数存储
STM32L031C6 内部没有 EEPROM,只有 Flash。校准系数可以放在最后一个 Flash 扇区,但要考虑擦写寿命和写操作对程序的冲击。更稳妥的做法是在板上加一颗几毛钱的 I2C EEPROM,比如 AT24C02,出厂时通过上位机写入每路传感器的偏置和增益系数。HVAC 大批量生产时,每台设备在恒温槽里做两点校准,系数存进 EEPROM,运行逻辑在启动时读取。
5. 温度计算、标定与精度实测
5.1 从 ADC 原始码到电阻值
ADS122U04 的转换结果是 24 位二进制补码。差分输入下,满量程对应的码值是 2^23。如果参考电压 Vref 由同一个激励电流在参考电阻上产生,那么 RTD 电阻可以这样算:
R_rtd = (Code / 2^23) × R_ref
举个例子:Pt1000,IDAC=1mA,Rref=2kΩ,Vref=2V。0°C 时 RTD 阻值 1000Ω,测量电压 1V,占满量程一半,Code 约等于 4194304。反算电阻:R_rtd = 4194304 / 8388608 × 2000 ≈ 1000Ω,完全对得上。
这个公式成立的前提是激励电流流经 RTD 和参考电阻的路径完全一致,而且 ADC 的参考输入正确跨在参考电阻两端。比率式测量最大的优势是 IDAC 电流的绝对值漂移不掉进结果,AVDD 电源电压波动也会被抵消。设计时唯一要保证的是电流在测量窗口内稳定,不要求长期精密。
5.2 从电阻值到温度
PT1000 在 0°C 到 850°C 范围可以用 Callendar-Van Dusen 方程描述:
R(T) = R0 × (1 + A×T + B×T²)
其中 R0 = 1000Ω,A = 3.9083×10⁻³,B = -5.775×10⁻⁷。0°C 以下再加一个三次项:
R(T) = R0 × (1 + A×T + B×T² + C×(T-100)×T³)
C = -4.183×10⁻¹²。
实际代码里我一般在 -40°C 到 150°C 之间用查找表加线性插值,分辨率 0.1°C 的表格只有 1900 个点,Flash 占用很小。想更精确,在线性插值结果上做一次牛顿迭代就能把误差压到 0.01°C 以内。Cortex-M0+ 没有硬件 FPU,但温度换算频率很低,用单精度浮点完全没有压力。
5.3 标定方法:单点与两点校准
即使硬件设计得当,误差来源依然存在:参考电阻本身的精度、ADC 的偏移和增益误差、传感器自身的公差。A 级 Pt1000 在 0°C 时标准公差就有 ±0.15°C,所以整机想做到 ±0.2°C,必须校准。
单点校准适合偏移误差为主的系统,在已知温度下测出实际偏差,修正整个量程的偏移量。两点校准更完整:在 0°C 附近和 100°C 附近分别放标准温度源,记录两组误差,算出增益修正系数 a 和偏移修正系数 b,使显示温度 y = a × x + b。校准系数存到外部 EEPROM,生产线上每台设备跑一遍快速校准,几分钟搞定。
5.4 样机实测数据参考
我在样机上用冰点槽和恒温槽做了对比,参考温度计是 Fluke 标准表。校准后的一组成果如下:
| 测点 | 标准温度 | 样机读数 | 偏差 |
|---|---|---|---|
| 冰点槽 | 0.00°C | 0.04°C | +0.04°C |
| 恒温槽 | 25.00°C | 25.02°C | +0.02°C |
| 恒温槽 | 70.00°C | 69.94°C | -0.06°C |
| 恒温槽 | 100.00°C | 100.08°C | +0.08°C |
这个结果说明经过两点校准后,系统在 0°C 到 100°C 范围内可以稳定在 ±0.1°C 以内。需要注意的是,样机数据是理想实验室条件下得到的,量产时每台设备的传感器个体差异、安装方式、走线长度都会影响最终精度,所以生产校准流程和质检标准同样重要。
6. 调试中的典型问题与解决实录
6.1 UART 通信无响应排查
上电后发 RDATA,MCU 收不到任何字节,这是最常见的坑。排查步骤:
- 先用逻辑分析仪抓 TX 线,确认 MCU 确实发出了完整波形,波特率偏差不能太大。STM32L031C6 如果内部时钟没配准,9600 波特率可能差出 3% 以上。
- 检查 ADC 的 RESET 引脚。数据手册要求上电后等待复位完成,我原来初始化太快,后来在 RESET 命令后加了 100ms 延时,问题就消失了。
- 确认电平匹配。ADC 用 3.3V 供电时和 MCU 直连没问题,如果 ADC 单独用 5V,TX 线上最好串 1kΩ 电阻。
- 检查 ADC 是否被之前配置成了连续读取模式。这种情况要先发 SDATAC,再发 RESET,顺序不能反过来。
6.2 读数跳变与参考电容的教训
有一次样机把 ADC 放得离 DC-DC 很近,测量结果的低几位一直在跳。我最初以为是布局问题,换了几个滤波电容都没用。最后按数据手册要求,在 REFP 和 REFN 之间并联一颗 10μF 低 ESR 陶瓷电容,同时在 AVDD 到 GND 之间加 1μF 和 0.1μF 去耦,跳变立刻小了下去。
原理是 Δ-Σ ADC 在采样瞬间需要参考源快速补充电荷,参考电容太小会导致参考电压出现毛刺。这颗电容的位置比电源去耦电容更讲究:要靠近 REFP/REFN 引脚,走线短而粗,不能和数字信号共用一个过孔。
6.3 长导线压降与两线制陷阱
最早用过两线制接 PT100,现场导线长 5 米,读出来的温度比实际高了 1°C 多。算一下就知道问题在哪:铜导线每米大约 0.1Ω,两线制来回 10 米就是 1Ω,PT100 本身才 100Ω,1Ω 的导线电阻直接引入约 2.5°C 的误差。换成三线制后,导线电阻通过差分测量和恒流源补偿,问题彻底消失。
这里有个经验:现场线长超过 2 米,就不要用两线制,要么三线,要么四线。软件补偿只能补固定线阻,铜的电阻率随温度变化,现场温差一大,软件补偿会越补越乱。
6.4 上电时序与反向供电
HVAC 控制器里常见 24V AC 转 5V 再转 3.3V 的供电架构。有次测试 24V 断电后,MCU 已经复位了,但 ADS122U04 还在微弱工作,量了一下发现是 MCU 的 UART TX 引脚通过内部保护二极管给 ADC 反灌了电流。解决办法是在 UART 的 TX 和 RX 线上加 10kΩ 下拉电阻,同时把 ADC 的 RESET 引脚用 10kΩ 上拉到高电平,确保 MCU 掉电时 ADC 处于复位状态。这个小改动成本极低,但对现场故障率影响很大。
7. 方案扩展与配置速查
7.1 这套组合还能做什么
除了 RTD 测温,ADS122U04 的高增益 PGA 也很适合热电偶。把增益设到 16 到 64 倍,配合内部温度传感器测量冷端温度,加上热电偶查表,就能做多通道热电偶采集。STM32L031C6 的 LPUART 可以在低功耗模式下定时唤醒,结合 ADS122U04 的掉电模式,整个节点的平均功耗可以做到几十微安级别,非常适合智能温控阀、无线温度标签这类电池供电场景。
工业场景中还可以把 UART 信号通过 RS-485 收发器转成差分总线,多个采集点挂到同一条总线上,主控轮询各节点。这样做的好处是 ADC 依然靠近传感器,而数字总线可以拉得很远。不过要注意每个节点必须有独立的地址识别机制,ADS122U04 本身没有地址,地址逻辑要在 STM32L031 的固件里自己实现。
7.2 我的一些真实教训
做这个项目前后花了不少时间,真正提升系统稳定性的往往不是高大上的算法,而是这些细节:
- 不要迷信 24 位这个数字,要关心的是有效分辨率。20 SPS 下低噪声是它的优势,但数据速率一高,跳字明显变大,选型时要按实际速率评估。
- 模拟前端越简单越好,但滤波电容和参考电容绝对不能省。
- 原理图评审时要专门检查 IDAC 的回流路径,电流从哪里出来,最后必须回到同一个参考电阻上。回流路径错一次,整个量程都会错。
- 固件要加超时和重试机制,不能死等 UART 响应。现场干扰导致偶发通信错误是正常的,重点是怎么恢复。
7.3 可复用的最小配置速查表
最后给一份可以直接抄作业的配置速查:
| 项目 | 配置 |
|---|---|
| 传感器 | PT1000,三线制 |
| IDAC 电流 | 1mA |
| 参考电阻 | 2kΩ,0.1%,10ppm/°C |
| ADC 输入 | AIN0/AIN1 差分 |
| PGA 增益 | 1 |
| 数据速率 | 20 SPS |
| 转换模式 | 单次转换 + START 命令 |
| UART | 9600,8N1 |
| 电阻换算 | R = Code / 2^23 × Rref |
| 温度换算 | CVD 方程或查找表 |
这套配置在 HVAC 控制器、工业采集模块、实验室恒温设备上都可以直接套用,改动传感器类型或者量程时,只需要调整 IDAC 电流和增益两个参数。
我这几年做测温项目最大的体会是,温度测量看着简单,真正决定成败的往往是那些不起眼的地方:参考电容、三线制、波特率余量、上电时序。ADS122U04 和 STM32L031 这套组合算不上花哨,但足够稳,适合想把工业级测温做扎实又不愿意在模拟前端上无限投入的项目。回头如果要做多通道温控节点,我还会沿用这个架构,只是会把 MCU 换成更低功耗的型号,把整个节点的功耗再压一档。