UART接口24位ADC温度采集:ADS122U04与R7KA8M2JFLCAC 做工业温度采集这几年我踩过最多的坑不是传感器选型而是 ADC 和主控之间的数据通路。最近一个项目需要在 HVAC 和工业温控场景同时兼顾精度、成本和多点测量最终定下来用ADS122U04IPWR配R7KA8M2JFLCAC这套方案。ADS122U04IPWR 是 TI 的 24 位 Δ-Σ ADC自带 UART 接口可以省掉 SPI 的线序和时序调试R7KA8M2JFLCAC 则是一颗资源很足的 32 位 MCU用来做协议解析、冷端补偿和 PID 控制。这套组合在 -40℃ 到 150℃ 的范围里实测精度能做到 ±0.2℃ 以内。这篇文章就把整个设计思路、硬件接线、软件配置和现场踩坑记录整理出来给正在做类似温度采集项目的朋友一个能直接抄的作业。1. 项目整体设计与方案拆解1.1 为什么选 UART 接口的 24 位 ADC在工业和 HVAC 场景下传感器往往分布在空调机组、风管、冷水机组、工业烤箱等现场主控板放在控制柜里两者之间可能有几十厘米到几米的线缆。如果用 SPI 接口的 ADC最大的问题是抗干扰和线序SCK、MOSI、MISO、CS 四根线一旦线缆长了时序容易漂还要处理片选抢占。而 ADS122U04 把 UART 作为通信接口只需要 RX/TX 两根线本质上是在 ADC 内部做好了协议封装MCU 这边拿普通串口就能读数据。很多人担心 UART 速度不够但温度测量本来就属于慢信号24 位分辨率下最高数据速率也就 2000SPS典型应用只要 20SPS 就够115200 波特率下完全承载得了。另外一个隐蔽的优势是隔离UART 很容易接数字隔离器在工业控制里这特别关键能避免地环路噪声。我自己以前用 SPI ADC 做远程采集调试时最头疼的就是时钟线上的毛刺换了 UART 方案之后这些烦恼基本消失。1.2 两块芯片的分工ADS122U04IPWR 负责把传感器的小信号放大、检测、数字化并自动完成一些简单的滤波和比较功能。它内部有可编程增益放大器PGA增益最高 128 倍对于热电偶几十微伏每摄氏度和 RTD几百毫伏都能匹配。R7KA8M2JFLCAC 负责系统级逻辑初始化 ADC、周期读取结果、把数字量换算成真实温度、驱动屏幕或上传给上位机、执行温度控制算法。有些方案会用 FPGA 或专用 ASIC但在这个项目里MCU 已经足够而且改协议更方便。从系统架构上说这两颗芯片的分工很像“传感器前端 大脑”的搭档。ADC 只负责把物理量变成数字码MCU 负责所有智力活。这样做的好处是升级灵活以后想换更高精度的传感器只需改 ADC 的配置不用动主控板和软件架构。1.3 工业和 HVAC 的温度测量痛点工业现场温度测量的难点是线长、干扰大、传感器非线性。HVAC 则是数量多、成本敏感、需要长期稳定。比如一个大型商业楼宇的冷站可能有上千个温度点每一路都用高精度仪表不现实而用普通的模拟放大方案又容易受变频器干扰。ADS122U04 的 24 位分辨率意味着即使传感器电压很小也不需要额外的仪表放大器它的 4 个通道可以用多路复用器切换一个 ADC 就能轮询多路传感器正好匹配 HVAC 的多点测量需求。另外工业环境里温度突变可能是灾难。比如化工反应釜温度一旦超过阈值就要触发急停。这种场景下ADC 的持续转换能力和 MCU 的快速响应缺一不可。R7KA8M2JFLCAC 的中断响应速度很快可以在几微秒内把 ADC 的 DRDY 信号转成控制动作比传统的“读一次-算一次-再输出”架构更安全。2. 硬件电路设计与关键参数2.1 电源和基准电压别把精度废在供电上ADS122U04 的数字电源 DVDD 和模拟电源 AVDD 都要干净。我用的是 LDO 单独供电AVDD 用 3.3VDVDD 可以直连同一个 3.3V但中间要加磁珠。基准电压可以选内部 2.048V但对精度要求高的场合建议用外部基准比如 REF3425温漂系数 10ppm/℃。需要注意的是内部基准的精度是 ±0.2%温漂约 30ppm/℃如果你把 ADC 的满量程当作参考最后的误差会直接叠加。我们在项目里用了外部基准后零点漂移明显减小。电源轨电压去耦电容用途AVDD3.3V10uF100nFADC 模拟部分DVDD3.3V100nF10uH 磁珠ADC 数字接口VREF2.048V1uF基准电压电源布局还有一个容易被忽略的点模拟地和数字地一定要单点汇接不要大面积铺铜连一起。数字部分的电平翻转会在地平面产生噪声如果模拟地跟数字地形成了环路ADC 的噪声底会标高好几个码。我见过不少同学把地铺成一大片看起来好看实际热电车厂调试时数据就是飘。解决办法很简单在 ADC 芯片下方把模拟地和数字地用 0Ω 电阻或磁珠单点连接或者用分割铜皮的方式。2.2 传感器的接入方式如果测的是 PT100/PT1000 三线制 RTD用恒流源激励。ADS122U04 内置 IDAC 电流源可以配置成多种电流档位。我用 250μA 激励 PT100因为自发热小同时保证灵敏度。三线制接线一根激励线接 RTD 一端另外两根分别接 RTD 另一端和补偿线分别进入 ADC 的两个差分输入。这样导线电阻导致的误差大部分被抵消。如果测热电偶K 型热电偶的 mV 级信号建议 PGA 增益设为 64 或 128同时一定要做冷端补偿。ADS122U04 支持内部温度传感器可以用来估算冷端温度但精度一般。我们在现场用一个 10k NTC 贴片靠近冷端端子校准后能到 ±0.3℃对于 K 型已经够用。注意 RTD 的引线电阻问题两线制在长线时误差很大因为每根导线电阻会直接叠加到传感电阻上。比如 10 米的铜线线阻可能有 0.5Ω相当于 PT100 升一度多的误差。三线制能用就用不能用的场合至少用四线制里的一对线做开尔文连接。ADS122U04 支持差分输入正好方便三线接法。2.3 模拟前端滤波与保护即使 ADC 有 24 位分辨率如果前端不滤波干扰照样能让你把有效位数吃掉很多。我习惯在每个输入端串联 1kΩ 电阻对地并联 1nF 电容组成差分低通滤波截止频率约 160kHz。这样既抑制高频噪声又保护 ADC 输入。另外在输入引脚并联 TVS 管防止静电和浪涌工业现场设备经常插拔这步不能省。这里有个取舍滤波电容太大建立时间变长会影响多路切换速度太小滤波效果不佳。1nF 对 20SPS 的数据速率来说足够而且 1kΩ 电阻限制了电容放电电流安全。如果传感器线缆超过 5 米我建议把电阻加大到 4.7kΩ电容减小到 470pF这样既保持带宽合适的低通又不明显拖慢建立时间。2.4 MCU 接口电路与电平匹配ADS122U04 的 UART 是 3.3V 逻辑R7KA8M2JFLCAC 的 I/O 也是 3.3V可以直连。但如果线缆比较长或者主控板是 5V 系统就要做电平转换。最简单的做法是串 100Ω 电阻限制电流加上二极管钳位。但更可靠的是用双向电平转换芯片比如 TXS0102。我们因为把 ADC 和 MCU 放在同一块 PCB 上直接短接但给 RX/TX 预留了 0Ω 电阻位置方便调试时断开。还有一个细节UART 从机ADC的 RX 引脚如果有毛刺容易误触发命令。最好在 MCU 的 TX 输出到 ADS122U04 的 RX 之间串一个小电阻同时把 ADC 的 RX 引脚加上 10kΩ 下拉到地如果手册允许防止初始化时引脚浮空误动作。我们板子上这么做了之后通信稳定性提升了一个等级。3. 软件协议与数据解析3.1 UART 通信协议与寄存器映射ADS122U04 的 UART 协议由几条命令组成读寄存器、写寄存器、读转换数据、读状态。每条命令帧格式是命令字节 数据字节 校验。以读转换数据为例MCU 只需要发送一字节的命令ADC 就会返回 3 字节的 24 位转换结果。具体命令字以手册为准这里只讲思路。使用这种串行协议最需要注意的一点是MCU 的串口接收必须处理好“帧”的概念。由于 ADC 是长线远程节点响应有时间差最好用 DMA 或 FIFO 接收然后按固定长度截帧。不要用简单的while(串口空闲)来判断否则容易丢字节。我用的是 R7KA8M2JFLCAC 的硬件串口 FIFO接收中断里只把数据放进环形缓冲主循环再从缓冲里提取完整帧。波特率方面上电时通过 ADS122U04 的引脚设置选择我们用了 115200。注意如果用 USB 转串口调试不要接在 MCU 和 ADC 之间的通路上否则会破坏逻辑电平。建议加一路分线端子用示波器直接量。3.2 配置步骤从上电到连续转换一个典型的配置流程上电后等待 10ms让外部基准和内部 LDO 稳定。发送写寄存器命令配置设置选择外部基准、开启 PGA、选择通道、数据速率 20SPS。配置 IDAC 电流源用于 RTD 激励。发送读寄存器命令回读配置确认写入正确。发送查询状态命令检查 DRDY 位确认转换完成。发送读数据命令读取 3 字节转换结果24 位二进制补码。这六步看起来简单但我在实际编码时踩了一个坑如果上电后没有正确设置 PGAADC 输出可能直接饱和或归零。所以我在配置结束后始终加一步回读一旦发现配置寄存器的值不是预期的就重发。因为 UART 通信偶尔会有误码重发机制比 CRC 更实用当然有条件的话两种都加。MCU 端我建议写一个状态机不要阻塞等待。因为 UART 接收可能一次来多个字节需要 FIFO 暂存然后逐帧解析。R7KA8M2JFLCAC 的主频足够串口中断处理函数里只放帧接收逻辑等完整帧后置标志位主循环里再做数据处理。这样既不会漏数据也不会卡死。3.3 温度换算RTD 线性化与热电偶冷端补偿RTD 的温度-电阻关系用 Callendar-Van Dusen 公式PT100 在 0-850℃ 范围R R0(1 AT BT²)其中 A3.9083e-3B-5.775e-7。实际操作时我们一般不在 MCU 里直接算多项式而是用查表加线性插值。先把温度每 1℃ 对应的 ADC 码放在数组里然后二分查找区间。这样 MCU 浮点运算少速度快。注意 RTD 非线性导致每摄氏度的 ADC 码是变化的分段插值最稳。以 PT100 为例如果 R0100ΩR1100.39Ω1℃那 1℃ 对应的 ADC 码只有几十个字取决于 PGA 和基准直接除会损失精度。所以我们把 ADC 码先转成电阻值再查表。用公式R (ADC码 / (满量程码 * PGA) ) * VREF / IIDAC这个转换要在 MCU 里用浮点完成。R7KA8M2JFLCAC 有硬件浮点单元算一次也就几微秒完全够用。热电偶更麻烦非线性强。常见的做法是查 ITS-90 分度表用 NIST 的多项式反算。我们项目里直接放了一个 500 个点的 K 型热电偶电压-温度表格查表加分段线性插值精度在 ±0.5℃ 内符合 HVAC 要求。如果要求更高就上三阶多项式拟合但注意浮点运算时间。冷端补偿热电偶测的是热端和冷端温差必须把冷端温度加上去。冷端温度我们用板载 NTC 测得在初始化时读取一次然后每隔 1 秒更新一次。NTC 的分压电阻要用 0.1% 精度否则会在冷端引入额外误差。3.4 校准与自检流程生产线上不可能逐台用高精度温度计校准所以我们做了两点校准零点和增益。零点把输入引脚短接读取 ADC 输出作为偏置误差存到 EEPROM。增益用一只 0.1% 精度的精密电阻取代传感器比如接一个 100Ω 标准电阻读取输出算出增益误差。之后每次上电读 EEPROM 校准值在换算温度前先对 ADC 码做线性扣减和缩放。这个方法简单有效能抹掉大部分器件个体差异。我还加了自检每 30 秒检查一次 ADC 的电源监控位如果发现 AVDD 异常立刻报警避免输出错误温度导致控制出问题。自检还有一个常被忽略的点ADC 的输入开路检测。如果传感器线断了ADC 可能输出满码会导致温度飙升到几千度。建议在初始化时使能 ADC 的输入开路检测功能或者周期性地读一个内部短路通道判断信号链路是否正常。我们做过最有效的方案在输入引脚上并联一只 10MΩ 电阻到 VREF断线时 ADC 会读到这个偏置电压MCU 据此判断断线并置错误标志。4. 实测过程、常见问题与排查实录4.1 现场实测数据与精度分析我搭了一块测试板一路 K 型热电偶接在 0-1000℃ 的干井炉里一路 PT100 三线制接标准恒温槽MCU 通过 USB 转串口输出温度值。在 25℃ 基准环境下PT100 通道 24 小时温度漂移不超过 ±0.1℃。把干井炉升温到 400℃热电偶读数与标准表差值始终在 0.2℃ 以内做了冷端补偿后。这个结果符合设计预期。测试中我还发现当附近有一台变频器启动时未滤波的板子瞬间跳变 3℃加上 RC 滤波后只跳了 0.2℃而且很快恢复。这再次说明前端滤波的重要性。另一个有趣的现象是PGA 增益设置为 128 时噪声比 64 时略微增大因为内部带宽变窄低频 1/f 噪声占比变大。所以在信号幅度允许的情况下不要一味用高增益够用就行。4.2 常见问题速查表现象可能原因解决方案读回数据全是 0xFFFFFF输入超量程或 PGA 配置错误检查增益和通道选择确认传感器接线数据跳变严重电源噪声、地环路用 LDO、磁珠隔离输入加滤波UART 通信超时波特率配置错误或引脚被占用核对上电时引脚设置用示波器看 TX 波形温度值缓慢漂移基准电压温漂或冷端补偿不准换低漂移基准每 10 秒更新冷端温度多个通道读数互相干扰模拟多路复用器的建立时间不够增加切换后延时或降低数据速率传感器断线显示巨大温度输入开路检测未启用启用断线检测或加偏置电阻4.3 排查思路和实战技巧遇到问题时先把传感器断开用精密电压源注入已知直流电压看 ADC 是否正确。如果正确问题就在传感器或激励电路如果不正确问题在 ADC 配置或硬件。这个“先隔离后检查”的思路能省很多时间。另一个技巧UART 通信不稳定时优先检查 MCU 的串口接收是否开启过采样有些 MCU 默认用内部低速时钟会让波特率有误差必须确认 UART 时钟源用的是高速外设时钟。我们曾因为忘了配置时钟导致波特率偏差 2% 以上通信时好时坏。还有一个实战技巧当多路通道串扰时可以临时把数据速率从 20SPS 降到 5SPS再看是否改善。如果改善说明建立时间不够。这时不要只加大延时最好在硬件上把模拟多路复用后的滤波电容减小一点或者在软件里每次切换通道后丢弃第一次转换结果。我们最终采用“丢弃前两个转换”延时 2ms 的组合没有任何副作用。4.4 避坑指南不要用 ADC 的内置温度传感器来补偿热电偶冷端误差太大至少要外接 1% 的 NTC 并做标定。RTD 的激励电流不要超过 500μA否则自热效应会让读数偏低。250μA 是权衡值。PCB 布局时AVDD 和 DVDD 的地要单点汇接避免数字电流串进模拟地。如果板子空间允许把 ADC 的输入走线做成差分对并且两侧铺地保护抗 EMI 会好很多。传感器线缆要选带屏蔽的双绞线屏蔽层单端接地不要两端都接否则会形成共模环路。上电顺序也有讲究先给 ADC 供电再给传感器电路供电防止热插拔瞬时尖峰打坏 ADC 输入。5. 写在最后一点个人体会做完这个温度采集方案我最大的体会是ADS122U04IPWR 和 R7KA8M2JFLCAC 的组合并不是顶级配置但很实用。UART 接口让布线省了一堆事24 位 ADC 省掉了仪表放大器MCU 的资源又足够跑查表算法和 PID。如果你也做类似项目不要一上来追求 0.01℃ 的精度先把供电、滤波和接地做好这些基础工作带来的收益远超换更贵的芯片。这套方案在工业和 HVAC 中已经跑了一年除了偶尔传感器线缆磨损从来没出过系统级故障。希望这篇笔记能帮你少走点弯路。