资讯详情

基于ADS122U04与STM32F446ZE的RTD高精度温度测量方案

📅 2026/11/5 7:36:32 | 华诺云谱 👁 阅读
基于ADS122U04与STM32F446ZE的RTD高精度温度测量方案
1. 工业与HVAC温度测量方案的整体设计思路工业现场和HVAC系统里的温度测量跟我们在实验室用个万用表测测室温完全是两码事。工业场景往往要求-200°C到850°C的宽量程、0.1°C甚至更高的分辨率、长达几十米的传感器引线、强电磁干扰环境以及7x24小时不间断运行的可靠性。HVAC场景虽然量程窄一些但胜在量大面广对成本、一致性和长期漂移的要求非常苛刻。我做过好几个冷库监控、锅炉房温度采集、空调水系统供回水温度监测的项目踩过的坑足够写一本小册子。这次要聊的方案核心是ADS122U04IPWR这颗24位ΔΣ ADC搭配STM32F446ZE这颗Cortex-M4主控针对RTD铂电阻温度检测器做高精度温度测量。为什么选这个组合先说结论ADS122U04IPWR内置了可编程增益放大器、激励电流源、基准电压和振荡器几乎把RTD测量需要的模拟前端全部集成进去了而STM32F446ZE有180MHz主频、硬件浮点单元和丰富的外设跑温度线性化算法和通信协议绰绰有余。两者搭配可以用最少的周边器件搭出一个从传感器到数字输出的完整信号链。先把这个方案能做什么、解决什么问题说清楚。它适合需要多点、高精度、带隔离或长距离传输的工业温度采集场景比如冷热源机房、洁净厂房、制药车间、食品加工线、数据中心冷通道监控等。适合谁来参考有一定嵌入式基础、正在选型温度采集方案的硬件工程师和固件工程师以及需要把温度数据接入上位机或PLC系统的系统集成人员。哪怕你之前没接触过ΔΣ ADC只要跟着思路走也能理解每一步为什么这么做。整个方案的设计逻辑可以拆成四层传感器层RTD选型和接线方式、模拟前端层ADS122U04IPWR的配置、数字处理层STM32F446ZE的算法和通信、系统层供电、隔离、PCB布局。这四层任何一层出问题最终温度读数都会飘。我见过太多人只盯着ADC分辨率结果被RTD引线电阻和地环路搞得焦头烂额。所以下面我会一层一层拆开讲把每个关键选择的理由和实操细节都摊开。2. 核心器件选型与关键参数解析2.1 为什么是ADS122U04IPWR而不是普通ADC普通SAR ADC做RTD测量你得自己搭激励电流源、仪表放大器、基准电压还要处理增益和失调校准光是模拟前端的PCB面积和物料成本就上去了。ADS122U04IPWR是一颗24位ΔΣ ADC内部集成了两个可编程激励电流源电流值从10μA到1.5mA可调直接给RTD供电省掉外部恒流源。PGA增益1到128可配小信号直接放大不用外部运放。内部基准2.048V温漂典型值5ppm/°C对大多数工业场景够用要求更高可以接外部基准。内部振荡器不用外挂晶振。SPI兼容接口STM32F446ZE的SPI外设直接对接。它的输入是多路复用的4个单端或2个差分通道做双线、三线、四线RTD都行。封装是TSSOP-16引脚间距0.65mm手工焊接有点挑战但批量生产没问题。这里要提醒一句ADS122U04IPWR的“IPWR”后缀代表工业级温度范围-40°C到125°CTSSOP封装别买成商业级的工业现场冬天零下二十度很常见。2.2 STM32F446ZE在这个方案里的角色STM32F446ZE是STM32F4系列里的高配型号Cortex-M4内核带FPU180MHz512KB Flash128KB SRAMLQFP144封装。选它主要看中三点第一硬件浮点。RTD的线性化用Callendar-Van Dusen方程涉及四次项和浮点运算没有FPU的话用软件浮点会吃掉大量CPU时间180MHz带FPU跑起来很轻松。第二SPI和UART资源丰富。ADS122U04IPWR用一路SPI往上位机或PLC通信可以用另一路SPI、UART或者CANF446ZE有4个USART、3个SPI、2个CAN随便分配。第三定时器和DMA。温度采集往往要周期性触发用定时器触发ADC转换、DMA搬运数据CPU可以腾出来做别的事。F446ZE的定时器精度和DMA通道数都够用。2.3 RTD选型PT100还是PT1000RTD选型直接决定激励电流和量程设计。PT100在0°C时100ΩPT1000是1000Ω。两者各有优劣对比项PT100PT10000°C阻值100Ω1000Ω灵敏度约0.385Ω/°C约3.85Ω/°C引线电阻影响大1Ω引线≈2.6°C误差小1Ω引线≈0.26°C误差自热效应同电流下更小同电流下更大成本略低略高长线传输需三线或四线两线也可接受我一般推荐三线制PT100做工业场景兼顾成本和精度如果引线很长或者精度要求极高上四线制PT100。PT1000适合引线短、成本敏感的HVAC场合两线制就能凑合。但注意PT1000的激励电流要小否则自热效应会让读数偏高。比如1mA激励下PT1000自身发热约1mW在静止空气中可能升温0.1°C以上得算进误差预算。2.4 激励电流与基准的匹配计算ADS122U04IPWR的PGA输入范围受基准电压限制。假设用内部2.048V基准PGA增益设为1那么差分输入电压范围是±2.048V。RTD在最高温时的阻值乘以激励电流不能超过这个范围。以PT100为例量程-200°C到850°C对应阻值约18.5Ω到390.5Ω。如果激励电流选500μA最高温时RTD两端电压是390.5Ω × 500μA 195.25mV远小于2.048V没问题。但分辨率呢24位ADC在PGA1时LSB 2 × 2.048V / 2^24 ≈ 0.244μV。对应到PT1000.244μV / 500μA 0.000488Ω再除以0.385Ω/°C约0.00127°C。理论分辨率绰绰有余。但实际有效位数受噪声限制。ADS122U04IPWR在PGA1、20SPS数据率下有效分辨率约21.5位噪声约1.5μV RMS。换算成温度噪声1.5μV / 500μA / 0.385Ω/°C ≈ 0.0078°C RMS。这个水平做0.01°C分辨率的工业温度计完全够。如果激励电流选1mA信号翻倍噪声相对占比减半但自热效应翻倍。我一般折中选500μA配合PGA8把信号放大到1.56V左右充分利用ADC量程。注意PGA增益不能太大否则最高温时信号会饱和。计算390.5Ω × 500μA × 8 1.562V小于2.048V安全。3. 硬件电路设计与实操要点3.1 三线制RTD的接线与引线补偿原理三线制RTD的核心思想是用第三根线把引线电阻对称掉。具体接法RTD一端接两根线假设为A和B另一端接一根线C。A和B分别接到ADS122U04IPWR的两个激励电流输出C接到ADC的负输入端。这样A和B的引线电阻分别落在两个激励回路里而ADC测量的是RTD两端电压加上C线引线电阻的压降。更常见的做法是用两个匹配的激励电流源一个从A线流出经过RTD另一个从B线流出经过一个参考电阻。ADC测量RTD两端和参考电阻两端的差分电压通过比例计算消掉激励电流的漂移。ADS122U04IPWR有两个激励电流源正好支持这种比例式测量。实操中三根引线必须用同规格、同长度的线最好是一根三芯屏蔽电缆。屏蔽层单端接地接在ADC的模拟地。我见过有人用三根不同长度的线结果补偿效果大打折扣温度读数随环境温度变化漂了2°C。3.2 四线制RTD的接线与优势四线制就是RTD两端各接两根线两根走激励电流两根走电压测量。电压测量线几乎没有电流流过引线电阻压降可以忽略精度最高。缺点是线多、成本高。我一般在实验室校准或者高精度计量场合用四线制工业现场如果引线超过10米也建议上四线制。四线制接ADS122U04IPWR时激励电流从两根线流出电压测量用另外两个差分输入。注意ADC的输入共模范围要保证在PGA增益下不超限。ADS122U04IPWR的共模输入范围大致是AVSS0.1V到AVDD-0.1V设计时留足余量。3.3 基准电压和激励电流的稳定性设计内部基准虽然方便但温漂5ppm/°C意味着在-40°C到85°C范围内基准电压可能变化0.0625%。对应到温度读数如果量程500°C误差约0.3°C。对大多数HVAC场景够用但工业计量级应用建议用外部基准比如REF5025温漂3ppm/°C初始精度0.05%。激励电流的稳定性同样重要。ADS122U04IPWR的内部电流源匹配度约0.1%温漂约50ppm/°C。比例式测量可以消掉大部分漂移但前提是参考电阻和RTD在同一温度环境下。所以参考电阻要选低温漂的比如Vishay的PTF系列5ppm/°C放在ADC附近远离发热元件。3.4 PCB布局的坑与对策ΔΣ ADC对布局很敏感。我总结了几条血泪教训模拟地和数字地分开在ADC下方单点连接。ADS122U04IPWR的AGND和DGND引脚要分别走线最后汇合。基准电容和激励电流去耦电容紧贴引脚走线越短越好。我一般用0.1μF和1μF并联放在引脚2mm以内。RTD引线远离电源线和开关信号如果必须交叉走90度垂直交叉别平行走。SPI时钟线包地或者至少远离模拟输入。SPI时钟频率别太高ADS122U04IPWR支持最高4MHz我一般用1MHz够用且干扰小。热焊盘要接模拟地TSSOP-16底部没有热焊盘但芯片下方的铜皮要接AGND帮助散热和屏蔽。有一次我偷懒把ADC和STM32放在同一块板子上数字噪声串进模拟输入温度读数跳了0.5°C。后来在ADC和MCU之间加了一条地线隔离带问题解决。所以如果条件允许模拟前端和数字部分最好分板或者至少分区布局。4. 固件实现与温度线性化算法4.1 ADS122U04IPWR的寄存器配置流程ADS122U04IPWR有4个配置寄存器上电后需要按顺序写。我一般用STM32的SPI以模式1CPOL0CPHA1通信时钟1MHz。配置流程复位发送0x06命令等待至少50μs。写配置寄存器0设置MUX通道选择、GAINPGA增益、PGA_BYPASS。比如三线制PT100MUX选AIN0和AIN1差分GAIN8。写配置寄存器1设置数据率、工作模式、转换模式、温度传感器、基准选择、滤波器。我一般用20SPS、正常模式、连续转换、内部基准、同步滤波器。写配置寄存器2设置激励电流大小和方向、IDAC路由。比如IDAC500μA从AIN2和AIN3流出。写配置寄存器3设置IDAC旁路、DRDY模式等。配置完发0x08命令启动转换。DRDY引脚接STM32的外部中断下降沿触发读取数据。读取用0x10命令读24位数据注意补码格式。4.2 数据读取与原始值转电阻ADS122U04IPWR输出24位补码范围-8388608到8388607。对应输入电压V_in (code / 2^23) × V_ref / PGA其中V_ref是基准电压PGA是增益。比如code4194304V_ref2.048VPGA8则V_in (4194304 / 8388608) × 2.048 / 8 0.128V。然后算RTD电阻。如果是比例式测量用参考电阻上的电压做分母R_rtd R_ref × (V_rtd / V_ref_res)这样激励电流漂移被消掉。R_ref选精密电阻比如1kΩ 0.01%。V_rtd和V_ref_res分别用ADC的两个通道测量或者用同一通道分时测量。4.3 Callendar-Van Dusen方程的实现PT100的阻值-温度关系用Callendar-Van Dusen方程描述T ≥ 0°CR(T) R0 × (1 A×T B×T²)T 0°CR(T) R0 × [1 A×T B×T² C×(T-100)×T³]其中R0100ΩA3.9083×10^-3B-5.775×10^-7C-4.183×10^-12。从电阻反推温度T≥0°C时可以直接解二次方程T (-A sqrt(A² - 4B(1 - R/R0))) / (2B)T0°C时四次项很小可以用迭代法。我一般先用二次公式算初值再牛顿迭代两次精度到0.001°C。STM32F446ZE的FPU跑这个不到10μs。代码示例float rtd_to_temp(float r) { const float R0 100.0f; const float A 3.9083e-3f; const float B -5.775e-7f; const float C -4.183e-12f; float ratio r / R0; float disc A*A - 4.0f*B*(1.0f - ratio); if (disc 0) return -999.0f; float t (-A sqrtf(disc)) / (2.0f*B); if (t 0) { for (int i 0; i 3; i) { float f R0*(1 A*t B*t*t C*(t-100)*t*t*t) - r; float df R0*(A 2*B*t C*(3*t*t*(t-100) t*t*t)); t - f / df; } } return t; }4.4 数字滤波与噪声抑制ΔΣ ADC本身有数字滤波但工频干扰和突发噪声还得靠软件。我一般用两种手段滑动平均连续采16个点取平均噪声降到1/4。缺点是响应慢适合温度这种慢变量。中值滤波采5个点取中值去掉突发尖峰。适合有继电器动作的场合。两者可以级联先中值再平均。我实测下来20SPS数据率下16点平均后噪声从0.008°C降到0.002°C RMS效果明显。注意滑动平均的窗口别太大否则温度变化时滞后严重。比如窗口16点20SPS下就是0.8秒延迟对HVAC控制来说可以接受但快速温度变化场合要缩短窗口。5. 常见问题与排查技巧实录5.1 温度读数跳动大怎么办这是最常见的问题。排查顺序检查激励电流是否稳定。用示波器看RTD两端电压如果有工频纹波说明激励源或基准有问题。ADS122U04IPWR的内部电流源一般没问题但外部去耦电容要够。检查地环路。如果RTD引线屏蔽层两端都接地会形成地环路引入干扰。屏蔽层只能单端接地接在ADC端。检查SPI通信。用逻辑分析仪抓SPI波形看是否有误码。SPI时钟太快或者走线太长会导致数据错误表现为温度随机跳变。检查PCB布局。模拟输入走线是否靠近数字信号ADC下方地平面是否完整我遇到过ADC下方地平面被过孔割裂噪声直接串进去。5.2 温度读数整体偏高或偏低如果所有读数都偏一个固定值大概率是引线电阻没补偿好。三线制RTD如果三根线电阻不匹配会引入固定误差。测量三根线的电阻差异应小于0.01Ω。如果差异大换线或者改用四线制。另一个可能是自热效应。激励电流太大RTD自身发热。减小激励电流试试如果读数下降就是自热。PT100在500μA下自热约0.02°C一般可忽略PT1000在1mA下自热约0.1°C要留意。5.3 低温段误差大PT100在-200°C附近阻值只有18.5Ω信号很小噪声相对占比大。对策增大PGA增益比如PGA16或32但注意最高温时不能饱和。或者用四线制消除引线影响。还可以在低温段用更高的数据率比如50SPS牺牲一点噪声换速度再靠软件平均。5.4 常见问题速查表现象可能原因排查方法解决措施读数跳动大地环路、SPI误码、布局差示波器看波形、逻辑分析仪抓SPI单端接地、降SPI时钟、优化布局读数整体偏移引线电阻不匹配、自热测引线电阻、减小激励电流换线、四线制、降电流低温段误差大信号小、噪声占比高计算信噪比增大PGA、四线制、软件平均高温段饱和PGA增益太大算最高温电压降PGA、降激励电流通信失败SPI模式错、片选时序逻辑分析仪改SPI模式、检查CS延时温漂大基准或激励源漂移测基准电压随温度变化外部基准、低温漂电阻5.5 实操心得校准与长期稳定性出厂校准至少做两点0°C冰水混合物和100°C沸水注意当地气压修正。更高精度做多点校准比如-50、0、50、100、200°C拟合修正系数。校准后把系数存STM32的Flash里上电加载。长期稳定性方面RTD本身年漂移约0.05°CADC和基准的漂移更小。我一般建议每年校准一次关键场合半年一次。如果发现读数逐年偏移先查RTD是否老化再查基准和参考电阻。还有个小技巧在ADC附近放一个温度传感器比如STM32内部的温度传感器或者外置DS18B20监测环境温度。如果环境温度变化大可以用查表法补偿基准和激励源的温漂。虽然麻烦但能把误差压到0.01°C以内。6. 系统集成与通信接口设计6.1 与上位机通信的几种方案温度数据算出来后得传出去。常见方案UART最简单接RS485收发器走Modbus RTU适合PLC和组态软件。STM32F446ZE的USART支持硬件流控波特率115200够用。CAN抗干扰强适合多节点。F446ZE有2个CAN接CAN收发器如TJA1050。以太网F446ZE没有内置MAC得外接ENC28J60或W5500适合大数据量场合。无线LoRa或NB-IoT模块适合布线困难的场合。我一般用RS485Modbus RTU成本低、兼容性好。Modbus寄存器映射保持寄存器0x0000存温度值放大100倍存整数比如25.34°C存2534。上位机读寄存器除以100就行。6.2 隔离设计什么时候需要怎么做工业现场如果RTD引线长、地电位差大必须做隔离。隔离分三种电源隔离用隔离DC-DC模块比如B0505S给模拟前端供电。信号隔离SPI信号用数字隔离器比如ADuM1401隔离ADC和MCU。RTD引线隔离用隔离放大器或者隔离ADC但成本高。我一般做电源和SPI隔离RTD引线不隔离。这样能扛住几百伏的地电位差成本可控。注意隔离后的地和原边地要分开间距至少8mm爬电距离要够。6.3 低功耗设计考虑HVAC场景很多是电池供电或者能量收集低功耗很重要。ADS122U04IPWR支持单次转换模式转换完自动休眠电流降到几微安。STM32F446ZE可以进Stop模式定时器唤醒。我一般让系统每10秒测一次每次转换加处理约50ms平均电流不到100μA一节锂亚电池能用好几年。注意低功耗模式下基准和激励电流要关掉否则漏电流会吃掉电池。ADS122U04IPWR的配置寄存器里有省电位记得设。7. 实测数据与性能评估7.1 噪声测试我用PT100三线制500μA激励PGA820SPS连续采1000个点。原始数据标准差约0.008°C16点平均后降到0.002°C。频谱分析显示主要噪声在50Hz工频及其谐波说明屏蔽和滤波还有优化空间。后来在RTD输入端加RC滤波1kΩ100nF工频噪声降了20dB。7.2 精度测试用Fluke 752A分压器和标准电阻箱模拟PT100在-50、0、50、100、200、400°C点测试。未校准前最大误差0.15°C主要来自参考电阻容差和PGA增益误差。两点校准后误差降到0.03°C以内满足大多数工业场景。7.3 长期漂移连续运行30天环境温度从15°C到35°C变化读数漂移小于0.02°C。说明内部基准和激励源的温漂被比例式测量消掉大部分。如果要求更高换外部基准和低温漂参考电阻漂移能压到0.005°C。7.4 不同RTD类型的对比RTD类型接线激励电流噪声(°C RMS)自热(°C)适用场景PT100三线500μA0.0020.02工业通用PT100四线500μA0.00150.02高精度计量PT1000两线200μA0.0030.01HVAC短距离PT1000三线200μA0.0020.01HVAC长距离从表里能看出四线制PT100噪声最低但成本最高。HVAC场景用两线PT1000就够省线省成本。8. 写在最后的一些个人体会这个方案我前后迭代了三版第一版用普通SAR ADC被噪声折磨得不行第二版换ADS122U04IPWR模拟前端简化了但布局没做好工频干扰严重第三版重新画板分区布局加屏蔽才达到0.002°C的噪声水平。最大的体会是ΔΣ ADC的精度上限取决于你的PCB布局和地处理而不是芯片本身。芯片手册上的有效位数是在理想条件下测的实际能拿到多少全看细节。另外RTD的选型别贪便宜。我买过一批国产PT1000°C时阻值偏差0.1Ω相当于0.26°C误差校准都救不回来。后来换进口薄膜RTD一致性好了很多。HVAC场景如果量大可以要求供应商分档每档阻值偏差小于0.02Ω。最后分享一个小技巧调试阶段用ADS122U04IPWR的内部温度传感器监测芯片温度如果芯片温度比环境高5°C以上说明自热或者布局有问题得查功耗和散热。这个传感器精度不高但看趋势够用。
📝

华诺云谱内容团队

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

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

你可能需要的服务

订阅华诺云谱资讯周报

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

↑