
1. 为什么PT1000配ADS1110是个值得认真对待的组合PT1000和ADS1110这个搭配在工业测温、实验室设备、恒温控制这些场景里出现频率非常高。原因不复杂PT1000在0℃时阻值1000Ω温度系数约3.85Ω/℃比PT100大一个数量级同样的引线电阻带来的误差占比更小抗干扰能力天然占优。而ADS1110是一颗16位、内置PGA和基准的ΔΣ ADC差分输入、I2C接口、SOT-23-6封装几乎是为小体积高精度测温量身定做的。但“选对芯片”和“做出0.1℃精度”之间隔着一条很宽的沟。我见过太多项目硬件焊完读出来的温度跳个0.5℃甚至1℃代码里加个滑动平均就交付了。问题在于ADS1110的16位有效位不是白送的PT1000的非线性不是线性的I2C的时序不是随便拉两根线就能跑的。这篇文章就把从I2C配置到0.1℃校准的完整链路拆开讲每一步为什么这么做、不这么做会怎样都说明白。适合谁看如果你正在做PT1000测温方案或者手上有个ADS1110的板子读出来的数不对劲又或者你只是想把I2C和ΔΣ ADC的配合搞透彻这篇内容都能直接拿去用。代码和参数我会给到能复现的程度但更重要的是背后的判断逻辑——因为你的板子跟我的板子走线、电源、探头都不会完全一样。2. 硬件链路设计与关键参数计算2.1 PT1000的激励方式选择恒流还是分压PT1000是电阻型传感器要测阻值就得给它一个激励源。常见两条路恒流源激励和电阻分压。恒流源激励的优点是PT1000上的电压与阻值严格成正比后级放大或ADC读数直接线性对应温度忽略PT1000自身非线性。但恒流源电路需要运放加基准多几个器件成本上去而且恒流源的温漂会直接串进测量结果。对于ADS1110这种内置PGA的ADC其实分压法更划算。分压法的思路是用一个精密参考电阻R_ref与PT1000串联参考电压V_ref加在串联体两端ADS1110测PT1000两端的电压。此时V_pt V_ref × R_pt / (R_pt R_ref)R_pt R_ref × V_pt / (V_ref - V_pt)这个公式里V_ref和R_ref的精度直接决定测量精度。我一般选R_ref 1kΩ、0.1%精度、25ppm/℃低温漂的金属膜电阻V_ref用ADS1110内部2.048V基准。为什么是1kΩ因为PT1000在0℃时是1000Ω分压点正好在V_ref/2附近ADC的差分输入范围利用最充分。如果R_ref选太大低温段电压分辨率下降选太小高温段电压被压缩。1kΩ是个平衡点。注意R_ref的温漂比初始精度更重要。0.1%的电阻如果温漂100ppm/℃在50℃温升下漂移量相当于0.5%直接吃掉你的精度预算。25ppm/℃是底线。2.2 ADS1110的PGA增益怎么定ADS1110的PGA可设1、2、4、8倍对应满量程±2.048V、±1.024V、±0.512V、±0.256V。增益越大LSB越小分辨率越高但输入电压范围越窄。PT1000在0℃时R_pt1000Ω分压后V_pt≈1.024VV_ref2.048VR_ref1kΩ。在100℃时R_pt≈1385ΩV_pt≈1.187V。在-50℃时R_pt≈803ΩV_pt≈0.891V。整个工业常用范围-50~150℃内V_pt大约在0.89V到1.28V之间。如果PGA1满量程±2.048VLSB2.048×2/65536≈62.5μV。对应到PT1000阻值变化约0.061Ω再对应温度约0.016℃。看起来够用但这是理想情况实际噪声、基准漂移、分压电阻误差都会吃掉有效位数。如果PGA2满量程±1.024V但V_pt在0℃时已经1.024V超过正满量程了不行。所以PGA1是唯一安全选择。这也是为什么R_ref选1kΩ——它让分压点落在PGA1量程的中间偏下位置留足余量。实操心得如果你把R_ref改成2kΩV_pt会降到0.67V左右此时可以用PGA2LSB减半到31.25μV理论分辨率翻倍。但代价是分压点偏离中点共模电压变化范围更大对ADS1110的共模抑制是个考验。我实测过2kΩPGA2的方案噪声比1kΩPGA1略大但经过校准后长期稳定性反而更好因为信号幅度更接近PGA2的满量程。这个取舍看你的具体量程需求。2.3 I2C上拉电阻的计算与选型ADS1110的I2C接口是开漏输出SDA和SCL都必须外加上拉电阻。上拉电阻选大了上升沿变缓高速通信时数据出错选小了灌电流太大可能超过器件的驱动能力。标准模式I2C100kHz下上升时间t_r要求小于1000ns。总线电容C_b包括PCB走线电容、引脚电容、探头电缆电容一般估算50~200pF。上升时间与上拉电阻R_p的关系t_r ≈ 0.847 × R_p × C_b如果C_b100pF要t_r1000ns则R_p 1000ns / (0.847×100pF) ≈ 11.8kΩ。这是上限。下限由灌电流决定ADS1110的SDA灌电流能力最小3mAV_OL最大0.4V所以R_p (V_DD - 0.4V) / 3mA。如果V_DD3.3VR_p 967Ω。所以R_p的合理范围是1kΩ到10kΩ。我一般选4.7kΩ这是最常用的折中值。但如果你的PT1000探头电缆很长比如2米以上电缆电容可能到300pF甚至更高此时4.7kΩ对应的t_r≈1.2μs超过标准模式要求。解决办法是降低I2C速率到50kHz或者把上拉电阻降到2.2kΩ。踩过的坑有一次用2米屏蔽线接PT1000I2C死活读不出数据逻辑分析仪一看SDA上升沿像山坡一样缓。换成2.2kΩ上拉后立刻正常。后来量了一下电缆电容280pF。所以长线场景下上拉电阻一定要重新算不能照抄4.7kΩ。2.4 差分输入的共模电压范围ADS1110的差分输入有共模电压限制。数据手册给出的条件是共模电压必须在GND-0.1V到V_DD0.1V之间且差分输入电压在PGA满量程内。分压法里PT1000两端电压分别是V_pt和0V如果PT1000下端接地共模电压就是V_pt/2≈0.5V完全在范围内。但如果你把PT1000放在高端即PT1000上端接V_ref下端接R_ref到地那共模电压就是V_ref - V_pt/2≈1.5V也没问题。两种接法我都试过低端接法PT1000下端接地的噪声略小因为共模电压更接近地。但低端接法要求ADS1110的负输入端能接受0V附近的信号ADS1110的输入范围是GND-0.1V起所以没问题。注意如果你用双电源给ADS1110供电比如±2.5V共模范围会宽很多但ADS1110是单电源器件V_DD范围2.7~5.5V别接负电源。3. ADS1110的I2C配置与寄存器操作3.1 器件地址与写时序ADS1110的7位I2C地址是0x48如果ADDR引脚接地。ADDR引脚可以接GND、V_DD、SDA、SCL对应四个地址0x48、0x49、0x4A、0x4B。一条I2C总线上最多挂4片ADS1110。写配置寄存器的时序是START → 地址写(0x90) → ACK → 配置字节 → ACK → STOP。配置字节的位定义如下位名称功能7ST/DRDY写1启动单次转换读1表示转换完成6-5保留必须写04SC单次转换模式1单次0连续3-2DR数据速率0015SPS, 0130SPS, 1060SPS, 11240SPS1-0PGA增益001, 012, 104, 118我一般用连续转换模式、15SPS、PGA1配置字节是0x0C二进制00001100。15SPS对应64ms的转换周期对于温度测量完全够用而且噪声最低。240SPS虽然快但噪声大很多除非你要做快速温度扫描。实操心得ADS1110上电后默认就是连续转换模式、15SPS、PGA1配置字节0x0C。如果你不改配置直接读就行。但如果你之前写过别的配置一定要重新写一遍因为ADS1110没有复位引脚配置会保持到断电。3.2 读转换结果的时序读数据的时序是START → 地址读(0x91) → ACK → 读高字节 → ACK → 读低字节 → NACK → STOP。ADS1110的输出是16位有符号数高字节在前。转换结果与输入电压的关系V_in (code / 32768) × V_ref / PGA其中V_ref2.048VPGA1时V_in code × 62.5μV。但注意ADS1110的输出码是二进制补码正满量程是0x7FFF负满量程是0x8000。实际使用中V_pt始终为正所以code始终为正范围大约在0x2000到0x4000之间。3.3 用逻辑分析仪抓I2C波形的要点调试I2C时逻辑分析仪是最有用的工具。抓ADS1110的波形时重点看几个地方第一START条件是否干净。SDA在SCL高电平期间从高变低如果SDA下降沿有振铃可能是上拉电阻太小或走线太长。第二ACK位是否被正确拉低。如果主机发完地址后从机没有拉低SDA说明地址不对或从机没上电。第三数据字节的建立时间和保持时间。标准模式I2C要求数据在SCL高电平期间稳定建立时间至少250ns保持时间至少0ns。如果逻辑分析仪显示数据在SCL上升沿附近还在跳变说明时序余量不够。踩过的坑有一次ADS1110读出来的数据偶尔跳变逻辑分析仪抓了几千帧才发现每几百帧里有一帧的ACK位是高的。后来查出来是SDA上拉电阻4.7kΩ在3.3V下灌电流只有0.7mA而ADS1110的SDA引脚电容加上走线电容导致下降沿太缓从机来不及在ACK时隙内拉低。换成2.2kΩ后问题消失。所以上拉电阻不仅要算上升沿下降沿也要留余量。4. PT1000阻值到温度的换算与校准4.1 PT1000的阻值-温度关系PT1000的阻值-温度关系遵循IEC 60751标准在-200~0℃和0~850℃两个区间用不同的多项式-200~0℃ R(t) R0 × [1 A×t B×t² C×(t-100)×t³]0~850℃ R(t) R0 × [1 A×t B×t²]其中R01000ΩA3.9083×10⁻³B-5.775×10⁻⁷C-4.183×10⁻¹²。反算温度时0~850℃区间可以用二次方程求根t (-A sqrt(A² - 4B(1 - R/R0))) / (2B)这个公式在0~850℃内精度很高误差小于0.01℃。但在-200~0℃区间因为有四次项二次求根会有偏差需要用迭代法。我一般用查表加线性插值的方法预先算好-50~150℃每1℃对应的阻值存成数组测量时先查表找到区间再线性插值。这样计算量小精度也够。1℃间隔的线性插值误差在0.001℃以内完全满足0.1℃要求。4.2 从ADC码到阻值的完整计算链假设ADS1110读到code0x300012288PGA1V_ref2.048VV_pt 12288 × 62.5μV 0.768V如果R_ref1000ΩV_ref2.048VR_pt 1000 × 0.768 / (2.048 - 0.768) 1000 × 0.768 / 1.280 600Ω600Ω对应PT1000的温度大约是-104℃。这个例子说明如果分压电阻选1kΩ低温段的分压点会偏低ADC码值偏小。所以如果你的应用主要在低温段R_ref应该选小一点比如680Ω让分压点回到中点附近。实操心得R_ref的选择要匹配你的温度量程。量程-50~150℃时PT1000阻值从803Ω到1573Ω中点约1188Ω。如果R_ref1.2kΩ分压点在中点附近ADC利用率最高。我后来把R_ref改成1.2kΩ0℃时V_pt0.931V100℃时V_pt1.073V整个量程内ADC码值在0x2E00到0x3600之间虽然只用了约1/8的满量程但噪声也同比缩小有效分辨率反而更高。4.3 两点校准法与Merton模型的取舍校准是达到0.1℃精度的关键。常见方法有两种两点校准和Merton模型校准。两点校准最简单把PT1000放在冰水混合物0℃和沸水100℃注意当地气压修正中记录ADC码值然后线性拟合。这种方法能消除R_ref的初始误差和ADS1110的增益误差但无法修正PT1000自身的非线性。在0~100℃范围内PT1000的非线性约0.4℃两点校准后残差约0.1~0.2℃勉强够0.1℃但余量不大。Merton模型校准更彻底用多个温度点比如0℃、25℃、50℃、75℃、100℃拟合PT1000的R-T曲线同时修正ADC的增益和偏移。Merton模型本质上是把PT1000的Callendar-Van Dusen系数作为拟合参数用最小二乘法求解。这种方法能把非线性残差压到0.01℃以内但需要至少5个温度点校准工作量大。我的建议如果只做0~100℃且精度要求0.1℃两点校准加查表插值够用。如果量程跨-50~150℃或者要求0.05℃以上上Merton模型。Merton模型的参数求解可以用Python的scipy.optimize.curve_fit把R_ref和V_ref的误差也作为参数一起拟合效果更好。注意校准用的温度源精度至少要比目标精度高一个数量级。要校0.1℃温度源得是0.01℃级别。冰水混合物法理论上能到0.01℃但实际操作中冰的纯度、水的纯度、容器材质都会影响。我用的是干体炉设定点稳定性±0.02℃读数用标准铂电阻温度计这样校准出来的结果才可信。5. 常见问题与排查技巧实录5.1 ADS1110读数为零或满量程这是最常见的问题。读数为零先查I2C通信是否正常。用逻辑分析仪看地址字节有没有ACK。如果没有ACK检查ADDR引脚电平、上拉电阻、电源电压。如果有ACK但数据为零检查配置字节是否写错特别是ST/DRDY位——如果写了0且SC1器件会一直处于单次转换的等待状态不会更新数据。读数为满量程0x7FFF通常是输入电压超过PGA满量程。检查分压电阻是否焊错、PT1000是否开路。PT1000开路时分压点被R_ref拉到V_refADS1110读到满量程。这是PT1000断线检测的天然机制——读到满量程就说明探头断了。5.2 温度读数跳动大跳动大分两种情况高频跳动和低频漂移。高频跳动每次读数差几十个LSB通常是电源噪声或I2C干扰。ADS1110的V_DD引脚要加0.1μF陶瓷电容紧靠引脚V_ref引脚也要加0.1μF。如果电源来自开关电源再加一个10μF钽电容。I2C走线远离电源线和时钟线必要时包地。低频漂移几分钟内缓慢变化通常是R_ref温漂或ADS1110内部基准温漂。ADS1110的内部基准温漂典型值10ppm/℃在50℃温升下漂移0.05%对应温度约0.13℃。如果要求0.1℃以内要么用外部基准要么做温度补偿。我一般用外部2.048V基准比如REF5020温漂3ppm/℃效果好很多。5.3 I2C通信不稳定偶尔丢数据I2C丢数据的原因很多按概率排序上拉电阻不合适、总线电容太大、电源纹波、地线反弹。上拉电阻的问题前面说过了。总线电容的问题在长电缆场景下特别明显解决办法是降低I2C速率或加I2C缓冲器。电源纹波的问题用示波器看V_DD引脚如果纹波超过10mV加LC滤波。地线反弹的问题在多点接地时出现解决办法是单点接地ADS1110的GND和PT1000的GND在电源入口处汇合。踩过的坑有一次I2C每隔几小时丢一次数据查了三天没找到原因。后来用示波器看SDA和SCL的上升沿发现偶尔有一个振铃幅度约0.5V。振铃的原因是上拉电阻4.7kΩ和走线电感形成了LC谐振。在SDA和SCL上各串一个33Ω电阻后振铃消失再也没丢过数据。所以I2C走线上串小电阻是个低成本高收益的措施。5.4 校准后精度不达标校准后精度不达标先确认校准用的温度源是否准确。如果温度源本身有0.2℃误差校准结果不可能优于0.2℃。其次检查PT1000的接线方式两线制、三线制、四线制。两线制最简单但引线电阻直接串进测量结果。PT1000的引线电阻如果是0.5Ω对应温度误差约0.13℃。三线制能补偿引线电阻但要求三根线电阻完全一致。四线制最准但需要两个差分输入ADS1110只有一个差分输入所以四线制需要外部模拟开关切换或者用两颗ADS1110。我一般用三线制PT1000一端接两根线到ADS1110的正输入和R_ref上端另一端接一根线到地。这样引线电阻在正输入和R_ref上端各串一个在分压公式里部分抵消。实测三线制能把引线电阻误差压到0.02℃以内。实操心得三线制的三根线要用同一根电缆里的三根芯而且长度一致。如果三根线来自不同电缆电阻不一致补偿效果大打折扣。我用的是三芯屏蔽电缆三根芯的电阻差小于0.01Ω补偿后残差小于0.005℃。5.5 常见问题速查表现象可能原因排查方法解决措施读数为零I2C无ACK逻辑分析仪看地址字节检查ADDR引脚、上拉电阻、电源读数为满量程PT1000开路万用表量PT1000阻值更换探头或检查接线高频跳动电源噪声示波器看V_DD纹波加0.1μF10μF电容低频漂移基准温漂测量环境温度变化用外部基准或温度补偿I2C偶尔丢数据上拉电阻不合适逻辑分析仪看上升沿调整上拉电阻或串33Ω电阻校准后精度差引线电阻未补偿量三根线电阻改用三线制或四线制温度读数偏慢数据速率太低查配置字节DR位改为60SPS或240SPS6. 从0.1℃到0.05℃的进阶思路做到0.1℃之后如果想再进一步有几个方向可以挖。第一把ADS1110换成ADS1220。ADS1220是24位ΔΣ ADC内置PGA和基准噪声比ADS1110低一个数量级。但ADS1220是SPI接口需要改硬件。如果I2C是硬约束ADS1110已经是天花板了。第二用比率测量法消除基准误差。ADS1110的V_ref同时给分压电路和ADC做基准如果V_ref有漂移分压比例不变ADC读数也不变误差自动抵消。但ADS1110的内部基准和分压电路的V_ref是同一个源吗不是。ADS1110的内部基准只给ADC用分压电路的V_ref需要外部提供。如果外部V_ref和内部基准不一致比率测量法失效。解决办法是用ADS1110的内部基准输出V_ref引脚给分压电路供电这样两者同源比率测量成立。但ADS1110的V_ref引脚驱动能力有限只能提供几微安需要加缓冲器。第三做多点温度补偿。把ADS1110和PT1000放在同一个温度场里测量ADS1110的芯片温度可以用内部温度传感器或者外接NTC然后根据温漂曲线做补偿。这种方法能把温漂误差压到0.02℃以内但增加了复杂度。最后分享一个小技巧ADS1110的转换结果里低几位其实是噪声。你可以连续读16次去掉最大和最小值剩下的取平均这样能把有效分辨率提高约2位。代价是响应时间从64ms变成1s。对于温度这种慢变量1s的响应时间完全可以接受。我实测下来16次平均后0.1℃的稳定性从±0.05℃提升到±0.02℃效果很明显。