这几年接到的 HVAC 项目,好几次都是同一个套路:客户要监控送回水温度、风管温度、压缩机排气温度,误差要求压到 ±0.5℃,最好还能直接挂到工厂的监控网络里。以前我习惯用 4-20mA 变送器加 PLC 模拟量模块,可仪表一多,布线乱、校验烦、通道占用也肉疼。后来我把方案整个换掉,改成了 ADS122U04IPWR 加 PIC18F97J60 这套组合——一颗 24 位 ADC 负责把热电阻和热电偶的小信号变成数字量,一颗自带以太网控制器的 8 位 MCU 负责把数据送上网络。这篇文章就把电路、固件、校准和网络集成这条链路完整梳理一遍,给正在琢磨工业温度采集的朋友做个参考。
1. ADS122U04IPWR 这颗 ADC 的本事,都藏在“小信号处理”里
1.1 24 位分辨率不是靠堆规格,而是整体采集链路
做过温度测量的人都清楚,热电阻和热电偶输出的信号有多弱。PT100 在 0℃ 时是 100Ω,变化率约为 0.385Ω/℃,如果用 500µA 恒流激励,温度每变化 1℃ 时产生的电压变化只有 0.19mV 左右。K型热电偶更夸张,灵敏度大约 40µV/℃,100℃ 时输出也就 4.1mV。想实现 ±0.5℃ 的测量精度,热电偶回路上至少要能稳定识别 20µV 这个量级的电压变化,热电阻回路则要求在 0.1mV 量级内分辨电压。
普通 MCU 自带的 10~12 位 ADC 在这个需求面前基本是废的:3.3V 满量程下,12 位 ADC 的 1 LSB 约等于 0.8mV,连 K 型热电偶 20℃ 的温度变化都分辨不出来。这也是我坚持引入独立 ADC 的根本原因。ADS122U04IPWR 这类 24 位 Δ-Σ 型 ADC,核心价值就是把“微伏级信号”和“MCU 能处理的数字量”之间的落差填平。
Δ-Σ 架构简单说就是用很高的采样率对输入信号过采样,再通过数字滤波器把带内噪声压下去,最终输出一个高分辨率数字结果。它不像逐次逼近型 ADC 那样“一把定胜负”,而是靠统计平均来换取精度,所以线性度和噪声抑制天生就适合传感器慢信号。加上内部集成了 PGA(可编程增益放大器),最高能到 128 倍,K 型热电偶的几十微伏信号可以直接放大到几十毫伏甚至上百毫伏,外部仪表放大器就省掉了。
有一点必须反复强调:24 位分辨率不等于 24 位有效精度。工程上真正要看的指标是 ENOB(有效位数),也就是在当前数据速率和增益下,噪声到底折算成多少微伏。我选数据速率时习惯把输出噪声换算成温度值,确认它低于系统误差预算的 1/3,再拍板。比如目标 0.5℃,那噪声等效温度就不能超过 0.15℃。
1.2 两个可编程电流源,让热电阻不再依赖外部恒流源
ADS122U04 内部集成了两个可编程激励电流源,也就是 IDAC1 和 IDAC2,电流档位从零点几毫安到 1.5mA 可选。这个功能对测热电阻是刚需:PT100、PT1000、NTC 都需要稳定激励电流来驱动,如果靠外部运放搭恒流源,温漂、老化、元件离散性都非常头疼,还占板子面积。用内部 IDAC 的好处是电流大小、输出引脚、开关时序全由寄存器控制,软件就能切换通道,硬件不用改一根线。
电流档位的选择有讲究。激励电流越大,传感器上压降越大,信噪比越高,但自热效应也会更明显。PT100 在 1mA 电流下自身功耗大约 0.1mW,在静止空气里可能引入零点几摄氏度的自热误差;在液体或金属管道里散热好一些,误差会小一些。我的常规选择是:PT100 用 500µA 或 1mA,PT1000 用 250µA 到 500µA,NTC 则根据阻值区间灵活调整。ADS122U04 两个电流源的匹配度比较好,多通道测量时通道间一致性有保障,这在后面校准环节能省不少事。
用 IDAC 时要格外注意路由。比如三线制 RTD,需要用两个电流源分别给两根引线供电,再从第三根线测量电压。这种接法比两线制多一根线,但能抵消引线电阻带来的误差。芯片寄存器里有专门的 IDAC 路由控制位,可以把 IDAC1 和 IDAC2 分别指向不同引脚,接法非常灵活。我见过很多新手把激励电流和测量通道接在同一个引脚上,结果电流直接灌进 ADC 输入级,读数全偏,排查半天。
1.3 内部温度传感器,热电偶冷端补偿顺手就做了
热电偶测量有个绕不开的环节:冷端补偿。热电偶输出的是热端和冷端的温差电动势,冷端温度不确定,读出的电压就没有意义。传统做法是在端子排附近放一个 NTC 或者数字温度传感器,再在程序里查分度表。ADS122U04 直接把温度传感器做进了芯片内部,通过寄存器切换就能读到芯片附近温度。把热电偶端子尽量靠近芯片放置,就能拿这个温度做冷端补偿。
这么做的好处有两个:省一路外部温度传感器,而且补偿点就是 ADC 参考端所在位置,物理距离短,误差更容易控制。但芯片自身发热会影响内部温度读数,PCB 上要避免大电流走线从芯片附近经过。实际项目里,我会把热电偶冷端连接器放在芯片 10mm 以内的范围,再在结构上让两者处于同一个热平衡区域。冷端补偿能不能做到 0.5℃ 等效精度,很多时候不是算法问题,而是物理布局问题。
这也是我推荐在工业 HVAC 项目里用高集成度 ADC 的原因。后面讲固件时我会说怎么把内部温度读数换算成冷端电压,这里先不展开。
2. PIC18F97J60 在这套系统里扮演的角色
2.1 自带以太网 MAC 和 PHY,省掉一整颗外部芯片
PIC18F97J60 最突出的特点就是内部集成了以太网 MAC 和 PHY。MCU 自己就能完成物理层和数据链路层的收发,外部只需一颗隔离变压器加一个 RJ45 座,就能把数据送上网络。对 HVAC 群控、机房环境监控、工业设备状态上报这类场景来说,这个特点是决定性的。传统方案里 MCU 要接网口,往往得外挂 ENC28J60 或 LAN8720 之类的芯片,多一颗芯片就多一层驱动负担,布线上还要多考虑一组差分信号。
PIC18F97J60 属于 80 引脚封装,128KB 闪存加 3808 字节 SRAM。在温度采集场景下,这个资源是够用的:温度数据本身很小,4 个通道全开、每秒钟采 10 次,每次也就是 3 个字节。真正消耗资源的是 TCP/IP 协议栈和 HTTP/Modbus 服务,但 Microchip 的 TCP/IP 协议栈在这类 8 位 MCU 上优化了这么多年,开一两个 socket 完全可行。以太网 PHY 的供电和时钟走线,数据手册里有非常详细的参考设计,照做就不会出大问题。
2.2 8 位单片机扛得起 24 位数据吗
把 24 位 ADC 和 8 位 MCU 搭配,很多人第一反应是“带不动”。这里有个误区:ADC 的“24 位”说的是它每次通过 SPI 输出一个 24 位数字量,MCU 只需要搬 3 个字节,真正考验 MCU 的是后续运算,而不是数据宽度。PIC18 没有硬件浮点单元,直接用 float 做运算确实慢,但温度换算这种固定流程,完全可以转成整数定点运算。
我这个项目里用的方法:每个通道的原始码读出来后,先换算成“微伏×100”这种定点数,再查预先算好的分度表做线性插值。整个过程只用到整数乘加,PIC18 跑起来毫无压力。温度值最后用 0.01℃ 为单位存成 int32,给 Modbus 上报或者 HTTP 显示都够用。这套做法在 8 位 MCU 平台上是常规思路,关键是把数值范围提前算清楚,别让中间量溢出。
2.3 为什么不是 STM32,也不是树莓派
如今高性能 MCU 选择很多,还坚持用 PIC18F97J60 这种“老资格”芯片,我的理由有三个:一是成本,自带以太网 PHY 的 8 位 MCU 整体 BOM 低,适合 HVAC 控制器这种批量部署的设备;二是功耗,8 位 MCU 加 24 位 ADC 的组合在低功耗待机下很省电,适合常年通电;三是可靠性,这类芯片生命周期长、工作温度范围宽,工业现场的参考设计非常成熟。树莓派算力强,但工业环境对温度、湿度、长期供货的要求,它并不匹配。
还有一个实际因素:PIC18F97J60 的 TCP/IP 协议栈和以太网参考设计沉淀了很多年,网上能查到大量前辈的踩坑经验,比如变压器中心抽头怎么接、PHY 复位时序怎么处理、丢包怎么排查。对一个可能几年不重启的设备来说,“成熟”比“炫酷”重要得多。
3. 硬件连接:从传感器到 ADC 再到 MCU 的完整链路
3.1 电源与去耦,先说最容易被忽略的部分
整板供电我用 3.3V 单电源。ADS122U04 和 PIC18F97J60 都在 3.3V 下工作,电平兼容性很好,SPI 直连就行。需要特别注意的是 ADC 对电源纹波敏感,尤其是打开内部参考电压的时候。我的处理措施有三处:模拟电源引脚和数字电源引脚分开走线,每个电源引脚旁放 0.1µF 陶瓷电容,板级入口处用 10µF 电容加 3.3Ω 电阻组成 π 型滤波。如果现场供电质量实在差,还可以考虑在 ADC 的 AVDD 前加一颗低噪声 LDO,效果立竿见影。
3.3V 电源设计有个容易翻车的点:以太网 PHY 启动瞬间电流较大,LDO 余量不足会把电压拉下来,导致 ADC 参考电压波动、读数漂移。我第一次做这板子就吃了这个亏,后来把 LDO 从 100mA 档换到 300mA 档,问题消失了。这类问题仿真很难发现,只能上电实测,建议调试时用示波器盯着 3.3V 电源轨,看 PHY 插上网线的瞬间电压有没有跌落。
3.2 SPI 引脚映射与复位时序
PIC18F97J60 的 MSSP 模块工作在 SPI 主模式,与 ADS122U04 的接线非常直接:SCK 接 SCK,PIC 的 SDO 接 ADC 的 DIN,PIC 的 SDI 接 ADC 的 DOUT,CS 接任意 IO,DRDY 接到 PIC 的外部中断引脚。DRDY 建议一定用中断而不是轮询,因为 ADC 完成转换的瞬间如果没及时读取,下一轮数据可能覆盖当前数据。用中断方式还能让 MCU 在等待转换期间去做协议栈任务,效率高得多。
RESET 引脚同样要接 MCU 的 IO。上电后 MCU 先拉低 RESET,保持几百微秒,再释放,然后等一段时间让 ADC 内部上电稳定,再开始 SPI 通信。这么做是为了确保 ADC 寄存器和内部状态处于已知起点。我早期偷懒把 RESET 直接接上拉电阻,出现过概率性初始化失败,改成 MCU 控制复位后就没再遇到。
3.3 RTD 输入的典型接法:两线、三线还是四线
以 PT100 为例,三种接法的取舍很简单:两线最省线,但引线电阻全部叠加进测量回路。假设每根引线 2Ω,两根就是 4Ω,对应 PT100 大约 10℃ 的误差,完全不可接受。三线制可以抵消大部分引线电阻误差,是工业现场最常用的方案。ADS122U04 用两个 IDAC 分别驱动两根引线,再从第三根线取电压,计算时引线电阻的影响就基本消掉了。四线制精度最高,适合计量级场合。HVAC 现场如果传感器离采集器不远,三线制是性价比最好的选择;如果传感器就在板子旁边、线很短,两线制也能接受,程序里做一次线阻补偿就行。
实际硬件上,我会在 RTD 每个输入引脚对地串一个 10Ω 电阻再进 ADC,配合输入端的 0.1µF 电容组成一阶低通,用来抑制射频干扰。这个 10Ω 电阻会带来一点点误差,但三线制两侧串的阻值一致的话,误差是共模的,会被差分输入抵消。还有个经验:贴片电阻尽量选温漂低的金属膜或厚膜电阻,别用碳膜,否则温度一变,阻值跟着变,查起来非常隐蔽。
3.4 热电偶输入与保护电路
热电偶信号小电压,反而更容易受共模干扰。我的做法是:输入端每个引脚串联 1kΩ 限流电阻,并联双向 TVS 二极管到地,钳位电压选 6V 左右,再在 ADC 差分引脚之间并一个 0.1µF 电容。1kΩ 加 0.1µF 的截止频率约 1.6kHz,对 10Hz 左右的采样率完全够用,又能把高频噪声滤掉。如果热电偶线很长,建议在接插件入口处加共模电感,效果比只在 ADC 前面滤波好得多。
冷端补偿的热平衡问题前面提过,这里再强调:热电偶冷端如果用接线端子,端子必须紧挨着 ADS122U04,整片区域不要有发热器件,也不要有风道直吹。不然芯片内部温度传感器读到的温度和冷端实际温度不一致,补偿反而变成负优化。PLC 柜里散热风扇直吹 PCB 时,这个误差可能到 1℃ 以上,绝对不能忽视。
3.5 PCB 布局:模拟地和以太网地要“和平共处”
整板既有高分辨率模拟前端,又有以太网 PHY,布局上最难处理的是地。以太网变压器和 RJ45 座是开关噪声的重要来源,它们和 ADC 输入之间必须拉开距离。我的做法:把板子分成模拟区和数字/网络区,模拟区回流地单独走,然后在 ADC 下方的位置做单点汇合。输入信号线尽量走内层,两侧包地,模拟输入区域不要穿数字信号线。
还有一个容易翻车的点:ADC 模拟输入在 PCB 上通常是较长走线,如果贴着以太网变压器磁性元件走,会受到磁场耦合干扰。我在 Layout 时会把输入走线优先绕到板边,和变压器引脚保持至少 5mm 间距。整理布线时多用几个过孔也没关系,关键是别让大电流、高速信号贴着模拟输入走。
4. 固件侧的关键流程:从初始化到读出有效数据
4.1 SPI 初始化与波形确认
SPI 通信成败一半在时序配置。ADS122U04 数据手册会对 SCLK 极性、相位和最大时钟频率做出规定,按手册规范配好 SPI 模式后,再用示波器或逻辑分析仪抓一遍波形,确认 MISO 数据在正确的沿被采集。我的经验是:手册推荐的 SPI 模式在不同批次芯片上偶尔会有兼容差异,遇到读数全为 0 或者全为 0xFF 时,先别急着怀疑焊接,把 SCK、CS、DOUT 三路波形拉出来看,问题往往一目了然。
我把 SPI 时钟先设定在 1MHz 左右,这个速率对 2kSPS 以下的 ADC 绰绰有余,对 PCB 布线要求也宽松。PIC18 的 MSSP 模块自带分频,把系统时钟分到 1MHz 附近即可。初始化时一次性把 CS 置高、SCK 保持空闲电平,然后依次发送寄存器配置命令。注意每次访问寄存器前 CS 必须拉低,访问结束再拉高,否则内部状态机可能错乱。
4.2 寄存器配置的核心逻辑
寄存器配置的思考顺序是:先定数据速率,再定输入通道和增益,最后配置参考电压与 IDAC 路由。数据速率决定数字滤波器截止频率和输出噪声。对温度这种慢变量,我一般选 20 SPS 到 100 SPS,噪声够低,又能满足 HVAC 控制实时性。把速率拉得很高只会让噪底上升,对温度测量没有任何好处。
配置 IDAC 时重点检查电流大小和输出引脚映射,不能和输入通道冲突。一个经典错误是把 IDAC 输出到正在用作差分输入负端的引脚,导致电流直接灌进 ADC 输入级。我的习惯是:先看数据手册的输入多路复用表,IDAC1、IDAC2 固定到两个独立引脚,输入正负端选另外两个引脚,宁可多占一个引脚,也别让同一个引脚既做激励又做测量。这种结构性问题一旦画进 PCB,改起来非常痛苦。
下面是初始化阶段的一段示意代码,寄存器值请按具体型号数据手册填写:
// 示意:配置 ADS122U04 并将 4 个通道加入轮询 uint8_t cfg[4] = {0}; cfg[0] = adc_mux_pga(CH0_PT100, PGA_GAIN_8); cfg[1] = adc_data_rate(SPS_20); cfg[2] = adc_ref_idac(REF_INTERNAL_2V048, IDAC_500uA); cfg[3] = adc_idac_route(IDAC1_TO_AIN2, IDAC2_TO_AIN3); ads_write_regs(cfg, 4); ads_start_conversion(); // 等待 DRDY 下降沿,然后读取三字节4.3 单发模式还是连续模式
ADS122U04 支持单次转换和连续转换。连续模式用 DRDY 下降沿触发读取,CPU 负担小,软件结构简单,适合固定通道数的应用。单次模式每次转换结束自动进入低功耗,适合电池供电场景,但每次都要重新触发,软件多一层开销。对于 220V 供电的 HVAC 控制器,省电不是主要矛盾,我选了连续模式。
连续模式下有个关键细节:多通道轮询时,ADC 在通道切换后需要稳定时间,早期几个采样点必须丢弃。我的做法是每个通道至少读 4 次,丢掉前 2 次,取后 2 次平均值作为有效数据。这个策略能大幅降低通道间串音,尤其是在激励电流刚切换的时候,效果非常明显。温度变化本来就慢,丢几个点换稳定性,完全值得。
4.4 把原始码换算成温度值
ADS122U04 输出 24 位二进制补码,输入电压与原始码的换算关系要看数据手册的编码表。拿到输入电压后,RTD 的电阻值用欧姆定律反推,再查分度表或按多项式得到温度。对于 PT100,我用的简化多项式在 0~100℃ 范围内误差小于 0.05℃,足够 HVAC 使用。
热电偶的换算麻烦一点:先把 ADC 读到的热电偶电压加上冷端补偿电压(由内部温度传感器查分度表得到),再以总电压查一遍热电偶分度表,得到热端温度。整个过程就是查表加插值。把分度表做成 int16 数组存在 PIC 的 Flash 里,每 1℃ 存一个电压值,线性插值后误差 0.1℃ 以内,查询速度比浮点公式快一个量级。
4.5 无 FPU 环境下的定点运算技巧
PIC18 的软件浮点不是不能用,但在 20Hz 采集回路里会拖慢主循环。我的定点做法:所有物理量先放大到整数域。温度放大 100 倍用 int16 存,电压放大到 0.1µV 单位用 int32 存,查表插值也只用整数乘除。实测下来,一次完整温度换算只需要几百个指令周期,主循环几乎无感。这个技巧在 8 位 MCU 平台上非常值得推广。
RAM 管理也必须注意。PIC18F97J60 只有 3808 字节 SRAM,开了 TCP/IP 协议栈后,留给采集任务的缓冲非常有限。我用环形缓冲区,每个通道只保留最近 10 个温度值的平均窗口,不保存历史曲线。历史数据交给上位机记录,设备端只负责当前值和短时均值,省 RAM 又满足控制需求。
5. 精度与校准:纸上参数和现场数据是两回事
5.1 先认清误差从哪里来
任何 ADC 的标称精度都是理想条件下的。实际系统误差来源包括:内部参考电压初始容差、PGA 增益误差、IDAC 电流不准、传感器自身误差、引线电阻、冷端补偿误差、PCB 上的热电动势。这些全部算进去,不做校准的系统误差可能到 1~2℃,远超 HVAC 常见的 ±0.5℃ 要求。校准不是可选项,是必要步骤。
我的校准策略分两层:第一层用标准电阻箱模拟 RTD,在 0℃ 和 100℃ 两个点测量 ADC 原始输出,算出增益误差和偏移量;第二层用真正的 PT100 和工业恒温槽做端到端验证。第一层快速、不依赖恒温设备,适合产线;第二层是对最终系统的考核。
5.2 两点校准怎么操作
具体过程:在 ADC 输入接入一个 0.01% 精度的 100Ω 标准电阻,读原始码,记为 Code0;再换成 138.51Ω 标准电阻,也就是 PT100 在 100℃ 时的阻值,读原始码,记为 Code100。然后假设线性关系,算出每个通道的斜率 K = (Code100 - Code0) / 38.51 和截距 B。之后测量任意电阻时,R = (Code - B) / K。把 K 和 B 存到 EEPROM,每次上电加载。
操作时有几点容易踩:标准电阻通电后会自热,测量前要等它稳定几分钟;不同通道的 K 和 B 要分别测;校准温度点和实际使用温度相差很大时,应该考虑加第三点校准,否则受 ADC 温漂影响,边缘温度点误差会上升。如果温度范围很宽,我的做法是 0℃、50℃、100℃ 三点分段线性。
5.3 现场调试中遇到的几个经典问题
讲三个实际遇到的问题。第一,长线测量时读数跳变,原因是热电偶线经过变频器附近,高频干扰被 ADC 采样。解决方法是输入端并联更大的电容,把滤波器截止频率降到几十赫兹,同时把信号线换成屏蔽双绞线,屏蔽层单端接地。第二,连续运行几小时后温度漂移 0.3℃,排查后发现是 ADC 附近一个功率电阻发热,导致芯片内部温度传感器读数升高,进而影响冷端补偿。把电阻挪远后恢复正常。第三,某批次设备读数整体偏低,原因是焊接时助焊剂残留,PCB 上的漏电流分走了一部分微安级激励电流。清洗 PCB 后问题消失。
这些问题有个共性:温度测量系统的误差往往不是来自 ADC 芯片本身,而是来自它周围的环境。所以我在调试新板子时,第一件事就是测芯片表面温度和环境温度之差,超过 2℃ 就要检查布局。
5.4 多通道数据的一致性处理
多通道采集时,通道间的增益误差和偏移误差不一定相同。我的做法是每通道独立校准,不能只校一个通道套用到所有通道。另外,通道切换顺序会影响测量值,建议始终按固定顺序轮询,避免相邻通道的激励电流状态互相影响。
6. 数据上网络:把温度送到监控系统的完整路径
6.1 以太网部分怎么搭
PIC18F97J60 内部集成了以太网 MAC 和 PHY,硬件上只需外接隔离变压器、RJ45 座和 25MHz 时钟晶体。PCB 布线时要保证 PHY 到变压器的差分走线等长、阻抗连续。Microchip 的 TCP/IP 协议栈官网可以下载,PIC18F97J60 的示例工程很多。我的建议是先跑通一个最简单的 HTTP 服务器 demo,确认网络通路,再叠加温度采集任务。
需要注意:以太网 PHY 的寄存器初始化和自协商过程在上电后需要时间,期间 MCU 不应阻塞温度采集。我的主循环把温度采集放在中断驱动的状态机里,网络协议栈任务在主循环空闲时间执行。这样即使网络暂时不通,温度数据也一直在后台更新,不会断档。
6.2 HTTP 页面和 Modbus TCP,选哪个
HVAC 和工业现场的上位机接入习惯不同。人机交互场景,HTTP 页面最直观,浏览器打开就能看;接入楼宇自控系统或 PLC,Modbus TCP 更通用。我在这个项目里两种都做了:HTTP 用于调试和本地查看,Modbus TCP 作为正式对外接口。Modbus TCP 的保持寄存器放 4 个通道温度值,单位 0.01℃,上位机直接读取,参数释义清晰。
实现 Modbus TCP 时,TCP 端口默认是 502,建议在代码里做一个简单连接白名单,避免无关设备反复连接占用资源。PIC18F97J60 的 RAM 有限,同时打开的 TCP 连接数不宜多,我限制为两个:一个给 HTTP,一个给 Modbus,超过的直接拒绝,行为完全够用。
6.3 网络调试常见问题和排查顺序
网络不通最让人头疼。我的排查顺序:先看 PHY 的 link 指示灯有没有亮,没亮先查变压器和 RJ45 焊接;link 亮但 ping 不通,查 MAC 地址配置和 IP 是否冲突;ping 通但浏览器打不开,查协议栈 socket 数量和 HTTP 服务状态;HTTP 能打开但数据不刷新,查温度采集与协议栈之间的数据共享是否存在同步问题。
还有一个很容易忽略的点:以太网变压器中心抽头电容不能省。有些低成本设计为了省几个元件省略它,结果是辐射超标、极限温度下丢包。我在第二版设计里严格按照参考设计补上中心抽头电容和磁珠,整机稳定性明显提升。这个细节看起来不起眼,却直接影响长期可靠性。
6.4 长时间运行的稳定性建议
最后给几个长期稳定运行的建议。温度采集控制回路里加看门狗,防止协议栈或外部干扰导致程序跑飞。温度数据写入 EEPROM 的频次要控制,Flash/EEPROM 有擦写寿命,我的策略是每 5 分钟写入一次掉电保存值,正常运行时只在 RAM 里维护。如果现场有掉电风险,可以加一颗超级电容和电压监测,检测到掉电瞬间把最后一批温度值写入 EEPROM,不过这对硬件要求稍高,按项目预算取舍。
这套 ADS122U04IPWR 加 PIC18F97J60 的方案,我前后做了两版。第一版主要验证精度和网络通路,第二版才把保护电路、电源余量和 PCB 布局按工业现场标准补全。实际运行下来,四路温度通道长期稳定度在 ±0.3℃ 左右,Modbus TCP 数据刷新率 5Hz,HVAC 群控和远程监控都够用。如果你也在做类似的工业温度采集,建议先按“传感器接口 → 电源去耦 → 校准流程”这条线把第一版跑稳,再考虑网络功能,分步推进比一次到位要容易排查得多。