2026/11/5 13:27:37

基于ADS122U04IPWR与STM32F427ZI的工业测温方案设计

基于ADS122U04IPWR与STM32F427ZI的工业测温方案设计 1. 工业测温项目的整体设计思路1.1 为什么选 ADS122U04IPWR 这颗 24 位 ADC工业现场和 HVAC 场景下的温度测量跟实验室里拿个万用表戳两下的玩法完全不是一回事。工业环境里电磁干扰大、走线长、地电位漂移严重再加上 PT100、PT1000、热电偶这些传感器输出的信号本身就非常微弱——PT100 在 0 摄氏度时只有 100 欧姆满量程变化也就几十毫欧每摄氏度热电偶更夸张输出是微伏级别的。这种信号如果直接进 STM32F427ZI 的内部 12 位 ADC基本等于把有用信号扔进噪声里搅一搅根本分不出来。ADS122U04IPWR 是 TI 的一款 24 位、4 通道、带 PGA 的 delta-sigma ADC内置低噪声可编程增益放大器增益最高能到 128 倍还集成了激励电流源、基准电压和温度传感器。这几个特性凑在一起正好对上工业测温的痛点小信号直接在前端放大不用外挂运放内置 IDAC 可以直接给 RTD 提供激励电流省掉恒流源电路24 位分辨率意味着理论 LSB 能到微伏级别配合 PGA 后有效分辨率依然足够覆盖 0.01 摄氏度的测温精度需求。选它而不是选 ADS1220 或者 ADS1248主要考虑是 U04 后缀支持 UART 接口跟 STM32F427ZI 的 USART 外设对接非常直接不需要额外占用 SPI 片选和时钟线在工业现场走线更省心。而且 UART 接口天然支持隔离后面加个数字隔离器就能把模拟侧和数字侧彻底分开这对 HVAC 这种经常跟大功率电机、变频器共处的场景特别重要。1.2 STM32F427ZI 在这个方案里扮演什么角色STM32F427ZI 是 ST 的 Cortex-M4 系列主频 180MHz带 FPU 和 DSP 指令Flash 最大 2MBSRAM 256KB。拿它做温度测量的主控性能是绰绰有余的。但选它不只是因为性能富余更关键的是它的外设资源匹配度。首先它有多个 USART可以一路接 ADS122U04IPWR 做数据采集另一路接上位机或者 Modbus 总线做数据上报互不干扰。其次它的定时器资源丰富可以用一个高级定时器产生精确的采样触发时序保证采样率稳定。再者它的 DMA 控制器可以配合 USART 做无阻塞收发CPU 不用一直守着串口等数据可以腾出来做温度换算、滤波、报警判断这些事。另外 F427ZI 的供电范围是 1.8V 到 3.6V跟 ADS122U04IPWR 的数字侧供电可以共用 3.3V 轨电平匹配不用额外做转换。工业现场如果要用 5V 逻辑加个电平转换芯片就行但大多数现代工业设备已经全面 3.3V 化了直接对接没问题。1.3 整体信号链是怎么走的整个方案的信号链可以这样理解传感器PT100 或热电偶把温度转换成微弱的电压或电阻变化ADS122U04IPWR 通过内置 IDAC 给 RTD 提供激励电流或者直接读取热电偶的微伏信号经过 PGA 放大后进入 24 位 delta-sigma 调制器转换成数字码流再通过 UART 发给 STM32F427ZI。STM32 收到原始码值后先做冷端补偿热电偶场景或者查表/公式换算RTD 场景然后做数字滤波最后输出温度值。这个链路里最容易被忽视的是基准电压。ADS122U04IPWR 可以用内部 2.048V 基准也可以用外部基准。内部基准的温漂是 5ppm/摄氏度典型值对于 0.01 摄氏度精度的测温来说如果环境温度变化 20 摄氏度基准漂移带来的误差大约是 0.0001 摄氏度完全可以忽略。但如果用外部基准比如 REF5025温漂可以做到 3ppm/摄氏度但成本上去了而且多一个器件多一份故障率。我的经验是除非做计量级设备否则内部基准够用了。2. 硬件设计里那些容易踩坑的细节2.1 模拟前端电路的布局要点ADS122U04IPWR 是 TSSOP-16 封装引脚间距 0.65mm手工焊接有点难度但不算不可逾越。真正难的是布局。模拟输入引脚 AIN0 到 AIN3 的走线必须尽量短而且要走成差分对两条线等长、平行、紧挨着。如果传感器离板子比较远比如 HVAC 里温度探头装在风管上板子在控制柜里那走线可能有好几米这时候必须用屏蔽双绞线屏蔽层单点接地接在板子的模拟地平面上。IDAC 的输出引脚要单独走线到 RTD不能跟数字信号线平行走。我见过一个案例IDAC 走线跟 UART 的 TX 线平行走了 5 厘米结果采样数据里出现了跟串口波特率同频的周期性噪声后来把 IDAC 走线绕到板子另一层才解决。这个坑很隐蔽因为噪声频率跟温度变化无关看温度曲线像是随机跳动但用示波器看电源纹波又看不出来最后是用频谱分析才定位到的。去耦电容的放置也有讲究。ADS122U04IPWR 的 AVDD 和 DVDD 各需要 0.1uF 和 1uF 的电容0.1uF 必须紧贴引脚1uF 可以稍微远一点但也不能超过 5mm。模拟地和数字地要在芯片下方用 0 欧姆电阻或者磁珠单点连接不能直接铺铜连在一起。这个单点连接的位置要选在芯片的 AGND 和 DGND 引脚附近让回流路径最短。2.2 基准电压和激励电流源的配置ADS122U04IPWR 的内部基准是 2.048V可以通过寄存器选择。如果测 PT100在 0 摄氏度时电阻 100 欧姆用 1mA 激励电流产生的电压是 100mV。PGA 增益设成 16 倍放大后是 1.6V跟 2.048V 基准匹配得不错能充分利用 ADC 的动态范围。如果测 PT10000 摄氏度时 1000 欧姆用 0.5mA 激励电压是 500mVPGA 增益 4 倍放大后 2V也很合适。这里有个计算过程要说明假设我们要测 0 到 100 摄氏度PT100 在这个范围的电阻变化是 100 到 138.51 欧姆对应电压变化是 100mV 到 138.51mV1mA 激励。这个变化量只有 38.51mV如果 PGA 增益是 16放大后是 616mV 的变化量。24 位 ADC 在 2.048V 基准下的 LSB 是 2.048V 除以 2 的 24 次方约等于 0.122uV。616mV 对应大约 505 万个码值分给 100 摄氏度的范围每摄氏度大约 5 万个码值分辨率远远超过 0.01 摄氏度。所以从分辨率角度看这个配置是绰绰有余的。但实际有效分辨率受噪声限制。ADS122U04IPWR 在 PGA 增益 16、数据率 20SPS 时的有效分辨率大约是 21.5 位折算下来有效 LSB 大约是 0.5uV。616mV 对应大约 123 万个有效码值每摄氏度大约 1.23 万个码值依然能轻松分辨 0.01 摄氏度。所以数据率不用设太高20SPS 足够还能有效抑制工频干扰。2.3 与 STM32F427ZI 的接口连接ADS122U04IPWR 的 UART 接口是 2 线制TX 和 RX波特率最高支持 115200。跟 STM32F427ZI 连接时ADS 的 TX 接 STM32 的 RXADS 的 RX 接 STM32 的 TX交叉连接。如果中间要加隔离可以用数字隔离器比如 ISO7721 或者 ADuM1201但要注意隔离器的传输延迟不能太大否则会影响高速通信。115200 波特率下位宽是 8.68us隔离器的延迟通常在几十纳秒到几微秒问题不大。STM32 这边用 USART 的 DMA 模式收发。发送命令时把命令字节写入 DMA 缓冲区启动 DMA 发送发送完成中断里再启动 DMA 接收。接收用空闲中断加 DMA这样一帧数据收完就能立刻处理不用轮询。这个套路在 STM32 上很成熟HAL 库和 LL 库都能实现我用的是 LL 库代码更精简中断响应更快。有个细节要注意ADS122U04IPWR 的 UART 是 8 位数据位、无校验、1 位停止位跟 STM32 的默认配置一致。但 ADS 的 UART 在空闲时 TX 线是高电平跟标准 UART 一样所以直接连没问题。如果中间加了反相器或者光耦就要注意极性对不对我见过有人用光耦隔离结果忘了光耦是反相的数据死活收不对查了半天才发现。3. 固件实现的核心环节3.1 ADS122U04IPWR 的寄存器配置流程ADS122U04IPWR 有 4 个配置寄存器分别控制输入多路复用器、增益、数据率、工作模式等。上电后首先要做复位可以发复位命令或者拉低 RESET 引脚。复位后所有寄存器回到默认值然后按顺序配置。配置顺序建议是先配寄存器 0设置输入通道和增益再配寄存器 1设置数据率和工作模式再配寄存器 2设置基准和 IDAC 电流最后配寄存器 3设置 IDAC 路由和烧毁检测。这个顺序不是强制的但按这个顺序来逻辑最清晰不容易漏配。具体到 PT100 测温寄存器 0 要设置 MUX 选择 AIN0 和 AIN1 作为差分输入增益设成 16。寄存器 1 设置数据率 20SPS连续转换模式。寄存器 2 设置基准为内部 2.048VIDAC 电流 1mA。寄存器 3 设置 IDAC1 路由到 AIN0IDAC2 路由到 AIN3如果做三线制 RTD 的话。配置完后发 START 命令ADC 就开始连续转换了。读数据时发 RDATA 命令ADS 会返回 3 个字节的转换结果高位在前。STM32 收到后拼成 24 位有符号数然后做换算。换算公式是电压等于码值乘以基准电压除以 2 的 23 次方因为是有符号数满量程是 2 的 23 次方减 1。然后根据电压反推电阻再查表或者用 Callendar-Van Dusen 公式算温度。3.2 温度换算的数学处理PT100 的温度换算工业上常用两种方法查表法和公式法。查表法精度高但占 Flash公式法省空间但计算量大。STM32F427ZI 有 FPU算公式法毫无压力所以我一般用公式法。Callendar-Van Dusen 公式是这样的对于 0 到 850 摄氏度R(t) R0 * (1 At Bt^2)其中 R0 是 0 摄氏度时的电阻PT100 是 100 欧姆A 是 3.9083e-3B 是 -5.775e-7。对于 -200 到 0 摄氏度还要加一项 C*(t-100)*t^3C 是 -4.183e-12。实际测温范围如果是 0 到 100 摄氏度用前两项就够了误差在 0.01 摄氏度以内。反推温度时需要解二次方程。已知 R(t)求 t。可以把公式改写成 Bt^2 At (1 - R/R0) 0然后用求根公式。因为 B 是负数抛物线开口向下取正根。这个计算在 STM32 上就是几个浮点乘加和一次开方FPU 一个周期就能搞定实时性完全没问题。热电偶的换算更复杂因为要冷端补偿。ADS122U04IPWR 内置了一个温度传感器可以读芯片温度作为冷端温度。但芯片温度跟实际冷端温度可能有偏差因为芯片自身会发热。我的做法是用一个单独的 NTC 或者 DS18B20 贴在接线端子附近测冷端温度精度比芯片内置传感器高。然后根据热电偶类型K 型、J 型等查 ITS-90 分度表或者用多项式拟合把热端电压加上冷端对应的电压再反查温度。3.3 数字滤波和抗干扰策略工业现场的噪声主要来自工频干扰和变频器的高频开关噪声。ADS122U04IPWR 的 delta-sigma 调制器本身有很强的抗混叠能力但工频干扰还是要靠数据率来抑制。20SPS 的数据率对应 50Hz 和 60Hz 的陷波因为 sinc 滤波器的零点正好落在这些频率上。如果现场工频是 50Hz就选 20SPS如果是 60Hz也选 20SPS因为 20SPS 对 50Hz 和 60Hz 都有抑制作用。但 20SPS 的建立时间是 50ms 左右对于温度这种慢变量完全够用。如果要做更快的响应可以选 45SPS 或者 90SPS但工频抑制会变差。我的经验是温度测量没必要追求高速20SPS 甚至 10SPS 都行稳定压倒一切。在 STM32 这边收到数据后还要做一次数字滤波。最简单的是滑动平均比如取 16 个点做平均能进一步压低随机噪声。但滑动平均会引入滞后对于温度这种慢变量滞后几秒钟无所谓。如果要做报警判断可以用中值滤波加滑动平均的组合先去掉明显的野值再平滑。我一般用 5 点中值滤波加 8 点滑动平均实测下来既能去掉偶发的干扰尖峰又能保持曲线平滑。还有一个技巧是动态调整滤波强度。当温度变化率大的时候减少平均点数提高响应速度当温度稳定的时候增加平均点数提高精度。这个逻辑用 STM32 实现很简单判断连续几次采样的差值如果超过阈值就切换滤波参数。4. 常见问题与排查技巧实录4.1 采样值跳动大怎么办采样值跳动是最常见的问题原因可能有很多。第一步先看跳动幅度和频率。如果跳动是随机的幅度在几十个码值以内那可能是正常的噪声加强滤波就行。如果跳动幅度很大比如几百上千个码值那肯定有问题。先查电源。用示波器看 AVDD 和 DVDD 的纹波如果纹波超过 10mV就要加强去耦或者换 LDO。ADS122U04IPWR 对电源纹波很敏感尤其是 AVDD因为它是模拟电路的供电。我遇到过用开关电源直接供 AVDD 的情况纹波 50mV采样值跳得没法看换成 LDO 后立刻稳定。再查基准。如果基准电压不稳所有采样值都会跟着漂。可以用万用表测基准引脚电压看是否稳定在 2.048V。如果基准引脚有电容检查电容是否虚焊或者容值不对。ADS122U04IPWR 的基准引脚需要 0.1uF 和 10uF 的电容少一个都可能不稳。最后查输入。如果输入走线太长或者屏蔽没做好会引入共模干扰。可以试着在输入端加 RC 滤波截止频率设在 1kHz 左右对温度信号没影响但能滤掉高频干扰。电阻用 1k电容用 100nF差分输入的话两个输入端各加一个电阻电容跨接在差分对上。4.2 温度读数偏差大怎么校准读数偏差大通常是系统误差不是随机噪声。系统误差的来源有传感器本身的误差、激励电流的误差、基准电压的误差、PGA 增益的误差。这些误差叠加起来可能让读数偏好几摄氏度。校准的方法是两点校准。用一个高精度的温度源比如干体炉把传感器放到 0 摄氏度和 100 摄氏度两个点记录 ADC 的码值。然后算出一个线性修正公式实际温度等于斜率乘以码值加上截距。这个斜率跟理论斜率可能有差异截距就是零点偏移。把这两个参数存在 STM32 的 Flash 里每次换算时用修正后的公式。但两点校准只能修正线性和零点误差如果传感器非线性严重比如热电偶就需要多点校准。我一般用 0、25、50、75、100 五个点用最小二乘法拟合一个三次多项式精度能到 0.1 摄氏度以内。对于大多数工业应用这个精度足够了。还有一个容易忽视的点是自热效应。RTD 的激励电流会在电阻上产生热量导致传感器温度略高于环境温度。1mA 激励在 100 欧姆上产生 0.1mW 的功率对于小封装的 PT100自热可能达到 0.1 摄氏度。如果要求高精度可以把激励电流降到 0.5mA 甚至 0.1mA但信号幅度也会减小需要提高 PGA 增益来补偿。这个权衡要根据具体精度要求来定。4.3 UART 通信不稳定的排查UART 通信不稳定表现为数据错位、丢包、或者完全收不到数据。先查波特率。ADS122U04IPWR 的波特率是固定的 115200不能改。STM32 这边要确保 USART 的波特率也是 115200而且时钟配置要准确。如果 STM32 用的是外部晶振一般没问题如果用内部 RC 振荡器误差可能超过 2%导致通信失败。所以工业应用一定要用外部晶振。再查接线。TX 和 RX 有没有接反这是最常见的错误。ADS 的 TX 要接 STM32 的 RXADS 的 RX 要接 STM32 的 TX。如果中间有隔离器还要确认隔离器的方向对不对。我见过有人用光耦隔离结果光耦的输入输出接反了数据完全不通。如果接线没问题用示波器看波形。ADS 的 TX 线在空闲时应该是高电平发送数据时会有下拉脉冲。如果波形幅度不够比如只有 1V 多可能是驱动能力不足或者线太长。可以在 ADS 的 TX 线上加一个上拉电阻比如 10k 上拉到 3.3V增强驱动。如果波形有振铃或者过冲可能是线太长或者阻抗不匹配可以在靠近 STM32 的 RX 引脚处串一个 22 欧姆的电阻做阻抗匹配。还有一个隐蔽的问题是地环路。如果 ADS 和 STM32 分别供电而且两个电源的地之间有电位差UART 通信就会出错。解决方法是把两个地连在一起或者用隔离器彻底隔离。工业现场建议用隔离器因为地电位差可能很大直接连地可能烧芯片。4.4 常见问题速查表问题现象可能原因排查方法解决方案采样值随机跳动电源纹波大示波器测 AVDD 纹波换 LDO加强去耦采样值周期性跳动工频干扰看跳动频率是否 50Hz数据率设 20SPS加 RC 滤波读数整体偏高/偏低基准电压偏差万用表测基准引脚校准基准或换外部基准读数随温度漂移基准温漂大加热板子看读数变化换低温漂基准UART 收不到数据TX/RX 接反检查接线交叉连接UART 数据错位波特率不匹配测 TX 波形位宽确认 STM32 时钟配置UART 偶发丢包地环路干扰测两地电位差加隔离器温度响应慢滤波太强看滤波参数减少平均点数温度有自热误差激励电流太大降低电流看读数变化减小 IDAC 电流提高 PGA这个表是我在实际项目中总结的基本上覆盖了 90% 以上的问题。遇到新问题的时候先按这个表过一遍大部分都能解决。如果还不行就要用排除法从传感器开始一级一级往后查先确认传感器输出正常再确认 ADC 输入正常再确认数字输出正常最后确认 STM32 接收正常。这个流程虽然笨但最可靠。5. 工业现场部署的实战经验5.1 电磁兼容性的硬功夫工业现场的电磁环境比实验室恶劣得多。变频器、接触器、电机启动器这些设备在开关瞬间会产生强烈的电磁脉冲通过空间辐射和电源线传导进入测量系统。ADS122U04IPWR 虽然本身抗干扰能力不错但如果不做防护照样会被干扰。第一道防线是屏蔽。传感器线用屏蔽双绞线屏蔽层接在控制柜的接地排上不能接在信号地上。如果传感器外壳是金属的也要接地。第二道防线是滤波。在 ADS 的模拟输入引脚前加共模扼流圈和差模电容共模扼流圈选 100uH 左右的差模电容选 100nF能有效抑制高频共模干扰。第三道防线是隔离。UART 通信加数字隔离器电源加隔离 DC-DC把模拟侧和数字侧彻底分开。这样即使现场有大的地电位差也不会影响测量。还有一个细节是 PCB 的层叠设计。如果有条件用四层板顶层走信号第二层铺地第三层走电源底层再铺地。这样信号线有完整的参考地平面回流路径短辐射和敏感度都低。如果只能用两层板那就在信号线周围铺地铜多打过孔连接上下层地尽量模拟四层板的效果。5.2 长期稳定性的考量工业设备要求连续运行好几年不出故障所以元器件的长期稳定性很重要。ADS122U04IPWR 的 datasheet 里给了长期漂移指标但实际使用中焊接质量、PCB 清洁度、环境湿度都会影响长期稳定性。焊接后一定要清洗 PCB尤其是助焊剂残留。助焊剂在潮湿环境下会吸收水分导致漏电流影响高阻抗节点的电压。ADS 的模拟输入是高阻抗的如果引脚附近有助焊剂残留漏电流可能达到纳安级别虽然不大但对于微伏级信号来说就是灾难。清洗用无水酒精或者专用清洗剂洗完后用热风枪吹干。还有一个是防潮。工业现场湿度可能很高PCB 表面凝露会导致漏电。可以在 PCB 上涂三防漆但要注意三防漆不能涂在连接器和传感器的接触面上。三防漆选丙烯酸类的好涂也好修硅胶类的太难去除维修麻烦。连接器的选择也很关键。传感器接口用凤凰端子或者魏德米勒的工业连接器接触电阻小抗振动。不要用杜邦线或者排针那些在工业现场用不了多久就会接触不良。我见过一个项目用排针接传感器运行半年后开始出现随机跳变查了半天是排针氧化了换成凤凰端子后问题消失。5.3 标定和溯源的实际操作工业测温设备一般要求定期标定通常是每年一次。标定需要高精度的温度源干体炉是最常用的便携、升温快、稳定性好。但干体炉的温场均匀性有限插孔底部和顶部的温差可能有 0.5 摄氏度所以要把传感器插到底而且要用同一深度的参考温度计。标定时先设定干体炉到第一个温度点等稳定后同时读取参考温度计和被测设备的读数记录偏差。然后依次测多个点算出修正系数。修正系数写入设备的非易失存储器设备运行时自动应用。如果设备支持现场标定可以在软件里做一个标定模式通过按键或者上位机命令进入然后按提示操作。标定完成后自动计算并保存系数。这个功能很实用因为工业现场不可能把设备拆下来送回实验室标定现场标定能省很多事。溯源方面参考温度计要定期送计量院检定拿到检定证书。干体炉也要定期校准。这些记录要保存好有些行业审核的时候会查。虽然麻烦但这是保证测量准确性的基础不能省。5.4 低功耗设计的取舍有些 HVAC 应用是电池供电的比如无线温度变送器这时候功耗就很关键。ADS122U04IPWR 支持单次转换模式转换完自动进入低功耗状态电流从几百微安降到几微安。STM32F427ZI 也有多种低功耗模式Stop 模式下电流只有几十微安。低功耗设计的思路是平时 STM32 和 ADS 都处于休眠状态定时器定时唤醒唤醒后 ADS 做一次转换STM32 读数据、处理、发送然后继续休眠。占空比可以做到 1% 以下平均电流降到几十微安一节电池能用好几年。但低功耗和精度有矛盾。休眠唤醒后ADS 需要一定的建立时间才能达到标称精度如果唤醒后立刻转换前几次数据可能不准。我的做法是唤醒后先丢弃前 3 次转换结果从第 4 次开始取数。这样每次唤醒多花几十毫秒但精度有保证。对于温度这种慢变量多花几十毫秒完全无所谓。还有一个是激励电流的功耗。1mA 激励在 100 欧姆上功耗是 0.1mW不大但如果连续开启累积起来也可观。可以在转换前才开启 IDAC转换完立刻关闭。ADS122U04IPWR 的 IDAC 开启时间很短微秒级别对转换没影响。6. 方案扩展与变体思路6.1 多通道温度测量的实现ADS122U04IPWR 有 4 个模拟输入通道可以组成 2 路差分输入或者 4 路单端输入。如果测 2 路 PT100可以用 AIN0/AIN1 和 AIN2/AIN3 分别接两个 RTDIDAC 轮流给两个 RTD 供电。但 IDAC 只有两路如果两个 RTD 都要激励需要外部模拟开关切换或者用两个 IDAC 分别供两个 RTD但这样每个 RTD 的激励电流会减半需要重新计算增益。如果要测更多通道可以用外部多路复用器比如 ADG708 或者 CD4051把多个传感器轮流接到 ADS 的输入。但外部多路复用器会引入额外的导通电阻和漏电流对精度有影响。导通电阻跟 ADS 的输入阻抗分压会导致增益误差漏电流会在高阻抗节点上产生电压导致偏移误差。所以外部多路复用器要选低导通电阻、低漏电流的而且要在软件里做通道间校准。我的经验是如果通道数不超过 4 路尽量用 ADS 本身的通道不要外扩。如果超过 4 路可以考虑用多个 ADS122U04IPWR每个管 4 路通过 UART 地址区分。ADS122U04IPWR 的 UART 不支持多机通信但可以用 STM32 的多个 USART 分别接或者用模拟开关切换 UART 线。多个 ADS 的方案成本高一些但精度和可靠性更好。6.2 无线温度变送器的改造把有线方案改成无线核心是加一个无线模块比如 LoRa 或者 NB-IoT。STM32F427ZI 的 USART 资源丰富可以一路接 ADS一路接无线模块互不干扰。无线模块选型要看传输距离和功耗要求。LoRa 传输距离远功耗低适合 HVAC 这种分布式的场景NB-IoT 依赖蜂窝网络适合没有本地网关的场景。无线改造后供电也要改。如果是有线供电改成电池供电就要重新做功耗预算。ADS 和 STM32 的低功耗模式要用上无线模块也要选低功耗的发送完立刻休眠。天线设计也很关键LoRa 的天线要匹配 50 欧姆阻抗放在金属外壳外面或者用外置天线否则传输距离会大打折扣。数据协议也要改。有线的时候可以连续发送无线的时候要打包发送减少发送次数。可以把多个温度值打包成一帧加上时间戳和校验一次发出去。接收端解析后存数据库。这样既省电又省带宽。6.3 与上位机系统的对接温度数据最终要进上位机系统比如 SCADA 或者楼宇自控系统。对接方式有几种Modbus RTU、Modbus TCP、MQTT、OPC UA。Modbus RTU 最简单STM32 的 USART 加一个 RS485 收发器就能实现适合短距离、点对点的场景。Modbus TCP 需要以太网接口STM32F427ZI 有以太网 MAC加一个 PHY 芯片就能实现适合局域网内多设备组网。MQTT 适合云端对接STM32 加一个 Wi-Fi 或者 4G 模块把数据推到 MQTT 服务器。OPC UA 适合工业 4.0 场景但实现复杂一般用网关转换。我一般推荐 Modbus RTU因为简单可靠工业现场的设备基本都支持。STM32 这边实现 Modbus 从站把温度值映射到保持寄存器上位机轮询读取。寄存器地址和数据类型要提前定义好比如 40001 是温度值乘以 100 的整数40002 是状态字。上位机按这个定义解析就行。如果数据量大或者需要实时推送可以用 MQTT。STM32 定时把温度数据打包成 JSON通过 Wi-Fi 模块发到 MQTT 服务器。上位机订阅主题收到数据后存数据库或者推送到界面。这种方式灵活但依赖网络网络断了数据就丢了。所以关键场合还是要用 Modbus RTU 做备份。7. 写在最后的实操心得这个方案我从头到尾做过好几版踩过的坑比上面写的还多。最大的体会是工业测温看起来简单不就是读个 ADC 吗但实际做起来每一个环节都有讲究。电源、基准、布局、滤波、校准、防护任何一个环节出问题都会导致测量不准或者不稳定。ADS122U04IPWR 是一颗很好的芯片但好芯片不等于好方案。我见过有人用 ADS122U04IPWR 做出来的东西还不如用 12 位 ADC 的就是因为外围电路没做好。所以不要迷信芯片指标要把精力花在系统设计上。STM32F427ZI 的性能对于温度测量来说是过剩的但过剩有过剩的好处你可以把省下来的 CPU 时间用来做更复杂的滤波、更精细的校准、更丰富的通信协议。而且 F427ZI 的生态好资料多遇到问题容易找到答案。最后分享一个小技巧调试的时候先用一个固定的电阻代替传感器比如 100 欧姆的精密电阻看读数是否稳定。如果固定电阻读数稳定那问题在传感器或者传感器走线上如果固定电阻读数也不稳那问题在 ADC 或者电源上。这个二分法能快速定位问题省很多时间。温度测量这个事说到底是跟噪声和漂移作斗争。理解了噪声的来源和漂移的机理就能有针对性地解决。希望这些经验对做类似项目的朋友有帮助。