1. 为什么选ADS122U04这颗ADC从选型需求的真实考量说起做工业温度采集或者HVAC控制系统的朋友应该都有过这种经历明明用的传感器不差测温探头也是A级PT100但整机测出来的温度就是忽高忽低跑上两个小时还能漂个半度。问题往往不在传感器而在后级的采集链路尤其ADC这一环。我在这类项目里从ADS1115、ADS1220一路做过来最后在ADS122U04上稳定下来配合STM32F207ZG做了完整方案这篇就来把这套组合的选型逻辑、硬件设计、通信协议、标定方法和实测坑点完整拆开讲。ADS122U04IPWR是TI家的24位ΔΣ ADCUART接口版本四通道输入带可编程增益放大器PGA1到128倍和两个内置激励电流源。后缀里I表示工业温度等级-40到125℃PWR对应TSSOP-16封装。STM32F207ZG则是意法半导体的Cortex-M3主控120MHz主频内置6个UART硬件资源对这类高精度采集项目来说非常宽裕。这套方案适合的场景很明确需要同时采集多路温度或压力的工业控制板、HVAC的冷媒管温/风道温度/回水温度监测、以及对精度有硬性指标比如±0.5℃甚至±0.2℃的计量类设备。如果你做的只是消费级环境温度指示那ADS1115就够用了没必要上24位ADC成本和调试复杂度完全不是一个量级。1.1 目标负载RTD、热电偶还是NTC选ADC之前必须先把传感器类型定死因为它决定了你对ADC前端的大部分要求。工业HVAC里常见的无非三种。RTDPT100/PT1000线性度好稳定性高是工业测温和HVAC关键点位的主流选择但需要激励电流源电桥或比例测量对ADC的噪声性能要求中等偏上。热电偶量程宽、响应快但输出信号只有几十微伏每摄氏度对PGA增益和系统噪声要求极高而且必须做冷端补偿。NTC便宜灵敏度高但严重非线性在宽温区需要查表或公式拟合适合精度要求不高的场合。ADS122U04针对RTD场景做了几个关键设计内置两个可配置的激励电流源10μA到1500μA支持2线、3线、4线RTD的比例测量内部还有断线检测功能。对热电偶场景它有128倍PGA和内部参考电压配合外部冷端传感器也能做但说实话拿这颗做热电偶有点浪费它在RTD场景才能发挥最大价值。所以我的建议是这套方案优先服务RTD和电压型传感器压力变送器、温湿度变送器输出0-10V或4-20mA转电压后的采集。1.2 和同类芯片对比这颗UART接口ADC赢在哪ADS122U04同系列的兄弟是SPI接口的ADS1220两者寄存器几乎一样核心差异在接口总线。为什么我要强调这一点因为在我接触过的项目里很多硬件工程师默认选SPI版本回到软件这边就开始头疼。SPI在多板卡、跨接插件、长距离线缆的场景里有几个先天性麻烦片选信号CS要单独拉出IO控制板卡分离或线缆松动时SPI时钟线和数据线容易因毛刺导致移位错误而且整条链路上没有一个类似“从机地址”的机制。ADS122U04用的UART接口完全绕开了这些它把ADC当成一个UART从设备主机用一个设备的TX接ADC的RXADC的TX接主机设备的RX两根线搞定支持多设备挂接时的地址匹配通信时序稳定得多。实际测试中我在SPI版本上遇到过CS引脚延时不满足要求导致的偶发读取错误换成UART版本后这类问题几乎绝迹。对STM32F207ZG来说更加友好它片上UART多随便抽一个USART出来就能跑还支持DMA连续读取时CPU占用几乎可以忽略。1.3 关于STM32F207ZG的选型搭配STM32F207ZG在F2系列里属于大容量型号LQFP144封装2个CAN、6个UART、以太网MAC等资源一应俱全。在ADC采集项目里它最大的价值不是算了多少复杂算法而是接口资源充裕。拿我的实际项目为例板子上挂了一片ADS122U04测四路PT100同时还要通过Modbus RTU和上位机通信预留了一路UART做调试日志还有一路接4-20mA变送器。六路UART全部串起来了互不打架。如果你用STM32F103多路温度采集加通信可能就得复用引脚、来回切换调试时很痛苦。还有一个容易被忽略的点F2系列的主频是120MHz对于后续要加入FIR滤波或复杂标定算法来说余量充足。F103的72MHz做100点滑动平均加标定公式也能跑但实时性上吃亏。2. 硬件电路设计这些参数决定你能不能达到0.1%精度很多工程师拿到ADS122U04的手册看完推荐电路就开始画板结果首版打样回来数据就是不理想。问题多半出在几个参数配合上。这里我把最有价值的几组设计关系拆开讲。2.1 RTD激励电流源与PGA增益的配合ADS122U04的两个IDAC激励电流源是可以独立配置的电流档位有10μA、50μA、100μA、250μA、500μA、1000μA、1500μA可选。选电流档位不是越大越好也不是越小越好要和PGA增益、ADC满量程、传感器自热三者一起权衡。以PT100为例0℃时电阻100Ω500μA电流在其上产生的压降是50mV。如果PGA设16倍ADC输入端的有效信号变成800mV远低于内部参考2.048V的满量程余量充足。1000μA时压降100mV配合16倍PGA得1.6V接近满量程可以用更高的测量分辨率。但电流大了传感器自热也上来了。500μA在PT100上功耗是25μW在传统薄膜PT100上引起的温升大约0.01-0.02℃可以接受1000μA功耗100μW温升约0.04-0.1℃在要求±0.1℃的场合就有影响。我的经验是PT100优先500μAPT1000优先250μA因为PT1000本身阻抗大250μA就能产生足够压降工业场合要求长线缆抗干扰时把PGA降到8倍以下配合滤波。关于PGA增益的搭配我整理了一张表供参考传感器激励电流PGA增益0℃时ADC输入信号适用场景PT100 2线500μA1650mV×16800mV精度优先短距离PT100 3线500μA1650mV×16800mV工业标准推荐PT100 4线1000μA8100mV×8800mV高精度计量PT1000 2线250μA16100Ω×10×250μA≈250mV×164V超量程需降增益或电流NTC 10k100μA810k×100μA1V×88V超量程不适合高增益注意PT1000那行很多人照搬PT100的配置直接换PT1000探头结果ADC直接饱和输出满码这是最常见的配置事故之一。PT1000在0℃时是1000Ω同样电流下压降是PT100的十倍必须把激励电流降到100μA或PGA降到1倍或者干脆参考电压也换掉。2.2 输入滤波与RC取值矛盾ADS122U04是高精度ΔΣ ADC输入端的RC滤波是标配但电容取多少是门学问。ΔΣ ADC的采样本质是开关电容网络输入电流在开关切换瞬间会有一个冲激RC电容太小电荷注入会落在PGA输入端形成误差RC电容太大信号建立时间拉长在PGA增益高时输入阻抗下降RC网络变成分压器直接引入增益误差。以PGA16、激励源500μA、采样率50SPS为参考值我实测下来R10kΩ、C10nF是一个比较稳的组合。RC时间常数100μs考虑到ΔΣ调制器内部过采样机制这个值对50SPS的数据率完全能建立起来同时能有效滤掉高频共模干扰。如果采样率提高到100SPS以上RC时间常数要相应降低R改到4.7kΩC改到4.7nF否则幅度误差会超过0.05%。还有一个细节面对HVAC场景里的变频压缩机、开关电源这些干扰源输入端的共模电感比加大电容更管用。在探头线缆进板子的位置放一个共模扼流圈几百μH级别的配合ADS122U04内部的50/60Hz陷波滤波器效果比单纯调RC好一个数量级。2.3 参考电压与基准的稳定ADS122U04内部有一个2.048V基准温漂典型值几十ppm/℃对绝大多数HVAC应用够用。但如果做工业温度记录仪这种要求全温区误差小于0.1℃的高端产品建议外接REF5025这类低温漂基准。配RTD时用比例测量方案是最优解外部基准电阻RREF串联在激励电流回路上ADC的参考电压直接从RREF上取这样激励电流的波动会被信号通路和参考通路同时感知并相互抵消。这是24位ADC测RTD的经典做法RREF的温漂会直接进入系统误差链路所以RREF必须选精密电阻比如0.1%、5ppm/℃的金属箔电阻。我在HVAC项目里见过不少工程师图省事直接用了内部基准还挂了一个好几百mV的偏置电压结果温度显示在20-50℃范围跑出1.5℃的偏差。检查下来基准线性度其实没问题问题出在基准电压和信号共模不在一个合理区间。用内部基准时务必保证AINx输入共模电压在0.2V到VREF-0.2V之间否则等效输入误差会显著放大。2.4 数字隔离与接口电平工业现场长线缆传输ADC和主控之间必须考虑隔离。ADS122U04的UART接口本身电平是标准3.3V隔离方案用数字隔离器比如ISO7721放在ADC的UART和主控UART之间即可。ISOLATED供电要注意ADC的数字电源DVDD和模拟电源AVDD都要来自隔离侧不能和主控侧共用LDO否则隔离的意义就没了一半。隔离侧电源用隔离DCDC模块或者专门设计的电源变压器方案噪声要控制在50mVp-p以内否则ADC的24位分辨率会被电源纹波毁掉实际能用的有效位数可能只剩16位。STM32F207ZG的UART引脚电平兼容3.3V和ADS122U04对接不需要额外电平转换。但如果主控侧用了5V供电那必须加电平转换芯片直接用电阻分压的话高速UART的上升沿会变慢高数据率下容易产生误码。3. 最容易翻车的UART通信协议地址字节、命令码与CRCADS122U04最特殊的点就是UART接口无数新手在这里翻车。它的UART帧格式既不是传统UART起始位数据停止位的裸数据也不是SPI那种CSCLKMOSI的全同步时序。它本质上是一种“SPI命令帧通过UART物理层传输”的混合协议。理解这一点后面所有配置代码都不会写错。3.1 帧结构解析从地址到数据长度ADS122U04的通信帧由主机发起结构如下字段长度说明地址字节8bit位7必须为1位6到位0为从机地址默认地址0x00表示全匹配命令字节8bit具体操作命令如读寄存器、写寄存器、启动转换、读取数据数据字节0-2字节根据命令可选写寄存器时携带寄存器值CRC字节0-1字节可选开启CRC后附加在数据后这里地址字节的位7必须写1否则芯片会直接忽略整帧。地址A[6:0]用于多设备挂接时的寻址默认出厂地址是0x00如果总线上只挂一片ADS122U04地址直接发0x80即可0x00地址MSB1。我踩过的第一个坑就是这个地址字节一开始按TI手册里的示例往地址里写了0x00结果芯片毫无反应一查才发现0x00的MSB是0芯片不会识别。正确写法是0x80。3.2 启动与转换命令的细节ADS122U04上电后默认处于待机模式Standby这时候连内部振荡器都没跑起来。必须先发WAKEUP命令唤醒然后发START启动一次转换。很多人按ADS1220的习惯上来就读数据发现读出来全是0xFF其实就是没唤醒。启动转换的序列建议这样uint8_t buffer[3]; // 唤醒 buffer[0] 0x80; // 地址 buffer[1] 0x00; // WAKEUP命令 HAL_UART_Transmit(huart2, buffer, 2, 100); // 启动一次转换 buffer[1] 0x08; // START命令 HAL_UART_Transmit(huart2, buffer, 2, 100); // 等待转换完成然后读取数据 buffer[0] 0x80; buffer[1] 0x1A; // RDATA命令 HAL_UART_Transmit(huart2, buffer, 2, 100); HAL_UART_Receive(huart2, response, 3, 100);WAKEUP的具体命令码要严格对照芯片数据手册不同型号有差异。我这里给的是ADS122U04系列的用的是0x00建议你拿到芯片后翻手册确认一遍命令码全信记忆不可靠。同理START是0x08RDATA是0x1A这些都应当以手册为准。命令发送后ADC的响应格式是状态字节 数据高字节 数据低字节。状态字节里最关键的是bit4DRDY该位为0表示转换数据已准备好为1说明还没就绪读出来的数据无效。3.3 连续转换模式下的读取时序温度采集系统如果每一路都走“发START-等待-发RDATA-读数据”的命令序列在4通道模式下微控制器会被占掉不少时间而且每次交互都有通信错误风险。所以我建议用连续转换模式。配置连续模式需要做两件事把CONFIG1寄存器里的连续转换位打开然后向ADC发送RDATAC命令读取连续模式命令。之后ADC会按照设定的数据率连续转换每完成一次转换结果自动更新到输出寄存器主机只需要周期性发送RDATA命令取数。这里有个坑连续模式下如果主机读取速度高于数据率会读到同一份数据两次如果低于数据率最新的数据会覆盖旧数据中间的数据直接丢弃。工业现场建议用DMA定时器驱动读取比如设定数据率50SPS就每20ms读取一次保证不漏不重。3.4 CRC校验工业现场建议开启ADS122U04的UART接口支持CRC校验默认关。在实验室环境关着用没问题但进了工业现场变频器、继电器通断带来的串扰会让UART偶发误码。ADC值错一个字温度可能偏好几度如果又恰好落在PID控制环里后果是灾难性的。开启CRC的方式是写CONFIG3寄存器的CRC使能位。开启后主机发送的每一帧数据尾部要附加一个CRC字节ADC返回的每一帧尾部同样附加CRC字节。CRC按多项式计算结果初始值通常为0xFF具体多项式要在手册里确认。按我的经验在Modbus设备已大量使用CRC16的工业项目里ADS122U04的8位CRC虽然不是最强的但已经能挡住绝大多数偶发性串扰错误。当然更可靠的做法是上层再包一层Modbus CRC双重校验这在HVAC主控中很常见。4. STM32F207ZG侧固件从USART配置到DMA连续读取固件侧的复杂度不在ADC而在STM32F207ZG的USART配置细节。USART外设本身不难难的是和ADC的UART接口时序正确对接以及在多路采集时不掉数据。4.1 USART引脚映射与时钟STM32F207ZG有6个USART引脚映射各不相同。我习惯把ADC挂在USART2上因为USART2的TX/RX可以映射到PD5/PD6这两个引脚在LQFP144封装的边缘位置方便布局且不与调试口的JTAG/SWD冲突。USART2挂在APB1总线上F207的APB1时钟最高60MHz。这里注意一个TRAP如果直接用默认的HSE 25MHz晶振配置APB1分频后可能不是整数UART波特率会产生系统性误差误差超过0.5%后ADS122U04容易偶发接收错误。保险起见把HSE配成25MHzF207开发板常用晶振APB1分频设2得到60MHzUSART波特率设为19200bps时误差为0如果用8MHz HSEAPB1设4得到30MHz19200bps的误差也约等于0。反正先算好别直接随手填个4800就完事。4.2 波特率误差计算与容错UART通信对波特率误差是有容忍度的一般要求总误差小于2%但如果两个端点分别从两个振荡器取时基系统性的偏差会叠加。ADS122U04内部有自己的时钟不跟STM32同步所以两端时钟源不同波特率误差各算各的。STM32F207ZG内部USART波特率公式USARTDIV PCLK / (16 * baudrate)PCLK是USART所挂总线时钟。以APB160MHz、baudrate19200为例USARTDIV 60000000 / (16 * 19200) 195.3125USART_BRR的高12位存整数部分195低4位存小数部分0.3125×165误差趋近于0。但如果PCLK不是波特率的整数倍实际波特率和理想值的偏差就会增大需要在系统时钟设计阶段就算好。ADS122U04的接收容差与UART标准一致大约为±4%-5%。实际项目中我把波特率提至115200只要STM32侧波特率误差控制在1%以内长时间跑都没有问题。不要盲目追求高波特率传感器采集场景19200或38400已经足够还能留抗干扰余量。4.3 DMA读取与TOV超时标志处理连续转换模式下ADC会持续往外吐数据如果每次都用阻塞式HAL_UART_Transmit和Receive主循环就被占满了。我的做法是USART2的TX发送命令不需要DMA命令短、频率低直接阻塞发送即可。USART2的RX接收用DMA空闲中断ADC的响应帧长度固定状态数据3或4字节配置DMA循环接收每收到一帧IDLE中断触发DMA缓存里就是完整的一帧。用DMA之后遇到一个新的坑ADC的上一次数据还没有被读完新数据已经覆盖了DMA缓冲区。此时需要检查状态字节的TOV位Time Out Overflow。如果TOV1说明数据超时未读被新数据覆盖这帧数据必须丢弃。不能因为“DMA缓冲区里看着像有效数据”就直接用硬件工程师十有八九来着。void HAL_UART_IDLE_Callback(UART_HandleTypeDef *huart) { if (huart huart2) { uint16_t len DMA_GET_CNT(huart2); // 计算当前接收长度 ring_buffer_write(adc_rx_ring, dma_rx_buffer, len); // 逐帧解析检查状态字节bit4(DRDY)和bit3(TOV) } }4.4 一个可靠的初始化序列综合前面的细节初始化序列建议写成这样// 1. 配置USART2: 19200, 8N1 // 2. 拉低ADC的RESET引脚如果有再释放 // 3. 发送WAKEUP唤醒ADC // 4. 写CONFIG0: 设置通道MUX和PGA增益 // 5. 写CONFIG1: 设置数据率、滤波器模式、连续转换使能 // 6. 写CONFIG2: 配置激励电流源和电流方向 // 7. 写CONFIG3: 使能CRC可选配置IDAC流向 // 8. 发送RDATAC命令进入连续转换模式 // 9. 启动DMA接收进入正常采集循环每一步之间建议加1ms以上的延时等ADC内部状态机稳定。不要一上电就发命令ADC自己也需要上电稳定时间数据手册里通常标注了典型值至少5ms后再通信。初始化顺序写错会带来一个隐性故障如果先进了连续模式再改PGA增益几次转换时间内输出数据会混入“旧配置新配置”的过渡值。我遇到过这种数据排查了整整一天才发现是配置顺序导致的瞬态异常最后统一改成“改配置前先SDATAC、改完再RDATAC”的流程问题彻底消失。5. 温度换算从ADC码值到更高精度的工程实现ADC读出原始码值只是第一步把它换算成真实温度并保证全量程精度才是工程能力的体现。这里有两个层面硬件部分的标定补偿以及软件部分的数学变换。5.1 ADS122U04的码值与电压关系ADS122U04是24位ΔΣ ADC差分输入时输出码值为二进制补码。电压和码值的对应关系如下码值 (VINP - VINN) / VREF × (可用满量程代码)以PGA16、VREF2.048V为例ADC输入的满量程电压是±128mV2.048V/16。有效满量程代码通常是最大正码的98%左右这个比例以手册最终参数为准。读数每变化1LSB对应输入电压约0.0153μV2.048V/16/2^23对PT100来说500μA激励下电阻每变化1Ω对应电压0.5mV温度每变化1℃对应约0.385Ω也就是约0.19mV换算成码值大约是12400多个LSB分辨率绰绰有余。5.2 PT100线性化与查表法PT100在0℃时电阻100Ω平均温度系数0.00385Ω/Ω/℃。但它是非线性的温度越高每℃对应的电阻变化量越小。0℃附近每℃约0.385Ω300℃时每℃约0.37Ω500℃时约0.36Ω。如果一律按0.385Ω/℃线性换算500℃时误差会累积到好几度。工程上有两条路查表法把PT100分度表按1℃间隔存成数组实测电阻插值查表和公式法用Callendar-Van Dusen方程反解。查表法简单直观适合MCU资源有限的情况公式法精度高但涉及四次方程求解需要一点计算量。以STM32F207ZG的性能推荐用IEC 60751标准的Callendar-Van Dusen方程。0℃以上用二次方程即可0℃以下多一个三次项。写成C语言就是一段带浮点运算的代码F207的FPUF2系列带硬件单精度FPU跑起来毫无压力。5.3 两点标定与三点标定的差别芯片出厂参数是有偏差的激励电流源的绝对精度、PGA的增益误差、参考电阻的温漂都会让每一块板的换算结果不同。产品出厂前必须标定。两点标定做法给探头分别上0℃和100℃两个温度点冰水混合浴和沸水浴或者干井校准炉记录ADC读数算出偏移量和增益系数然后对全量程做线性修正。对HVAC这类要求±0.5℃的产品两点标定足够了。三点标定做法在0、50、100℃三个点采样用最小二乘拟合二次曲线可以修正PT100本身的非线性残差和ADC增益非线性。实测下来三点标定能把0-150℃范围内最大误差从±0.3℃压到±0.08℃左右代价是标定时间长了产线节拍受影响。我的建议普通HVAC设备两点标定就好做高端工业温度变送器才需要三点别过度设计。5.4 HVAC场景的标定经验HVAC项目和纯工业项目有个很大的差异温区窄、数量大、成本敏感。大多数HVAC测温范围是-20℃到85℃甚至更窄的0-50℃。在这么窄的范围内两点标定配合PT100的B级±0.3℃或A级±0.15℃探头整机精度很容易做到±0.5℃以内。量产标定时有个细节值得注意校准温度点尽量选在探头实际工作区间的两端而不是传统的0℃和100℃。比如一个测冷却水温度的HVAC控制器量程是0-50℃标定温度就选0℃和50℃而不是0℃和100℃。原因很简单线性修正的误差在两个标定点之间最小把标定点放在工作区间两端能保证最常用范围精度最优。量产还要考虑标定的效率和自动化的程度。我的做法是产线上用恒温槽配高精度铂电阻温度计做参考标准通过Modbus把目标温度和参考温度读出来机器自动完成两点标定并把系数写入板载EEPROM或Flash末尾。整个过程不需要人参与每块板标定时间控制在30秒内。6. 实测中的抗干扰与常见踩坑记录这套方案我在实验室和现场跑了大半年总结几个必须写下来的坑都是真金白银换来的教训。6.1 工频干扰与50Hz陷波ADS122U04的ΔΣ调制器内置数字滤波器可以选择不同的滤波器模式和输出数据率。在工业现场50Hz工频干扰是最常见的噪声来源把它滤掉至关重要。当数据率设为50SPS的整数倍如50SPS时数字滤波器的陷波点正好落在50Hz及其谐波上对工频干扰的抑制能力最强。但要注意接通工业现场电源后实测发现只顾着开陷波还不够主板开关电源的纹波会通过寄生电容耦合进传感器线缆导致ADC的输出在50Hz频率附近出现几百个LSB的跳动。解决办法是传感器线缆全程屏蔽屏蔽层单端接地同时把输入RC的截止频率降到1kHz以下。第二个被忽略的噪声源是手机和射频对讲机。在板卡调试阶段对讲机靠近PCB时ADC数据瞬间跳变上千LSB这个在实验室不常见现场却常有。检查屏蔽罩是否完整接地的同时也可以在软件里做数据有效性检查单次跳动超过设定阈值就丢弃并重读。6.2 VREF漂移和IC自热工业设备工作环境温度变化大从-40℃到85℃都有可能。ADS122U04的内置参考电压温漂虽然不高但在应用内部激励电流源时PGA和激励源都在发热芯片温度比环境温度高出不少自带基准也跟着漂。实测数据在无风、环境温度25℃条件下ADS122U04连续工作30分钟后内部温度比环境高约5-8℃。如果内置基准温漂按30ppm/℃算这5-8℃的温升会带来约1.5-2.5ppm的系统漂移反映到PT100测量大约0.05-0.1℃误差。单看还行但叠加其他误差后就显得很紧张。对策很简单一是用外部基准二是给PCB上ADC附近留散热铜皮和过孔阵列三是避免把ADC靠近大功率MOS管或变压器这类发热源。布局时多留2毫米间隙收益立竿见影。6.3 上电时序导致的首次读取失败很多板子一上电就读ADC发现读回来的状态字节始终显示DRDY1转换未完成然后进入死等。这是因为ADS122U04的模拟电源和数字电源同时上电后芯片内部上电复位还没跑完命令没有被正确解析。解决方法是主控侧做上电延时板卡上电后至少延时10ms最好50ms再初始化ADS122U04。如果系统里还有隔离电源DCDCDCDC的输出建立时间本身就要几个毫秒更要留足裕量。还有一个细节如果MCU和ADC共用一个电源MCU的复位期间IO状态不确定可能会把UART TX引脚拉高或拉低导致ADC在复位期间收到垃圾字节。建议在ADC的TX线MCU接收方向上串一个1kΩ电阻必要时再加一个小电容防毛刺把复位瞬间的干扰挡在外面。6.4 另一个常见坑PGA旁路引起的高增益假象ADS122U04有个PGA旁路选项旁路后输入直接进ΔΣ调制器适合大信号场景。但有些工程师发现读码值异常大误以为系统增益过高其实是用错了配置。旁路PGA时输入满量程范围就是参考电压±VREF如果按PGA1去读RTD小信号码值会很小动态范围被浪费。反过来如果本打算用PGA128测热电偶却忘了配置PGA使能输入信号只有几毫伏输出码值淹没在量化噪声里温度跳得根本没法看。我的建议是RTD场景全部走PGA使能通道PGA增益16或32热电偶才考虑PGA64或128。每次改寄存器配置后先用已知电压源比如精密分压电阻网络产生一个已知毫伏值验证一遍码值是否正确再上传感器能省去大量的低级排查时间。另外说一个容易被忽略的连接细节ADS122U04的AVDD和DVDD虽然是分开的引脚但在PCB上要用0Ω电阻或磁珠单点连接模拟地和数字地也要在芯片下方单点汇聚否则数字信号的开关噪声会通过地平面耦合到模拟输入24位分辨率直接废掉一半。首版PCB我就是因为数字地和模拟地铺成一个整平面导致ADC读数总有几十个LSB的不规则跳动后来切地后才彻底干净。这套组合在我手里已经稳定跑过几个项目从HVAC水机控制器到工业冷媒温度采集模块都有落地。ADS122U04的优势在UART接口的稳定性和内置激励源的省心STM32F207ZG的价值在足够的外设资源和浮点性能两者各管一摊配合起来很顺手。如果你正打算做类似的多路高精度温度采集按这套设计思路走首版成功率会高不少。