资讯详情

资讯详情

基于ADS122U04与STM32L031C6的高精度RTD温度采集方案

工业现场和楼宇暖通系统里温度测量这件事看起来简单做起来全是细节。PT100、PT1000 这类 RTD 传感器本身精度可以做到很高但如果你直接把它的微弱电阻变化接到普通 ADC 上基本等于把精度扔进垃圾桶。我最近用 ADS122U04IPWR 搭配 STM32L031C6 做了一套温度采集方案专门针对工业变送器和 HVAC 控制器这类场景实测下来在 -50°C 到 200°C 范围内能做到 ±0.1°C 级别的稳定性。这套组合的核心思路是用一颗 24 位、内置 PGA 和双匹配电流源的 ΔΣ ADC 把模拟前端做到极简再用一颗低功耗 Cortex-M0 做线性化和通信整体 BOM 少、校准简单、抗干扰能力强。下面我把整个设计过程拆开讲包括为什么选这两颗芯片、RTD 采样电路怎么搭、寄存器怎么配、误差从哪来、怎么校准以及我在实测中踩过的坑。1. 为什么 RTD 测量不能直接上普通 ADC1.1 RTD 的信号特征决定了前端架构PT100 在 0°C 时是 100Ω温度系数大约 0.385Ω/°C。也就是说温度每变化 1°C电阻只变化不到 0.4Ω。如果你用 1mA 激励电流对应电压变化只有 385μV/°C。这个信号幅度非常小而且 RTD 本身还有引线电阻——两线制下一根 0.5 米的普通导线就有几十毫欧折算成温度误差可能超过 0.1°C。更麻烦的是RTD 的电阻变化相对于绝对电阻值来说很小。100Ω 的基值上叠加几百毫欧的变化相当于在一个大直流偏置上提取微小交流分量。普通 12 位 ADC 在 3.3V 参考下1 LSB 就是 0.8mV对应约 2°C 的分辨率根本不够看。就算用 16 位 ADC1 LSB 约 50μV对应 0.13°C勉强能用但前提是参考电压和激励电流必须非常干净。所以 RTD 测量的核心矛盾是信号小、共模大、引线误差不可忽略。要解决这个问题要么用高分辨率 ADC 加精密激励要么用专用 AFE。ADS122U04 属于前者它把 24 位 ΔΣ 调制器、PGA、激励电流源、参考切换全部集成进去相当于把专用 AFE 的功能做进了一颗通用 ADC 里。1.2 比率式测量为什么是首选RTD 测量有两种基本架构绝对测量和比率式测量。绝对测量是用一个精密参考电压去量化 RTD 上的电压这时候激励电流的精度直接决定测量精度。1mA 激励电流如果有 0.1% 的误差100Ω 上就产生 100μΩ 的等效电阻误差对应 0.26°C 的偏差。要压到这个水平激励源本身得是 0.01% 级别的成本很高。比率式测量则聪明得多让同一个激励电流同时流过 RTD 和一颗精密参考电阻然后用参考电阻上的电压作为 ADC 的参考。这样 ADC 的输出码 (I×R_RTD) / (I×R_REF) × 满量程 R_RTD / R_REF × 满量程。激励电流 I 被约掉了它的温漂、长期漂移都不再直接影响结果只要在单次转换周期内保持稳定即可。ADS122U04 内部有两路匹配的 IDAC 电流源正好可以一路驱动 RTD、一路驱动参考电阻或者用同一路电流串联流过两者实现真正的比率式测量。这个思路的代价是参考电阻必须非常精密。我一般用 0.01% 精度、5ppm/°C 温漂的金属箔电阻比如 Vishay 的 YR 系列或者 Susumu 的 RG 系列。虽然单颗要几块钱但比起用 0.01% 的激励源整体成本还是低得多而且温漂匹配更好。1.3 ADS122U04 在这个场景里的定位ADS122U04 是 TI 的一款 24 位、4 通道、ΔΣ ADC内置 PGA 增益 1 到 128两路匹配 IDAC 电流源10μA 到 1.5mA多档可调还有内部 2.048V 参考和温度传感器。它的 UART 接口注意是 UART 兼容的 SPI不是标准 SPI在隔离场合特别方便因为只需要两根信号线加一根地线就能跨隔离栅。对比一下常见方案如果用 ADS124S08那是 8 通道、SPI 接口适合多路 RTD 扫描如果用 MAX31865那是专用 RTD 前端集成度更高但灵活性差只能测 RTD不能复用做其他模拟输入。ADS122U04 的优势在于它是一颗通用 ADC你可以在同一块板上用它测 RTD、测热电偶、测桥式传感器甚至做 4-20mA 电流环的采样对于 HVAC 控制器这种需要多种模拟输入的设备来说物料复用率很高。STM32L031C6 则是 ST 的 Cortex-M0 低功耗 MCU32KB Flash、8KB RAMTSSOP20 封装运行功耗低至 76μA/MHzStop 模式下 0.5μA 左右。它没有 FPU但做 RTD 的线性化和温度补偿完全够用因为这些都是定点或者查表运算。它的 UART 和 SPI 外设齐全正好跟 ADS122U04 对接。2. 硬件前端从 RTD 到 ADC 的完整链路2.1 三线制 RTD 的引线补偿原理工业现场 RTD 通常用三线制或四线制。四线制最准但多一根线布线成本高。三线制是折中方案两根引线分别接 RTD 两端第三根从 RTD 一端再引出一根接到 ADC 的另一个输入。假设三根线材质相同、长度相同、温度相同那么引线电阻在两次测量中可以被抵消。具体接法是IDAC1 从 AIN0 流出经过引线 1 到 RTD 一端再经过 RTD 到另一端经过引线 2 到 AIN1然后从 AIN1 内部流到 AIN2 或者外部回到地。同时AIN3 通过引线 3 接到 RTD 的同一端跟引线 1 同侧。测量时先测 AIN0-AIN1 之间的电压包含 RTD 加两根引线再测 AIN0-AIN3 之间的电压只包含引线 1两者相减就得到纯 RTD 电压。ADS122U04 支持内部多路复用器切换可以在一次转换序列里自动完成这两个测量不需要外部模拟开关。实际布线时三根引线必须走同一根电缆、同一对绞合保证温度一致。如果引线经过不同温度区域补偿效果会打折扣。我见过一个案例客户把三根线分开走线槽结果靠近热源的那根线温度高了 5°C补偿后反而引入了额外误差。2.2 参考电阻的选型和布局参考电阻 R_REF 的选型直接决定系统精度。假设用 1mA 激励PT100 在 200°C 时约 175.86Ω压降 175.86mV。参考电阻如果选 1.65kΩ压降 1.65V接近 ADS122U04 内部 2.048V 参考的上限能充分利用 ADC 动态范围。但要注意PGA 增益不能设太高否则参考电压会超限。我一般选 R_REF 1.62kΩ 或 1.65kΩ0.01% 精度5ppm/°C。封装用 0805 或 1206 的金属箔电阻不要用厚膜电阻厚膜的温漂和长期稳定性差很多。布局上R_REF 要靠近 ADC 的 REFP0/REFN0 引脚走线短而粗下面铺地屏蔽。R_REF 的接地端要单独走一根线回到 ADC 的 AGND不要跟数字地混在一起。还有一个细节R_REF 的功耗。1mA 流过 1.65kΩ 是 1.65mW0805 封装完全能承受但如果你用 1.5mA 激励功耗到 3.7mW温升会稍微大一点。金属箔电阻的温漂是 5ppm/°C1°C 温升带来 8μΩ 误差对应 0.02°C可以接受。但如果用厚膜电阻100ppm/°C 的温漂1°C 温升就是 0.16Ω对应 0.4°C 误差完全不能忍。2.3 抗混叠滤波和共模滤波ADS122U04 是 ΔΣ ADC内部有数字滤波器但模拟输入端仍然需要简单的 RC 滤波来抑制高频干扰。我在每个模拟输入脚上串一个 1kΩ 电阻再对地接一个 100nF 电容截止频率约 1.6kHz。这个频率远高于 RTD 的信号带宽温度变化通常不到 1Hz但能有效滤掉开关电源和电机驱动带来的高频噪声。注意这两个 1kΩ 电阻要匹配误差 0.1% 以内否则会引入共模到差模的转换误差。电容用 C0G 或 X7R 材质不要用 Y5VY5V 的容值随电压和温度变化太大。如果现场电磁环境特别恶劣可以在 ADC 输入前再加一级共模扼流圈但要注意扼流圈的不平衡度差模分量会直接变成误差。ADS122U04 的输入是差分输入共模电压范围是 AVSS 0.1V 到 AVDD - 0.1V。在比率式测量里共模电压大约在 (V_RTD V_REF)/2 附近只要 AVDD 是 3.3V 或 5V都在范围内。但如果用 5V 供电IDAC 的 compliance voltage 要留够1mA 流过 1.65kΩ 加 175Ω 是 1.825V加上引线和走线电阻2V 左右5V 供电绰绰有余。3. ADS122U04 的寄存器配置与采样时序3.1 上电初始化和寄存器映射ADS122U04 的寄存器不多但每个位都要配对。上电后先等至少 2ms 让内部参考稳定然后发 RESET 命令0x06再配置寄存器。关键寄存器有四个配置寄存器 0 到 3。配置寄存器 0地址 0x00控制多路复用器、增益、数据速率。我一般设 MUX 0001AIN0 和 AIN1 差分GAIN 000增益 1DR 001120SPS或 010045SPS。20SPS 对应 50Hz/60Hz 抑制最好因为 ΔΣ 的 sinc 滤波器在 20SPS 时同时抑制 50Hz 和 60Hz 及其谐波。HVAC 场景温度变化慢20SPS 完全够用而且噪声最低。配置寄存器 1地址 0x01控制数据速率、工作模式、转换模式、温度传感器、 burnout 电流源、参考选择。我设 VREF 00外部参考 REFP0/REFN0CM 0单次转换MODE 00正常模式TS 0关闭内部温度传感器BCS 0关闭 burnout 电流源。单次转换模式适合低功耗场景MCU 可以大部分时间睡觉需要测量时唤醒 ADC 做一次转换。配置寄存器 2地址 0x02控制 IDAC 电流大小、IDAC 路由、DRDY 模式。IDAC 1001mAIDAC1_ROUTE 000AIN0IDAC2_ROUTE 001AIN1或者关闭第二路。如果用两路 IDAC 分别驱动 RTD 和参考电阻就设 IDAC1 到 AIN0IDAC2 到 AIN2参考电阻接在 AIN2 和地之间。如果用单路 IDAC 串联驱动就只开 IDAC1参考电阻串在 RTD 回路里。配置寄存器 3地址 0x03控制 IDAC 路由的第二部分、DRDY 引脚行为、CRC 校验等。我一般开 CRC 校验因为 UART 接口在工业环境里容易受干扰CRC 能防止误码导致错误配置。3.2 单次转换的完整时序单次转换的流程是这样的MCU 拉低 CS发 START/SYNC 命令0x08ADC 开始转换。20SPS 下转换时间约 50msDRDY 引脚会在转换完成后拉低。MCU 检测到 DRDY 下降沿后发 RDATA 命令0x10然后读 3 个字节的数据。读完数据后ADC 自动回到待机状态等待下一次 START。这里有个坑ADS122U04 的 UART 接口在 CS 拉高后需要至少 4 个 fCLK 周期才能识别下一个命令。如果你用 SPI 外设驱动它CS 的时序要配好不能太快。我一开始用 STM32 的硬件 SPICS 由硬件控制结果发现连续发命令时偶尔丢命令。后来改成软件控制 CS每个命令之间加 10μs 延时问题解决。另一个坑是 DRDY 的极性。ADS122U04 的 DRDY 默认是低有效但配置寄存器 3 的 DRDY_MODE 位可以改成高有效。如果你用 STM32 的外部中断要确认触发边沿跟 DRDY 极性匹配。我一般用下降沿触发然后在中断里读数据。3.3 数据格式和符号扩展ADS122U04 输出 24 位二进制补码。正满量程是 0x7FFFFF负满量程是 0x800000。在比率式测量里RTD 电压总是正的因为 IDAC 电流方向固定所以输出码在 0 到 0x7FFFFF 之间。但如果你用两路 IDAC 或者切换 MUX 测量引线电阻可能会出现小的负值所以符号扩展要做对。STM32L031C6 读到的 3 个字节要拼成 int32_t然后做符号扩展。如果最高字节的 bit7 是 1说明是负数要把高 8 位补 0xFF。这个操作在 C 语言里可以用(int32_t)((data 8) | 0xFF000000)或者更安全的if (data 0x800000) data | 0xFF000000;。转换公式是V_RTD (code / 2^23) × V_REF / PGA。在比率式测量里V_REF I × R_REFV_RTD I × R_RTD所以 R_RTD (code / 2^23) × R_REF / PGA。注意这里的 code 是 24 位有符号数2^23 是 8388608。如果 PGA 1R_REF 1.65kΩ那么 R_RTD code × 1.65k / 8388608。code 每变化 1R_RTD 变化约 0.197mΩ对应温度约 0.0005°C分辨率绰绰有余。4. 从电阻到温度线性化与误差补偿4.1 Callendar-Van Dusen 方程的定点实现RTD 的电阻-温度关系用 Callendar-Van Dusen 方程描述。0°C 以上R_T R_0 × (1 A×T B×T²)。0°C 以下还要加 C×T³ 项。对于 PT100A 3.9083e-3B -5.775e-7C -4.183e-12。这些系数是标准化的但每颗 RTD 的实际系数会有微小差异高精度场合需要单独校准。STM32L031C6 没有 FPU直接跑浮点运算会慢但 20SPS 的采样率下50ms 做一次浮点运算完全来得及。我实测用单精度浮点做 CvD 反解一次约 200μsCPU 占用率不到 1%。如果你要跑多路或者更高采样率可以改成定点或者查表加插值。反解温度时0°C 以上可以用二次方程求根公式T (-A sqrt(A² - 4B(1 - R/R_0))) / (2B)。0°C 以下没有解析解要用迭代或者查表。我一般用牛顿迭代三次就能收敛到 0.001°C。迭代初值用 0°C 以上的公式算然后往下修。4.2 引线电阻补偿的实际操作三线制补偿的公式是R_RTD R_measure1 - R_measure2其中 R_measure1 是 AIN0-AIN1 的测量结果RTD 加两根引线R_measure2 是 AIN0-AIN3 的测量结果一根引线。但这里有个前提三根引线电阻完全相等。实际电缆的引线电阻会有 1% 到 2% 的差异补偿后残留误差约 0.01Ω 到 0.02Ω对应 0.03°C 到 0.05°C。如果要求更高可以用四线制或者在三线制基础上做二次校准。二次校准的方法是在已知温度点比如 0°C 冰水混合物和 100°C 沸水测量算出残留的引线误差然后在软件里做偏移补偿。这个方法在实验室里很有效但现场校准条件有限一般做到三线制补偿就够了。还有一个细节ADS122U04 的 MUX 切换后内部 PGA 和 ΔΣ 调制器需要建立时间。如果你在单次转换序列里连续切换 MUX两次转换之间要留足够的建立时间。20SPS 下每次转换 50ms建立时间已经包含在内不需要额外延时。但如果你用更高数据速率比如 1000SPS切换 MUX 后要等至少 4 个转换周期才能读稳定数据。4.3 自热误差和激励电流的选择RTD 测量有个绕不开的问题激励电流会在 RTD 上产生焦耳热导致 RTD 自身温度高于环境温度这叫自热误差。自热误差的大小取决于 RTD 的耗散系数通常用 mW/°C 表示和激励电流的功率。比如一颗 PT100 在静止空气中的耗散系数约 5mW/°C1mA 激励下功耗 I²R 1mA² × 100Ω 0.1mW自热误差 0.02°C。如果电流加到 1.5mA功耗 0.225mW自热误差 0.045°C。如果 RTD 封装很小或者周围有隔热材料耗散系数更低自热误差更大。所以激励电流不是越大越好。1mA 是个比较平衡的选择信号幅度够大100mV 左右自热误差可接受0.02°C 到 0.05°C。如果追求更低自热可以用 500μA 或者 250μA但信号幅度减半对 ADC 噪声要求更高。ADS122U04 在 PGA 1、20SPS 下的有效噪声约 1μV RMS对应 0.0026°C所以即使 250μA 激励信噪比也足够。我一般建议客户用 1mA然后在软件里做自热补偿如果知道 RTD 的耗散系数和激励电流可以算出理论自热误差从结果里减掉。但这个方法需要知道耗散系数而耗散系数跟安装方式有关现场很难准确获得。更实际的做法是选低功耗 RTD 或者间歇激励——只在测量时开 IDAC测完就关占空比很低平均自热可以忽略。5. 实测中的噪声、漂移和校准策略5.1 噪声来源和抑制手段实测中噪声主要来自几个方面ADC 本身的量化噪声和热噪声、参考电阻的热噪声、RTD 引线拾取的干扰、电源纹波。ADS122U04 在 20SPS、PGA 1 下的噪声约 1μV RMS这是数据手册标称值实际板子上如果布局不好可能到 5μV 甚至 10μV。抑制噪声的第一道防线是布局。模拟部分和数字部分要分开AGND 和 DGND 单点连接。ADS122U04 的 AVDD 和 DVDD 要分别加 100nF 和 1μF 去耦尽量靠近引脚。IDAC 的输出走线要远离数字信号线最好用地线包起来。参考电阻的走线要对称REFP0 和 REFN0 的走线长度要一致。第二道防线是数字滤波。ADS122U04 内部有 sinc 滤波器20SPS 时对 50Hz 和 60Hz 的抑制超过 100dB。但如果你用 45SPS 或者更高数据速率50Hz 抑制会下降。我一般用 20SPS虽然慢但 HVAC 场景不需要快。如果确实需要快可以用 50SPS 或 60SPS这两个速率对单一工频抑制很好但对另一个工频抑制差。更好的办法是用 20SPS 加外部数字滤波比如滑动平均。第三道防线是软件滤波。我在 STM32 里做一个 16 点的滑动平均等效噪声降低 4 倍。如果温度变化很慢还可以做 IIR 滤波截止频率 0.1Hz。但要注意滤波会引入滞后如果用于闭环控制滞后太大会影响稳定性。我一般用滑动平均滞后小实现简单。5.2 长期漂移和校准周期工业产品的长期漂移主要来自参考电阻和 RTD 本身。金属箔电阻的年漂移约 25ppm对应 0.006°C/年可以忽略。RTD 的长期漂移跟使用温度有关高温下铂膜会缓慢氧化漂移可能到 0.1°C/年。所以高精度场合建议每年校准一次。校准方法有两种单点校准和两点校准。单点校准是在 0°C 冰水混合物里测一个偏移然后全量程减掉。这个方法只能修正偏移不能修正增益误差。两点校准是在 0°C 和 100°C 各测一个点算出偏移和增益然后做线性修正。两点校准能修正大部分误差但 RTD 的非线性CvD 方程的二次项是固定的不需要校准。我在实测中发现ADS122U04 的偏移漂移很小20°C 到 50°C 范围内偏移变化不到 1μV对应 0.0026°C。增益漂移主要来自参考电阻5ppm/°C 的电阻在 30°C 温变下带来 150ppm 增益误差对应 0.015°C在 100°C 点。所以整体温漂在 0.02°C 以内不需要频繁校准。5.3 现场干扰的排查案例有一次客户反馈温度读数偶尔跳变 2°C 到 3°C持续时间很短。我到现场排查发现跳变跟一台变频器启动同步。用示波器看 ADC 输入发现变频器启动时RTD 引线上有几十毫伏的尖峰。这个尖峰被 ADC 采样到导致读数跳变。解决方案是在 RTD 引线进入 PCB 的地方加 TVS 管和共模扼流圈同时在软件里加尖峰抑制如果连续三次采样的差值超过阈值就丢弃这次采样用上一次的值。这个阈值设成 0.5°C既能抑制干扰又不会误判真实的快速温度变化。另一个案例是读数缓慢漂移一天内漂移 1°C。排查发现是参考电阻旁边的稳压芯片发热导致参考电阻温度升高。把参考电阻移到远离热源的位置并在下面铺铜散热问题解决。这个案例说明布局时不仅要考虑电气连接还要考虑热分布。6. STM32L031C6 的固件架构和低功耗设计6.1 主循环和中断的职责划分STM32L031C6 的固件我分成三层底层驱动、测量任务、通信任务。底层驱动负责 ADS122U04 的寄存器读写和 DRDY 中断处理。测量任务在 DRDY 中断里触发读数据、做线性化、更新温度值。通信任务在主循环里跑处理 UART 命令和 Modbus 协议。DRDY 中断的优先级要设高但不能太高否则会阻塞其他中断。我一般设成优先级 1UART 中断设成优先级 2。DRDY 中断里只做最少的操作读 3 个字节存到缓冲区置一个标志位。线性化和滤波在主循环里做避免中断里做浮点运算。主循环的结构是检查 DRDY 标志如果有新数据做线性化和滤波更新温度寄存器然后处理 UART 命令最后进入低功耗模式等待下一个中断。低功耗模式用 Stop 模式RTC 保持运行UART 用中断唤醒。实测下来20SPS 采样率下平均电流约 50μA用一颗 CR2032 电池能跑好几年。6.2 UART 接口的隔离和防护工业现场的 UART 通信线通常要隔离防止地环路和浪涌。我用的是数字隔离器加 TVS 管的方案STM32 的 UART 引脚先经过数字隔离器比如 ADuM1201 或者 Si8620再经过 TVS 管和限流电阻最后接到接线端子。隔离器的电源也要隔离用一颗小功率的隔离 DC-DC 或者光耦加分立电路。ADS122U04 的 UART 接口本身也可以隔离但它的 UART 是跟 SPI 兼容的隔离起来比标准 UART 麻烦。我一般把 ADS122U04 放在隔离栅的 MCU 侧不隔离 ADC 本身只隔离对外的通信接口。这样 ADC 的参考地和 MCU 的地是同一个避免了隔离带来的参考电压问题。如果 RTD 本身在很远的地方引线很长可以考虑在 RTD 侧加一个远程前端用差分信号传回来。但这样会增加成本和复杂度一般 10 米以内的引线三线制直接接过来就行。超过 10 米建议用四线制或者加远程变送器。6.3 固件中的自检和故障诊断工业产品需要自检功能能在传感器断线、短路、ADC 故障时给出报警。ADS122U04 有两个 burnout 电流源可以注入一个小电流0.5μA 到 10μA到 RTD 回路如果 RTD 断线输入电压会饱和到 AVDD 或 AVSSADC 读数会超范围。我在上电自检时开 burnout 电流源测一次如果读数超范围就报断线故障。短路检测靠测量正常范围内的异常值。如果 RTD 短路电阻接近 0ADC 读数接近 0。如果 RTD 开路读数接近满量程。这两个极端值都可以在软件里判断。另外ADS122U04 的 IDAC 有 compliance voltage 限制如果 RTD 电阻太大IDAC 无法维持设定电流ADC 读数会偏低。这个也可以通过读数异常来判断。我还加了一个参考电阻的自检定期切换 MUX 到参考电阻测量它的电压跟预期值比较。如果偏差超过 1%说明参考电阻或者 IDAC 有问题报故障。这个自检不需要额外硬件只是多一次转换对整体功耗影响很小。7. 这套方案在 HVAC 和工业场景中的实际表现7.1 HVAC 场景的特殊要求HVAC 控制器对温度测量的要求跟工业变送器不太一样。HVAC 的温度范围通常是 -20°C 到 80°C精度要求 ±0.5°C 到 ±1°C比工业变送器的 ±0.1°C 宽松。但 HVAC 对成本、功耗、可靠性要求更高而且经常要测多路温度回风、送风、室外、水温等。ADS122U04 有 4 个通道可以轮流测 4 路 RTD或者 2 路 RTD 加 2 路其他模拟量。如果用两路 IDAC 分别驱动两路 RTD需要外部模拟开关来切换参考电阻或者用两个参考电阻。我一般用单路 IDAC 加外部多路开关的方案成本更低但切换时要注意建立时间。HVAC 场景的另一个特点是电磁环境复杂有风机、压缩机、变频器。所以前端滤波和隔离比工业变送器更重要。我在 HVAC 方案里用了两级 RC 滤波加共模扼流圈实测在变频器旁边也能稳定到 ±0.2°C。7.2 工业变送器的精度优化工业变送器通常要求 4-20mA 输出或者 HART 通信精度要求 ±0.1°C 甚至更高。这个场景下ADS122U04 的 24 位分辨率刚好够用但需要更精细的校准和更严格的布局。我在工业变送器方案里做了几件事第一参考电阻用 0.01% 精度、2ppm/°C 的金属箔电阻放在恒温槽里或者用加热电阻保持恒温第二RTD 用四线制彻底消除引线误差第三ADC 和 MCU 都放在金属屏蔽罩里减少外部干扰第四固件里做多点校准在 -50°C、0°C、50°C、100°C、200°C 五个点校准用分段线性插值。实测下来这套方案在 -50°C 到 200°C 范围内精度达到 ±0.05°C长期漂移小于 0.02°C/年。这个性能已经可以替代很多专用变送器芯片而且灵活性更高。7.3 功耗和电池供电的考虑有些 HVAC 场景需要电池供电比如无线温度传感器。STM32L031C6 的低功耗模式很适合这种场景但 ADS122U04 的功耗需要优化。ADS122U04 在正常模式下约 1.5mA待机模式下约 1μA。如果每秒测一次每次转换 50ms平均电流约 75μA加上 MCU 的 50μA总共 125μA。用一颗 2000mAh 的锂亚电池理论寿命约 1.8 年。如果要更长寿命可以降低采样率比如每 10 秒测一次平均电流降到 12.5μA寿命延长到 18 年。但采样率太低会影响响应速度需要根据具体应用权衡。我一般建议客户用 1 秒到 10 秒的采样间隔配合滑动平均滤波既能保证响应又能延长电池寿命。还有一个省电技巧IDAC 只在转换时开启转换完立即关闭。ADS122U04 的 IDAC 开启时间约 100μs关闭后电流降到微安级。这样平均 IDAC 电流可以忽略整体功耗主要由 ADC 和 MCU 决定。8. 常见问题排查和调试经验8.1 读数不稳定或跳变读数跳变是最常见的问题。排查顺序是先看电源纹波用示波器测 AVDD 和 DVDD纹波应该小于 1mV。如果纹波大检查去耦电容和稳压芯片。再看参考电压REFP0 和 REFN0 之间的电压应该稳定纹波小于 100μV。如果参考电压不稳检查参考电阻和 IDAC 的连接。然后看输入滤波RC 滤波的截止频率是否合适电容是否漏电。最后看布局模拟走线是否远离数字走线地平面是否完整。我遇到过好几次跳变问题最后都是布局问题重新布线就好了。8.2 读数偏差大或线性度差读数偏差大通常是参考电阻不准或者 IDAC 电流不对。先用万用表测参考电阻的实际值跟标称值比较。如果偏差超过 0.1%换电阻。再测 IDAC 电流用高精度电流表串在回路里看是否等于设定值。如果 IDAC 电流偏差大检查 IDAC 的 compliance voltage 是否足够或者 IDAC 寄存器配置是否正确。线性度差通常是 RTD 本身的问题或者 CvD 系数不对。用标准电阻箱代替 RTD测几个点的读数看线性度。如果线性度好说明 ADC 和参考没问题是 RTD 的问题。如果线性度差检查 CvD 系数和计算过程。8.3 通信失败或数据错误ADS122U04 的 UART 接口容易出通信问题。先检查时序CS、SCLK、DIN、DOUT 的时序是否符合数据手册。特别是 CS 的建立时间和保持时间以及 SCLK 的极性。如果时序没问题检查 CRC 校验是否开启如果开启CRC 错误会导致数据丢弃。还有一个常见问题是 DRDY 信号被误触发。如果 DRDY 走线太长或者没有上拉电阻可能会拾取噪声导致 MCU 误读数据。我在 DRDY 上加一个 10kΩ 上拉电阻并在 MCU 端加一个 100nF 电容滤波问题解决。8.4 自热误差和响应时间的权衡自热误差和响应时间是矛盾的激励电流大信号强响应快但自热大激励电流小自热小但信号弱响应慢。我一般根据应用场景选择如果测的是静止空气温度用 1mA 激励自热误差 0.02°C可以接受如果测的是液体温度耗散系数大自热误差小可以用 1.5mA 提高响应速度。如果既要求低自热又要求快响应可以用脉冲激励短时间大电流激励测完立即关闭占空比很低。比如用 10mA 激励 1ms然后关闭 99ms平均功耗跟 100μA 连续激励一样但信号幅度大 10 倍响应快。这个方法需要 ADC 支持快速转换ADS122U04 在 1000SPS 下转换时间 1ms刚好匹配。9. 写在最后的一些实操体会这套 ADS122U04 加 STM32L031C6 的方案我从原型到量产跑了大概半年中间改了三版 PCB。最大的体会是RTD 测量的精度瓶颈不在 ADC而在参考电阻、布局和校准。ADC 的 24 位分辨率是基础但如果没有好的参考电阻和干净的布局实际有效位数可能只有 16 位甚至更低。另一个体会是三线制补偿虽然方便但引线匹配很关键。如果现场布线条件差三根线温度不一致补偿效果会大打折扣。这种场合我建议直接上四线制多一根线但省心很多。最后分享一个校准的小技巧如果没有标准温度源可以用高精度电阻箱代替 RTD 做校准。电阻箱的精度可以做到 0.01%对应温度 0.026°C比大多数温度源的精度还高。用电阻箱在几个点校准然后算出偏移和增益再在实际 RTD 上验证。这个方法在实验室里很实用不需要昂贵的恒温槽。固件里我留了一个校准接口通过 UART 可以写入偏移和增益系数不需要重新烧录程序。这个接口在量产校准的时候特别方便产线工人只需要接上标准电阻箱发几条命令就能完成校准。校准系数存在 STM32 的 Flash 里掉电不丢。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →