资讯详情

24位UART ADC搭配低功耗MCU:高精度温度测量系统设计

📅 2026/11/5 9:46:08 | 华诺云谱 👁 阅读
24位UART ADC搭配低功耗MCU:高精度温度测量系统设计
ADS122U04IPWR 这个料号很多做传感器变送器和仪表采集的工程师看第一眼就知道是 TI 那颗带 UART 接口的 24 位 ADCR7FA2L1AB2DFP 则是瑞萨 RA2L1 系列里非常典型的一颗低功耗 MCUCortex-M23 内核专为工业传感和家电、HVAC 控制这类场景设计。把这两颗放在同一套温度测量系统里本质原因其实很朴素用尽量少的周边器件拿到 24 位的稳定温度数据同时让 ADC 和 MCU 之间的数据交换足够抗干扰、足够简单正好覆盖 HVAC 控制器、工业温度变送器这类产品最看重的几个点。这套组合最适合谁来参考一种是正在做 RTD/Pt100 温度采集模块、想把传感器信号链做得更干净的硬件工程师另一种是用 MCU 做暖通空调控制器发现板载 ADC 分辨率不够、又不想引入复杂 SPI 时序的嵌入式开发者。文章里我不会只讲理想到能直接流片的方案而是更多分享我在实际项目和实验室调试里遇到过的接地、噪声、通信异常问题把这些经验直接给到读者。1. 硬件选型逻辑为什么是 24 位 UART ADC 配低功耗 MCU1.1 UART 接口的 ADC 解决的不只是“少两根线”很多工程师第一反应是SPI 接口的 ADC 满地都是ADS1220、ADS124S08为什么非要选带 UART 的 ADS122U04我在多个工业项目里吃过 SPI 的亏之后才真正理解 UART 接口的优势。SPI 是同步串行接口SCLK、MISO、MOSI、CS 四根线PCB 上挤一挤没问题但如果传感器探头离控制器有两三米、甚至十米以上SPI 的时序就会变得很脆弱。时钟线上的振铃、地电位差导致的共模噪声都会让数据错位一旦错位又很难自动恢复必须重新拉 CS 复位整个通信状态机。而 UART 是异步接口只要波特率准确、电平稳定一根 TX、一根 RX 就能把几百 Kbps 的数据传得又远又稳。ADS122U04IPWR 这颗 24 位精度的 ADC 内部把转换结果以 UART 帧格式输出天然适合“ADC 贴近传感器、MCU 放在控制板”这种分布式布局。另外UART 通信的容错性好一个起始位加数据位就能自同步偶发噪声造成的单字节错误可以通过帧格式和 CRC 校验发现并重发比 SPI 硬同步方式更好处理。我在 HVAC 项目里通常会把 PCB 分成探头板和主控板两块板之间只用一根 4 芯屏蔽线连接ADS122U04 在探头板上完成模拟采样R7FA2L1AB2DFP 在主控板上做数据处理和协议转换这个架构在产线上验证过几百套通信稳定性比以前用 SPI 的方案高一截。1.2 R7FA2L1AB2DFP 在信号链里的角色R7FA2L1AB2DFP 属于瑞萨 RA2L1 家族48 引脚 LQFP 封装Arm Cortex-M23 内核主频可以跑到 48 MHzFlash 和 RAM 对于这个小系统来说绰绰有余。它最吸引我的是三件事工作电压范围宽、睡眠功耗低、外设里 UARTSCI模块完整好配置。RA2L1 支持 1.6V~5.5V 供电这意味着可以直接用 3.3V 或 5V 的单电源配合需要一个稳定模拟电源的 ADC 时电源设计压力小很多。Cortex-M23 虽然是入门级内核但该有的中断嵌套、低功耗模式一个不少HVAC 温控器这种 7x24 小时通电的设备主控平时大部分时间在 SLEEP 模式只在 ADC 转换完成中断到来时醒来读数据整体功耗可以压得很低。FSP灵活配置软件包也是瑞萨现在主推的开发环境图形化界面里把 SCI 配置成 UART生成代码直接就能用的对项目周期紧张的情况很友好。至于为什么“非它不可”也不是。RA 系列里同封装的还有其他选择但 R7FA2L1AB2DFP 在 48pin 封装里提供了足够的串口数量方便日后扩展 RS485 或 BMS 通信协议我把它当作一个通用主控来用而不仅是 ADC 的“读码器”。1.3 这套组合适用到哪一步ADS122U04 加 RA2L1能做的事情很多但边界也要说清楚。ADS122U04 本质上是一个精密模数转换器内置可编程增益放大器PGA、两个激励电流源、内部 2.048V 基准甚至片上温度传感器都有。配合 Pt100/Pt1000 或热电偶它可以覆盖 -50°C 到 400°C 的绝大多数 HVAC 和工业温度测量场景。但要注意ADS122U04 只有 4 个模拟输入端单颗 ADC 处理一路差分 Pt100 或最多四路单端输入就已经把通道占满了。如果你需要同时监控八个温度点我的建议不是硬扩展多路复用器而是按区域分多块探头板每块板上一颗 ADS122U04然后通过 UART 总线挂到主控 MCU 上这样既避免模拟信号长距离传输损失精度也让系统扩展性更好。总线上多颗 UART 从机需要地址区分ADS122U04 本身支持地址配置这个我在后面软件章节会展开。2. 传感器到 MCU 的电路设计与接线实战2.1 Pt100 的接线方式两线、三线还是四线温度测量里最常用的是 Pt100 铂电阻。它的阻值在 0°C 时是 100Ω温度每升高 1°C阻值大约增加 0.385Ω把它接到 ADS122U04 的激励电流源上就能得到一个与温度对应的电压信号。如果你的产品预算允许我强烈建议用四线制或三线制接法。四线制是两条线提供恒流激励另外两条线专门用来测电压引线电阻完全不影响测量精度最高。三线制是通过在两条激励线和一条测量线上做对称补偿在工业现场是非常常见的折中方案。两线制虽然省线但引线电阻会直接叠加到传感器阻值里长线场景下误差可能达到好几度只在探头线非常短、精度要求不高的消费类 HVAC 温控器里用。ADS122U04 内置的 IDAC1 和 IDAC2 两个激励电流源正好可以做三线制。具体做法是让 IDAC1 从 AIN0 引脚输出经传感器的一根引线流进 Pt100再从另一根引线回到 AIN1同时 IDAC2 从另一个引脚输出一个大小相同的电流流经第三根引线产生一个补偿电压。这样两段引线电阻上的压降被系统相减消除只剩 Pt100 本体上的电压差。实际布板时激励电流建议设在 500µA 左右太大 Pt100 自热效应明显太小又会让信号幅度偏低、信噪比下降500µA 是 TI 官方常见推荐值实测在 HVAC 场景下表现很稳定。2.2 热电偶、内部温度传感器和冷端补偿除了 Pt100ADS122U04 也支持接 K 型或 J 型热电偶。热电偶输出的是毫伏级电压信号温差几十度时电压变化可能只有几百微伏所以必须用 PGA 把信号放大后再进 ADC。此时一般把增益设到 8 倍以上输入范围也相应缩小24 位分辨率才能体现优势。热电偶最大的麻烦是冷端补偿。热电偶测的是热端和冷端的温差冷端如果没有温度标定读数就不是绝对温度。ADS122U04 自带内部温度传感器可以先读芯片内部温度作为冷端参考再用软件把该温度值换算成冷端毫伏电压加到热电偶的测量电压中最终得到热端真实温度。这个流程在工业变送器里很标准需要注意的点是ADC 内部温度传感器和外部热电偶冷端之间如果存在温差会产生误差。所以探头板上冷端要紧贴热电偶接线端子PCB 铜皮能均匀导热才能保证补偿准确。同时别忘了 ADS122U04 还有一个 AVDD 供电范围的限制热电偶的共模电压不能超出模拟输入范围否则放大器会饱和。通常我会把热电偶负极接到 AIN1正极接 AIN0让共模电压保持在 AIN1 附近配合 PGA 的差分输入就能可靠工作。2.3 供电、基准电压和 PCB Layout 关键点ADS122U04IPWR 的模拟供电 AVDD 和数字供电 DVDD 虽然可以连在一起但为了精度我还是习惯分别布置。模拟电源经过一个 LC 滤波或至少一个 10Ω 串联电阻加 10µF 电容再给 ADS122U04 供电。数字电源和模拟电源的地不要在信号链上共用同一条细线最好在 ADC 下方的覆铜区单点汇合。RA2L1 的供电同样要干净3.3V 经 LDO 输出MCU 附近的 100nF 去耦电容一个都不能省。参考电压方面ADS122U04 内置了 2.048V 基准这是省事的选择温漂指标对于 HVAC 应用来说足够。如果产品要做到更高精度可以外接精密基准芯片把 REF 引脚接外部电压。我的经验是HVAC 场景用内部基准完全没问题工业温度变送器想做到 0.1°C 精度最好还是外挂基准并做校准。模拟输入的滤波也是容易被忽略的坑。每路信号输入对地加上一个 1nF~10nF 的电容能有效滤掉射频干扰。ADS122U04 是高精度 Delta-Sigma ADC输入阻抗的切换特性会让外部 RC 滤波的参数选择变得微妙RC 过大反而增加建立时间我一般选用 1kΩ 串联电阻加 1nF 电容配合 20SPS 左右的数据速率既滤波又不会牺牲稳定时间。3. 软件实现从寄存器配置到温度标定3.1 用 FSP 配置 RA2L1 的 UARTSCI模块拿到 R7FA2L1AB2DFP开发环境直接用瑞萨的 e² studio 加 FSP。新建项目后芯片型号选 R7FA2L1AB2DFP系统会自动套用对应的引脚定义。配置 SCI 模块时我通常选 SCI0 或 SCI1模式设为 UART波特率 115200bps8 位数据位无校验1 位停止位。RA2L1 的 UART 支持 FIFO 和中断我建议配置一个接收完成中断主循环只需要处理温度换算逻辑数据到达时由中断置位标志。刚开始调的时候容易犯的一个错误是忘记在 FSP 里开启 SCI 的引脚复用。有的工程师直接改寄存器但 FSP 图形界面里引脚分配必须把对应 P1xx 设置为 SCI 功能生成的代码才有正确的 I/O 初始化。另一个问题是时钟源选择如果外部晶振没焊上FSP 默认用内部高速时钟也能跑但波特率误差会偏大UART 通信在高速率下就可能随机出错。我一般用板上 20MHz 或 24MHz 晶振作为主时钟再经过 PLL 分频给 SCI 模块实测 115200bps 下整个工作日通信零误码。3.2 ADS122U04 的配置命令和数据读取流程ADS122U04 的命令不是简单的 SPI 寄存器读写它有自己的 UART 命令格式。初始化时需要向 ADC 发送配置命令设定输入多路开关选择、PGA 增益、数据速率、激励电流源开关和大小。以我的典型配置为例输入选择 AIN0 和 AIN1 作为差分对PGA 增益设为 8 倍数据速率设为 20SPSIDAC1 和 IDAC2 都开启电流 500µA内部基准 2.048V。配置命令发完后发送启动转换命令然后等待转换完成。ADS122U04 支持连续转换模式数据准备好后会自动通过 UART 发送 24 位转换结果MCU 在接收中断里按三字节拼接。第一次调通这个流程时最好先用逻辑分析仪抓到 ADC 发出的字节再把三字节按大端方式拼成一个 32 位整数右侧对齐后根据 PGA 增益换算电压。不要一上来就追求速度先以 20SPS 低速把整个链路摸熟后面再提速到 640SPS 也不迟。UART 接口有一个天然优点只要波特率匹配不需要像 SPI 那样严格关注时钟相位数据时序调试起来省不少时间。3.3 从 ADC 原始码值换算到温度值温度换算这一步是整个软件算法里最值得写清楚的部分。设 ADS122U04 的内部基准 Vref 为 2.048VPGA 增益为 G24 位 ADC 的满量程输入范围是 ±2·Vref/G。那么每一个 LSB 对应的电压是LSB (2 × Vref) / (G × (2^24 - 1))代入 G8Vref2.048V可以算出大约为 0.0305µV/LSB分辨能力非常恐怖。但实际系统里噪声和 PCB 热电势会把有效位数拉低最终能稳定在 18 到 20 位有效分辨率就已经很理想了。换算电压时电压 ADC_Code × LSB得到电压后再根据激励电流值换算 Pt100 电阻。如果是两线制电阻 R 电压 / I_idac如果是三线制或四线制电压已经消除了引线电阻影响公式一样。注意保持在配置里用同一个 IDAC 电流做计算比如 500µA那么 0°C 时 Pt100 上电压是 100Ω×500µA 50mV200°C 时电阻约 175.84Ω电压约 87.92mV都在增益为 8 时的输入范围内。得到电阻后有两类办法求温度。一类是用查表法加线性插值把 IEC 60751 标准表格放进 Flash每 1°C 一个点温度显示时细分插值精度高另一类是用 Callendar-Van Dusen 公式直接二次方程求解。HVAC 场景温度范围通常 -20°C~80°C我用一个简单的线性近似就够了温度 (电阻 - 100) / 0.385。如果做工业级控温还是老老实实查表全温度段误差可控。3.4 自校准、断线检测和数据校验工业温度测量最让我头疼的不是换算而是“传感器断线时读数依然看起来正常”。Pt100 断线时ADS122U04 输入悬空由于内部偏置ADC 码可能跑到满量程正端或负端。所以我会在软件里做判据如果原始 Code 接近满量程的 99% 以上或者换算出的电阻大于 500Ω直接判定传感器断线输出错误状态而不是异常温度值。同理短路的 Pt100 会读出接近 0Ω也要判为错误。校准方面批量生产时每块板不可能完全一致我会在产线做两点校准冰水混合物0°C和沸水100°C各采一次得到两个偏移和增益系数。软件里把这组系数存到 MCU 的 Data Flash每次开机加载校正公式温度精度能明显提升。ADS122U04 的自偏移校准命令也可以定期执行用来消除 ADC 内部的低频漂移。数据通信的校验更别省我用的 UART 协议里每一帧温度数据都会附一个简单的累加和校验字节。RA2L1 收到后先算校验再更新显示校验失败就丢弃这一帧上一帧温度保持不变。这个策略让系统在嘈杂电磁环境下不会跳出瞬时错误值用户看到的是平滑的温度变化体验好很多。4. HVAC 与工业现场里的可靠性设计与实战经验4.1 UART 电平、传输距离和总线拓扑的取舍ADS122U04 输出的 UART 电平是普通 CMOS 电平在 PCB 内部走线没有问题但如果探头到主控板走线超过 30cm就建议不要在板上直接跑原始 TTL 信号。工业现场里变频器、压缩机、水泵一开电机电刷火花产生的干扰会让单端 UART 数据满帧出错。我实际用过的方案有几种。最简单的是在 ADS122U04 和 RA2L1 之间加一块双通道数字隔离器比如 ISO7721把模拟地和数字地彻底隔开再用屏蔽双绞线传输 UART 信号。这种方案能撑到三到五米HVAC 风管温度探头到控制器足够用。更稳的是在 ADC 端加一个 RS485 收发器用差分信号传输即使走线十米以上也没问题。这时候 ADS122U04 相当于总线上的一个从站RA2L1 发起查询从站回数据协议变成 Modbus 风格整套系统也更好升级成多探头总线结构。选哪种取决于成本。工程上的直觉是单机产品用隔离 UART组网产品用 RS485。我自己做的一款商用空调用温度采集卡就是隔离 UART 加屏蔽线量产以来没出现过通信故障。布线时 UART 的 TX 和 RX 保持在同一层、尽量平行走线两侧都要加终端电阻匹配吗普通速度不加也行高速率下才需要。共地问题则是首先要解决的隔离方案正好一劳永逸。4.2 电源噪声、电机干扰和地环路HVAC 环境的电磁兼容问题集中在感性负载上。压缩机启停瞬间母线上可以出现几伏的电压跌落和尖峰交流接触器动作时空间辐射干扰也会耦合进传感器线。为了保证温度采样不被污染我总结出三条硬性规则。第一模拟地、数字地、机壳地分层铺设在电源入口处用 Y 电容和共模电感处理。第二ADS122U04 的 AVDD 用独立的 LDO 供电不要和风扇电机驱动共用一个 DC-DC。第三传感器屏蔽层只在主控板端单点接地不能在探头端也接地否则会形成地环路反而把工频干扰引进来。这三点看起来是低频模拟设计的常识但真到样品测试时很多报“温度乱跳”的问题最后都能回溯到这三条没做好。另外RA2L1 的 ADC 虽然也有 12 位模拟输入但我在这个项目里从不拿它直接测 Pt100因为板载参考和 PGA 能力不足。一个更稳的搭配是RA2L1 的 12 位 ADC 专门做 NTC 的粗略温度监测或者电源电压检测Pt100 的精密温度通道全权交给 ADS122U04。分而治之系统可靠性反而更高。4.3 固件层面的看门狗、数据帧超时和状态机可靠设计不只是硬件的事。我写 RA2L1 固件时会开一个 IWDT 看门狗主循环每隔 100ms 喂一次如果因为外部干扰导致程序跑飞看门狗能强制复位。ADS122U04 这边也做了 UART 超时判断如果超过 500ms 没有收到新的有效温度帧主控就会进入故障保护状态叫风机去看门还是关压缩机取决于 HVAC 系统的安全逻辑。通信协议的状态机我一般分成四态等待命令头、等待地址字节、等待数据长度、等待校验字节。任何一态出错都回到等待命令头不会卡死。这种方法看着简单但对杂散噪声干扰下的系统鲁棒性提升非常明显。有些工程师图省事用阻塞式延时读串口一收到错字节就重启 MCU结果现场温度一波动就频繁复位问题越搞越乱。正确思路是“错一帧丢一帧不阻塞不重启”。5. 调试实录我踩过的坑和排查手册5.1 UART 数据乱码、通信中断怎么查项目刚开始联调时最容易碰到的现象就是 RA2L1 收不到 ADS122U04 的数据或者收到的字节完全不可读。我的排查顺序固定如下先查波特率误差。ADS122U04 的命令时序和 MCU 的 SCI 波特率都由各自的时钟决定如果 MCU 用的是内部 48MHz 晶振而配置上却按外部晶振计算波特率会差好几个百分点115200bps 下直接乱码。我常用的方法是让 MCU 回显收到的字节在串口助手对比 ASCII 码能立刻看出位偏移。再查 TX/RX 是否接反。UART 必须交叉连接ADC 的 TX 接 MCU 的 RXADC 的 RX 接 MCU 的 TX。这问题听上去低级但调试时十次里有三次是它。查完接线再查电平用示波器看 ADC 的 TX 脚有没有高低电平变化如果没有多半是 ADC 没有正确进入运行模式或者 RESET 引脚一直被拉低。5.2 温度读数跳变、有毛刺怎么办如果通信正常但温度波动很大先别怀疑 ADC 坏。拿一块已知准确的干体温度计做对比测试读数跳到 ±1°C 以上的话基本就是噪声问题。把 ADS122U04 的数据速率从高速调到 20SPS如果毛刺明显变小说明是输入信号高频噪声混叠ADC 的调制器响应不过来。此时检查输入引脚上的 RC 滤波电容是否做到位并在软件里加一个滑动平均滤波连续采样八次取平均值最多再加一次中值滤波去掉极端毛刺。另一个隐蔽来源是 Pt100 自热。如果激励电流调到 1mA 且探头是小型薄膜铂电阻本身温升就有 0.5°C 上下。把激励电流降到 500µA 甚至 250µA读数就能平静下来。温度显示还是跳就要怀疑热电势尤其是探头接线端用不同金属材料时一米长的线就可能产生几微伏的热电势对应零点几度的误差极难察觉。解决办法是尽量用镀锡铜端子让两种金属的热电结保持在同温区。5.3 温度整体偏高或偏低常见原因和校零温度值与实际值有固定偏差问题一般不在 ADC而在线阻和基准电压。两线制接线时每增加一米 0.5mm² 铜线大约带来 0.1Ω 电阻对应 0.26°C 的偏移。发现整体偏高且数值随探头线长度变化先改四线制或用软件补偿线阻。还有一种情况是基准电压偏差。ADS122U04 内部基准标称 2.048V但全温区内有漂移且每一颗芯片的实际值不是严格一样。批量产品不做校准就会呈现同批次所有温度点都偏同一方向的特征。我在产线用高精度电阻箱作为模拟传感器分别给 100Ω 和 138.5Ω 两个点反推出 ADC 的基准电压实际值再在软件里用实测 LSB 替代理论 LSB这样系统误差就可以减掉大半。5.4 断线、短路与传感器类型识别最后是传感器故障判断。我写了一个初始化自检函数上电后先读一次 Pt100 电阻如果在 80Ω~400Ω 之间判定正常低于 20Ω 判短路高于 800Ω 判断线。HVAC 控制器需要同时支持 Pt100 和 Pt1000 时软件会自动根据第一次读出电阻值落在哪个区间来选择换算表。这个设计在产线上很实用不需要拨码开关物料管理也简单。如果使用热电偶断线检测逻辑稍有不同热电偶开路时读到的电压会接近 PGA 输出上限而短路时接近 0 微伏。逻辑判断和 Pt100 模式分开处理别套用同一个阈值。现场用万用表量一下故障信号源端就能定位。工程中我用这个组合完成过一套风冷机组的温度采集板。真正落地的过程中ADS122U04 的连接易用性让我省了很多事RA2L1 的低功耗和开发效率也名副其实。但温度测量的精度从来不是靠一颗 ADC、一颗 MCU 单方面决定的传感器安装位置、线缆走线、接插件选型、软件滤波和校准策略每一步都会贡献或被消耗几分之一度。最后再分享一个细节HVAC 系统里温度探头最好安装在气流混合充分、没有直接辐射热源的位置否则芯片性能再好测出来的也是局部温度。把这个“测点即真理”的思路贯彻到位再回头优化信号链整个系统会比单点硬调增益有效得多。
📝

华诺云谱内容团队

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

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

你可能需要的服务

订阅华诺云谱资讯周报

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

↑