尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
ADS122U04与PIC18F86K90:高精度温度测量与工业信号链设计
做温度测量这件事听起来不过是用传感器采个数但真正要做出高精度、能在工业现场长期稳定运行的方案中间踩过的坑一点不比写逻辑代码少。最近我在做一套 HVAC 温控与工业过程监测共用的采集平台要求在一块主控板上同时处理多路热电偶和 PT100传感器模块还要能离开主控板一段距离布置。绕了一大圈最终锁定的组合是 TI 的 ADS122U04IPWR——一颗带 UART 接口的 24 位 Δ-Σ ADC——搭配 Microchip 的 PIC18F86K90 做主控制器。这套组合在工业与 HVAC 场景下相当顺手把模拟前端、数字通信和显示控制串成了一条顺畅的链路。如果你正在做温度变送器、温控面板、多路温度采集模块这类东西这篇内容应该能帮你少走不少弯路。我先把结论放在前面ADS122U04 解决的是“小信号、多通道、高精度”的模拟采集问题它内置可编程增益放大器、双路恒流源、内部基准和温度传感器一颗芯片就能把热电偶和 RTD 的调理电路全都包圆PIC18F86K90 则负责系统控制、LCD 段码驱动和低功耗管理。两者之间只用两根线走 UART协议简单抗干扰和布线压力都比 SPI/I2C 小很多。下面我会从选型思路、信号链设计、通信协议、硬件布局到实际调试把整个项目完整的拆给你看。1. 为什么是 ADS122U04 PIC18F86K90 这套组合1.1 从标题拆需求UART 接口 ADC 有什么不可替代的价值很多人选 ADC 第一反应是 SPI当时我也犹豫过。但仔细琢磨“工业和 HVAC 应用”这个前提你会发现 UART 版本的优势非常明确。HVAC 系统里的温度测点往往分散在风管、水管、设备间这些地方传感器模块离主控板可能隔着好几米甚至几十米。SPI 是同步接口SCK、MOSI、MISO、CS 最少四根线高速传输时对线间串扰特别敏感距离一长就各种奇怪问题。I2C 只有两根线但速度慢、地址冲突麻烦而且工业现场的长线电容很容易把上拉电阻的时序搞坏。UART 就不一样了。它本身就是为异步串行通信设计的每帧带起始位和停止位收发双方只要波特率对齐就行线缆长度容忍度高得多。更关键的是几乎所有 MCU 都有 UART 外设不用为接 ADC 单独学一套新协议。ADS122U04 把 UART 直接做进 ADC 里意味着你可以把 ADC 当成一个“数字传感器”挂在串口总线上主控侧只需要标准串口收发代码就能完成配置和读数据。另外一个小细节值得注意ADS122U04 内置了 4 通道输入多路复用器一个 ADC 节点可以接多路传感器配合双 IDAC 恒流源做多点 RTD 测量时不用额外加模拟开关。这在 HVAC 的“回风温度、送风温度、盘管水温”这种多测点需求里省下的板和继电器成本非常可观。1.2 MCU 选型背后的工程考量选 PIC18F86K90 而不是常见的 STM32不是因为它性能更强而是它有两个别人替代不了的特点。第一个是段码 LCD 驱动。K90 系列自带 LCD 控制器可以直接驱动段码液晶屏最多支持到 192 段。温控面板上要显示设定温度、当前温度、运行模式、故障代码用段码屏是最经济也最抗干扰的方案比点阵屏省电比数码管信息量大。如果换成普通 MCU要么外挂 HT1621 之类的 LCD 驱动芯片要么上点阵屏增加成本都不如 K90 直接驱动来得干净。第二个是低功耗特性。K90 工作在 1.8V 到 5.5V 宽电压范围休眠电流能做到微安级别。HVAC 控制器虽然通常有 24V 电源但很多场合要求断电后靠电池维持实时时钟和关键数据这时候 MCU 的休眠电流就是硬指标。再加上它有完整的 EUSART、定时器、EEPROM 和模拟比较器做一个温控器主控绰绰有余。当然选 PIC18 还有一个现实因素很多老牌 HVAC 控制器的代码就是基于 PIC 家族写的复用现有代码库比重新移植到新平台靠谱得多。这一点你在做产品迭代的时候会体会很深。1.3 工业与 HVAC 场景的共性温度测量需求把工业和 HVAC 放在一起看温度测量的需求其实高度重叠。工业现场测电机绕组温度、轴承温度、冷却液温度HVAC 里测盘管进出水温、风管温度、室内温度本质上都是要求精度够、稳定性好、抗干扰能力强、有明确的故障诊断手段。具体来说工业过程控制通常要求 ±0.5°C 以内的测量误差HVAC 舒适性控制一般 ±0.5°C 到 ±1°C 就能接受但能效监测、温差控制场景对相对精度要求很高。还有一点容易被忽略这类系统常年 24 小时运行传感器线缆可能靠近动力线电源环境也不干净模拟前端必须有良好的滤波和防护否则调试时好好的一到现场就各种漂。ADS122U04 的 24 位分辨率、内部可编程增益放大器和数字滤波正是为这类长期稳定运行的测量场景准备的。PIC18F86K90 则负责把这些数据转换成用户能看懂的显示和控制动作。这套组合的定位非常明确ADC 专注信号链MCU 专注管理与交互各司其职。2. 传感器前端与信号链核心设计2.1 热电偶测量毫伏级信号的放大与冷端补偿热电偶是工业测温最常见的传感器K 型热电偶灵敏度大约 40µV/°C。换句话说温度每变化 1°C热电偶输出的电压变化只有 40 微伏。这么小的信号如果不经过足够倍数的放大ADC 根本没法分辨。ADS122U04 内部 PGA 最高可以设到 128 倍增益这正好是为热电偶这类毫伏级信号准备的。以内部 2.048V 基准为例在 PGA128 时ADC 的满量程差分输入范围大约是 ±16mV对应 K 型热电偶可以覆盖约 ±400°C 的温度范围工业上常用量程完全够用。此时 1LSB 对应的电压约为 1.9nV折算成温度大约是 0.00005°C当然这是理想值实际噪声和分辨率远达不到这个水平但即使按 20SPS 数据速率下的实际噪声来算有效分辨率也能做到 0.01°C 级别远优于控制需求。不过热电偶测量真正的难点不在放大而在冷端补偿。热电偶输出的是热端和冷端的温差电动势你必须知道冷端的实际温度才能反推出热端温度。ADS122U04 内部集成了一个温度传感器正好可以用它来做冷端补偿。做法很直接把 ADC 的通道通过多路复用器切换到内部温度传感器读出冷端温度然后在软件里和热电偶电动势一起代入温度-电压换算表计算。这里有一个实操教训内部温度传感器反映的是芯片自身的温度所以 PCB 布局上要让 ADC 芯片和热电偶的冷端通常是接线端子保持良好的热接触尽量贴在同一个铜皮区域否则冷端温度的读数有偏差补偿结果自然不准。我见过有人把 ADC 放在远离端子的大功率元器件旁边冷端补偿误差直接差了 2°C 以上。2.2 RTD 测量激励电流与比例测量的优势PT100 铂电阻是 HVAC 水管温度测量的主力传感器0°C 时阻值 100Ω灵敏度约 0.385Ω/°C。测 RTD 的思路和热电偶完全不同你需要给 RTD 施加一个恒定的激励电流然后测量它两端的电压。ADS122U04 内部有两个可编程 IDAC 恒流源电流范围从 50µA 到 1500µA 可调。我用 250µA 作为默认激励电流原因有二一是电流小传感器自热效应低不会因为测量本身改变被测温度二是在 250µA 下PT100 在 0°C 时的压降大概是 25mV100°C 时约 34.6mV这个信号范围经过 PGA 放大后能充分利用 ADC 的动态范围。RTD 测量还有一个容易忽视但极其重要的技巧比例测量。所谓比例测量就是用一个精密参考电阻和 RTD 串联让同一个 IDAC 电流同时流过 RTD 和参考电阻然后把参考电阻两端的电压作为 ADC 的基准电压。这样做的好处是如果 IDAC 电流因为温度变化发生漂移RTD 上的压降和参考电阻上的压降会同比例变化测量结果自动抵消掉电流温漂的影响。接线上工业现场最常用三线制因为两线制会把导线电阻算进测量结果PT100 用长线缆时误差非常大四线制最准但线缆成本高一般用在实验室或高精度计量场合。三线制用两条线同时走激励电流和测量电流再加上 ADS122U04 内置的 IDAC 路由功能可以在硬件层面消除大部分线阻误差。2.3 数据速率、滤波与噪声折中ADS122U04 的数据速率从 20SPS 到 2000SPS 可调这个参数直接影响测量噪声和响应速度也是初学者最容易忽略的设计点。数据速率越低Δ-Σ ADC 内部数字滤波器抽取倍数越高噪声越低。以 PGA128 为例20SPS 下的峰值噪声大约是 0.7µV 级别对应温度约 0.017°C如果调到 2000SPS噪声会显著增大。对于 HVAC 和大多数工业温度测量场景温度变化本身是缓变量一秒采几次完全够用所以我会优先选用低数据速率换精度。还有一个很实用的细节20SPS 和 45SPS 这两个档位刚好能对 50Hz 工频干扰做到比较好的抑制。Δ-Σ ADC 的数字滤波器在数据速率整数倍对应的频率处有陷波特性选择 50Hz 的整分数倍数据速率可以把工频干扰压掉很大一部分。我在实际项目里测试过同样一套硬件20SPS 比 330SPS 出来的数据在末尾位的跳动幅度小好几倍。如果你的系统供电环境比较恶劣这个档位选择比任何硬件滤波都管用。3. UART 通信协议解析与固件实现3.1 寄存器配置流程ADS122U04 的 UART 协议并不复杂核心命令也就几条读寄存器 RREG、写寄存器 WREG、读数据 RDATA、复位 RST。所有配置都是通过写四个寄存器完成的分别是通道选择与 PGA 设置、增益与数据速率、IDAC 配置、参考电压与功能配置。我最常用的配置顺序是这样先发送复位命令让芯片回到已知状态然后依次写入配置寄存器 0 到 3。例如要测量 K 型热电偶设置 MUX 选择 AIN0 和 AIN1 作为差分输入PGA 设为 128数据速率设为 20SPS内部参考使能内部温度传感器打开。如果是接 PT100则要把 IDAC1 路由到 AIN0 作为激励源IDAC2 路由到 AIN1同时配置外部参考电阻接入 REFP/REFN。这里有一个容易踩的坑ADS122U04 的 UART 帧是 8 位数据、LSB 优先和很多 MCU 默认的 MSB 优先字节顺序不一样。发送单字节命令没问题但发送多字节配置数据时要注意按数据手册的位序处理否则寄存器写进去的值完全不是你以为的那个值。我第一次调试时配置了 IDAC 电流档位结果芯片输出的激励电流完全不对查了半天才发现是字节位序问题。3.2 数据帧与 CRC 校验UART 通信在长距离传输时偶尔会有误码工业现场尤其如此。ADS122U04 支持 CRC 校验模式开启后每个命令帧和数据帧末尾都会附加一个校验字节。我建议无论项目要不要过认证都把这个功能打开代价只是每帧多 8 个 bit 的传输时间收益是再也不用担心偶尔的串口干扰导致读回来一个错误温度。数据读取有两种方式RDATA1 命令一次读一个转换结果RDATA 命令进入连续输出模式ADC 会每次转换完成后自动把数据推送到 UART。在 HVAC 这类主从明确、轮询驱动的系统里我更推荐用 RDATA1 轮询。理由很简单连续模式下如果主控暂时忙别的没来得及读数据会丢而轮询模式下 MCU 想知道什么时间读节奏完全可控。3.3 PIC18F86K90 侧初始化与采样代码PIC18F86K90 的 UART 初始化比较常规关键是波特率要算准。以 48MHz 系统时钟、115200 波特率为例SPBRG 寄存器值的计算方法是SPBRG Fosc / (16 × Baud) - 1取整后实际波特率偏差 0.16%完全在 UART 容差范围内。主循环的采样逻辑我用一个简单的状态机来实现定时触发读状态向 ADC 发送 RDATA1 命令等待返回 4 个字节3 字节数据加 1 字节 CRC校验后查表换算温度。整个过程不需要中断代码逻辑非常直观。如果通信超时超过 10ms就自动重新初始化 UART 并复位 ADC这个超时重连机制在长时间运行中非常管用偶尔线缆被碰了一下导致通信卡死程序能自己恢复不用人工重启。4. 硬件设计与 PCB 布局实战4.1 电源、去耦与基准ADS122U04 是混合信号芯片模拟电源和数字电源要分开处理。我习惯的做法是单点接入 5V 电源先用磁珠把模拟部分和数字部分隔开模拟电源用 2.2µF 和 0.1µF 双电容去耦数字电源同样处理。去耦电容要尽量靠近芯片电源引脚走线先到电容再到芯片这个顺序不能反。参考电压是关键路径。如果用内部 2.048V 基准注意参考电压引脚上的去耦电容要用低 ESR 的 X7R 介质电容容量 1µF 起步。内部基准的初始精度和温漂虽然不算顶级但对大多数工业测温场景已经足够真正要求高的场合可以改用外部基准这时候外部基准芯片的噪声指标比 ADC 本身更重要选一个低噪声、低温漂的基准才是正路。4.2 输入保护与 EMI 滤波传感器线缆从现场引过来什么干扰都可能遇到。热电偶线本身是金属导体像天线一样接收环境电磁噪声PT100 线缆如果和动力线走同一个线槽感应出的共模电压可能高达几十伏。所以在 ADC 输入端加保护是必须的不是可选项。我在每个模拟输入端到地之间并联一个 TVS 管再串联一个 100Ω 到 1kΩ 的电阻电阻之后对地加 1nF 到 100nF 的电容构成低通滤波。这个 RC 带宽要结合数据速率设如果数据速率是 20SPSRC 截止频率选 100Hz 左右就能有效滤除高频噪声同时不影响正常信号。TVS 管要选结电容小的品种否则并接在输入端会影响测量精度工业级选择比如 5V 单向 TVS 加在输入和地之间就够了。4.3 接地与隔离策略接地是整个设计里最容易被搞砸的部分。ADC 的模拟地AGND和数字地DGND在芯片封装上通常是分开的引脚但 PCB 上不要把它们割裂成两块地而是用一块完整的覆铜地平面所有地引脚就近打孔接入。模拟地和数字地的分割其实是很多年前多层板不成熟时代的做法现代混合信号设计更推荐统一地平面避免跨分割带来的回流问题。如果传感器模块和主控之间距离超过几米我建议在 UART 线上加数字隔离器比如 ISO7721 这类器件隔离的同时还能切断地环路。工业现场不同设备之间的地电位差有时候会让你怀疑人生不隔离的话不仅数据乱跳严重的会把芯片打坏。ADC 模块和主控分别供电中间用隔离器连接是长距离温度采集最稳妥的架构。5. 调试实录与性能测试5.1 读数漂移、噪声过大的常见原因与排查联调时遇到最多的问题是数据末尾位乱跳。读出的温度在 0.1°C 的量级上不停波动把数据速率从 330SPS 降到 20SPS 后明显好转这是最常见也最容易解决的。如果降速后还是乱跳就要按顺序排查了先用示波器看模拟输入引脚上的波形确认不是叠加了高频干扰再查电源纹波ADC 的电源引脚如果有几十毫伏的开关噪声会直接反映到测量结果上最后检查基准电压是否稳定。还有一个新手很容易犯的错把热电偶的补偿导线接到 ADC 输入端的普通接插件上两种金属接触本身就会产生热电势而且这个热电势随环境温度变化。测温链路里每一个异种金属连接点都是潜在的热电偶尽量选用同材质连接端子或者做好热均衡设计。5.2 冷端补偿误差排查冷端补偿误差的表现是整机在恒温槽里校准得很准一拿到现场温度一变读数就跟着偏。问题几乎都出在冷端温度测量和实际冷端温度不一致。我在一个项目里遇到过类似问题最后发现是 ADC 芯片离发热的电源模块太近芯片内部温度传感器读到的温度比接线端子处的实际温度高了 3°C补偿结果自然偏。解决思路有两个一是布局上把 ADC 芯片和输入端子放在同一个等温区域内避免局部热源二是在软件里对冷端温度做一次校正通过已知的参考温度点比如冰水混合物 0°C 或恒温槽设定值反推补偿偏移量把系统误差消除掉。5.3 实测数据与精度分析最后放一组我实测的数据在恒温槽里分别设定 0°C、50°C、100°C用 K 型热电偶接入 ADS122U04PGA128、20SPS、内部基准、开启 CRC。每档数据连续采集 10 分钟记录平均值和最大偏差。恒温槽设定实测平均值最大偏差结论0.0°C0.03°C0.12°C接近冰点标定50.0°C50.11°C0.25°C典型热电偶精度100.0°C99.94°C-0.31°C中温段表现稳定这个结果对 HVAC 和多数工业监控场景都够用。误差主要来源是热电偶本身的精度等级和冷端补偿的非线性ADC 部分贡献的误差反而很小。如果追求更高精度可以换 A 级或 AA 级热电偶或者后续做多项式校正把热电偶非线性误差也补回来。6. 后续扩展多节点组网与自诊断温度采集系统一旦稳定跑起来你自然就会想扩展成多点网络。ADS122U04 本身就是 UART 节点理论上一个主控可以挂多个 ADC。不过硬件上要注意多个 UART 设备挂一条总线上需要解决总线冲突问题ADC 的 UART 输出是推挽模式不能直接并联多个设备。两种扩展思路供参考一种是一个主控带多个 UART 外设每个 ADC 独立连接到一路串口MCU 用多路串口轮询适合测点不多的情况另一种是 ADC 模块化每个模块内置一颗 MCU 做数据预处理模块之间用 RS-485 总线组网主控只管汇总显示。后者在大型 HVAC 系统中更实用每台风机盘管一个采集节点几十个节点挂一条 RS-485 总线施工和维护都方便。自诊断功能也值得提前设计。ADS122U04 的多路复用器可以切到内部温度传感器也可以让输入通道短接来测量系统失调和噪声底。固件里定期做一次自检把失调电压和噪声水平记录下来能提前发现传感器断线、ADC 性能退化等问题。别小看这个功能设备在现场跑一两年后接插件氧化、线缆老化都是大概率事件有自诊断数据能省很多售后排查时间。另外提醒一点正式做产品时固件里要留一跳线或指令用来做 PT100 和热电偶模式的切换。同一个硬件平台如果既能接热电偶又能接 PT100库存和备件压力会小很多现场维护时也不用因为传感器类型不同而更换整块主板。这套方案我用了小半年整体体会是把模拟前端交给一颗靠谱的 ADC把控制和显示交给一颗合适的 MCU中间用最简单的串口连接系统的可靠性反而比那些堆了一堆外围芯片的方案好得多。ADS122U04 的 UART 接口和内置恒流源大幅削减了外围器件数量PIC18F86K90 的 LCD 驱动和低功耗让面板设计变得简单直接。如果你也在做温度采集相关的产品可以参考这个架构搭一套原型从信号链到通信到软件一步步验证相信你也会和我一样做完之后对温度测量这件事有完全不一样的理解。
RELATED

相关推荐

8G显存本地AI数字人实战:从ASR到TTS的完整搭建与调优指南

8G显存本地AI数字人实战:从ASR到TTS的完整搭建与调优指南

8G显存在AI本地化圈子里处境挺尴尬的:你说它能跑模型吧,7B量化之后勉强能聊;你说它跑不好吧,又确实比集显强太多。大多数教程讲的都是怎么用Ollama跑一个聊天模型,但很少有人说可以更进一步——把它变成一只能听懂人话…

📅 2026/11/5 0:00:40
大模型系统性入门:从原理、部署到微调应用的完整路线

大模型系统性入门:从原理、部署到微调应用的完整路线

1. 为什么你收藏了300个教程,依然觉得大模型没入门我先讲一个前几天在交流群里看到的真实场景:有人问"大模型怎么入门",群里立马有人甩出几个网盘链接,里面躺着几百个PDF和视频,说是"全网最全的大模型学…

📅 2026/11/5 0:00:40
鸿蒙文件系统沙箱机制解析与开发实践

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

📅 2026/11/5 0:00:40
MORE NEWS

更多资讯

📰

首次来到CSDN进行创作

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

2027届计算机专业毕设选题指南:含AI技术新颖课题,这些题目可以直接借鉴参考!

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

python实现本地图片查看器

创作灵感电脑上保存了旧照片,想打开看一下,结果打开图片查看软件不是广告就是会员,实在影响心情。所以自己做了个图片查看器,使用python pyqt实现,效果如下:

📰

MySQL 为什么默认是 RR 而不是 RC?隔离级别选型真相

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

先更新数据库还是先删缓存?八种方案里错的有几种

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

Python 的哈希契约:为什么 list 不能当字典的键

原文链接:Python 的哈希契约:为什么 list 不能当字典的键 - 码日新 每日文章 Python 的哈希契约:为什么 list 不能当字典的键 上周帮同事看一个缓存问题:他用列表拼了个 key,运行时直接抛出 TypeError: unhashable t…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬