工业现场的温度测量说起来简单做起来全是细节。PT100、热电偶、热敏电阻这些传感器本身精度可以做到很高但真正决定系统测量质量的往往是前端信号链的设计和ADC的选型。我最近在做一个HVAC系统的温度采集模块用的是ADS122U04IPWR这颗24位ΔΣ ADC搭配STM32F723ZE主控整个调试过程踩了不少坑也积累了一些实战经验。这篇文章就把从选型、硬件设计、固件配置到实测校准的完整链路梳理一遍尤其是那些数据手册上不会写、但实际调试中一定会遇到的问题。1. 为什么HVAC和工业测温场景需要ADS122U04IPWR这类ADC1.1 工业温度测量的信号特征工业环境和HVAC系统里的温度测量跟消费级产品完全不是一个量级的要求。HVAC场景中常见的测温范围大概在-40°C到150°C之间涉及冷媒管道温度、送风回风温度、水温、室外环境温度等多个测点。工业场景更宽从低温储罐到高温管道跨度可能从-200°C到800°C。这些场景有几个共同特点传感器输出信号极其微弱、现场电磁环境复杂、测点分散且往往需要长线传输、系统要求长期稳定运行免维护。PT100在0°C时阻值100Ω温度系数大约0.385Ω/°C激励电流1mA的情况下满量程信号也就几十毫伏。热电偶更夸张K型热电偶的塞贝克系数约41μV/°C100°C温差才产生4.1mV的信号。这种量级的信号用STM32F723ZE内置的12位ADC去采分辨率根本不够看。STM32F723ZE的片上ADC是12位的参考电压3.3V的情况下最小分辨电压约0.8mV。对于PT100来说0.8mV对应的温度误差大约是2°C这还没算噪声和温漂。HVAC系统通常要求±0.5°C甚至±0.2°C的测量精度片上ADC显然力不从心。1.2 ADS122U04IPWR的核心优势ADS122U04IPWR是TI的一款24位ΔΣ ADC内置PGA、基准电压源和振荡器支持4个单端或2个差分输入通道。选它主要看中几个特性内置PGA增益可达128倍。对于PT100这种几十毫伏的信号PGA把信号放大到接近基准电压的量级再送给ADC核心等效输入噪声大幅降低。实测在增益128、20SPS数据率下RMS噪声大约只有几十纳伏。集成基准电压源。省掉外部基准芯片减少BOM成本和PCB面积。内部基准的温漂典型值5ppm/°C对大多数HVAC应用足够。支持比例式测量。用同一个基准电压同时驱动传感器激励和ADC参考激励源的漂移会被抵消掉。这个特性对PT100测量特别有用后面会详细讲。内置50/60Hz陷波滤波。工业现场工频干扰无处不在这个数字滤波器能有效抑制工频及其谐波。UART接口。相比SPI接口的ADS122S04UART版本只需要两根线就能跟STM32F723ZE通信隔离设计更简单布线也更灵活。1.3 STM32F723ZE在这个方案中的角色STM32F723ZE是STM32F7系列里性能比较强的一款Cortex-M7内核跑216MHz带双精度浮点单元1MB Flash、320KB RAM。在这个温度采集方案里它主要干几件事通过UART跟ADS122U04IPWR通信配置寄存器、读取转换结果运行温度换算算法把ADC码值转成实际温度处理多通道轮询和传感器故障检测通过以太网或CAN总线把数据上传给上位机驱动本地显示和报警输出F723ZE的算力对于温度换算来说绰绰有余双精度FPU让PT100的Callendar-Van Dusen方程求解和热电偶的多项式拟合都能轻松跑起来。320KB RAM也足够做数据缓冲和数字滤波。2. 硬件链路设计从传感器到ADC的每一个细节2.1 PT100三线制接法与比例式测量PT100在工业测温里用得最多但它的引线电阻是个大问题。两线制接法下引线电阻直接叠加到传感器阻值上每米铜线大约0.02Ω10米引线就是0.2Ω对应约0.5°C误差。三线制接法能补偿引线电阻前提是三条引线材质长度相同。ADS122U04IPWR做三线制PT100测量时我用的方案是通道1差分输入接PT100两端通道2单端输入接其中一条引线通过两次测量消除引线影响。具体来说第一次测PT100两端电压第二次测引线电压然后做减法。不过更简洁的做法是用比例式测量配合外部多路复用器这里不展开。比例式测量的核心思路是用ADC的基准电压去驱动PT100的激励电流源。这样PT100上的电压和基准电压成比例激励电流的温漂和长期漂移在比值中被消掉。具体电路是基准电压输出经过一个精密电阻Rref产生激励电流这个电流流过PT100产生压降ADC测量PT100两端电压同时用同一个基准电压作为ADC参考。ADC码值 (Vpt100 / Vref) × 2^23 × PGA其中Vpt100 Iex × Rpt100Vref Iex × Rref所以ADC码值 (Rpt100 / Rref) × 2^23 × PGA激励电流Iex被完全消掉了。Rref选一个低温漂的精密电阻比如Vishay的PTF系列温漂5ppm/°C整个测量的温漂就由Rref和PT100决定跟激励源无关。2.2 热电偶冷端补偿的硬件实现热电偶测量必须做冷端补偿因为热电偶测的是热端和冷端的温差不是绝对温度。冷端补偿的精度直接决定整体测量精度。我用的方案是在ADS122U04IPWR的另一个通道上接一个PT100或高精度NTC热敏电阻测量接线端子处的温度作为冷端温度。ADS122U04IPWR有4个单端通道可以同时接热电偶和冷端传感器通过内部多路复用器切换。冷端传感器的位置很关键。它必须尽可能靠近热电偶的接线端子并且跟端子处于同一热环境中。我见过有人把冷端传感器放在PCB的另一端结果冷端温度和实际端子温度差了好几度补偿完全失效。正确的做法是在接线端子正下方放一个0805或0603封装的NTC用导热硅脂或者导热垫跟端子紧密接触。2.3 输入滤波与保护电路工业现场的电磁环境恶劣ADC输入端必须做滤波和保护。差分输入之间加一个共模和差模滤波网络。我通常用两级RC滤波第一级在输入端R1kΩC100nF截止频率约1.6kHz第二级靠近ADC引脚R100ΩC10nF截止频率约160kHz。第一级滤掉高频干扰第二级滤掉ADC采样瞬间的电荷注入噪声。保护方面每个输入端对地加两个反向并联的肖特基二极管钳位电压在-0.3V到VDD0.3V之间。再串一个PTC自恢复保险丝防止持续过压。注意二极管的漏电流要小否则会影响高阻抗传感器的测量精度。我用的是BAS40系列漏电流在nA级别。注意滤波电容的材质很重要。陶瓷电容有压电效应机械振动会产生假信号。在HVAC这种有风机振动的场景建议用C0G/NP0材质的电容或者薄膜电容。2.4 电源与地平面设计ADS122U04IPWR的电源抑制比虽然不错但工业环境的电源噪声不容忽视。我的做法是模拟电源和数字电源分开用磁珠或电感隔离每个电源引脚配一个10μF钽电容加一个100nF陶瓷电容基准电压引脚额外加一个1μF低ESR电容模拟地和数字地单点连接连接点选在ADC下方PCB布局上模拟部分和数字部分分区布置ADC尽量靠近传感器接口UART走线远离模拟输入。地平面要完整不要被走线割裂。3. STM32F723ZE与ADS122U04IPWR的UART通信配置3.1 ADS122U04IPWR的UART协议解析ADS122U04IPWR的UART接口不是标准异步串口而是命令-响应式的同步协议。主机发送命令字节ADC在命令执行后返回响应。命令分为几类复位命令0x06复位所有寄存器启动/停止转换0x08启动0x0A停止读数据0x10读取转换结果读寄存器0x20 | (寄存器地址 2)读指定寄存器写寄存器0x40 | (寄存器地址 2)写指定寄存器UART参数配置为波特率固定8位数据无校验1位停止位。ADS122U04IPWR的波特率由内部振荡器决定典型值在2.5Mbps左右但实际会有偏差。STM32F723ZE的UART需要能容忍这个偏差建议用较高的过采样率。我在实际调试中发现STM32F723ZE的UART在高速率下跟ADS122U04IPWR通信时偶尔会出现位错误。后来把UART时钟源从APB2改为PLL并且把过采样从16倍改成8倍误码率明显下降。这个细节在数据手册里没有明确说明但实测有效。3.2 STM32F723ZE的UART初始化代码// STM32F723ZE UART初始化用于跟ADS122U04IPWR通信 void ADS122_UART_Init(void) { // 使能GPIO和UART时钟 RCC-AHB1ENR | RCC_AHB1ENR_GPIOAEN; RCC-APB1ENR | RCC_APB1ENR_USART2EN; // PA2: TX, PA3: RX, 复用功能 GPIOA-MODER ~(3U 4); GPIOA-MODER | (2U 4); GPIOA-MODER ~(3U 6); GPIOA-MODER | (2U 6); GPIOA-AFR[0] | (7U 8); // PA2 AF7 USART2 GPIOA-AFR[0] | (7U 12); // PA3 AF7 USART2 // 配置UART参数 USART2-BRR 0x16D; // 波特率设置根据实际时钟调整 USART2-CR1 USART_CR1_TE | USART_CR1_RE; USART2-CR1 | USART_CR1_UE; // 使能接收中断 USART2-CR1 | USART_CR1_RXNEIE; NVIC_EnableIRQ(USART2_IRQn); }这段代码里BRR的值需要根据实际系统时钟计算。假设APB1时钟45MHz目标波特率2.5MbpsBRR 45M / 2.5M 18 0x12。但实际ADS122U04IPWR的波特率有偏差需要实测调整。3.3 寄存器配置与转换流程ADS122U04IPWR有4个配置寄存器需要根据应用场景设置。我的HVAC温度测量配置如下寄存器配置值说明REG00x01MUXAIN0/AIN1差分PGA1PGA旁路关闭REG10x04数据率20SPS连续转换模式内部基准REG20x1050/60Hz陷波低侧基准REG30x00禁用IDAC电流源正常模式配置流程是复位→写寄存器→启动转换→等待DRDY→读数据。DRDY引脚接到STM32F723ZE的EXTI中断转换完成时触发中断在中断里读数据。// 读取ADS122U04IPWR转换结果 int32_t ADS122_ReadData(void) { uint8_t cmd 0x10; // 读数据命令 uint8_t rx[3]; int32_t result; HAL_UART_Transmit(huart2, cmd, 1, 10); HAL_UART_Receive(huart2, rx, 3, 10); result ((int32_t)rx[0] 16) | ((int32_t)rx[1] 8) | rx[2]; // 24位有符号数符号扩展 if (result 0x800000) { result | 0xFF000000; } return result; }提示读数据命令发出后ADC会在下一个DRDY下降沿更新输出寄存器。如果DRDY还没拉低就读读到的是上一次的结果。建议在DRDY中断里读或者读之前先检查DRDY引脚状态。4. 温度换算算法与精度优化4.1 PT100的Callendar-Van Dusen方程实现PT100的阻值-温度关系用Callendar-Van Dusen方程描述T ≥ 0°CR(T) R0 × (1 A×T B×T²)T 0°CR(T) R0 × (1 A×T B×T² C×(T-100)×T³)其中R0100ΩA3.9083×10⁻³B-5.775×10⁻⁷C-4.183×10⁻¹²。从ADC码值反推温度需要解这个方程。T≥0°C时是二次方程可以直接求解析解。T0°C时是四次方程通常用迭代法或者查表加插值。我在STM32F723ZE上用的是解析解加迭代修正的方法。先用二次方程解析解算出一个近似温度如果结果小于0°C再用牛顿迭代法在四次方程上迭代3-4次。F723ZE的FPU跑这个计算单次耗时不到10μs完全不影响实时性。// PT100阻值转温度T0°C解析解 float PT100_ResistanceToTemp(float resistance) { const float R0 100.0f; const float A 3.9083e-3f; const float B -5.775e-7f; float ratio resistance / R0 - 1.0f; float discriminant A * A - 4.0f * B * ratio; if (discriminant 0.0f) { return -999.0f; // 错误标志 } float temp (-A sqrtf(discriminant)) / (2.0f * B); // 如果温度小于0用迭代法修正 if (temp 0.0f) { temp PT100_IterateNegative(resistance, temp); } return temp; }4.2 热电偶的多项式拟合与冷端补偿热电偶的温度换算更复杂NIST提供了标准的多项式系数。以K型热电偶为例0-500°C范围内的电压-温度关系用9阶多项式拟合系数有10个。直接算9阶多项式在STM32F723ZE上没问题但要注意浮点精度。冷端补偿的计算是T_actual T_measured T_cold_junction。其中T_measured是从热电偶电压查表得到的温度T_cold_junction是冷端传感器测到的温度。注意这里不是简单相加因为热电偶的输出是非线性的严格来说应该先把冷端温度转换成对应的热电势加到测量热电势上再查表。但在冷端温度接近25°C、测量范围不宽的情况下直接相加的误差很小通常小于0.1°C。我实际用的方法是冷端温度→查反向多项式得到冷端热电势→加上测量热电势→查正向多项式得到实际温度。这样精度最高计算量也在F723ZE的承受范围内。4.3 数字滤波与噪声抑制ADS122U04IPWR在20SPS数据率下的噪声已经很低了但工业现场还是有各种突发干扰。我在固件里加了两级数字滤波第一级是滑动平均滤波窗口大小8。这个滤波对周期性噪声效果好但会引入相位滞后。对于温度这种慢变量滞后几秒钟无所谓。第二级是IIR低通滤波截止频率0.5Hz。用二阶巴特沃斯滤波器差分方程实现。这个滤波进一步平滑数据同时保持较好的阶跃响应。// 二阶IIR低通滤波截止频率0.5Hz采样率20Hz float IIR_Filter(float input) { static float x[3] {0}; static float y[3] {0}; // 巴特沃斯系数fc0.5Hzfs20Hz const float b0 0.0055f; const float b1 0.0110f; const float b2 0.0055f; const float a1 -1.7786f; const float a2 0.8006f; x[2] x[1]; x[1] x[0]; x[0] input; y[2] y[1]; y[1] y[0]; y[0] b0*x[0] b1*x[1] b2*x[2] - a1*y[1] - a2*y[2]; return y[0]; }注意IIR滤波器的系数要用实际采样率计算。如果ADC数据率改了系数必须重新算否则滤波特性完全不对。我见过有人改了数据率忘了改系数结果滤波器变成了振荡器。5. 实测中遇到的典型问题与排查过程5.1 读数跳变从电源纹波查到基准电容第一批板子焊好之后发现温度读数一直在跳峰峰值大概0.5°C。用示波器看ADC的基准电压引脚发现有大约2mV的纹波频率跟开关电源的开关频率一致。排查过程先怀疑是电源滤波不够在ADC电源引脚加了10μF钽电容和100nF陶瓷电容纹波降到1mV但读数还是跳。后来用频谱分析仪看基准引脚的噪声发现有一个200kHz左右的分量正好是DC-DC开关频率的二次谐波。根因是基准引脚的1μF电容用了X5R材质的陶瓷电容这种电容在直流偏压下容量会大幅下降实际可能只有标称值的30%。换成C0G材质的1μF电容后纹波降到200μV以下读数稳定在±0.05°C以内。这个坑很典型陶瓷电容的直流偏压特性在数据手册里往往藏在曲线图里不仔细看根本注意不到。X5R和X7R在额定电压附近容量衰减严重C0G/NP0虽然容量小但稳定。基准引脚这种对噪声敏感的地方必须用C0G。5.2 通道串扰多路复用器的电荷注入问题ADS122U04IPWR内部有多路复用器切换通道时会有电荷注入。我在做4通道轮询测量时发现通道之间有明显串扰一个通道的读数会受到上一个通道的影响。具体现象是通道1接PT100通道2接固定电阻轮询测量时通道2的读数会随着通道1的温度变化而变化串扰量大约0.1°C。排查后发现是通道切换后的第一次转换结果不可信因为多路复用器的电荷注入还没稳定。解决办法是在通道切换后丢弃第一次转换结果等第二次转换再读。这样每个通道的建立时间从50ms增加到100ms对于温度测量来说完全可以接受。// 多通道轮询切换后丢弃第一次转换 void ADS122_ScanChannels(void) { for (int ch 0; ch 4; ch) { ADS122_SetMux(ch); ADS122_StartConversion(); while (!DRDY_Ready()); // 等第一次转换完成 ADS122_ReadData(); // 丢弃 ADS122_StartConversion(); while (!DRDY_Ready()); // 等第二次转换完成 channel_data[ch] ADS122_ReadData(); // 有效数据 } }5.3 冷端补偿偏差NTC自发热的影响热电偶冷端补偿用的NTC在长期工作中发现补偿温度比实际端子温度高了0.3°C左右。用红外热像仪看NTC附近的PCB温度确实比端子处高。根因是NTC的激励电流导致自发热。NTC阻值10kΩ激励电流100μA功耗1μW看起来很小但NTC的热阻如果比较大温升就不可忽略。我用的0603封装NTC热阻大约500°C/W1μW对应0.0005°C理论上可以忽略。但实际测量发现温升0.3°C说明还有别的热源。后来发现是NTC旁边的LDO在发热通过PCB铜箔传到了NTC。把LDO挪远并且在NTC周围做热隔离槽补偿偏差降到0.05°C以内。这个问题的教训是冷端补偿传感器的热设计比电气设计更重要。NTC必须跟接线端子紧密热耦合同时跟其他热源热隔离。PCB布局时要在NTC周围留够空间必要时开槽。5.4 UART通信误码时钟偏差的累积效应前面提到过UART误码的问题这里详细说一下排查过程。现象是连续运行几个小时后偶尔出现一次通信错误读到的数据明显异常。用逻辑分析仪抓UART波形发现STM32F723ZE的波特率和ADS122U04IPWR的波特率有大约2%的偏差。UART协议容忍的偏差通常在2-3%以内但这是单次传输的容忍度。连续传输时偏差会累积导致采样点偏移最终误码。解决办法有两个一是降低波特率把偏差的影响减小二是用STM32F723ZE的UART自动波特率检测功能动态调整BRR值。我选了第二个方案在初始化时发送一个已知字节测量实际位宽然后计算BRR。// 自动波特率检测 void UART_AutoBaudRate(void) { // 发送0x55测量回环或接收的位宽 uint8_t test_byte 0x55; HAL_UART_Transmit(huart2, test_byte, 1, 10); // 用定时器测量接收到的位宽 // 根据测量结果调整BRR uint32_t measured_baud TIM2-CNT; USART2-BRR SystemCoreClock / measured_baud; }实际实现比这个复杂但思路就是这样。调整之后连续运行72小时没有再出现通信误码。6. 系统校准与长期稳定性验证6.1 多点校准的实施方法ADC和传感器的初始精度再高系统组装后还是需要校准。我用的方法是多点校准在-20°C、0°C、25°C、50°C、100°C五个温度点分别测量记录ADC码值和标准温度计的读数然后用最小二乘法拟合出校正曲线。校准用的标准温度计是Fluke 1524精度±0.02°C。校准环境用恒温槽温度稳定性±0.01°C。每个温度点等温30分钟采集100个数据取平均。拟合模型用二次多项式T_actual a×Code² b×Code c。五个点拟合三个系数有2个自由度可以评估拟合残差。实测残差在±0.03°C以内满足HVAC的精度要求。6.2 长期漂移的监测与补偿工业设备要求长期稳定性通常至少一年免校准。为了验证长期漂移我做了加速老化测试在85°C/85%RH环境下放置1000小时相当于常温下使用几年。测试结果显示PT100通道的漂移主要来自PT100本身和Rref电阻。PT100的长期漂移典型值0.04°C/年Rref的漂移取决于型号我用的5ppm/°C精密电阻年漂移约25ppm对应0.006°C。整体年漂移在0.05°C以内满足要求。热电偶通道的漂移更大一些主要是冷端NTC的漂移和热电偶本身的劣化。NTC的年漂移约0.1°C热电偶在高温下会逐渐劣化。对于HVAC应用热电偶通常用在高温测点漂移可以接受。6.3 故障检测与诊断工业系统需要能检测传感器故障。我在固件里实现了几种故障检测开路检测给传感器注入一个小电流如果测到的电压接近满量程说明传感器开路。ADS122U04IPWR内置的IDAC电流源可以做这个。短路检测如果测到的电压接近0说明传感器短路。超范围检测如果温度超出预设范围触发报警。漂移检测如果相邻两个测点的温度差异常大可能是传感器故障。这些检测逻辑在STM32F723ZE里实现通过UART上报给上位机。故障时ADC会自动切换到备用通道或者输出报警信号。7. 几个容易被忽略的实战细节7.1 PCB布局中的热电动势问题PCB上的铜-锡焊点会形成热电动势每对结点大约3μV/°C。如果PCB上有温度梯度这些热电动势会叠加到传感器信号上。对于PT100来说3μV对应约0.008°C看起来不大但如果多个结点串联误差会累积。减少热电动势的方法差分输入的两条走线尽量等长、等宽、同层保持对称。ADC输入端避免过孔因为过孔处的铜-锡-铜结构会形成额外的热电动势。如果必须过孔两个差分线要一起过保持对称。7.2 传感器引线的屏蔽与接地长线传输的传感器引线必须屏蔽屏蔽层单点接地接地点选在ADC的模拟地。如果两端都接地会形成地环路引入工频干扰。我用的屏蔽线是双绞屏蔽线每对信号线单独屏蔽。屏蔽层在传感器端悬空在ADC端接模拟地。实测这样能把工频干扰从几十毫伏降到几毫伏。7.3 上电顺序与初始化时序ADS122U04IPWR和STM32F723ZE的上电顺序有讲究。如果ADC先上电STM32后上电STM32初始化UART时ADC可能已经处于不确定状态。正确的顺序是STM32先上电初始化UART和GPIO然后给ADC上电延时100ms等ADC稳定再发送复位命令。我在固件里加了上电检测STM32启动后先读ADC的ID寄存器如果读不到或者读到的值不对就重新复位ADC最多重试3次。这样即使上电顺序不理想系统也能正常启动。7.4 温度换算中的单位与精度陷阱温度换算涉及大量浮点运算容易踩精度陷阱。比如PT100的Callendar-Van Dusen方程里B系数是-5.775×10⁻⁷这个数很小如果跟大数相加浮点精度会损失。建议用double类型做中间计算最后再转float。另外温度单位要统一。ADC码值转电压、电压转阻值、阻值转温度每一步的单位都要明确。我见过有人在电压转阻值时忘了除以激励电流结果温度差了1000倍。7.5 固件升级与参数存储工业设备需要现场升级固件和修改参数。STM32F723ZE的Flash可以划分成几个区域引导区、应用区、参数区。参数区存储校准系数、报警阈值、通信地址等。参数存储要注意写入寿命。Flash的擦写次数通常10万次如果频繁写参数几年就会耗尽。我的做法是参数变化时先写到RAM每隔1小时或者掉电前才写入Flash。掉电检测用PVD可编程电压检测器电压低于阈值时触发中断在中断里保存参数。8. 方案扩展与不同场景的适配思路8.1 多路温度采集的扩展方案ADS122U04IPWR只有4个输入通道如果测点更多需要扩展。两种方案外部多路复用器用ADG1408或类似的多路复用器把8路或16路传感器切换到ADS122U04IPWR的输入。多路复用器的导通电阻会影响测量精度需要选低导通电阻的型号或者用比例式测量消除导通电阻影响。多片ADS122U04IPWR级联每片负责4个通道通过不同的UART地址或者片选信号区分。STM32F723ZE有多个UART可以同时接多片ADC。这种方案成本高但性能好各通道完全独立没有串扰。我倾向于第二种方案因为HVAC系统通常有8-16个测点用2-4片ADS122U04IPWR就能覆盖而且各通道独立可靠性和精度都更好。8.2 不同传感器的适配除了PT100和热电偶HVAC系统还会用NTC热敏电阻、半导体温度传感器等。ADS122U04IPWR的PGA和基准配置可以适配不同传感器NTC阻值高10kΩ级别激励电流要小10μA避免自发热半导体传感器输出阻抗低可以直接接ADC不需要PGA热电阻跟PT100类似但阻值和温度系数不同需要改换算公式固件里可以做成传感器类型可配置每种类型对应一套换算参数和ADC配置。通过UART命令或者拨码开关选择。8.3 通信接口的扩展STM32F723ZE除了UART还有以太网、CAN、USB等接口。HVAC系统通常用BACnet或Modbus协议跑在RS-485或以太网上。RS-485方案用STM32F723ZE的UART加一个RS-485收发器实现Modbus RTU从站。成本低布线简单适合中小型系统。以太网方案用F723ZE内置的MAC加外部PHY实现Modbus TCP或BACnet/IP。适合大型系统可以直接接入楼宇自控网络。我在实际项目中两种都用过。RS-485方案调试简单但速率低、节点数有限。以太网方案速率高、节点多但需要处理TCP/IP协议栈固件复杂度高。选哪个取决于系统规模和成本预算。8.4 低功耗设计的考虑如果温度采集模块用电池供电低功耗设计就很重要。ADS122U04IPWR支持单次转换模式转换完成后自动进入低功耗状态。STM32F723ZE也有多种低功耗模式。我的做法是STM32F723ZE平时在Stop模式RTC定时唤醒唤醒后配置ADS122U04IPWR做一次转换读数据处理完再回Stop模式。这样平均功耗可以做到几百微安用一节锂亚电池能跑几年。不过F723ZE的Stop模式唤醒时间比较长大概几十微秒。如果对唤醒时间有要求可以用STM32L4系列唤醒更快功耗更低。但L4的算力不如F723ZE复杂的温度换算可能会吃力。9. 写在最后的几点个人体会这套ADS122U04IPWR加STM32F723ZE的温度采集方案我从选型到量产折腾了大半年最大的感受是高精度测量是一个系统工程ADC只是其中一环。传感器、激励源、基准、滤波、布局、固件算法每个环节都会影响最终精度。几个我认为最重要的经验第一比例式测量是PT100测量的最佳实践。它把激励源的漂移完全消掉只留下基准电阻和PT100的漂移。基准电阻选5ppm/°C的精密电阻整个测量链的温漂就控制住了。第二冷端补偿的热设计比电气设计更重要。NTC必须跟接线端子紧密热耦合同时远离其他热源。PCB布局时就要考虑热设计不能等出了问题再改。第三数字滤波要跟ADC数据率匹配。改了数据率一定要重新算滤波系数否则滤波特性完全不对。我在这上面踩过坑希望你不要再踩。第四长期稳定性要靠加速老化测试验证。常温下测几天看不出问题必须在高温高湿环境下跑几百上千小时才能暴露潜在问题。第五故障检测和诊断是工业产品的必备功能。传感器开路、短路、漂移这些都要能检测出来并上报。没有诊断功能的温度采集模块在工业现场是不合格的。这套方案目前在几个HVAC项目上稳定运行实测精度在±0.1°C以内年漂移小于0.05°C。如果你也在做类似的温度采集系统希望这些经验能帮你少走弯路。