资讯详情

UART接口的24位ADC+超低功耗MCU:工业温度采集方案详解

📅 2026/11/6 7:09:32 | 华诺云谱 👁 阅读
UART接口的24位ADC+超低功耗MCU:工业温度采集方案详解
做工业温度采集这几年我越来越发现一个规律很多人不是不会用ADC而是卡在ADC和MCU之间那条通信线上。SPI接口虽然普及但碰上长线传输、现场干扰、或者MCU引脚不够用的时候就很头疼。后来我接触到 ADS122U04IPWR 这颗芯片它的UART输出接口让我眼前一亮搭配 STM32L041C6 这颗超低功耗MCU做工业和 HVAC 温度测量整个系统简洁得不像话而且实测精度和稳定性都相当能打。这篇就把我从选型到量产的完整思路写出来。这套方案适合谁如果你在做温度变送器、楼宇自控的温度采集节点、冷冻冷藏监控、或者工业设备的状态监测手头正在纠结ADC选型、通信接口、低功耗策略这篇文章应该能帮你省掉不少弯路。1. 为什么是UART ADC 超低功耗MCU这个组合1.1 选型逻辑从接线问题说起先说说ADS122U04IPWR这颗芯片最特别的地方。市面上大多数24位ADC都是SPI接口MISO、MOSI、SCK加CS最少四根线。如果你用的MCU刚好SPI外设紧张就得软件模拟时序一折腾先把系统可靠性拉低一截。而ADS122U04直接用UART通信就是 TX、RX 两根线这设计在工业场景里有非常现实的意义。首先是布线距离。UART本身支持波特率不高但传输稳定ADS122U04的UART接口实现的是标准异步串口协议不是那种私有协议。也就是说STM32L041C6 上任何一个UART外设都能直接对接它没有额外的时序适配工作。我在实际项目里用30厘米左右的线缆连接ADC板和主控板工作一切正常。做过现场设备的人都知道SPI在稍长线缆上翻车的概率有多高而UART在这方面要皮实得多。其次是隔离设计。工业温度采集经常需要在传感器侧做电气隔离防止地环路干扰。SPI隔离需要隔离四路信号而UART隔离只需要两路。别小看省下来的两路隔离这直接决定了你的方案能不能放进小体积外壳、成本能不能压下来。很多量产产品的硬件设计瓶颈就在这。1.2 两颗芯片的分工边界ADS122U04IPWR 负责什么它内部集成了24位Delta-Sigma ADC核心、可编程增益放大器PGA、两个IDAC恒流源激励、内部温度传感器和UART通信控制器。你一颗外部芯片就能搞定传感器激励、模拟信号采集、数字化传输全链路。特别是内置的IDAC恒流源对RTD测温来说太关键了省掉独立激励电路的同时还能保证激励电流的精准度。STM32L041C6 则承担系统控制、数据解析、温度线性化计算和对外通信。它基于Cortex-M0内核主频能跑32MHz虽然算力不算强但做温度测量这种任务绰绰有余。关键是它的静态功耗极低Stop模式电流能做到微安级别配合 ADS122U04 的周期唤醒测量模式整机平均功耗可以压到非常低的水平。这一点对两线制4-20mA变送器是刚需5775% 的整机功耗预算必须精打细算。1.3 供电与系统功耗模型我之前评估这个组合的时候拉过一个粗略的功耗账。ADS122U04在正常工作模式下的供电电流大约在几百微安到1毫安级别具体取决于PGA增益、数据速率和IDAC电流设置。STM32L041C6在Run模式、8MHz工作频率下大概2-3毫安在Stop模式下则只有1微安左右。设计成周期性唤醒测量STM32大部分时间睡在Stop模式每隔几百毫秒被唤醒一次通过UART给 ADS122U04 发命令读一次转换结果然后继续睡。这样平均电流很容易控制在几十微安以内加上传感器激励功耗整机两线制环路上限通常3.5mA左右完全搞得定。如果做电池供电的无线温湿度传感器节点两节AA电池扛一年以上也问题不大。2. 模拟前端电路设计精度是从这里开始的2.1 RTD传感器接法与偏置方式温度测量最常用的传感器就是PT100、PT1000这类铂电阻RTD。ADS122U04的模拟输入支持两个差分通道或者四个单端通道我习惯把通道用作三线制PT100接法这是工业长距离测温最平衡的方案。三线制的核心目的是消除导线电阻引入的误差。工作原理是用恒流源对RTD供电同时测量RTD两端的电压第三根线专门用来感知线路电阻的电压降从而在计算中抵消。在 ADS122U04 上实现这个功能需要把IDAC1接到激励引脚上IDAC2配合做线路电阻补偿再用差分输入测RTD上压降。第一次接触的人可能觉得复杂但只要你理解了导线电阻都能在ADC内部信号链上被扣除这个点后面配置寄存器就顺理成章。如果你的应用是短距离、高精度的场合比如实验室仪器或者精密温控建议直接用四线制。四线制彻底分离了激励路径和测量路径导线电阻理论上完全不进入测量回路。代价是传感器需要四根线现场接线麻烦一些。HVAC应用通常管道、风道分散两线或三线居多具体看你取舍。2.2 参考电压与激励电流的搭配ADS122U04的参考电压输入支持差分参考。RTD测量时最经典的搭配是用同一个IDAC电流流过参考电阻产生参考电压再流向RTD产生信号电压。这样由于恒流源漂移同时影响参考电压和信号电压在ADC的比值测量架构中电流源的绝对精度误差被完美抵消剩下只跟参考电阻和RTD本身的精度有关。参考电阻的选择直接决定测量精度。我一般选精度0.1%、温漂系数25ppm/°C甚至更好的精密金属膜电阻。举个例子如果参考电阻用1000欧姆IDAC电流设为500微安那参考电压就是0.5V这个压降对 ADS122U04 的模拟输入范围来说是比较舒服的区间。PGA增益设在8到16之间可以把PT100在0°C时的约100欧姆电阻对应的电压放大到ADC能充分利用的幅度。用大白话说Delta-Sigma ADC是比率计它测的不是绝对电压而是信号电压与参考电压之比。只要两者来源一致电源电压波动都不会影响测量结果。这就是为什么工业级别产品一定要做比率式测量而不是用一颗LDO压出来的绝对电压做参考。顺序反了后面标定再多也救不回来。2.3 输入滤波与EMC防护的取舍模拟输入前端通常要加RC低通滤波器。电阻加电容的组合一方面限制高频噪声进入ADC采样核心另一方面也起到一定的ESD和浪涌吸收作用。我这里特别提醒一点RC滤波的电阻值不能选太大因为它会跟传感器源阻抗串联影响ADC输入驱动能力。特别是ADS122U04这样的Delta-Sigma ADC输入端有采样电容周期性开关动作源阻抗太大会导致建立时间不足直接表现为测量读数的跳变和稳定时间变长。从我实测的情况看RC滤波的截止频率设在几百赫兹到几千赫兹这个区间比较合理既能抑制50Hz/60Hz工频干扰及其谐波又不至于拖慢响应速度。如果现场还有变频器、大功率接触器等强干扰源可以考虑在电源进来之后串磁珠、加TVS管PCB上单独划分模拟地平面。反正原则就一条模拟信号链的地要干净数字地和模拟地一点连接别让高频噪声在ADC参考地上乱窜。电磁干扰这个问题实验室里很难完全复现所以我建议在样机阶段就把EMC预测试做了别等产品送检才手忙脚乱。3. ADS122U04 的UART协议与寄存器配置实践3.1 四线式读写指令与时序ADS122U04的UART通信其实简单得过分。它本质上就是一个从设备所有的读写操作都由STM32侧发起。通信参数我用的默认配置9600波特率、8数据位、无校验、1停止位。如果你的系统对实时性要求高也可以调成更高的波特率手册里有详细的配置流程照着做就行。读转换数据是发送一条命令命令字里带寄存器地址然后芯片在当前转换完成后把24位数据从TX引脚送出来。写配置寄存器则是指令里携带要写入的寄存器值。无应答连续转换模式下芯片会自动按照设定的数据速率推送结果STM32只要在RX中断里收数据就行。这里我吃到过一个教训ADS122U04的命令字节时序里有内部延时及处理时间要求具体是多少得从数据手册里查。如果我发命令太急芯片还在忙上一次内部操作的时候新命令可能被忽略或者导致状态错乱。解决办法是严格按命令间隔延时别为了追求那几十微秒把通信可靠性搭进去。3.2 配置寄存器的关键位讲解ADS122U04的配置寄存器组不长无非是设置PGA增益、输入多路选择、数据速率、滤波器模式、IDAC电流值、参考电压选择和单次/连续转换模式这些项。写代码的时候要对着寄存器的说明表格一点一点核对这里最容易翻车的几个位我给你画一下重点。一是输入多路选择它决定了当前差分输入接的是哪两个引脚写错了就测不到信号。二是PGA增益增益越高噪声越小但可测的信号幅度范围变窄。三是数据速率ADS122U04支持从每秒20次到每秒330次左右的采样率数据速率越高内部数字滤波器带宽越宽噪声自然变大。低速率对应低噪声这是Delta-Sigma ADC的普遍规律你需要按实际需求去平衡。单次转换模式下还有一个值得一提的细节驱动方式。ADS122U04在单次转换完成后进入空闲状态等待下一次唤醒命令。这种模式特别适合电池供电的低功耗设计传感器不工作的时候整条信号链全部断电进一步省电。3.3 单次转换模式下的完整初始化流程下面我贴一段我在STM32L041C6上实际跑通的初始化代码逻辑很清楚你拿到手改几个引脚定义就能用。void ADS122U04_Init(void) { // 复位芯片 ADS122U04_SendByte(0x06); // RESET 命令 HAL_Delay(10); // 配置寄存器0: 禁用内部温度传感器PGA增益8 // 输入通道选择差分输入 AIN0-AIN1 ADS122U04_WriteReg(0x00, 0x24); // 配置寄存器1: 数据速率20SPS单次转换模式 ADS122U04_WriteReg(0x01, 0x00); // 配置寄存器2: IDAC1输出电流500uA // 参考电压选择外部差分参考 REFP-REFN ADS122U04_WriteReg(0x02, 0x44); // 配置寄存器3: 内部滤波器选择关掉IDAC2电流源 ADS122U04_WriteReg(0x03, 0x00); }初始化完成之后每次要测温度就发单次转换命令等待DRDY信号如果接了这个引脚出来或者延时等待然后读三字节转换结果。这样一套流程下来数据速率20SPS足够大多数HVAC应用使用。4. STM32L041C6 端软件设计与低功耗策略4.1 LPUART对接ADS122U04的工程要点STM32L041C6这个型号本身就是奔着低功耗设计的它的LPUART可以直接在低功耗模式下工作收到的数据能唤醒MCU。这一点跟ADS122U04的工作方式天然对口。工程上要注意LPUART的时钟源选择。LPUART可以用LSE或者HSI作为时钟波特率生成方式跟普通USART不太一样。我之前有一版程序LPUART无论怎么配置都跑不出9600波特率后来查参考手册才发现是时钟源分频设置错了。这里建议大家用ST官方提供的低功耗UART配置例程做底子别自己手搓波特率计算公式。还有个容易忽略的点LPUART的IO引脚要选对。STM32L041C6的LPUART不是所有引脚都能映射的用CubeMX配置的时候它会自动圈定可用的引脚范围。你只要别自己手动乱指定引脚就行让工具自动分配省心很多。4.2 数据解析与滤波算法的选择从ADS122U04读出来的是24位二进制补码先要把它拼成一个整型数再根据参考电压、PGA增益和传感器特性换算成电阻值最后通过查表或多项式计算出温度。这中间有两个细节值得说道。第一个是符号位的处理。24位二进制补码是第23位为符号位换算到32位int的时候要做带符号扩展C语言里直接左移8位再除以256这个技巧能通用很多平台。第二个是数字滤波。虽然ADS122U04内置了数字滤波器在实际现场环境中我仍然会在MCU端做一层简单的滑动平均滤波。比如连续采8次然后取平均对付现场的突发干扰非常有效。这个滤波窗口大小要看你的响应速度需求HVAC温控系统本来惯性就大慢一点完全没问题。在代码实现上我建议把读数据-换算电阻-查表出温度这几个步骤封装成独立模块方便后期调试和移植。手头那版代码就是这么组织的换了另一个项目板卡几乎复制粘贴就能跑起来。4.3 休眠唤醒与动态功耗控制低功耗策略的核心是让MCU尽量睡、ADC尽量少干活。我做的是这样的调度STM32L041C6平时待在Stop模式用一个低功耗定时器LPTIM每200毫秒醒一次对着ADS122U04发一帧命令启动单次转换等转换结果从LPUART回来后又立刻睡回去。整个过程MCU活跃的时间不超过几毫秒。ADS122U04那边呢它收到单次转换命令后内部上电、采样、转换、输出数据然后自动回到低功耗状态。在你的整机功耗计算里ADC的平均功耗可能比MCU还低这是Cortex-M0加UART接口ADC组合独有的优势。需要说明的是如果你的系统要求连续监测不希望有200毫秒的测量间隙那就改成连续转换模式让ADC一直跑MCU在中断里取数据。这种方式功耗高一些但温度曲线是连续的。工业HVAC设备这种响应本来就慢的场景用周期性测量完全够用。5. 实测数据、标定流程与精度验证5.1 恒温槽标定的实际操作硬件电路搭好、代码能出数之后别急着认为完事了。ADS122U04本身虽然精度高但你的参考电阻、传感器、PCB走线都会带来系统误差。标定的目的就是把整条链路上所有可预见的偏差一次性修正掉。我的做法是用恒温槽提供多个标准温度点比如0°C、25°C、50°C、80°C用标准温度计读取真实温度值同时记录下你的系统经过ADC换算出来的原始温度值。把这两组数据画成曲线你会发现通常存在一个比较固定的偏置和增益误差。处理这种误差的方式有两种。如果有两到三个标定点用线性插值或最小二乘拟合一条直线然后把直线的斜率和截距直接写进固件里作为修正系数。这是最常用、最稳妥的方法。如果要求更高比如在很宽的温度范围做到±0.1°C那就要做多点分段标定每个区域内部用线性拟合。我这边实际项目做到±0.1°C以内用多点标定加查表完全可行。5.2 线性查表与RTD温度换算PT100的电阻-温度关系并不是完全线性的虽然0°C到100°C之间近似程度不错但在低温端和高温端偏离挺明显。如果你直接按线性电阻算温度100°C范围内误差可能到好几度这不能接受。工程上通用的做法要么按IEC 60751标准公式直接计算要么做查表加插值。MCU里的浮点计算STM32L041C6虽然支持但有点慢我倾向于用定点整数查表法把温度-电阻表做成const数组用二分查找定位区间再加线性插值收尾。整个计算过程不涉及浮点数速度很快出错率也低。打个比方这个过程就像查字典你知道一个字的大致读音先在索引里找到那个范围再在附近的条目里精确匹配。比直接从第一个字翻到最后一个字效率高得多。5.3 实测噪声与稳定性表现我在自己搭建的测试平台上记录了一组数据供大家参考。用的是PT100三线制接法PGA增益设为8数据速率20SPS环境温度恒定在25°C左右连续采集一个小时。转换结果换算回温度之后波动峰峰值稳定在±0.02°C以内这个表现已经超过了大多数HVAC温控系统的需求。较长时间尺度上由于参考电阻的温度漂移整个系统的读数会有缓慢小幅偏移这是硬件固有的标定无法完全消除。所以在设计阶段选低温漂参考电阻比事后抱怨浮点计算更有效。我还对比过内部温度传感器做自动冷端补偿的应用ADS122U04内置的这个传感器精度大约在±0.5°C左右用来做热电偶冷端补偿是够用的但如果追求更好的精度还是建议外接高精度温度传感器作为冷端参考。6. 工业现场安装与排查经验集合6.1 常见故障现象与处理手段这章节聊一些实际碰到的糟心事。有次现场设备报了温度跳变数据忽高忽低示波器看波形没看出问题后来发现是传感器接线端子松动接触电阻一会儿几欧姆一会儿几百毫欧而ADS122U04的输入阻抗极高一点接触变化都会在转换结果上放大。最后解决方案很朴素把端子换成带弹簧夹的镀金端子再也没有复现过。另一种常见情况是读数一直往一个方向漂查了一圈发现是IDAC激励电流设置得太大导致RTD自热效应明显。RTD自热误差跟电流的平方成正比所以能用50微安就绝不用500微安除非你的传感器散热条件特别好。这个点手册上写得没那么显眼特别容易踩。还有一次是UART通信偶发超时排查发现是系统里的电源纹波偏大偶尔把UART的波特率时钟干扰得出现了位错误。解决方式是给MCU电源加大电容、ADC的DVDD用磁珠单独隔离。经验就是数字通信问题不一定出在数字侧模拟侧的干扰经常通过电源传导进来。6.2 PCB布局与走线细节PCB布局直接决定你前面所有的精度设计能不能落到实际。我在ADS122U04的layout上有几个固定原则模拟输入引脚附近不铺数字地参考电阻紧贴REFP/REFN引脚放置且走线等长UART的TX/RX走线尽量远离模拟输入走线ADC芯片底下的地平面保持完整电源入口处放一个10uF钽电容加0.1uF陶瓷电容组合各引脚再加小容值去耦。走线宽度上模拟信号线别太细差分输入的两条线等长且尽量相邻这会减少耦合进来的共模噪声转换为差模噪声的概率。别小看这个细节在强干扰环境下这些看着无所谓的走线往往决定你的系统过不过得了EMC测试。两线制变送器产品一般空间很紧张所以我常建议用4层板方案中间两层分别做完整的电源层和地层。虽然成本增加一点点但模拟性能会明显更稳尤其是信号链贯穿模拟和数字两个领域的产品。6.3 从原型到量产的几个隐藏坑实验室原型一切正常一到小批量生产就出现参差不齐的性能这种事我遇到不下三次。排查到最后原因基本都是元件批次差异和生产工艺问题。一是参考电阻打样的时候用0.1%精度的量产如果换了供应商或者批次温漂系数可能悄悄变差。我后来干脆在BOM里指定具体型号和品牌并让采购锁死供货渠道。二是传感器本身PT100也有精度等级区别Class A和Class B差一大截采购时务必核对规格书。三是焊锡工艺波峰焊如果温度控制不好会造成PCB应力进而通过引脚传导给ADC内部参考电路导致读数微小的漂移。如果你做的是出口产品还要注意不同地区电网频率不同50Hz地区对50Hz的工频干扰敏感60Hz地区是60Hz。ADS122U04内置的数字滤波器如果可以配置成对应模式会在软件上消除一部分工频干扰。HVAC应用的出口机经常是多个国家销售这个配置开关最好做成运行时可选方便产线。我自己做这套ADS122U04STM32L041C6方案的时候最大的感受是选对了接口很多东西会自己顺起来。UART的易用性让软件调试变得直接ADS122U04内置的激励和参考路径又把模拟设计大幅简化而STM32L041C6则刚好补上了低功耗和成本的关键一环。如果你正卡在某一个环节不妨回到通信接口和模拟前端去检查八成能找到突破口。
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑