ADS1220与PT100/PT1000高精度温度采集方案:从原理到0.01℃实战

发布时间:2026/10/6 15:39:24

ADS1220与PT100/PT1000高精度温度采集方案:从原理到0.01℃实战 1. 为什么高精度温度采集值得单独拿出来做温度采集这件事看起来简单真要做到 0.01℃ 级别的稳定分辨率坑比想象中多得多。我用 ADS1220 搭配 PT100 和 PT1000 做过好几版方案从最初的面包板到后来的四层板从实验室恒温台到现场工业设备踩过的坑基本覆盖了从模拟前端到数字滤波的每一个环节。这套组合之所以值得单独拿出来讲是因为它恰好卡在一个很微妙的位置比它便宜的方案精度不够比它贵的方案成本翻好几倍而 ADS1220 这颗 24 位 ΔΣ ADC 配合铂电阻在百元级物料成本内就能做到工业级精度。先说清楚这套系统到底解决什么问题。PT100 和 PT1000 是铂热电阻0℃ 时阻值分别是 100Ω 和 1000Ω正温度系数线性度好长期稳定性强是工业测温的绝对主力。但它们的阻值变化很小——PT100 每℃ 大约只变 0.385ΩPT1000 是 3.85Ω。要分辨 0.01℃PT100 上对应的电压变化可能只有微伏级别。普通单片机自带的 12 位 ADC 根本不够看STM32 的 12 位 ADC 在 3.3V 参考下1LSB 就是 0.8mV折算到 PT100 上差不多是 2℃ 的分辨率完全没法用。ADS1220 的价值就在这里。它是 24 位 ΔΣ 架构内置 PGA可编程增益放大器最高 128 倍增益自带激励电流源支持四线制比例测量还有 50/60Hz 工频陷波。这些特性凑在一起刚好把铂电阻测温的所有痛点都覆盖了。我实测下来配合合理的 PCB 布局和校准做到 ±0.05℃ 的绝对精度、0.005℃ 的分辨率是稳的。这篇文章适合谁看如果你正在做温度采集相关的项目不管是工业变送器、医疗设备、实验室仪器还是恒温控制、冷链监测只要对精度有要求这套方案都能直接参考。我会从原理讲到实操从器件选型讲到 PCB 布局从驱动代码讲到校准方法尽量把每个决策背后的逻辑都说清楚。新手可以照着抄作业有经验的可以重点看避坑部分。2. 方案整体设计与核心器件选型逻辑2.1 为什么是 ADS1220 而不是 ADS1248 或 MAX31865选 ADC 这件事我对比过好几颗芯片。MAX31865 是专门为 PT100/PT1000 设计的内置了完整的比例测量电路用起来确实省事但它的分辨率只有 15 位而且灵活性差想换个传感器或者改测量范围就很受限。ADS1248 是 24 位 8 通道性能很好但价格比 ADS1220 贵不少而且封装大对于只需要一两路温度采集的场景来说浪费。ADS1220 的定位刚好24 位分辨率、4 通道差分输入实际是 2 路差分或 4 路单端、内置 2.048V 基准、内置激励电流源、SPI 接口、TSSOP-16 封装。最关键的是它支持比例测量——用同一个激励电流源同时驱动铂电阻和参考电阻ADC 的参考电压取自参考电阻上的压降。这样激励电流的温漂和长期漂移会被完全抵消因为测量结果只跟电阻比值有关跟电流绝对值无关。这个特性是做到高精度的核心。我算过一笔账ADS1220 单价大概十几块钱PT100 高精度等级A 级或 AA 级也就几块钱加上几个精密电阻和运放整套模拟前端物料成本能控制在 30 元以内。这个性价比在工业级方案里是很有竞争力的。2.2 PT100 和 PT1000 到底选哪个这个问题我被问过很多次。两者的核心区别就一个字阻值。PT1000 的阻值是 PT100 的 10 倍带来的直接好处是同样的激励电流下PT1000 上的压降大 10 倍信噪比更好对导线电阻和接触电阻的敏感度也低 10 倍。但 PT1000 也有代价。它的自热效应更明显——同样的电流下PT1000 上的功耗是 PT100 的 10 倍。自热会导致传感器自身温度升高产生测量误差。所以用 PT1000 时激励电流要选小一些一般 100μA 到 250μA 比较合适PT100 可以用到 500μA 甚至 1mA。我的经验是如果测量范围在 -50℃ 到 200℃导线不长PT100 完全够用如果导线较长超过 5 米、或者测量范围偏低温-200℃ 到 0℃PT1000 更有优势因为低温下铂电阻阻值本来就低PT100 在 -200℃ 时只有 18Ω 左右导线电阻的影响会被放大。另外 PT1000 在多点串联测量时更方便因为导线电阻占比小。对比项PT100PT10000℃ 阻值100Ω1000Ω灵敏度0.385Ω/℃3.85Ω/℃推荐激励电流0.5-1mA0.1-0.25mA自热影响较小较大导线电阻敏感度高低低温性能一般好成本略低略高2.3 四线制还是三线制这不是随便选的铂电阻的接线方式直接决定精度上限。两线制最简单但导线电阻直接串在测量回路里每米铜线大概 0.02Ω10 米来回就是 0.4Ω对 PT100 来说相当于 1℃ 的误差直接废掉。三线制能补偿导线电阻前提是三根线材质长度完全一致实际工程中很难保证补偿效果有限。四线制是唯一能做到完全消除导线电阻影响的方式两根线走激励电流两根线做高阻输入测量电压测量线上几乎没有电流导线电阻上的压降可以忽略。我的建议很明确只要条件允许一律用四线制。多一根线而已精度提升是质的飞跃。ADS1220 的差分输入配合外部激励电流源天然适合四线制接法。如果实在只能用三线制那至少要用同一根电缆里的三根芯线保证温度一致。2.4 比例测量高精度的真正秘诀很多人用 ADS1220 还是用内部基准或者外部固定基准这样激励电流的漂移会直接反映到测量结果里。比例测量才是正确姿势。具体做法是ADS1220 的激励电流源IDAC流出经过 PT100再经过一个精密参考电阻 Rref 到地。ADC 的差分输入测量 PT100 上的压降而 ADC 的参考电压输入接在 Rref 两端。这样 ADC 的转换结果就是Code (Vpt / Vref) × 2^23 (I × Rpt) / (I × Rref) × 2^23 (Rpt / Rref) × 2^23激励电流 I 被完全约掉了。只要 Rref 本身足够精密、温漂足够小测量精度就只取决于 Rref 和 ADC 的线性度。Rref 我一般选 0.1% 精度、5ppm/℃ 温漂的金属箔电阻比如 VISHAY 的 YR 系列或者国产的精密合金电阻。这个电阻是整个系统精度的锚点不能省。Rref 的阻值选择也有讲究。要让 PT100 上的压降和 Rref 上的压降在同一个量级这样 ADC 的输入范围利用最充分。PT100 在 0℃ 时是 100Ω在 100℃ 时约 138.5Ω在 200℃ 时约 175.8Ω。所以 Rref 选 100Ω 到 200Ω 之间比较合适。我通常选 150Ω 或者 200Ω这样在常用温度范围内 ADC 都能工作在满量程的 50% 以上。PT1000 的话Rref 选 1.5kΩ 到 2kΩ。3. 模拟前端电路设计与关键参数计算3.1 激励电流源配置与自热效应权衡ADS1220 内置两个匹配的激励电流源可以编程设置为 10μA、50μA、100μA、250μA、500μA、1000μA、1500μA。选多大的电流本质是在信噪比和自热之间找平衡。自热功率的计算很简单P I² × R。以 PT100 在 100℃ 时约 138.5Ω 为例如果用 1mA 激励P 0.000001 × 138.5 0.1385mW。铂电阻在静止空气中的热阻大概 30-50℃/W那么自热温升约 0.004-0.007℃。这个量级还可以接受。但如果用 PT1000同样 1mA 下 P 1.385mW自热温升 0.04-0.07℃就有点大了。所以 PT1000 我一般用 250μA自热温升降到 0.003℃ 以下。信噪比方面ADS1220 在增益 128、数据率 20SPS 时的有效分辨率约 21 位输入噪声约 100nV RMS。PT100 在 250μA 激励下0.01℃ 对应的电压变化是 0.385Ω × 0.01 × 250μA 0.96nV。这个信号远低于噪声所以单次采样是分辨不出来的必须靠过采样和数字滤波。但 0.1℃ 对应的信号是 9.6nV已经接近噪声水平了。如果用 1mA 激励0.01℃ 对应 3.85nV0.1℃ 对应 38.5nV信噪比好很多。我的实际选择是PT100 用 500μA 到 1mAPT1000 用 100μA 到 250μA。然后在软件里做多次采样平均用时间换精度。ADS1220 在 20SPS 时噪声最低我通常配置成 20SPS然后连续采 16 到 64 次做平均等效分辨率能再提升 2 到 3 位。3.2 参考电阻的选型与计算实例参考电阻 Rref 的精度直接决定系统精度。假设 Rref 有 0.1% 的初始误差那么测量结果也会有 0.1% 的误差。对 PT100 来说0.1% 的阻值误差对应约 0.26℃ 的温度误差。这个误差可以通过校准消除但温漂没法校准只能靠电阻本身的品质。我选 Rref 的标准是初始精度 0.1% 以内温漂 10ppm/℃ 以内最好 5ppm/℃。金属箔电阻是最佳选择比如 VISHAY 的 YR 系列、VPG 的 Foil 电阻国产的话可以看看捷比信、威世的精密合金电阻。价格大概几块钱到十几块钱一颗比普通电阻贵但值得。具体计算假设用 PT100测量范围 -50℃ 到 150℃。PT100 在这个范围的阻值从 80.31Ω 到 157.33Ω。如果 Rref 选 150Ω那么 ADC 的参考电压 Vref I × 150。PT100 上的电压 Vpt I × Rpt。ADC 的输入范围是 ±Vref/Gain。当 Gain1 时输入范围是 ±Vref也就是 ±I×150。PT100 最大电压是 I×157.33稍微超出正满量程。所以 Gain 要选 1但 Rref 要选大一点比如 200Ω。这样 Vref I×200PT100 最大电压 I×157.33占满量程的 78.7%很合适。如果用 PT1000范围 -50℃ 到 150℃阻值从 803.1Ω 到 1573.3Ω。Rref 选 2kΩVref I×2000PT1000 最大电压 I×1573.3占 78.7%同样合适。3.3 输入滤波与共模电压设置ADS1220 的模拟输入前端需要加 RC 低通滤波抑制高频干扰。我在每个差分输入脚上串 1kΩ 电阻差分之间并 100nF 电容每个输入对地并 10nF 电容。截止频率算一下差分滤波的 -3dB 频率是 1/(2π×2×1k×100n) ≈ 796Hz。这个频率对温度信号来说绰绰有余温度变化本身很慢但能有效滤掉开关电源和数字电路耦合进来的高频噪声。共模电压也要注意。ADS1220 的输入共模范围是 AVDD-1.2V 到 AVSS0.1V 左右具体看数据手册。在比例测量中PT100 和 Rref 串联PT100 在上、Rref 在下那么 PT100 两端的共模电压大约是 I×(Rref Rpt/2)。以 PT100、I500μA、Rref200Ω、Rpt100Ω 为例共模电压 500μA × (200 50) 0.125V。这个电压离地很近在 ADS1220 的共模范围内没问题。但如果 Rref 选得很大或者电流很大共模电压会升高需要检查是否超出范围。注意ADS1220 的 PGA 在增益大于 1 时共模输入范围会收窄。如果发现读数异常先检查共模电压是否超范围。用万用表量一下两个输入脚对地的直流电压确认在 AVSS0.1V 到 AVDD-1.2V 之间。3.4 PCB 布局的几条硬规矩高精度模拟电路PCB 布局占一半功劳。我总结了几条必须遵守的规矩第一模拟地和数字地分开最后在 ADS1220 的 AGND 脚附近单点连接。ADS1220 有独立的 AVSS 和 DVSS布局时要让模拟部分的回流路径尽量短不要穿过数字区域。第二参考电阻和铂电阻的走线要对称。差分对走线等长、等宽、紧耦合减少共模干扰转化为差模干扰。激励电流的走线要粗一点减少压降。第三ADS1220 的基准输入脚REFP/REFN要加 100nF 到 1μF 的退耦电容紧贴芯片放置。AVDD 也要加 100nF 加 10μF 的组合退耦。第四晶振或者时钟源远离模拟输入。如果不用外部晶振用 ADS1220 内部振荡器最省事精度也够。第五整板铺地模拟部分用完整地平面不要开槽。数字信号线不要跨越模拟地区域。我第一版板子没注意这些读数跳动有 0.5℃后来重新布局同样的电路跳动降到 0.02℃。布局的重要性怎么强调都不过分。4. 驱动实现与寄存器配置实战4.1 ADS1220 初始化流程与寄存器详解ADS1220 有 4 个配置寄存器通过 SPI 访问。初始化流程是上电复位、发送 RESET 命令、配置寄存器、启动转换。我一般用 STM32 或者类似的 MCUSPI 时钟设到 4MHz 左右ADS1220 支持最高 4MHz 的 SCLK。寄存器 0 配置MUX 选择输入通道GAIN 选择增益PGA_BYPASS 选择是否旁路 PGA。比例测量时MUX 选 AIN0/AIN1 差分GAIN 根据信号幅度选。我通常用 GAIN1 或 GAIN2因为信号本身已经经过 Rref 归一化了不需要太大增益。寄存器 1 配置数据率 DR 选 20SPS模式选连续转换或者单次转换转换模式选正常模式。20SPS 时噪声最低配合 50/60Hz 陷波工频干扰抑制很好。寄存器 2 配置基准选择。比例测量时VREF 选外部基准REFP/REFN也就是 Rref 上的电压。IDAC 电流大小在这里设置IDAC1 和 IDAC2 的路由也要配置。寄存器 3 配置IDAC 路由、温度传感器选择、 burnout 电流源等。我一般不用内部温度传感器用外部铂电阻。配置代码大概长这样void ADS1220_Init(void) { ADS1220_Reset(); HAL_Delay(1); // 寄存器0: MUXAIN0/AIN1, GAIN1, PGA enabled uint8_t reg0 0x00; // MUX[3:0]0000, GAIN[2:0]000, PGA_BYPASS0 ADS1220_WriteReg(0, reg0); // 寄存器1: DR20SPS, modenormal, CMcontinuous uint8_t reg1 0x00; // DR[2:0]000(20SPS), MODE[1:0]00, CM0 ADS1220_WriteReg(1, reg1); // 寄存器2: VREFexternal, IDAC500uA uint8_t reg2 0x00; // VREF[1:0]00(external), IDAC[2:0]101(500uA) reg2 0x05; ADS1220_WriteReg(2, reg2); // 寄存器3: IDAC1AIN2, IDAC2disabled uint8_t reg3 0x00; // IDAC1[2:0]010(AIN2), IDAC2[2:0]000(disabled) reg3 0x02; ADS1220_WriteReg(3, reg3); ADS1220_Start(); }4.2 单次转换与连续转换的取舍ADS1220 支持单次转换和连续转换两种模式。单次转换适合低功耗场景每次需要读数时启动一次转换完自动进入低功耗。连续转换适合高速采集转换完自动开始下一次。我的经验是如果采样率要求不高比如每秒几次用单次转换配合 MCU 的定时器唤醒功耗可以做到很低。如果要做过采样平均连续转换更方便因为不用每次发启动命令。但连续转换时要注意读取数据的时机DRDY 引脚变低表示数据就绪要及时读取否则数据会被覆盖。DRDY 的处理我一般用外部中断下降沿触发在中断里置标志位主循环里读取。不要直接在中断里做 SPI 读取因为 SPI 操作可能比较耗时影响其他中断响应。4.3 数据读取与原始码转电阻值ADS1220 输出 24 位有符号数范围 -8388608 到 8388607。比例测量时转换结果直接对应 Rpt/Rref 的比值Rpt (Code / 8388608) × Rref注意 Code 是 24 位有符号数正温度时 Code 为正。如果接反了Code 为负取绝对值就行但最好还是接对。读取代码int32_t ADS1220_ReadData(void) { uint8_t buf[3]; int32_t code; ADS1220_CS_Low(); while(HAL_GPIO_ReadPin(DRDY_GPIO_Port, DRDY_Pin) GPIO_PIN_SET); HAL_SPI_Receive(hspi1, buf, 3, 100); ADS1220_CS_High(); code ((int32_t)buf[0] 16) | ((int32_t)buf[1] 8) | buf[2]; if(code 0x800000) { code | 0xFF000000; // 符号扩展 } return code; }4.4 铂电阻阻值到温度的换算Callendar-Van Dusen 方程拿到 Rpt 之后要换算成温度。铂电阻的温度-阻值关系用 Callendar-Van Dusen 方程描述T ≥ 0℃R(t) R0 × (1 A×t B×t²) T 0℃R(t) R0 × (1 A×t B×t² C×(t-100)×t³)其中 R0 是 0℃ 时的阻值PT100 是 100ΩPT1000 是 1000ΩA、B、C 是常数。对于标准铂电阻A 3.9083 × 10⁻³B -5.775 × 10⁻⁷C -4.183 × 10⁻¹²正温度时方程是二次的可以直接解t (-A sqrt(A² - 4B(1 - R/R0))) / (2B)负温度时方程是四次的没有解析解一般用迭代法或者查表加插值。我通常用牛顿迭代三四次就能收敛到 0.001℃ 以内。实际代码里为了效率我一般用分段线性插值加二次修正。先建一个 1℃ 间隔的阻值表查表找到最近的区间然后用二次方程修正。这样既快又准。float PT100_ResistanceToTemperature(float R) { const float R0 100.0f; const float A 3.9083e-3f; const float B -5.775e-7f; if(R R0) { // 正温度解二次方程 float disc A*A - 4*B*(1 - R/R0); return (-A sqrtf(disc)) / (2*B); } else { // 负温度牛顿迭代 float t (R - R0) / (R0 * A); // 初始猜测 for(int i 0; i 10; 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*(4*t*t*t - 300*t*t)); t - f / df; } return t; } }5. 校准方法与精度验证实操5.1 两点校准还是多点校准校准是做到高精度的最后一步也是最容易被忽视的一步。理论上如果 Rref 和 PT100 都完美ADC 也理想那不需要校准。但现实中 Rref 有初始误差PT100 也有一致性问题ADC 有增益和失调误差所以必须校准。两点校准是最常用的在冰水混合物0℃和沸水100℃注意气压修正两个点测量算出增益和失调修正系数。但铂电阻的非线性在宽温度范围内不能忽略两点校准只能保证两个点准中间可能有偏差。我的做法是如果测量范围窄比如 0-100℃两点校准够用如果范围宽-50 到 200℃用三点或五点校准然后做分段线性修正。校准点用高精度恒温槽或者干体炉配合标准温度计。标准温度计的精度至少要比目标精度高一个数量级比如目标 0.05℃标准温度计要 0.005℃ 级别。5.2 用冰点和沸点做快速校准的实操没有恒温槽的情况下冰水混合物和沸水也能做粗略校准。冰水混合物在标准大气压下是 0℃这个很稳只要冰够多、水够纯、搅拌均匀能稳定在 0.01℃ 以内。沸水是 100℃但受气压影响每变化 1hPa沸点变化约 0.03℃。可以用当地气压修正或者用高精度气压计。操作步骤把 PT100 插入冰水混合物搅拌等读数稳定大概 5 分钟记录 ADC 码值。然后插入沸水同样等稳定记录码值。用这两个点算出实际 Rref 和 PT100 的 R0更新到代码里。注意PT100 插入液体时要注意绝缘四线制的四根线不能短路。我一般用不锈钢套管封装的 PT100防水防短路响应也快。5.3 噪声测试与有效分辨率评估校准完之后要评估实际性能。最直接的方法是看读数的峰峰值和标准差。把 PT100 放在恒温环境里比如保温杯里装满水放在室内连续采集 1000 个点算标准差。标准差乘以 6 大概就是峰峰值噪声。我实测的数据ADS1220 在 20SPS、GAIN1、PT100、500μA 激励下1000 点标准差约 0.003℃。做 16 次平均后标准差降到 0.001℃ 以下。这个性能已经超过大多数工业应用的需求了。有效分辨率可以用噪声除以灵敏度来算。0.003℃ 的标准差对应 PT100 上 0.003 × 0.385 × 500μA 0.58nV 的电压噪声。ADS1220 在 20SPS 时的输入噪声约 100nV RMS看起来对不上因为比例测量时参考电压也在波动但波动是相关的会互相抵消一部分。实际有效噪声比单独看输入噪声要低。5.4 长期稳定性与温漂测试短期噪声只是一方面长期稳定性更重要。我把同一套系统放在恒温箱里从 -40℃ 到 85℃ 循环记录读数变化。ADS1220 的失调温漂约 0.1μV/℃增益温漂约 1ppm/℃。Rref 的温漂 5ppm/℃PT100 本身的温漂已经包含在温度系数里了。整体来看在 -40 到 85℃ 范围内不校准的情况下绝对误差大概在 ±0.3℃ 以内。如果做温度补偿用 ADS1220 内部温度传感器监测环境温度对失调和增益做修正可以压到 ±0.1℃ 以内。对于大多数应用这个精度足够了。6. 常见问题排查与避坑经验6.1 读数跳动大、噪声高的排查思路读数跳动是最常见的问题。排查顺序我一般是这样先看电源。ADS1220 的 AVDD 纹波要小于 10mV最好小于 1mV。用示波器看 AVDD如果纹波大加 LC 滤波或者换 LDO。数字电源的噪声也会耦合进来DVDD 也要干净。再看地。模拟地和数字地有没有分开单点连接在哪里如果地平面被数字信号切割回流路径变长噪声肯定大。用万用表量 AGND 和 DGND 之间的电压正常应该小于 1mV。然后看输入滤波。RC 滤波有没有参数对不对如果输入直接接传感器没有滤波高频噪声会直接进 ADC。加 1kΩ 加 100nF 的差分滤波基本能解决大部分问题。最后看配置。数据率是不是太高20SPS 噪声最低如果设成 1000SPS噪声会大很多。增益是不是太大增益大噪声也放大。PGA 是不是没必要地开了如果信号幅度够旁路 PGA 噪声更低。6.2 读数偏差大、线性度差的可能原因偏差大通常是校准问题或者 Rref 问题。先确认 Rref 的实际阻值用高精度万用表量不要信标称值。然后确认 PT100 的 R0A 级 PT100 的 R0 误差是 ±0.06Ω对应 ±0.15℃。如果没校准这个误差直接体现出来。线性度差可能是 PT100 本身的问题也可能是 ADC 的非线性。ADS1220 的 INL 是 6ppm基本可以忽略。PT100 在宽温度范围内的非线性是固有的必须用 Callendar-Van Dusen 方程修正不能用线性近似。还有一个容易忽略的点自热效应。如果激励电流太大PT100 自身发热读数会偏高。减小电流试试如果读数变小了说明自热有影响。6.3 SPI 通信失败的调试方法SPI 通信失败先查硬件。CS、SCLK、MOSI、MISO 四根线有没有接对ADS1220 的 SPI 模式是模式 1CPOL0CPHA1确认 MCU 的 SPI 配置对不对。SCLK 空闲时是低电平数据在第二个边沿采样。然后查时序。ADS1220 的 SPI 时钟最高 4MHz先降到 1MHz 试试。CS 建立时间和保持时间要满足数据手册要求一般几十纳秒STM32 的 SPI 默认配置通常没问题。再查电源和复位。ADS1220 上电后需要至少 1ms 的复位时间然后发 RESET 命令。如果电源上升慢可能要等更久。用示波器看 DRDY 引脚复位后 DRDY 应该变高启动转换后变低。6.4 常见问题速查表现象可能原因排查方法解决方案读数跳动大电源纹波大示波器看 AVDD加 LC 滤波换 LDO读数跳动大地平面分割量 AGND-DGND 电压重新布局单点接地读数跳动大输入无滤波检查 RC 滤波加 1kΩ100nF读数偏差大Rref 不准高精度万用表量校准或换电阻读数偏差大PT100 未校准冰水混合物测试两点校准线性度差未用 CVD 方程检查换算代码用 Callendar-Van Dusen自热明显激励电流太大减小电流看读数降到 250μA 以下SPI 不通模式不对查 CPOL/CPHA改为模式 1SPI 不通时钟太快降速测试降到 1MHzDRDY 不响应未启动转换查 START 命令发 START/SYNC6.5 几个我踩过的坑第一个坑一开始用内部基准读数随温度漂移。后来改成比例测量漂移立刻小了一个数量级。内部基准的温漂是 10ppm/℃ 级别比例测量把这个漂移完全消掉了。第二个坑Rref 用了普通 1% 电阻校准后短期准过几天就偏了。普通电阻的温漂和长期漂移都大必须用精密电阻。换了 5ppm/℃ 的金属箔电阻后半年内读数变化小于 0.02℃。第三个坑PCB 布局时把 ADS1220 放在了开关电源旁边噪声大得没法用。后来把模拟部分移到板子另一侧加屏蔽罩噪声降了 20 倍。高精度模拟电路对布局的敏感度远超想象。第四个坑四线制的两根测量线走线不对称引入了热电动势。不同金属连接处会产生热电动势铜-铜连接大概 0.2μV/℃如果两根线温度不同就会产生差分热电动势。后来把两根线紧挨着走热电动势抵消了。第五个坑软件里用了浮点数做平均但没做溢出保护。连续采集几千个点后累加器溢出读数突然跳变。后来改用 int64 累加或者每采一次就做滑动平均问题解决。7. 性能扩展与进阶优化方向7.1 多通道温度采集的实现ADS1220 只有两路差分输入如果要采多路温度有两个方案一是用多颗 ADS1220每颗负责一两路二是用外部模拟开关切换。多颗 ADS1220 的方案更简单每颗独立配置互不干扰但成本高、占板面积大。模拟开关方案成本低但开关的导通电阻和漏电流会影响精度而且开关本身有温漂。我一般用多颗 ADS1220 的方案因为温度采集通常不需要很多路4 到 8 路用 2 到 4 颗就够了。如果非要 16 路以上可以考虑 ADS12488 通道 24 位一颗顶四颗 ADS1220。多颗 ADS1220 共用 SPI 总线时每颗的 CS 独立控制。注意 SPI 总线的负载电容线太长或者挂太多器件时要降低 SPI 时钟。我一般每颗 ADS1220 的 CS 单独走线SCLK 和 MOSI 可以共用MISO 也共用但要注意总线冲突确保同一时刻只有一颗的 CS 有效。7.2 低功耗设计要点电池供电的温度采集节点功耗很关键。ADS1220 在连续转换模式下的功耗约 1.5mW单次转换模式下可以更低。我的做法是用单次转换模式MCU 定时唤醒启动转换等 DRDY读数据然后 ADS1220 进入掉电模式MCU 也进入低功耗。这样平均功耗可以做到几十微瓦。激励电流也要考虑。500μA 的激励电流在 PT100 上产生 0.05mW 的功耗不算大但如果用 1mA就是 0.2mW。低功耗场景下激励电流可以降到 100μA 甚至 50μA但信噪比会下降需要增加平均次数来补偿。7.3 隔离与抗干扰设计工业现场的温度采集隔离很重要。传感器可能离采集板很远地电位差、共模干扰、浪涌都可能损坏 ADC。我一般用数字隔离器隔离 SPI 总线用隔离电源给模拟部分供电。这样传感器侧和 MCU 侧完全隔离共模干扰被阻断。隔离器选 ADuM 系列或者国产的类似产品SPI 隔离要注意时序延迟隔离器的传播延迟会影响 SPI 最高速度。一般隔离后的 SPI 速度限制在 1MHz 到 2MHz对 ADS1220 来说够用了。模拟前端的保护也要做。PT100 的输入线上加 TVS 管和限流电阻防止浪涌。TVS 管的结电容要小否则会影响信号。限流电阻用 1kΩ 到 10kΩ配合 TVS 管能扛住几千伏的浪涌。7.4 从 0.01℃ 到 0.001℃还有哪些空间如果要把精度再提升一个数量级到 0.001℃ 级别需要从几个方面入手。首先是 PT100 的等级要用 AA 级或者标准铂电阻R0 误差小于 0.01Ω。其次是 Rref要用 0.01% 精度、1ppm/℃ 温漂的电阻价格会贵很多。然后是 ADCADS1220 的噪声在 20SPS 时约 100nV要再低就得用 ADS1262 或者类似的更低噪声 ADC。还有恒温措施。把 Rref 和模拟前端放在恒温槽里温度稳定在 ±0.1℃温漂影响基本消除。或者用温度补偿用高精度温度传感器监测 Rref 的温度软件修正。最后是校准。0.001℃ 级别的校准需要标准铂电阻温度计和精密恒温槽校准成本很高。一般只有计量级应用才需要这个精度工业现场 0.01℃ 已经非常好了。我个人在实际操作中的体会是ADS1220 加 PT100/PT1000 这套组合做到 0.01℃ 分辨率、0.05℃ 绝对精度是比较现实的再往上走每提升一个数量级成本和难度都翻好几倍。选方案的时候要先想清楚实际需求不要盲目追求高指标。很多时候0.1℃ 的精度已经能满足 90% 的应用把省下来的成本花在可靠性和长期稳定性上更划算。
延伸阅读

更多相关文章

2026/10/6 15:34:24

PCIe配置空间与BAR空间详解:从枚举到FPGA实战调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 15:34:24

容灾方案模板如何落地:RTO/RPO计算与切换避坑指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 16:44:28

C#实现U盘禁用守护进程:插拔检测、强制禁用与自我保活

干这行的人多少都遇到过这种需求:公司内网机器要封U盘、机房设备只允许指定U盘读写、或者就是单纯不想让人随便往服务器上插东西。市面上现成的管控软件不是价格离谱,就是策略太死板,弄来弄去还不如自己用C#写一个。今天这篇就聊一个完整的C#…

2026/10/6 16:44:28

Python实现π的10000位精确计算:任意精度与算法选型实战解析

在技术社区搜pi,跳出来多半是树莓派、PI控制器、pi agent这类内容,真要搜“计算pi小数点后10000位”,反而会掉进一堆年代久远的代码片段里,有的用C语言全篇宏定义,有的只贴出几千位就说“已算到一万位”。我自己动手完…

2026/10/6 16:44:28

Flutter鸿蒙化迁移实战:用dia依赖注入实现无感多端适配

最近 Flutter 社区里最热闹的事,就是鸿蒙原生适配这条赛道。我手头正好有个老项目,核心依赖注入层用的是 dia 这个轻量库,趁热把它迁到了 OpenHarmony 的 Flutter 分支上。整个过程比想象中顺,但也踩了不少教科书里不会写的坑。这…

2026/10/6 16:44:28

用百度AI手势识别打造程序员专属视力自测工具

每天盯着屏幕八小时起步,下班还要接着刷手机,干眼、视疲劳、飞蚊症几乎成了程序员标配。大家都爱拿"钛合金狗眼"自嘲,可体检报告上一行"建议进一步检查"还是让人心里发虚。我前阵子实在不想再靠猜来判断自己的眼睛状态&a…

2026/10/6 16:44:28

OpenClaw接入飞书实战:从WSL2环境到Agent消息互通

前阵子折腾了一整天,终于把OpenClaw接进了飞书。最开始以为就是走个webhook转发的事,结果先是WSL2环境验证失败,后来又卡在事件订阅的回调超时上,等真能收消息了,机器人又半天不吭声。那感觉就是每一步都在给下一层的坑…

2026/10/6 16:39:28

Spring容器动态代理Bean注入实战:从JDK到CGLIB全解析

最近在项目里要做中间件改造,碰上一个逃不开的需求:在Spring容器启动过程中,把一批接口动态代理成Bean,然后注册进容器里。这种东西单看标题就一行字,真做起来全是细节,从代理方式选型到注册时机的控制&…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/6 4:01:51

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/5 17:38:27

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/6 0:03:23

MR25H40CDF+STM32F031C6工业级高可靠数据存储方案

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的 PLC 控制柜里、在风电变流器的散热片背面、在矿井监测终端的金属外壳下,你经常能看到一块指甲盖大小的黑色芯片——它既不是 Flash,也不是…

2026/10/6 0:03:23

MRAM+STM32工业断电数据保全实战指南

1. 项目概述:为什么在工业现场非得用 MR25H40CDF 配 STM32F031C6 做数据存储?在工厂产线的PLC柜里、在野外无人值守的环境监测终端里、在高速运转的包装机控制板上,你经常能看到一块指甲盖大小的黑色芯片,旁边贴着“MR25H40CDF”丝…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑