2026/11/5 3:16:14

ADS122U04+PIC18F86J16:工业HVAC高精度温度采集系统设计详解

ADS122U04+PIC18F86J16:工业HVAC高精度温度采集系统设计详解 干工业现场测温这块很多人第一反应是“传感器一接单片机读一下就好了”。真到产线上跑起来被工频干扰、长线压降、端子氧化折磨过几次你就明白一套高分辨率采集链路有多重要。这篇文章聊的就是我最近搭的一套实测方案ADS122U04IPWR配PIC18F86J16专门针对工业和 HVAC 场景里的温度采集。ADS122U04IPWR 是 TI 那颗带 UART 接口的 24 位 Δ-Σ ADCPIC18F86J16 则是 Microchip 的 8 位 MCU两个芯片组合起来能覆盖从风管温度、冷水机组到锅炉房多点测温的绝大多数需求。如果你是做控制板、仪器仪表或者楼宇自控的这套方案可以直接抄作业我会把选型、硬件、固件和现场调试的细节一次讲透。1. 方案架构与选型思路1.1 为什么选 UART 接口的 ADS122U04IPWRADC 和 MCU 之间的接口最常见的是 SPI 和 I2C但 ADS122U04IPWR 偏偏走 UART这在工业现场反而是个很大的优势。SPI 要拉时钟线、数据线、片选I2C 要处理地址仲裁而在很多 PLC、控制板、网关设备上UART 是最普及、也最容易隔离的接口。用一颗 UART 隔离芯片就能把模拟前端和数字主机彻底隔开不用考虑 SPI 时钟线在隔离器上的延时和抖动这在防雷、防地环流的场景里省心得多。回到 ADC 本身ADS122U04IPWR 是一颗 24 位 Δ-Σ 型 ADC片内集成了可编程增益放大器PGA、2.048V 基准源、内部温度传感器、激励电流源还有一个多路输入开关。标准版的 ADS1220 是 SPI 接口U04 版本就是把通信改成 UART本质上还是同一个内核。对于温度这种变化缓慢、但需要高分辨率和稳定性的信号24 位 Δ-Σ 架构可以做到很细的分辨率再配合内部的数字滤波器对 50Hz/60Hz 工频干扰有比较好的抑制能力这正是工业现场最需要的。我第一次用这颗芯片的时候也怀疑过 UART 通信的实时性会不会不如 SPI。实际测试下来温度采集本身就不是高速过程每秒几十个采样点足够。而且 UART 是异步通信不需要主控额外产生时钟代码写起来还更简单。对于 HVAC 这种大量使用 485/Modbus 的场景UART 的设备天然更容易接入现有总线体系整个数据链路从传感器到上位机思路都很顺。1.2 PIC18F86J16 在系统里的角色PIC18F86J16 是 Microchip 的 8 位 MCU80 个引脚资源在这个方案里刚好合适。它内置了多个增强型 USART 模块一个接 ADS122U04IPWR 读数据一个接 RS-485 或者无线模块向上位机上报数据不用额外扩展串口芯片。内部 Flash 和 RAM 虽然不算大但存温度转换表、跑几个滤波算法、维护通信协议完全够用。选择这颗 MCU 还有两个现实原因。第一是宽温工作范围HVAC 设备经常放在户外机柜、管道井、屋顶风机旁夏天 60 度、冬天零下十几度都有工业级芯片更安心。第二是供货稳定性和开发工具成熟PIC 系列的编译器、调试器、例程库很齐全国产替代和二手物料也相对好找。对于做产品的团队来说一颗主流 MCU 意味着 BOM 风险低后续采购和维修都方便。当然如果项目对成本特别敏感用更小的 PIC16 系列或者国产 ARM 也能做但 PIC18F86J16 的优势在于它的外设资源比较均衡特别是多路 UART 和引脚兼容性给后期升级留了空间。我在初版设计里甚至预留了第二个 ADC 的 UART 接口一个 MCU 带两个 ADS122U04IPWR直接扩展成 8 路温度采集这个后面细说。1.3 整体信号链路设计整个系统的信号链路可以拆成四段传感器、模拟前端、数字采集、通信上送。以最典型的三线制 PT100 为例铂电阻的阻值随温度变化激励电流流过电阻产生毫伏级电压信号经过输入滤波送到 ADS122U04IPWR 的模拟输入端。ADC 内部 PGA 把这个小信号放大到合适的幅度再由 Δ-Σ 调制器转换成数字码通过 UART 送给 PIC18F86J16。MCU 做线性化、滤波、断线检测最后组包上送给触摸屏、PLC 或者云网关。这条链路的关键在“毫伏级信号的处理”。PT100 在 0℃ 时电阻是 100Ω温度每升高 1℃电阻大约增加 0.385Ω。如果用 250μA 的恒流源激励升温 1℃ 产生的电压变化只有 96μV 左右非常微弱。普通的 12 位 ADC 在这个量级下基本看不到有效变化而 24 位 ADC 搭配 PGA 增益放大后可以把分辨率做到 0.001℃ 的级别。当然实际系统里噪声、基准漂移、接触电阻都会吃掉一部分有效位数但相比传统方案这个架构的余量要大得多。2. 硬件设计要点与接口细节2.1 传感器选型与激励电流计算先说说传感器怎么选。工业现场用 PT100 最多便宜、互换性好、线性度也还行HVAC 系统里 PT1000 和 NTC 也常见PT1000 因为阻值大线阻影响小适合远距离走线NTC 虽然便宜但一致性差只在精度要求不高的场合用。我这套板子四个通道做成通用的通过跳线和固件配置可以选择 PT100、PT1000 或 NTC主要是为了方便不同项目复用。激励电流的选择要权衡信号幅度和自热误差。电流越大传感器上的压降越大信噪比越高但流过电阻本身会产生热量导致测量点温度偏高。以 PT100 为例250μA 电流在 100Ω 电阻上产生的功耗是(P I^2 × R (0.00025)^2 × 100 6.25μW)这个功耗对工业测温来说基本可以忽略换算成温度误差远小于 0.01℃。如果把电流提高到 1mA功耗变成 25μW 也还是很小但它会让 ADC 输入电压变大四倍对噪声抵抗更有利。我在实际配置里选了 500μA 作为折中PT100 在 0℃ 时压降 50mV配合 PGA 增益 32满量程约 ±64mV既能覆盖 -50℃ 到 300℃ 的常用范围又不会让信号过早饱和。三线制和四线制接法在硬件上必须预留。四线制最准因为是独立的采样线和激励线完全不把线电阻算进测量回路三线制用两根线对称的补偿思路精度也很好且省一根线两线制最省但线阻直接叠加在传感器电阻上1Ω 线阻就能带来约 2.6℃ 的误差所以只适合短线或要求不高的场合。我在 PCB 上把所有通道都做成了三线制同时在端子旁边留了两个焊盘需要四线制时可以直接跳线。2.2 模拟输入滤波与保护电路ADC 前面的 RC 低通滤波一定要加不能省。工业现场的变频器、电机启停、继电器通断都会在传感器线上耦合出高频噪声如果直接进 ADC即使有数字滤波也容易造成电荷注入和采样误差。我用的典型值是 R1kΩC0.1μF截止频率约 1.6kHz作用是高频旁路而不是陷波真正对工频的抑制主要靠 ADC 内置的滤波器。保护电路同样重要。传感器线在外面走几十米万一碰到电源线或者被雷击感应ADC 输入端要能扛一下。我在每个输入端对地并联了 TVS 管型号选的是双向 5V 的再串一个 1kΩ 的限流电阻。如果用户现场特别恶劣可以把 R 加大到 10kΩ但要注意电阻本身的热噪声和压降权衡之后 1kΩ 是平衡点。还有一点ADS122U04IPWR 的差分输入端绝对不能超过绝对最大额定值否则芯片直接报废。上电时序也要注意先给 MCU 和 ADC 上电再让传感器接入避免热插拔瞬间的尖峰打到引脚上。我在端子设计上用了带锁扣的绿色端子插拔力适中同时也防止误插。2.3 电源、基准与接地布局电源是整个采集精度的基础这里翻过车的人非常多。一开始我在样机上直接用 3.3V LDO 给整个板子供电ADC 的 AVDD 和 DVDD 都接在同一个 LDO 输出上结果只要旁边有个继电器吸合ADC 读数就跳十几位。后来改成两级供电先用 DC-DC 把 24V 或 12V 降成 5V再用低噪声 LDO 单独给模拟部分供电数字部分用电感隔离情况立刻好转。ADS122U04IPWR 内部基准是 2.048V这个基准的稳定性直接决定测量精度。虽然芯片内部有基准但电源纹波会通过基准影响转换结果我习惯在 REF 引脚外加一个 10μF 陶瓷电容和 0.1μF 电容做低通并且在布局上让它尽量靠近芯片。如果项目要求更高可以切换成外部基准选一个温漂低于 5ppm 的基准芯片比如 REF2025但大多数 HVAC 场景内部基准足够了。接地方面模拟地和数字地在 ADC 底下单点连接PCB 采用四层板第二层完整铺地。传感器输入端的滤波电容要放在靠近 ADC 引脚的位置不要跨过数字信号线。UART 走线远离模拟输入如果 PCB 空间紧张至少保证两者不要平行走线超过 1 厘米。3. 固件实现从驱动到数据上送3.1 ADS122U04IPWR 驱动与初始化流程固件这部分的重点是时序不是算法。ADS122U04IPWR 的 UART 命令有固定格式发送命令后 MCU 必须等待正确的响应包再继续下一步。我在初始化里做了状态机超时自动重发重发三次失败就报错避免 MCU 卡死在某个等待上。初始化顺序一般是这样复位 ADC等待自校准完成写配置寄存器选择输入通道、PGA 增益、数据率、滤波器模式设置激励电流源发送启动连续转换命令。代码骨架大概是// 伪代码具体寄存器值以最新数据手册为准 ads122u04_reset(); ads122u04_write_reg(REG_MUX, MUX_AIN0_AIN1); // 差分输入 ads122u04_write_reg(REG_CFG, PGA_GAIN_32 | DR_20SPS); ads122u04_write_reg(REG_IDAC, IDAC_500UA | IDAC_ROUTE_AIN2); ads122u04_command(CMD_START_CONT);这里有个值得注意的细节如果数据速率选得太高ADC 内置的 50/60Hz 抑制效果会变差。为了同时抑制两个频率我选了 20SPS内部数字滤波器会先对工频形成陷波实测在变频器旁边码值波动比以前用 100SPS 时小了一个数量级。温度响应速度并不慢因为从传感器到温度变化本来就有热惯性20SPS 对 HVAC 控制完全够用。UART 波特率我用了 9600虽然 115200 也能跑但在强干扰环境下低速率的误码率更低。一个温度包加上帧头帧尾、CRC 校验9600 波特率下不到 3ms 就能传完完全不影响 20SPS 的采样节奏。3.2 连续转换模式与数据解析连续转换模式下ADC 会周期性输出转换结果。MCU 收到三个字节的有效载荷需要拼成 24 位有符号数再做符号扩展。int32_t raw ((int32_t)buf[0] 16) | ((int32_t)buf[1] 8) | (int32_t)buf[2]; if (raw 0x800000) { raw | 0xFF000000; // 补码符号扩展 }转换成电压值的时候要注意满量程范围和增益的关系。内部基准 2.048VPGA 增益 32所以满量程输入范围是 ±2.048/32 ±64mV。24 位 ADC 的码值是 2^23 个台阶对应满量程因此换算公式是[ V_{in} \frac{raw \times 2.048}{32 \times 8388608} ]再乘 1000 就是毫伏。比如 raw 是 4194304算下来就是 32mV 左右。这个换算看似简单但我见过好几个工程把 2^24 和 2^23 搞混结果整体偏差刚好差两倍排查了很久。另外ADS122U04IPWR 内部自带一个温度传感器可以粗略读取芯片自己结温这对判断 ADC 是否过热或者环境温度是否异常很有用。虽然它不能直接代替外部传感器测介质温度但在系统自检里是一个很好的辅助通道。3.3 温度线性化与数据滤波拿到电压之后核心任务就是还原成温度。PT100 在 0℃ 到 850℃ 范围的标准特性是 Callendar-Van Dusen 方程形式稍复杂。实际工程里我会用两个方法要么存一张分度表做二分查表表项之间的温度用线性插值要么用一个二次多项式拟合常用温度区间的阻温关系。简单起见0 到 200℃ 区间可以用[ R_t 100 \times (1 3.9083 \times 10^{-3} \times t - 5.775 \times 10^{-7} \times t^2) ]反解温度时用求根公式或者迭代法都行。8 位 MCU 上跑迭代有点耗时我更推荐查表加插值在 -50 到 300℃ 范围每隔 1℃ 存一个电阻值共 351 个点Flash 占不了多少查表速度极快。NTC 热敏电阻则用 B 值公式[ R_t R_0 \times \exp \left( B \times \left( \frac{1}{T} - \frac{1}{T_0} \right) \right) ]这个公式在窄范围内精度不错但批次一致性差需要每个探头单独标定。软件滤波方面我用的是滑动平均加限幅滤波。限幅滤波先剔除突变值如果当前采样和上一次的差值超过 5℃ 就往大说明多半是干扰或者断线只保留一个报警标志。滑动平均窗口取 8 个点对低频噪声有很好的平滑效果同时不会把真实的温度变化曲线拉平太多。有一点要提醒滤波窗口越长系统的阶跃响应越慢HVAC 控制回路里如果 PID 要用温度反馈过长的滤波反而会导致控制振荡。这个要靠实际调试去权衡。4. 工业/HVAC 场景下的工程问题与调试实录4.1 工频干扰与采样跳变排查这套方案做原型时很稳一上客户的设备就不行了现象是上位机显示的温度在 22.5℃ 到 23.8℃ 之间乱跳周期约 20ms 到 50ms。示波器一挂传感器线上感应出来的工频信号峰峰值有 30mV已经超过 PT100 正常信号了。排查过程先是怀疑接地问题测量传感器屏蔽层发现它在两端都接了大地形成了地环路把屏蔽层改成单端接地后干扰有所下降但没完全消失。接着检查 ADC 配置发现数据率设成了 1000SPS数字滤波器对工频每个周期只采样 20 个点抑制能力非常差。把数据率降到 20SPS打开 50/60Hz 抑制选项再配合 1kΩ/0.1μF 的硬件低通最终把码值波动压到了 1 到 2 个 LSB 以内。换算成温度大概是 0.002℃ 左右系统完全安静了。这个案例说明硬件滤波、软件滤波、采样率三者必须协同设计。只靠软件滑动平均能掩盖一部分问题但掩盖不了动态的冲击干扰只靠硬件 RC 滤波也滤不掉 50Hz 的幅值太高的干扰。正确的顺序是硬件先滤高频ADC 内部滤波器陷波工频软件再处理残余噪声。4.2 长线传输时的线阻与接地问题还有一个容易踩的坑是传感器线太长导致的线阻误差。某项目把 PT100 放在了距离控制柜 100 米外的风管里用的是两线制接法结果显示温度比实际高了 3℃ 多。算一下100 米铜线1.0mm² 截面积电阻约 1.75Ω一来一回就是 3.5Ω按 PT100 的 0.385Ω/℃ 折算误差接近 9℃。实际没测到 9℃ 是因为线径比较粗但也足够让控制逻辑误判了。解决方法是改成三线制。ADS122U04IPWR 的差分输入和激励电流源配合起来可以做一个标准的桥式补偿。接线方式激励电流从 IDAC 输出经过传感器的一根线到 PT100再从 PT100 另一根线回地第三根线作为传感器电压采样线接到 ADC 的差分输入端。因为采样线几乎不流电流所以线上的压降只产生共模电压不进入差模测量。实测下来100 米线长从两线制改三线制后误差从好几度降到 0.1℃ 以内。如果现场只能走两线还有一个土办法上电后先用一个校准命令测出线路总电阻固件里做软件扣除。但这要求线阻在运行中保持不变遇到端子氧化、接触不良仍然救不回来。所以产品设计上我始终推荐三线制端子只多一个引脚成本增加很少效果却是天壤之别。4.3 标定流程与精度验证方法系统装完必须标定不能只在 lab 里测一遍就出货。我的流程分四步第一步用精密电阻箱代替 PT100分别设定 0℃100Ω、50℃119.40Ω、100℃138.51Ω等标准电阻值让 ADC 采集并记录原始码验证全链路的电压换算对不对。第二步把电阻箱的误差计入电阻箱精度一般在 0.01% 甚至更高足以作为基准。此时如果发现换算出来的电阻值和设定值有固定偏差比如始终偏大 0.2Ω先检查 MCU 里的换算公式有没有用错再怀疑激励电流实际值和理论值的偏差。第三步使用标准温度源干体炉或者恒温槽做端到端验证。把 PT100 探头插进标准温度源里读取最终上报温度记录偏差。这一步能暴露传感器本身的误差、热传导问题、接线端子热电动势等问题。第四步在固件里做两点或多点校准。校准系数可以是“增益误差”和“偏置误差”两个量也可以做多点折线。HVAC 项目一般两点校准就够工业现场对精度要求高的建议每通道单独校准并写入 MCU 的 Flash 存储区避免校准数据丢失。标定数据格式可以参考这个表格测试点标准温度实测温度偏差结论0℃0.000.030.03℃合格50℃50.0050.110.11℃合格100℃100.0099.92-0.08℃合格偏差的一致性可以反映是否需要做增益校准如果三点偏差接近同一个常数偏置校准就能解决如果偏差随温度增加而变大就要考虑增益调节。这个判断方法在产线上很好用能快速定位问题出在传感器还是后级电路。5. 实操心得与避坑清单5.1 从样机到量产会踩的坑样机跑通只是第一步生产环节的坑一点不比研发少。第一是 PCB 清洗。助焊剂残留物在潮湿环境下会形成微弱的漏电流直接影响 ADC 输入端的微小信号。我试过一批板子在客户现场高湿度环境里读数漂移后来发现是板面没洗干净。量产一定要加清洗工序并且涂三防漆。第二是端子品质。采购便宜的绿色端子插几次后接触电阻可能从 5mΩ 变成 200mΩ在激励电流 500μA 下会产生 0.1mV 的压降换算到温度就是约 1℃。所以端子必须用镀金或镀银的可靠品牌出厂前做拉拔测试。第三是断线检测必须做成产品功能不能靠现场排查。ADS122U04IPWR 在激励电流和传感器断开的时候ADC 输入电压会飘到满幅或接近满幅固件里只要判断 raw 值超出合理范围就上报断线故障。同样的传感器短路时电压接近 0也要做判断。这个功能在生产测试时用来快速检查接线效果很好。第四是校准数据的管理。每块板子在产线标定后校准系数最好单独存一个地址区写入后加上校验和。软件升级的时候千万不能把校准区一起擦掉否则一批板子全要返工。我给这条加了一个专门的烧录保护位宁可升级麻烦一点也不能丢校准数据。5.2 更多应用场景的扩展思路这套双芯片方案做完了实际上就是一个小型的测温网关核心扩展空间很大。比如 HVAC 里的冷热水系统一个控制柜要求 8 路甚至 16 路温度输入单颗 ADS122U04IPWR 只有 4 个模拟输入但你可以把多颗 ADC 挂在同一个 UART 总线上通过片选或者地址区分设备或者直接换带更多通道的 ADC但那样 MCU 接口、PCB 布局都要重新设计不如保留现有硬件加一颗 ADC 来得快。如果是走楼宇自控总线PIC18F86J16 的另一个 UART 接一个 RS-485 收发器固件里实现 Modbus RTU 从站温度值做成保持寄存器上位机组态软件直接就能读。很多项目的需求就是这么朴实重点还是底层采集稳不稳。我自己最后的体会是测量精度不是靠某一个神仙器件砸出来的而是靠传感器、激励电流、ADC、滤波、校准、结构防护这一整套环节共同托起来的。这次的方案里 ADS122U04IPWR 和 PIC18F86J16 都是成熟器件没有太多花活但把每个环节的细节做对整机在复杂电磁环境下的表现就能达到工业产品的水准。如果你也正在做类似项目建议先从一支 PT100、一个差分通道、一组滤波器开始验证跑通全链路后再扩到多通道这样最不容易失控。