资讯详情

ADS122U04与STM32的PT100/热电偶测温方案解析

📅 2026/11/5 6:27:25 | 华诺云谱 👁 阅读
ADS122U04与STM32的PT100/热电偶测温方案解析
搞过几年工业温度测量的人对 PT100、热电偶这些东西既爱又恨。传感器本身便宜耐用但信号链一旦处理不好读数漂起来能让你在客户现场耗上一整天。最近用 TI 的 ADS122U04IPWR 配合意法半导体的 STM32F107VC 做了一套测温方案同时覆盖工业和 HVAC 两类的应用场景从硬件连接到软件换算整体走了一遍这里把关键设计思路和踩过的坑记录下来给正打算选型或调板子的朋友一个参考。这套方案解决的问题很直接把 PT100/PT1000、热电偶这些模拟传感器的微弱信号稳定地转成数字量再由 MCU 换算成真实温度。ADS122U04IPWR 是一片 24 位 delta-sigma ADC自带 PGA、内部温漂很低的基准源和两路激励电流源最关键的是它用 UART 接口和 MCU 通信。这在工业现场非常舒服——不需要额外的 SPI 引脚线缆可以拉得相对长调试时用串口助手就能直接看数据。STM32F107VC 是 Cortex-M3 内核的互联型 MCUUART 资源丰富两者配在一起硬件上几乎没什么复杂逻辑。下面按整个项目的实际推进顺序拆开讲从器件选型思路到最后的现场调试经验希望能帮你少走一些弯路。1. 项目概述与方案选型思路1.1 为什么选 ADS122U04IPWR 而不是普通 SPI ADC如果只看标题“ADS122U04IPWR”可能第一反应是它跟常见的 ADS1220 很像。两者确实同属 TI 的 delta-sigma ADC 家族但有一个让嵌入式工程师很舒服的差异ADS122U04 的通信接口是 UART不需要外部 SPI 主控去模拟时序数据线只有 TX、RX 两根省掉了 SCK、CS 这些控制脚。对于 STM32F107VC 来说UART 外设几乎是“开箱即用”配置起来比 SPI 省心尤其是在多节点板卡或需要隔离通信的场景UART 转 RS485 也更简单。温度测量本身是个低频过程ADS122U04 的采样率对 HVAC 和大多数工业温控完全够用。我习惯把数据率配置在 20SPS 或 40SPS片上自带的数字滤波器已经把大部分工频和随机噪声压得差不多。24 位分辨率在 2.048V 基准下配合合适 PGA理论分辨率远小于 0.01℃实际有效分辨率也能轻松做到 0.05℃ 级别应对 HVAC 回风温度、冷冻水温度这类常规需求绰绰有余。1.2 系统架构与信号链路的整体设计整套系统可以分成三段传感器信号进来在 ADS122U04 内部完成放大和模数转换然后通过 UART 发给 STM32F107VC由 MCU 完成线性化标定和温度换算。这种架构的好处是模拟部分与数字计算分离ADC 做好自己的采样MCU 专注算法和逻辑互不干扰。具体信号链是这样走的温度传感器PT100/PT1000/热电偶接到 ADC 的模拟输入端ADC 内部的 IDAC 提供激励电流热电偶场景可能改用内部温度传感器做冷端补偿PGA 把毫伏级信号放大到接近 ADC 满量程再来做 delta-sigma 转换。转换结果以 24 位补码形式通过 UART 送出STM32 收到后按比例换算成电压最后套用温度线性化公式输出实际温度值。这种设计的核心优势是模块化。后续如果要扩展多路测温只需要增加 ADS122U04 的数量或者切换输入通道MCU 端的处理逻辑不用大改。我在做 HVAC 多分区风管温度监测时就用了类似架构一路 MCU 挂两块 ADS122U04分别测送风、回风、混合段温度结构非常清晰。2. 硬件电路设计与传感器接线2.1 电源、基准与去耦电路设计ADS122U04 的模拟供电我用 3.3V 单电源数字部分也直接用同一路经过 LC 滤波的 3.3V。单片机的数字地会和模拟地产生各种噪声因此在 PCB 布线时把所有模拟地去耦电容的返回路径都引到 ADC 附近的模拟地平面然后通过一个 0Ω 电阻或者磁珠单点连接到数字地。这是我在多块板子上反复验证过的做法比单纯把一个地平面割得七零八落要有效得多。基准源方面ADS122U04 内部基准的温漂指标本来就做得不错对于工业级 -40℃ 到 85℃ 范围足够因此我这里直接用内部基准。如果要更高精度的计量场景可以在 REF 引脚外接一个 2.048V 基准芯片并用 0.1µF 陶瓷电容紧贴引脚去耦。内部基准的好处是省外围缺点是不能像外部基准那样方便地做比例测量但因为 RTD 测温通常不需要绝对电压基准精度更多依赖的是 IDAC 电流和电阻比例关系所以内部基准完全够用。2.2 PT100/PT1000 二线、三线、四线接法对比RTD 测温最经典的坑是导线电阻。以 PT100 为例0℃ 时标称阻值 100Ω温度每升高 1℃ 阻值大约增加 0.385Ω。如果设备放在工业现场传感器到主板的线缆动辄十几米按 0.5Ω 的回路电阻估算那就能引入近 1.3℃ 的误差这在 HVAC 控温里往往不可接受。针对这个误差ADS122U04 内部有两个匹配的 IDAC 电流源非常适合做三线和四线 RTD 接法。四线接法最准两根线走激励电流另外两根线只采样电压不承载电流所以导线压降完全不影响测量结果。三线接法稍微取巧它利用两个相同的 IDAC 电流源分别激励两端的引线电阻从而在差分输入里把导线压降抵消掉一部分电路连接简单精度也够大多数场景用。二线接法我只在实验板上验证通信时用真实项目基本不选因为导线电阻误差太明显了。我用三线 PT100 时是这样配置的一个 IDAC 设置为 500µA接到 RTD 的一根引线上另一个 IDAC 接到另一侧引线然后差分输入分别测量 RTD 两端。这里有个关键细节两个 IDAC 的电流要比一路电流更稳定一定要把 PGA 输入引脚和 IDAC 输出引脚留出足够的电压裕量防止电流源进入饱和。实践经验是 3.3V 供电、500µA 激励、PGA 增益 16 时系统有足够动态范围又不会发生输入电压超出器件允许范围的问题。2.3 热电偶接入与冷端补偿的简化处理热电偶测的是热端和冷端的温差输出电压非常小K 型热电偶典型灵敏度大约 41µV/℃所以 PGA 增益必须拉高否则 24 位 ADC 的优势也发挥不出来。我用 PGA64 或者 128 档位把信号尽量推到接近满量程附近同时冷端必须做补偿。ADS122U04 内置的温度传感器正好可以派上用场。把冷端即热电偶接入端子附近的温度用内部 ADC 通道读出来然后换算成热电势按热电偶分度表反向补偿到测量结果里。这个方法不需要额外的一颗温度传感器芯片调试时省事不少。不过要注意的是内部温度传感器反映的是芯片本身的温度所以热电偶端子要和 ADC 芯片尽量靠近且热耦合良好否则冷端补偿会存在系统性偏差。2.4 STM32F107VC 与 ADS122U04 的 UART 连接细节ADS122U04 的 UART 接口和 STM32F107VC 连接非常简单ADC 的 TX 接 MCU 的 RXADC 的 RX 接 MCU 的 TX两边共地。电平都是 3.3V无需额外转换。我用的是 STM32F107VC 的 USART2配置成 9600bps、8 数据位、1 停止位、无校验这个配置在抗干扰方面比较稳现场线缆 2 米内实测误码率极低。有一点要特别提醒很多工程师习惯把 MCU 的调试串口和数据采集串口复用。这在一开始写驱动时方便但到了现场联调时会被日志数据和 ADC 指令互相干扰非常难受。建议把这两个口独立开哪怕只是板子上预留两个接口。3. 软件驱动与温度换算实现3.1 ADS122U04 寄存器初始化流程ADS122U04 的初始化无非是配置几个关键寄存器输入多路复用、PGA 增益、IDAC 电流大小、数据率、工作模式。代码逻辑很直接核心是要按数据手册把每个 bit 的含义搞清楚不要凭感觉猜测。我这里以三线 PT100 为例初始化时的寄存器配置关键点如下输入 MUX选择差分输入正端接 PT100 的采样引脚负端接另一侧采样引脚。PGA 增益设置为 16配合 500µA IDAC 激励确保 0℃ 到 100℃ 范围的信号电压都不会超过 ADC 满量程。IDAC 电流配置为 500µA开启两个电流源分别输出到两个激励引脚。数据率选择 20SPS内置滤波器能较好抑制 50Hz 工频干扰。内部温度传感器在热电偶测温场景才切换RTD 场景可以关掉。每个寄存器写完以后我习惯回读一次做校验防止 UART 线路干扰导致误写入。这是个很小的习惯但能在现场省下大量排查时间。下面是写入寄存器的代码模板static uint8_t adc_regs[5]; void ADS122U04_WriteConfig(void) { uint8_t cmd[2]; // 先发送 WREG 命令后面跟上要写入的寄存器数量-1 cmd[0] 0x40 | (0 2); // 从寄存器0开始写写成伪代码示意请严格参考手册 cmd[1] 4; // 写5个寄存器因此数量字段为4 HAL_UART_Transmit(huart2, cmd, 2, 10); HAL_UART_Transmit(huart2, adc_regs, 5, 10); HAL_Delay(5); }强调一下具体命令码和字段偏移要以最新数据手册为准不同批次器件可能存在细微差异。我工程里的代码也是先把手册中命令对照表打印出来贴在显示器上写寄存器时逐位核对这个钱不能省。3.2 读取 ADC 数据并进行符号扩展读取转换结果时需要先发送读取命令再接收 3 个字节。这 3 个字节拼成一个 24 位补码最高位是符号位所以拼完以后要手动做符号扩展否则负数温度会算成一个很大的正值一看到这种“温度突然飙到 1000℃”的现象十有八九就是这里出了问题。uint8_t rbuf[3]; uint8_t cmd 0x10; // 示例读取命令具体值按手册确定 HAL_UART_Transmit(huart2, cmd, 1, 10); HAL_UART_Receive(huart2, rbuf, 3, 10); uint32_t raw ((uint32_t)rbuf[0] 16) | ((uint32_t)rbuf[1] 8) | (uint32_t)rbuf[2]; int32_t code; if (raw 0x800000UL) { code (int32_t)(raw | 0xFF000000UL); // 符号扩展 } else { code (int32_t)raw; }拿到 code 以后先换算成实际电压。如果 PGA 增益是 16基准是 2.048V那么电压为double voltage (double)code * 2.048 / 8388608.0 / 16.0;这里 8388608 是 2^23正好对应 24 位补码的半点。做完这一步后面就是纯数学计算了。3.3 从电压到温度的换算如果是 PT100电压换算成电阻很直观用 IDAC 电流值反推R V / I。由于 IDAC 的实际电流会有偏差所以我不直接信任芯片的标称值而是在软件里做一个斜率校正系数用标准电阻标定后写入参数表。这样即使芯片之间电流源有微小差异也能通过软件拉齐。得到 RTD 电阻后用 Callendar-Van Dusen 公式近似反解温度。这个公式是 PT100 线性化的标准做法我通常只取前两项R R0 * (1 AT BT^2)其中 A≈3.9083e-3B≈-5.775e-7。反解出来的是一个带小数点的温度值分辨率远高于 HVAC 控制的需求。如果追求更高精度的整百度标定也可以用查表加线性插值的方法但在 STM32F107VC 上公式计算的占用开销很低直接用公式更省 Flash。热电偶的换算相对麻烦一些因为热电势和温度是非线性的。好在业内标准做法是先查分度表得到冷端温度对应的热电势加上 ADC 测量得到的热电势增量然后再反查总电势对应的温度。我没有在 MCU 里存整张分度表而是用分段三次多项式逼近温度误差控制在 ±0.3℃ 内对 HVAC 应用足够了。4. PCB 布局与抗干扰设计心得4.1 模拟区域与数字区域的板级隔离别看测温系统看似简单PCB 布局稍不注意24 位 ADC 会直接退化成 16 位。我的做法是把 ADS122U04 及其模拟输入、基准去耦、IDAC 电阻全部放在一个明确的模拟区域STM32 和 UART 走线放在另一个方向模拟区域和数字区域之间用一条连续的地线铺铜连接所有数字信号走线都远离 ADC 的模拟输入引脚不要在 ADC 下方穿数字线。另外ADS122U04 的模拟输入端加了一组 RC 低通滤波器串联电阻 1kΩ并联电容 0.1µF截止频率大约 1.6kHz。这个滤波器对高频干扰非常有效因为 delta-sigma ADC 虽然对噪有一定抵抗力但过强的射频干扰还是会影响转换结果。RTD 的激励电流很微弱串联电阻 1kΩ 不会影响测量精度因为 ADC 输入阻抗极高几乎不抽取电流。4.2 电源去耦与 TVS 保护板级电源入口我放了一个 10µF 电解电容加一个 0.1µF 陶瓷电容并联到地ADS122U04 的每个电源引脚再单独放一个 0.1µF 电容尽量贴近引脚放置。MCU 的电源入口也一样。这能有效抑制数字翻转时产生的电源毛刺避免这些毛刺耦合到 ADC 基准端。工业现场还可能出现浪涌和静电。这个项目里我在 ADC 的模拟输入引脚加了一组低压 TVS 管方向对地选型的钳位电压在城市温度传感信号范围内仍能保持不导通。TVS 管会引入微小的漏电流但以 MOSFET 漏电流的量级对测量结果影响可以忽略。做一次雷击浪涌测试发现保护效果比单纯加电阻好太多算是花小钱保平安。4.3 屏蔽线缆的正确接地方法现场传感器线缆一般用屏蔽双绞线。屏蔽层应该单端接地通常接在控制器侧的地而不是传感器侧。两端的屏蔽层都接地反而会形成地环路在差模瞬态噪声下容易出现奇怪读数。我在 HVAC 项目的风管温度传感器就是这么处理的屏蔽层一头在接线盒里悬空另一头在主板地接入点就近接地运行半年没有出现一次读数异常跳变。5. 实测标定与数据验证5.1 零点与满量程标定每块板子焊接完成后先不急着接传感器用高精度标准电阻接到 ADC 输入做一个整机标定。我手里备了一组 0.01% 精度的电阻箱分别模拟 100Ω、1000Ω 和几个中间阻值对应 PT100 的 0℃、100℃ 附近记录 ADC 输出的原始 code。标定的目标是算出 ADC 的斜率和偏置。公式很简单T_corrected (raw_code - offset) * k。Offset 和 k 存进 STM32 的 Flash 参数区里批量生产时每块板子单独标定能消除芯片个体差异。不要指望每颗 ADC 和电阻都是理想器件实测下来同一批板子的原始码值差异能达到几十个 LSB不标定直接换算温度的话误差可能到 0.5℃ 以上。5.2 温度循环测试与环境适应性验证标定完成以后我拿三块板子做了高低温循环测试从 -20℃ 放到恒温箱逐步升到 85℃全程采集 ADC 输出。重点关注的是零点漂移和增益漂移。这个过程能暴露很多硬件隐患比如某个电容在低温下容值变化过大导致环路不稳定又比如某颗电阻温漂超出预期。实测结果ADS122U04 内部基准温漂对这类型应用影响确实不大三块板子的温度读数在全程范围内最差偏差在 0.3℃ 以内。这个表现用于 HVAC 控制绰绰有余工业高温炉电流监测不直接接触火焰也是够用的。真正影响长期稳定性的反而是传感器本身的老化和线缆端子氧化这不在电路板能控制的范围内。5.3 常见读数异常排查思路在现场如果遇到读数不对先别急着改软件。我一般按下面这个顺序排查读数固定为全 0 或全 1多半是差分输入悬空、接线断路或者 PGA 配置不对。读数随机跳变先看电源纹波用示波器测 AVDD 和 DVDD再看 UART 波形是否干净尤其有没有地环路。读数缓慢漂移检查传感器线缆是否有进水、端子是否氧化、IDAC 电流源是否因为负载电压过高进入了非线性区。温度值明显偏高大概率是导线电阻没有被补偿先确认用的是几线制接法再检查 IDAC 是否按预期输出。这四条排查顺序看起来简单但实际能解决 80% 的现场问题。剩下的 20% 大多出在外部环境因素比如传感器安装位置辐射热太强、探头没有完全插入测温孔等。6. 工业与 HVAC 场景落地经验6.1 HVAC 中的典型应用点位与安装注意HVAC 系统里温度测点非常多但常见的就是送风温度、回风温度、混合段温度、冷冻水供回水温度、冷却塔出水和回水温度。这些点位的特点是温度范围窄、变化缓慢对响应速度要求不高但很在意长期稳定性和维护便利性。我在这套系统里做了几路 PT1000 测风管温度因为 PT1000 在同样激励电流下产生的信号电压更高对连接器氧化和轻微污染的抗性比 PT100 好一些。安装时探头要伸到气流中间位置不要贴着风管壁否则测出来的是管壁温度而不是空气温度。这个看似常识的细节我在现场却见过好几次因安装位置不对导致控制环路震荡的情况。6.2 工业现场的接地环路与浪涌问题工业现场比 HVAC 严苛很多变频器、电机、电焊机都会在接地系统里制造大量噪声。温度传感器线缆一旦和设备外壳形成地环路ADC 输入端的共模噪声就会猛增。这时候光靠 ADS122U04 的差分输入本身抗共模能力还不够我会在 ADC 前面增加一个射频共模扼流圈或者在靠近输入端的位置做 Y 电容滤波效果都还不错。还有就是 UART 通信线本身。如果 MCU 和 ADC 之间通过长线连接建议把波特率降下来并且加一个终端电阻。我实测过9600bps 下 2 米长的普通杜邦线通信已经很稳但 115200bps 时波形畸变明显偶尔出现误码。所以工业级布线时宁愿牺牲一点速率也要保证通信可靠性。6.3 软件层面的滤波与保护策略软件滤波是温度测量的最后一道防线。我在 STM32F107VC 上实现了两层处理第一层是 ADC 数据滑动平均滤波窗口取 8 次采样能有效抑制随机噪声第二层是对换算后的温度做变化率限制比如每秒钟温度变化超过一个给定阈值就认为是异常跳变直接丢弃并计时报警。这个保护逻辑在传感器断线或者端子进水时非常有用不至于让上位机收到一个毫无物理意义的 200℃ 然后误动作。另外我还在软件里用到 ADS122U04 的开路检测功能。设置合适的阈值利用 IDAC 流过传感器电阻产生的电压来判断传感器是否存在。一旦检测到开路直接把输出温度设为无效值并置错误标志位后续控制逻辑可以选择继续沿用上次有效值或者进入安全状态。这套机制在工业现场非常依赖因为传感器是外部器件接线端子氧化和人为误拔是常态。经验小结与调试技巧这套 ADS122U04 STM32F107VC 的测温方案我已经在多个项目上复用整体稳定性超出预期。如果让我只总结一条最重要的经验那就是“先把硬件信号链的底噪测清楚再开始写软件”。我见过很多同行一上来就调算法、滤波、PID折腾半天发现模拟前端一个去耦电容没放对这是最费时间的弯路。调试阶段有一个不起眼但非常实用的技巧利用 ADS122U04 的 UART 接口先用串口助手手动发送寄存器配置命令代替 MCU 程序一步一步跑。这样能最快确认硬件连接是不是正常也能快速验证某一寄存器的配置效果。等硬件通路完全没问题再回到 MCU 端把整个驱动流程跑起来。对比直接编译下载调试这个方法的定位时间能缩短一半。最后再说一下选型心得。ADS122U04IPWR 适合项目中对模拟前端集成度要求高、又不想在 SPI 通信上花太多精力的场景。STM32F107VC 的 UART 资源足够性能也完全能跑得起温度换算算法。如果未来要做更多通道或更高采样率可以考虑把 MCU 升级到主频更高的系列但 ADC 前端和软件算法基本可以无缝迁移前期投资不会浪费。
📝

华诺云谱内容团队

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

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

你可能需要的服务

订阅华诺云谱资讯周报

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

↑