做工业现场和 HVAC 温控的人十有八九会碰到同一个需求把几路温度传感器接到单片机系统里精度要够、抗干扰要够数据还得稳定送给上位机。我最近刚用 ADS122U04IPWR 和 TM4C1299KCZAD 搭了一套温度采集方案测 PT100 和热电偶跑在风柜、水管测温这类场景整体效果比我预想的好。ADS122U04 是 TI 的 24 位 delta-sigma ADC内置 PGA、激励电流源、内部基准更关键的是输出接口是 UART不是 SPI 也不是 I2CTM4C1299KCZAD 则是 TI Tiva C 系列的 Cortex-M4F 主控120MHz 主频、1MB Flash、256KB SRAM串口多、带以太网和 CAN做 HVAC 控制器绰绰有余。这颗主控是 BGA 封装引脚多到用不完而 ADS122U04IPWR 是那个小体积的 TSSOP 版本焊起来有点费眼但性能真没得说。这篇把选型理由、信号链计算、电路和固件细节、实测数据全列出来给正在做类似项目的朋友一个可以直接抄作业的参考。1. 先搞清楚这套组合到底解决什么问题1.1 为什么是 ADS122U04 而不是普通 ADC市面上 ADC 很多几块钱的 12 位、16 位一抓一把但温度测量这活儿普通 ADC 真扛不住。原因很简单温度传感器的信号太微弱了。以 PT100 为例0°C 时电阻 100Ω温度每升高 1°C 电阻只变化约 0.385Ω。如果用 500µA 电流激励这个变化折算成电压只有 192.5µV/°C。想让系统分辨 0.1°CADC 的噪声和分辨率得看到 20µV 级别的信号变化普通 12 位 ADC 加个仪表放大器倒是也能做但温漂、增益误差、PCB 布局带来的噪声会让你标定标到头秃。ADS122U04 属于那种为传感器而生的 ADC。24 位 delta-sigma 架构内部自带可编程增益放大器增益从 1 到 128 可调自带两个可编程激励电流源专门给 RTD 和 NTC 供电内置 2.048V 基准甚至还集成了一个内部温度传感器用来做热电偶冷端补偿。这些功能如果全部用分立器件搭一块板子上要多出十几个电阻电容、一个精密基准源、两个恒流源电路画板的时候就知道有多痛苦。这个芯片的工作温度范围是 -40°C 到 125°C工业级放在 HVAC 设备间、风柜电控箱里都没问题。最大数据率 4kSPS对温度这种慢变量来说绰绰有余反而应该主动把数据率降下来换更低噪声。ADS122U04IPWR 的 PWR 后缀表示 TSSOP-16 封装体积小适合做在紧凑的测温板上。1.2 TM4C1299KCZAD 在方案里扮演什么角色TM4C1299KCZAD 这颗料很多人第一眼会被它的封装吓到——212 脚 BGA焊盘间距那么密手工焊接基本没戏必须贴片机或者精密回流焊。但它的资源是真的猛Cortex-M4F 内核带浮点单元120MHz 主频1MB Flash 和 256KB SRAM片上还集成了 10/100M 以太网 MACPHY、两个 CAN 控制器、USB、以及多达 8 个 UART。在 HVAC 项目里主控的任务远远不止读温度。它要跑控制算法比如 PID 控风阀、水阀、要跟触摸屏或者上位机通信、要上报数据到楼宇自控系统BACnet 或者 Modbus 都是基于串口或者以太网的甚至还要预留 CAN 给多联机通讯。这时候一个 ADC 如果还占着 SPI 总线、拉着片选线和中断线反而碍事。ADS122U04 走 UART一根 TX 一根 RX最多加一根 DRDY 数据就绪线主控侧的压力小很多。另外这颗 MCU 的 UART 模块带 16 级 FIFO配合中断接收CPU 占用率极低。测 8 路温度、算 PID、跑以太网协议栈全部同时进行也不会卡。温度采集这种I/O 密集但计算量小的活儿交给独立 ADC 加串口是最舒服的分工方式。1.3 这套方案真正解决的痛点做工业测温最烦的是三件事信号长距离传输衰减、现场电磁干扰、以及多通道一致性。长距离传输这块RTD 引线电阻是个大坑。传感器在几十米外两线制接法下引线电阻直接叠加到测量结果里铜线一米的电阻就有零点几欧姆几十米就是十几欧姆算成温度误差能到几十度。ADS122U04 的两个 IDAC 激励电流源可以做三线制比例测量把引线电阻的影响抵消掉这个后面详细讲。电磁干扰方面ADC 是 24 位分辨率一个 LSB 对应的电压可能只有零点几微伏电机的启停、变频器的 PWM、接触器的吸合随便一个干扰脉冲都能让读数跳上几度。ADS122U04 内部有 50Hz/60Hz 工频抑制的数字滤波器加上外部 RC 滤波和 UART 传输路径上的数字隔离整机抗干扰能力可以做得很扎实。多通道一致性就更关键了。HVAC 系统里经常要同时看回风温度、送风温度、水管供回水温度几路传感器必须用同一个基准和同一个激励源体系否则各路之间标定不一致控制环路就会抖动。ADS122U04 虽然有 4 个输入通道但同一时刻只能转换一个通道通过内部多路开关轮询实现多路测量。因为 PGA、ADC 和基准都是同一套电路通道间天然具备一致性只需要在固件里做通道切换和稳定延时不需要每路单独校准这个优势在工程上非常宝贵。2. 信号链设计与关键参数计算2.1 传感器接口类型与适用场景ADS122U04 的输入多路开关支持 4 路单端输入也可以配置成 2 路差分输入。实际项目里这 4 个通道可以灵活分配常见搭配有三种。PT100/PT1000 这类 RTD 是最常用的测温范围 -200°C 到 850°C线性度好、长期稳定性高HVAC 里水管温度、风道温度、冷冻水供回水温差都可以用它。PT100 的缺点是灵敏度低需要较大的激励电流和较高的 PGA 增益PT1000 电阻大、灵敏度更高、自热更小但成本高一些。热电偶适合高温场景比如锅炉排烟温度、压缩机排气温度K 型热电偶能测到 1300°C 左右。但热电偶输出的是微伏级热电势K 型大约 41µV/°C必须用高增益 PGA而且必须有冷端补偿这个后面单讲。NTC 热敏电阻成本最低HVAC 里的温控器、风机盘管大量使用阻值随温度变化剧烈但一致性差、非线性严重适合精度要求不高±0.5°C 就够的场景。三种传感器在信号链上的需求差异很大用一张表列清楚传感器输出信号量级激励方式PGA增益建议测温范围HVAC典型应用PT1000.1V级别500µA激励IDAC恒流8~32-200~850°C水管、风道温度PT10000.5V级别500µA激励IDAC恒流4~16-200~850°C高精度空调箱K型热电偶0~50mV0~1250°C无需激励64~128-200~1300°C锅炉、排烟NTC 10k0.2~3V随温度大幅变化分压或IDAC1~4-40~150°C温控器、盘管2.2 激励电流怎么选自热、量程与分辨率的三方博弈选 IDAC 电流值不是拍脑袋决定的核心矛盾在自热误差和信号幅度之间。电流越大RTD 上的电压信号越大ADC 分辨率利用越充分但电流在传感器电阻上产生的焦耳热也会抬高传感器自身温度造成测量误差。以 PT100 为例如果用 1mA 电流在 100°C 时传感器电阻约 138.5Ω激励功率 P I²R 0.001² × 138.5 138.5µW。PT100 的自热系数通常标在传感器数据手册里典型值从 0.05°C/mW 到 0.4°C/mW 不等取决于封装形式薄膜式、陶瓷式和介质环境静止空气、流动空气、水中。按最保守的 0.4°C/mW 算138.5µW 对应约 0.055°C 的温升这个量级对大多数 HVAC 应用可以接受。换成 500µA功率只有原来的四分之一自热约 0.014°C但信号幅度也减半对 ADC 的噪声要求更高。实际项目里如果测温精度要求 ±0.1°C我一般用 500µA如果只是 ±0.5°C 的控制级精度直接上 1mA信号大、抗干扰更好。激励电流还关系到量程设置。差分输入 PGA 的输出不能超过 ADC 的输入范围。内部基准是 2.048V用比例测量时基准电压来自外部参考电阻上的压降所以只要激励电流和参考电阻的乘积不超过 ADC 允许范围就行。我常用的组合是 IDAC500µA参考电阻选 1.8kΩV_REF 0.0005 × 1800 0.9V留足了余量如果选 IDAC1mA参考电阻就用 1.8kΩ 或 2kΩV_REF 在 1.8~2V信号利用率更高。还有一个容易忽略的点IDAC 电流源不是理想电流源它的顺从电压有限制。如果传感器电阻太大激励电流在传感器上产生的压降加上引线压降超过电流源的顺从电压电流就会跌落测量就废了。所以测大阻值传感器比如 PT1000 在高温时接近 2.5kΩ或者长引线时要适当调低激励电流。2.3 PGA 增益和数据率噪声与速度的取舍ADS122U04 的 PGA 增益从 1 到 128 分 8 档选增益的目标是让满量程信号尽量填满 ADC 量程同时保证噪声不被放大后超出可接受范围。PGA 增益越高折合到输入端的噪声越小但允许的输入信号幅度也越小。拿 PT100 500µA 方案算一下0°C 时 V_RTD 100Ω × 500µA 50mV100°C 时 V_RTD 138.5Ω × 500µA 69.25mV。信号摆幅约 19.25mV加 50% 余量后按 30mV 满量程估算选 PGA32 时输入满量程约 2.048V/32 64mV非常合适。如果选 PGA64满量程只有 32mV信号占用接近 60%精度更高但余量偏小遇到传感器误差大或者引线过长就容易饱和。数据率方面我强烈建议用 20SPS 或者 45SPS。delta-sigma ADC 的噪声随着数据率升高而急剧恶化20SPS 时能拿到大约 20 位有效分辨率RMS 噪声计升到 1000SPS 以上有效分辨率就掉到 16 位左右了。温度信号本身就是慢变的用不着高速采样反而应该用低数据率换来稳定的读数。而且 20SPS 和 45SPS 这两个档位内部的数字滤波器对 50Hz 和 60Hz 工频干扰有很强的抑制能力这在工业现场是实打实的优势。实际配置时我还习惯在固件里做一次滑动平均取 8 到 16 次转换结果求平均等效数据率再降一档显示出来的温度数值非常稳几乎看不到末位跳动。2.4 为什么 UART 接口在工业测温里比 SPI 更香DS122U04 最特别的地方就是 UART 接口。很多工程师第一反应是奇怪ADC 不都是 SPI 吗UART 有什么好SPI 是同步串口需要 SCK、MOSI、MISO、CS 四根线而且主从双方必须共地、时序严格。在工业现场ADC 和传感器可能在几十米外的现场端主控在电控柜里长距离 SPI 传输容易受干扰时钟沿上的毛刺会导致移位错位而且隔离成本高——数字隔离器一个通道就要一块钱四根线就得四路隔离。UART 只有两根信号线异步传输不需要时钟同步抗干扰能力天然比 SPI 强。更关键的是UART 传输路径上可以很方便地串入数字隔离器比如 ISO7721 这类双通道数字隔离芯片把 ADC 侧的模拟地和主控侧的数字地彻底隔开。工业现场地环路电流是测量误差的大敌有了 UART 隔离这个问题直接从根源上解决。ADS122U04 的 UART 接口还支持可选的 CRC 校验数据完整性有保障这在长线传输环境下非常重要。波特率可以配到 115200 或者更高读一次 24 位转换结果加上命令开销也就几十个字节速度毫无压力。3. 硬件设计实操记录3.1 供电、基准和参考电阻的设计细节ADS122U04 是混合信号器件AVDD 和 DVDD 要分开处理。我惯用的做法是 AVDD 用单独的 LDO 供电比如 TPS7A4901 这类低噪声 LDODVDD 可以用同一路 LDO 输出经过一个小磁珠或者 π 型滤波后接入。每个电源引脚旁边放 0.1µF 和 10µF 两个去耦电容电容要尽量靠近引脚这个细节很多人不在意但对 24 位 ADC 来说电源纹波直接体现在测量噪声里。内部基准 2.048V 对绝大多数场景够用而且内部基准的温度漂移特性是经过校准的比随便买的外部基准更可控。但如果做高精度计量级的系统可以考虑外部基准。ADS122U04 支持外部基准输入接一个比如 REF5025 这样的精密基准源再把基准引脚做好滤波。我实际测试下来内部基准在 0~70°C 范围内的稳定性做 HVAC 控制足够了多花十几块钱买外部基准的收益不明显。比例测量是 RTD 方案的关键。所谓比例测量就是 ADC 的参考电压和传感器激励用同一个电流源这样激励电流的绝对值漂移会被自动抵消。实现方法是在激励电流的通路上串一个精密参考电阻 R_REF把 R_REF 两端的压降作为 ADC 的参考电压。R_REF 的选择直接影响精度必须用低温漂比如 ±5ppm/°C、高精度0.1% 或更好的金属箔电阻或精密薄膜电阻。我用的是 1.8kΩ、0.1%、25ppm/°C 的电阻算下来在 -20~70°C 范围内引入的温度误差可以忽略。3.2 三线制 RTD 的接法双 IDAC 抵消引线电阻的原理两线制测温的误差主要来自引线电阻这个前面提过。三线制的核心思想是引线有三根两根接到传感器的一端一根接另一端用两个 IDAC 让流过两根引线的电流相等在差分测量中把引线压降抵消掉。具体做法是IDAC1 从某个通道输出电流流过其中一根引线和 PT100再从另一根引线流回IDAC2 输出相同的电流流过参考电阻产生基准电压。测量通道取差分信号分别感知 RTD 两端节点的电压。由于流过 RTD 引线的电流是同一个 IDAC 提供的且两根引线的电阻近似相等同一根电缆、同样长度两段引线上产生的压降相同差分电压里恰好抵消剩下的就是纯 RTD 上的压降即 I × R_RTD。用数字算一下误差改善假设每根引线 5Ω两线制下直接串进测量回路PT100 在 0°C 时测出来是 110Ω按 0.385Ω/°C 折算误差超过 25°C。三线制下如果两个 IDAC 电流匹配精度在手册给出的误差范围内通常百分之零点几5Ω 引线电阻引入的等效误差能压到 0.1°C 以下效果非常明显。接线的时候要注意PT100 传感器的三根线颜色要按制造商定义区分一般红色两根是同一端的白色一根是另一端的。差分输入的负端接法要严格按数据手册的 3-Wire RTD 拓扑来ADC 的模拟输入是高阻不能承受电流所有激励电流的回路必须经过芯片内部或者外部的低阻路径回到地别把电流灌进输入引脚。3.3 热电偶输入与冷端补偿的工程设计热电偶的输入处理和 RTD 完全不同。热电偶不需要激励电流它自己产生热电势。测量端热端和参考端冷端之间存在温差时回路里就有电压。问题是冷端的温度你不知道所以要用另一个传感器去测冷端温度然后补偿掉。ADS122U04 内部自带的温度传感器可以用来做冷端补偿它输出一个与管芯温度成比例的数值精度大约 ±1°C 级别。对 K 型热电偶来说冷端补偿误差 1°C 就意味着 1°C 的测温误差所以如果你要求整机精度 ±1°C内部温度传感器勉强够用如果要求更高建议在热电偶端子排附近就近放一个精度高的 NTC 或 PT100测出来的冷端温度更接近真实连接点。热电偶的信号非常弱K 型大约 41µV/°C必须把 PGA 开到 64 或 128。输入端的 RC 滤波电阻要选得小一点因为滤波电阻和 ADC 输入漏电流会产生偏置误差。我用的 RC 是 100Ω 0.1µF截止频率约 16kHz既能滤掉高频干扰又不会引入明显偏置。还有个容易踩的坑热电偶的引线材料本身是双金属在端子上会形成多个热电偶结所以冷端补偿点要尽量统一。PCB 上冷端传感器的位置、热电偶端子、以及连接 ADS122U04 输入引脚之间的铜走线这些都会引入附加热电势。走线要短、要对称避免在测量路径上形成大的温度梯度。PCB 铺地时冷端传感器附近尽量不要放发热元件LDO、功率电阻否则读数飘到你怀疑人生。3.4 TM4C1299 侧连接与隔离设计TM4C1299KCZAD 有 8 个 UART我选了 UART0引脚是 PA0/U0RX 和 PA1/U0TX这两个引脚在 BGA 封装里引出来也比较方便布线。UART 的 RX/TX 交叉连接加一根 GPIO 接 ADS122U04 的 DRDY 引脚用下降沿中断来通知主控数据准备好可以读了这是整个通信的核心握手方式。如果系统需要隔离数字隔离器放在主控和 ADC 之间。隔离器选双通道双向型比如 ISO7721一个通道传 TX主控→ADC一个通道传 RXADC→主控DRDY 如果需要隔离就再占一个通道或者干脆靠轮询 UART 数据帧里的状态位来替代省一路隔离。隔离器的供电要分别接隔离侧电源别把两边电源共地否则隔离白做了。TM4C1299 的电源设计也要注意BGA 封装的引脚密集内核电压 VDDC 是内部 LDO 出来的外部只需要在指定引脚放好 2.2µF 和 22µF 的电容。为了保证 120MHz 主频稳定晶振用 25MHz配置 PLL 到 120MHz。首次做板建议先把最小系统跑起来再挂 ADC不然出了问题不好定位。4. 固件实现从 UART 命令到温度数值4.1 ADS122U04 寄存器配置流程ADS122U04 的寄存器不算多核心就几个输入多路开关和增益配置寄存器、数据率与滤波器配置寄存器、基准和 IDAC 配置寄存器、IDAC 路由配置寄存器。上电后寄存器是默认值必须按自己的传感器类型重新配置。我的配置顺序是固定的这样出错容易排查。第一步配置 PGA 增益和输入通道把通道设成需要的差分或单端模式第二步配置数据率选 20SPS第三步选择基准源RTD 场景选外部参考即参考引脚上的比例电压热电偶场景可以继续用内部基准第四步配置 IDAC 电流大小和路由把电流源引到正确的模拟输入引脚上第五步根据需要使能内部温度传感器。每一步配置完都把寄存器读回来做校验防止 UART 传输出错导致配置写偏。用一个简单的配置例子说明PT100 三线制IDAC500µAPGA32数据率 20SPS。对应的寄存器操作依次写合理档位到增益字段、数据率字段、IDAC 字段。具体每个字段的 bit 位定义写代码的时候一定要对照最新版数据手册的寄存器表来不同版本手册的图可能有一点点差异以你手头那颗芯片的丝印批号对应的文档为准。4.2 UART 命令格式与 24 位数据读取ADS122U04 的 UART 协议是 8N1 格式命令字按 16 位组织分两个字节发出。命令类型包括读寄存器、写寄存器、启动转换、读转换数据等几种。写寄存器时命令后面还要带一字节数据读转换结果时设备会把 24 位转换数据按三字节回传。CRC 校验是可选功能配置寄存器里有一个开关位开了之后每帧末尾要多算一个校验字节。通信的基本时序是这样的主控先发一个启动转换命令ADC 开始转换转换完成后 DRDY 引脚拉低主控检测到 DRDY 下降沿发送读数据命令ADC 回传三字节高字节在前也可以配置成低字节在前我习惯高字节在前方便拼数主控收完数据后 DRDY 自动恢复高电平开始下一轮。TM4C1299 侧的 UART 配置代码用 TivaWare 写起来很简洁SysCtlClockSet(SYSCTL_SYSDIV_2_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_25MHZ); SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0); SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA); GPIOPinConfigure(GPIO_PA0_U0RX); GPIOPinConfigure(GPIO_PA1_U0TX); GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1); UARTConfigSetExpClk(UART0_BASE, SysCtlClockGet(), 115200, UART_CONFIG_WLEN_8 | UART_CONFIG_STOP_ONE | UART_CONFIG_PAR_NONE); UARTFIFOEnable(UART0_BASE);发送命令时用 UARTCharPut 逐字节发送读数据时接收三字节后拼成 32 位整数再右移取 24 位有效数据。强烈建议给 UART 加一个简单的超时判断如果在规定时间内没收到完整帧就丢弃重启通信不要一直阻塞等待否则主控被挂死在接收函数里控制环路全停。4.3 RTD 原始码到温度的换算从 ADC 读回来的是 24 位原始码要变成温度还要过两道坎先换算成电阻再把电阻换算成温度。因为系统是比例测量原始码和电阻的关系很简单R_RTD code × R_REF / 满量程码值满量程码值是 2^2324 位 ADC 输出范围是 0 到 2^23-1R_REF 是参考电阻值。注意这里要小心差分输入和 PGA 增益的影响如果代码输出是二进制补码格式还要处理一下符号位如果增益大于 1信号在进 ADC 之前已经被放大过但比例关系不受 PGA 影响因为输入信号和参考电压经过同一路 PGA比例天然抵消了。这也是比例测量最优雅的地方。拿到电阻后用 IEC 60751 的 Callendar-Van Dusen 方程把电阻转成温度。0°C 以上的公式是R(T) R0 × [1 A×T B×T²]其中 R0 100ΩA 3.9083×10⁻³B -5.775×10⁻⁷。反解这个一元二次方程就能求出 TT [-A sqrt(A² - 4×B×(1 - R/R0))] / (2×B)这个公式在 -200°C 到 850°C 范围内精度足够比查表法省内存比线性近似准得多。我实测在 0~100°C 区间这个公式和标准温度源标定结果的误差在 0.05°C 以内。MCU 是 M4F 带浮点单元算一次就几十个周期毫无压力。4.4 热电偶换算与冷端补偿热电偶的换算流程是先把冷端温度测出来换算成对应的热电势加到测量到的热电偶电压上再用总热电势反查温度。具体步骤这样走。先把内部温度传感器或者外部冷端传感器的读数变成冷端温度 T_cj然后用热电偶类型对应的反向多项式把 T_cj 换算成一个等效的热电势 E_cj再把 ADC 读到的热电偶电压 V_tc经 PGA 增益还原成输入端实际电压加上 E_cj得到 E_total V_tc E_cj最后用正向多项式或者查表把 E_total 换算成热端温度。查表法是最稳妥的。把 K 型热电偶的 NIST 分度表按 1°C 间隔存成数组用线性插值补中间值几百字节的 Flash 换来全量程精度。如果 Flash 紧张可以用分段多项式拟合但拟合阶数和收敛区间要反复验证别偷懒省出个大误差。热电偶还有一个基础问题输入是多路复用的但冷端温度变化是缓慢的所以不需要每次转换都重新测冷端。我一般每 10 秒刷新一次冷端温度热电偶热电势则按 ADC 的转换周期连续读。这样既省时间又避免了通道频繁切换带来的稳定延时。4.5 多通道轮询与工程化处理多通道测量看起来只是把配置里的输入通道字段改一下就行实际操作里有几个坑。第一个是通道切换后的稳定时间。多路开关切换后PGA 和 ADC 滤波器需要若干个转换周期才能完全稳定。如果切换后立刻读数结果会有残留的前一通道信号。我的做法是切换通道后先空读两次丢弃第三次才开始累积有效数据代价低但效果好。第二个是各通道的滤波一致性。滑动平均窗口要对每个通道分别维护不能共用一个缓冲区。因为各通道可能接不同类型的传感器一路 PT100、一路热电偶滤波参数甚至应该不同否则响应速度差异会造成控制混乱。第三个是异常值处理。工业现场偶尔会有强干扰脉冲尽管有数字滤波偶尔还是会蹦出一个离谱值。我在固件里加了一个简单的限幅判别本次读数与上次读数之差超过设定阈值比如 3°C时先不采信连续两次超阈值才当作真实跳变。这个方法在电机启停的瞬间非常管用。工程上我建议把温度采集做成一个独立模块对外只暴露一个接口函数比如 float get_temperature(uint8_t channel)。上层 PID 和控制逻辑完全不关心底层是 RTD 还是热电偶、是 UART 还是 SPI。这样后续换传感器、换 ADC 都不动控制代码。5. 实测数据与性能验证5.1 噪声实测让自己心里有底板子调通之后第一步不是接传感器而是把 ADC 输入端短接跑一组数据看噪声。短接输入时理想读数应该是 0实际读数的波动就是系统的本底噪声。我在 PGA32、数据率 20SPS 条件下连续采集 1024 个点计算结果是峰峰值噪声大约 2µVRMS 噪声大约 0.35µV折算成有效分辨率大概在 20 位左右。这个数字意味着什么用 PT100 的灵敏度 192.5µV/°C 来算噪声等效温度大约是 0.002°C RMS峰峰值波动大约 0.01°C。实际显示出来末位偶尔跳 0.01°C这在 HVAC 控制里已经属于稳如老狗了。如果数据率升到 1000SPS噪声会明显恶化峰峰值能到 20µV 级别等效温度波动 0.1°C。所以再次强调温度系统老老实实用 20SPS别图快。不同配置下的实测噪声我整理成了表PGA增益数据率峰峰值噪声(µV)等效温度波动(°C, PT100500µA)3220 SPS2~3约0.01~0.015321000 SPS20~25约0.10~0.1312820 SPS1~1.5约0.005热电偶场景820 SPS4~5约0.025.2 精度验证电阻箱和标准温度源噪声低不代表精度高还得做标定。我手上有一个 0.01% 精度的电阻箱把 PT100 通道的传感器断开直接接电阻箱模拟不同阻值从 80Ω 到 180Ω 按 10Ω 步进记录读数。结果和理论值的偏差在 0.02Ω 以内折合成温度不到 0.05°C。这说明整个信号链的增益误差、基准误差都在可控范围。然后把 PT100 探头插进干井炉设定 0°C、25°C、50°C、75°C、100°C 几个点每个点稳定半小时后记录。最大偏差出现在 100°C 点偏差约 0.15°C主要来源是 PT100 探头本身的精度等级我买的是 B 级探头允许 ±0.3°C和干井炉的均匀性。这个结果说明整机测量链路的精度余量是够的误差主要来自传感器探头而非采集电路。热电偶通道我用一个标准的毫伏发生器做验证按照 K 型分度表给电压再配合冷端温度实测算出来的温度和理论温度偏差在 ±0.5°C 以内。这个精度对 HVAC 的高温监测场景完全够用但做不了计量级。5.3 HVAC 现场表现的几个观察板子在客户现场跑了两周测的是风柜的回风温度和冷冻水供水温度。回风温度探头装在风柜回风滤网后面水管温度探头用抱箍固定在管道外壁现场环境有变频器、有接触器干扰源不少。观察到的第一个现象是读数非常稳温度曲线是一条平滑的线没有毛刺也没有规律性抖动。第二个现象是跟随性夜间停机时回风温度缓慢下降曲线变化速率与实际风柜启停状态吻合没有出现滞后或者过冲。第三个是长期漂移两周下来和现场原有的温控表对比偏差保持在 0.2°C 以内没有发现随时间累积的漂移。唯一遇到过一次通信中断后来查明是现场调试时有人把 ADC 侧的接插件碰松了接触不良导致 UART 帧错误。重新插紧后恢复这也印证了前面说的通信必须加超时和重连机制否则一个松动接触就能让整个系统卡死。6. 常见问题与排查经验实录6.1 UART 通信乱码、无响应这类问题十个里八个是波特率不对一个是电平不对。ADS122U04 的 UART 是 3.3V 逻辑如果主控是 5V 电平必须做电平转换否则 TX/RX 通信看运气。排查时先用示波器抓 RX 引脚的波形确认波特率再确认每个字节的起始位、停止位是否干净。我踩过的一个坑是 TivaWare 的 UARTConfigSetExpClk 函数里时钟参数传错导致实际波特率偏离 3%表现在偶尔能通、大多是乱码。用示波器数一下每一位的宽度马上就能发现。6.2 读数据永远是 0xFFFFFF 或者靠近满量程连续转换模式下如果读回来的数据不更新或者满码先查 DRDY 信号。DRDY 一直不拉低说明转换根本没开始多半是启动命令没发对或者寄存器配置写失败。用读寄存器命令回读一下配置看是否和写入一致。如果 DRDY 正常但数据满码检查输入信号是否超出 PGA 量程比如 PT100 误配成了增益 128信号饱和输出 0xFFFFFF。6.3 温度读数漂移大、反复跳先按短接输入测试分离问题短接时如果噪声大问题在 ADC/电源/布局短接时噪声正常问题在传感器端。传感器端最大嫌疑是引线接触电阻特别是用接线端子连接时氧化和松动会造成接触电阻漂移。另一个常被忽略的是传感器自热如果激励电流调得太大而传感器又被包在保温棉里热量散不出去读数会稳定偏高把 IDAC 减半试试看读数是否明显变化。6.4 热电偶冷端补偿不准这种问题先检查冷端传感器是不是真的在热电偶端子附近。如果冷端传感器放在 PCB 上而热电偶端子离它 5 厘米中间铜走线就是温度梯度区测出来的冷端温度和实际热电势参考点不一致。另外内部温度传感器读到的是芯片结温不是端子温度两者在温差大时能差出好几度对 K 型热电偶就是好几度的误差。6.5 多通道轮询时通道间串扰现象是一个通道跳变会带动另一个通道跟着跳。解决思路是延长通道切换后的丢弃次数从 2 次加到 4 次。另一个隐蔽原因是 PCB 上相邻输入走线之间的耦合电容特别是长距离并行走线。把输入走线拉开、加地隔离串扰会明显改善。如果实在不行牺牲一点速度每个通道转换前先把 PGA 复位置零一次也能有效切断记忆效应。这套方案用到今天我个人最大的体会是ADC 和主控之间的距离感很重要。ADS122U04 把模拟前端做得越完整主控就越省心UART 接口又给了你足够灵活的布局和隔离方案。很多人一上手就追求高数据率实际做温度控制才发现10Hz 的有效更新率都嫌多。温度系统比的从来不是采集速度而是有没有把噪声、引线、冷端、自热这些阴险的误差源一个一个摁住。如果你正打算做多通道温度采集把这几个环节理顺这套组合会非常省心。