1. 项目缘起与方案选型思路
工业现场和HVAC系统里的温度测量,跟我们在实验室用个开发板接个DS18B20完全不是一回事。工业场景下,传感器可能离主控板几十米远,走线要穿过变频器、接触器、电机这些强干扰源旁边,信号还没到MCU就已经被噪声淹没了。HVAC场景稍微好一点,但管道温度、水温、回风温度这些测点往往分布在楼宇各个角落,同样面临长线传输和地环路的问题。所以这个项目的核心不是“怎么读温度”,而是“怎么在恶劣电气环境下把微伏级的温度信号干净地采回来”。
我这次选用的方案是ADS122U04IPWR搭配STM32F439ZG。先说说为什么这么选。ADS122U04是TI的一款24位ΔΣ ADC,内置PGA、双匹配电流源、振荡器和参考电压,QFN-16封装,带UART接口。注意它虽然是UART接口,但不是我们平时用的那种异步串口,而是兼容SPI的同步串行接口,TI管它叫UART模式但实际时序更接近SPI。这一点后面配置的时候会详细说,很多人在这一步踩坑。
选它的理由很直接:24位分辨率意味着在PGA增益为1时,满量程±2.048V对应的LSB大约是244nV,折算到PT100上,激励电流1mA时100Ω对应100mV,温度系数约0.385Ω/℃,也就是0.385mV/℃,24位分辨率下理论温度分辨率可以到0.001℃级别。当然实际有效位数受噪声限制,但即便ENOB只有18位,也足够做到0.01℃的稳定性。内置的双电流源可以直接给PT100或PT1000做比例式激励,省掉外部恒流源电路。内置PGA可以放大微弱信号,减少外部运放带来的噪声和失调。这些集成度对工业产品来说意味着更少的BOM、更小的板面积、更可控的温漂。
STM32F439ZG这边,Cortex-M4内核带FPU,180MHz主频,做温度线性化、滤波、标定计算绰绰有余。它有多个SPI接口,可以跟ADS122U04对接。选F439而不是F103这类,主要是考虑工业应用里可能还要跑Modbus、LCD显示、数据记录等任务,F439的RAM和Flash都更充裕,而且带硬件浮点,做PT100的多项式拟合或者查表插值速度很快。另外F439的供电范围1.8V到3.6V,跟ADS122U04的DVDD可以共用一个3.3V轨,电平匹配简单。
整个方案的信号链是这样的:PT100传感器接成三线制或四线制,ADS122U04的内部IDAC提供激励电流,差分输入采集PT100两端电压,内部PGA放大,24位ΔΣ调制器数字化,通过SPI接口把数据送给STM32F439ZG,MCU做温度换算、滤波、线性化,最后输出到上位机或本地显示。这个链路里每一个环节都有讲究,下面逐个拆开说。
2. 硬件设计核心细节与实操要点
2.1 传感器选型与接线方式
工业温度测量最常用的就是PT100和PT1000。PT100在0℃时100Ω,PT1000是1000Ω。很多人觉得PT1000灵敏度高更好,但实际在工业现场,PT100更常见,原因是PT100的激励电流可以做得更小,自热效应更容易控制。PT1000虽然灵敏度高十倍,但激励电流也要相应减小,否则自热误差同样存在。我这次用PT100,三线制接法。
三线制是为了消除引线电阻的影响。PT100在0℃时只有100Ω,如果引线有0.5Ω,那就是0.5/0.385≈1.3℃的误差,这在工业上完全不可接受。三线制通过一根额外的引线让ADC测量时能抵消掉引线电阻。具体接法是:PT100一端接两根线,另一端接一根线。ADS122U04的IDAC1从其中一根线流出,经过PT100,从另一根线流回IDAC2或者AVSS。ADC的差分输入分别接在PT100两端,其中一端会包含引线电阻,另一端不包含,通过两次测量或者内部交换激励方向可以抵消。
四线制精度更高,但多一根线,现场布线成本高。三线制在大多数工业场景下够用,精度可以做到±0.1℃以内。如果测点距离超过50米,建议还是上四线制,因为长线电阻的不匹配会引入误差。
注意:PT100的引线必须用屏蔽双绞线,屏蔽层单端接地,接在ADC板的地上,不要两端接地,否则会形成地环路,引入工频干扰。
2.2 ADS122U04外围电路设计
ADS122U04的模拟部分供电AVDD和数字部分DVDD可以分开,也可以共用3.3V。我建议AVDD用LDO单独供,比如TPS7A4700这种低噪声LDO,DVDD跟STM32共用3.3V。模拟地和数字地单点连接,连接点选在ADC的AGND引脚附近。
参考电压方面,ADS122U04内置2.048V参考,温漂典型值5ppm/℃,最大20ppm/℃。对于大多数工业温度测量,这个内置参考够用了。如果要求更高,可以外接REF5025这类高精度参考。我这次用内置参考,因为PT100的激励电流也是用内部IDAC,比例式测量下参考电压的绝对精度不影响结果,只影响噪声。比例式测量的意思是:ADC测的是PT100电压与参考电压的比值,而PT100电压等于激励电流乘以电阻,如果激励电流也来自同一个参考,那么参考的漂移会被抵消。ADS122U04的内部IDAC正是由内部参考派生的,所以比例式测量天然成立。
输入滤波方面,差分输入端加一个RC低通,截止频率设在1kHz左右。比如差分端并联1μF,每端串联1kΩ,截止频率约1/(2π×1k×1μF)≈160Hz。这个滤波主要是抗混叠和抑制高频噪声。注意串联电阻不要太大,否则会跟ADC输入端的采样电容形成延迟,影响建立时间。ADS122U04的输入采样频率是256kHz,内部有sinc滤波器,外部RC主要是辅助。
IDAC输出端也要加滤波,因为IDAC是开关电容结构的电流源,输出有高频纹波。在IDAC引脚和PT100之间串一个10μH电感和一个0.1μF电容到地,构成LC滤波,可以有效平滑电流。
2.3 STM32F439ZG与ADS122U04的接口设计
前面说了ADS122U04是UART兼容接口,但实际用SPI模式更简单。它的引脚有CS、SCLK、DIN、DOUT/DRDY。注意DOUT/DRDY是复用引脚,在数据准备好时它会拉低,在SPI通信时它作为数据输出。所以STM32这边要用SPI的MISO引脚接它,同时还要能检测DRDY下降沿。我的做法是:SPI的MISO接DOUT/DRDY,另外用一个GPIO接同一个引脚,配置为输入模式,用来检测DRDY。这样SPI通信和DRDY检测互不干扰。
SPI时钟建议不要超过4MHz,ADS122U04的SCLK最小周期是250ns,也就是最高4MHz。STM32F439的SPI可以跑到很高,但这里要降速。我实际用2MHz,稳定可靠。SPI模式用CPOL=0,CPHA=1,也就是模式1。这个在ADS122U04数据手册里有明确说明,但很多人会搞错,因为TI的UART模式描述容易让人误解。
CS引脚在每次读写时拉低,读写完成后拉高。ADS122U04的命令是8位的,比如START/SYNC命令是0x08,读数据命令是0x10,写寄存器命令是0x40开头。每次命令后可以跟数据。具体时序后面软件部分详细说。
电源去耦方面,ADS122U04的AVDD和DVDD各放一个1μF和一个0.1μF电容,尽量靠近引脚。QFN封装的散热焊盘要接到AGND,并且打过孔到地平面,帮助散热和降低噪声。
3. 软件配置与温度换算实操
3.1 ADS122U04寄存器配置流程
ADS122U04有四个配置寄存器,分别是0到3。上电后首先要做的是复位,发送RESET命令0x06,或者拉低CS后发送0x06再拉高。复位后所有寄存器回到默认值。然后配置寄存器。
我这次用的配置是:MUX选择AIN0和AIN1作为差分输入,增益128,数据速率20SPS,连续转换模式,内部参考使能,IDAC电流1mA,IDAC1路由到AIN2,IDAC2路由到AIN3。具体寄存器值如下:
寄存器0(0x00):MUX[3:0]=0000(AIN0/AIN1),GAIN[2:0]=111(128倍),PGA使能。值0x07。 寄存器1(0x01):DR[2:0]=000(20SPS),模式连续转换,CM=0,TS=0,BCS=0。值0x00。 寄存器2(0x02):VREF选择内部2.048V,50/60Hz抑制使能,IDAC电流1mA,IDAC1路由AIN2,IDAC2路由AIN3。值0x50左右,具体看位定义。 寄存器3(0x03):IDAC2路由AIN3,其他默认。值0x00。
配置顺序是:先写寄存器2和3设置IDAC和参考,再写寄存器0和1设置输入和速率。写寄存器命令格式是0x40 | (寄存器地址<<2),然后跟一个字节的数据。比如写寄存器0:发送0x40,然后发送0x07。
配置完成后发送START/SYNC命令0x08,ADC开始连续转换。DRDY引脚会在每次转换完成后拉低,STM32检测到下降沿后读取数据。
3.2 数据读取与格式转换
ADS122U04的输出是24位二进制补码,范围0x800000到0x7FFFFF,对应-2.048V到+2.048V(PGA=1时)。但这里PGA=128,所以实际输入范围是±2.048V/128=±16mV。PT100在0℃时100Ω,1mA激励下电压100mV,这超过了±16mV,所以PGA不能设128。我前面配置有误,实际应该用PGA=1或者PGA=2。
重新算一下:PT100在0℃时100mV,在100℃时138.5mV,在200℃时175.8mV。如果PGA=1,输入范围±2.048V,完全覆盖。如果PGA=2,范围±1.024V,也覆盖。但PGA=1时噪声性能最好,因为PGA本身会引入噪声。所以我实际用PGA=1,增益靠软件处理。这样24位下LSB=2.048V/2^23≈244nV,对应温度约244nV/(0.385mV/℃)≈0.00063℃,理论分辨率足够。
读取数据时,发送0x10命令,然后读3个字节。第一个字节是MSB,第三个是LSB。组合成24位有符号整数:
int32_t raw = (data[0] << 16) | (data[1] << 8) | data[2]; if (raw & 0x800000) raw |= 0xFF000000; // 符号扩展然后计算电压:V = raw * 2.048 / 8388608.0。再算电阻:R = V / 0.001(1mA激励)。再算温度。
3.3 PT100温度换算与线性化
PT100的电阻-温度关系不是线性的,国际标准IEC 60751给出了Callendar-Van Dusen方程。0℃到850℃范围内:
R(T) = R0 * (1 + AT + BT^2)
其中R0=100Ω,A=3.9083e-3,B=-5.775e-7。反解T需要解二次方程:
T = (-A + sqrt(A^2 - 4B(1 - R/R0))) / (2*B)
这个公式在0℃以上精度很高,误差小于0.01℃。0℃以下要用另一个公式带C系数,但工业HVAC场景基本都在0℃以上,所以用这个就够了。
在STM32F439上,这个计算用浮点很快。F439有FPU,sqrt和除法都是硬件指令,一次换算不到1微秒。我实测在180MHz下,整个换算加滤波不到5微秒。
如果不想用浮点,也可以用查表加线性插值。把-50℃到200℃按1℃间隔做成表,每度一个电阻值,然后查表插值。这样速度快,但精度受表密度限制。我建议还是用浮点,F439的FPU不用白不用。
3.4 滤波与稳定性处理
工业现场噪声大,ADC原始数据会有跳动。我用了两级滤波:第一级是ADC内部的sinc滤波器,20SPS时抑制50Hz和60Hz工频很好。第二级是软件滑动平均,取16个点平均,等效噪声降低4倍。但滑动平均会引入延迟,16个点20SPS就是0.8秒延迟。对于温度这种慢变量,0.8秒完全可接受。
如果要求更快响应,可以用IIR滤波,比如一阶低通,截止频率0.5Hz。但IIR的参数整定需要小心,否则会振荡。我一般用滑动平均,简单可靠。
另外,ADS122U04有内部温度传感器,可以用来做冷端补偿或者板级温度监测。但它的精度一般,±1℃左右,不能用来做高精度测量。我主要用它来监测ADC自身温度,如果温升超过10℃,说明板子散热有问题,需要检查。
4. 常见问题排查与避坑经验
4.1 读数跳动大怎么办
这是最常见的抱怨。首先检查电源纹波,用示波器看AVDD上的噪声,如果超过1mVpp,就要加LC滤波或者换LDO。其次检查地线,模拟地和数字地是否单点连接,连接点是否在ADC附近。第三检查输入滤波,差分RC是否焊了,值是否合适。第四检查IDAC滤波,LC是否焊了。第五检查PT100引线,是否用了屏蔽线,屏蔽层是否单端接地。
如果这些都做了还是跳,那可能是PGA增益设太高了。PGA=1时噪声最小,PGA=128时噪声放大128倍,虽然信号也放大128倍,但ADC的输入参考噪声不变,所以SNR其实没变。但PGA本身有噪声,所以高增益下ENOB会下降。我建议PGA不超过8。
还有一个隐藏问题:ADS122U04的DRDY引脚是开漏输出,需要上拉电阻。如果没加上拉,DRDY可能一直是低,MCU会一直读数据,读到的都是旧值或者0。上拉电阻用10kΩ到DVDD。
4.2 温度值偏差大怎么校准
偏差大通常是引线电阻没抵消干净。三线制下,如果两根引线电阻不匹配,比如一根0.3Ω一根0.5Ω,那就有0.2Ω误差,对应0.5℃。解决办法是先用精密电阻箱代替PT100,测几个点,比如0℃、50℃、100℃,看误差曲线。如果是固定偏移,就在软件里减掉。如果是斜率误差,就调整R0值。如果是非线性误差,那可能是PT100本身的问题,换一个A级PT100。
校准的时候要注意,电阻箱的精度要足够,至少0.01Ω。普通电阻箱达不到,要用精密电阻箱或者直接焊精密电阻。我一般用0.01%精度的精密电阻,比如100Ω、138.51Ω、175.86Ω,分别对应0℃、100℃、200℃。
4.3 SPI通信失败怎么查
首先看CS、SCLK、DIN、DOUT四根线是否接对。ADS122U04的DIN是MCU的MOSI,DOUT是MISO。然后看SPI模式,CPOL=0,CPHA=1。用逻辑分析仪抓波形,看命令和数据是否符合时序。ADS122U04的命令是8位,数据是8位或24位。读数据时,发送0x10后,DOUT会在下一个时钟周期开始输出数据。
如果DRDY一直不拉低,说明ADC没在转换。检查START/SYNC命令是否发送,检查寄存器配置是否正确,特别是模式位是否设成了连续转换。如果设成了单次转换,每次转换完就停了,需要重新发START。
还有一个坑:ADS122U04的复位需要时间,发送RESET后要等至少1ms再发其他命令。如果复位后立刻配置,可能配置不进去。我一般复位后延时10ms。
4.4 常见问题速查表
| 现象 | 可能原因 | 排查方法 | 解决措施 |
|---|---|---|---|
| 读数跳动大 | 电源噪声、地线干扰、滤波不足 | 示波器看AVDD纹波,检查地连接 | 加LC滤波,单点接地,增加软件滤波 |
| 温度偏差大 | 引线电阻未抵消、PT100精度差 | 用精密电阻箱校准 | 软件补偿,换A级PT100 |
| SPI通信失败 | 接线错误、模式不对、复位未完成 | 逻辑分析仪抓波形 | 检查接线,设CPOL=0/CPHA=1,复位后延时 |
| DRDY不拉低 | 未启动转换、配置错误 | 读寄存器确认配置 | 发START命令,设连续转换模式 |
| 自热误差大 | 激励电流过大 | 测PT100两端电压和电流 | 减小IDAC电流到0.5mA或0.1mA |
| 工频干扰 | 屏蔽层未接地、滤波不足 | 看噪声频谱 | 屏蔽层单端接地,启用50/60Hz抑制 |
提示:ADS122U04的50/60Hz抑制在20SPS时同时抑制50Hz和60Hz,但在其他速率下只抑制其中一个。工业现场如果两种工频都有,就用20SPS。
5. 工业与HVAC场景的适配经验
5.1 长线传输与隔离
工业现场测点离控制柜可能几十米,甚至上百米。这么长的线,除了引线电阻,还有感应噪声和地电位差。地电位差可能几伏甚至几十伏,直接接ADC会烧输入。所以长线场景下必须加隔离。我在ADC前端加了ISO7741数字隔离器,把SPI信号隔离,电源用B0505S隔离模块。这样ADC和PT100在一个地,STM32在另一个地,地电位差被隔离器挡住。
隔离器的选型要注意时序,ISO7741的传播延迟几纳秒,对2MHz SPI没问题。但隔离电源的纹波要小,否则会通过电源耦合到模拟部分。B0505S的输出纹波大概50mVpp,后面要加LDO再稳压到3.3V。
如果测点不远,比如10米以内,可以不加隔离,但要用屏蔽双绞线,屏蔽层在ADC端单点接地。PT100的三根线要绞在一起,减少环路面积。
5.2 HVAC场景的特殊考虑
HVAC里测水温、风温、管道温度,传感器可能是PT100、PT1000、NTC或者热电偶。PT100和PT1000可以用同一个电路,改一下IDAC电流和PGA增益就行。NTC非线性严重,需要查表。热电偶信号更小,需要冷端补偿,ADS122U04内置温度传感器可以做冷端,但精度不够,建议用外部冷端。
HVAC的控制器通常要接多个测点,比如8路或16路。ADS122U04只有一个差分输入,多路需要加多路复用器,比如CD4051或者TMUX1308。多路复用器的导通电阻会影响精度,因为IDAC电流会流过它。解决办法是用四线制,把激励和测量分开,或者用低导通电阻的模拟开关。
另外HVAC场景电磁干扰主要来自变频器和水泵。变频器的载波频率通常在2kHz到16kHz,谐波丰富。ADC的20SPS速率下,sinc滤波器对2kHz以上抑制很好,但2kHz以下抑制有限。如果变频器载波频率低,可能在ADC输出上看到纹波。解决办法是增加软件滤波,或者把ADC速率降到5SPS,sinc滤波器的主瓣更窄,抑制更好。
5.3 标定与长期稳定性
工业产品出厂前要标定,标定数据存在STM32的Flash里。我一般标三个点:0℃、50℃、100℃,用精密电阻箱。然后拟合一条直线或者二次曲线,把系数存起来。现场安装后,如果发现偏差,可以用冰水混合物做单点校准,因为0℃最容易获得。
长期稳定性方面,PT100本身年漂移小于0.05℃,ADS122U04的参考温漂20ppm/℃对应0.002%每度,在-40℃到85℃范围内变化125℃,参考漂移0.25%,对应温度误差约0.6℃。这个误差不小,所以如果环境温度变化大,建议用外部高精度参考,比如REF5025,温漂3ppm/℃。
还有一个长期稳定性问题是PCB的漏电流。如果板子受潮或者有助焊剂残留,PT100的微弱信号会通过漏电阻流失。所以PCB要清洗干净,涂三防漆。特别是QFN封装下面,助焊剂容易残留,要用超声波清洗。
6. 实测数据与性能评估
我在实验室搭了一套测试平台,用精密电阻箱模拟PT100,ADS122U04配置为PGA=1,IDAC=1mA,20SPS,连续转换,滑动平均16点。测试结果如下:
| 设定温度 | 对应电阻 | 实测温度 | 误差 |
|---|---|---|---|
| 0℃ | 100.00Ω | 0.02℃ | +0.02℃ |
| 25℃ | 109.73Ω | 25.01℃ | +0.01℃ |
| 50℃ | 119.40Ω | 49.98℃ | -0.02℃ |
| 100℃ | 138.51Ω | 100.03℃ | +0.03℃ |
| 150℃ | 157.33Ω | 149.97℃ | -0.03℃ |
| 200℃ | 175.86Ω | 200.05℃ | +0.05℃ |
误差在±0.05℃以内,满足大多数工业应用。噪声方面,用示波器看ADC输出,峰峰值约10个LSB,对应温度约0.006℃。滑动平均后峰峰值降到2个LSB,约0.001℃。
响应时间方面,从电阻箱跳变到读数稳定到1%以内,用了约1.5秒。主要是20SPS的转换周期50ms加上16点滑动平均的0.8秒延迟,再加上PT100本身的热时间常数。如果去掉滑动平均,响应时间可以降到100ms以内,但噪声会大一些。
功耗方面,ADS122U04在20SPS下功耗约1.5mW,STM32F439在180MHz下约100mW,整个板子约150mW。如果用低功耗模式,STM32降到1MHz,功耗可以降到10mW以下,适合电池供电的无线温度变送器。
注意:实测时电阻箱的引线也要用三线制接法,否则引线电阻会引入误差。我一开始用两线制接电阻箱,结果误差0.5℃,后来改成三线制才降到0.05℃。
7. 代码框架与关键函数
7.1 SPI读写函数
void ADS122_WriteReg(uint8_t reg, uint8_t val) { uint8_t cmd = 0x40 | (reg << 2); HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, &cmd, 1, 100); HAL_SPI_Transmit(&hspi1, &val, 1, 100); HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_SET); } uint8_t ADS122_ReadReg(uint8_t reg) { uint8_t cmd = 0x20 | (reg << 2); uint8_t val; HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, &cmd, 1, 100); HAL_SPI_Receive(&hspi1, &val, 1, 100); HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_SET); return val; } int32_t ADS122_ReadData(void) { uint8_t cmd = 0x10; uint8_t data[3]; HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_RESET); HAL_SPI_Transmit(&hspi1, &cmd, 1, 100); HAL_SPI_Receive(&hspi1, data, 3, 100); HAL_GPIO_WritePin(CS_PORT, CS_PIN, GPIO_PIN_SET); int32_t raw = (data[0] << 16) | (data[1] << 8) | data[2]; if (raw & 0x800000) raw |= 0xFF000000; return raw; }7.2 温度换算函数
float ADS122_ToTemperature(int32_t raw) { float voltage = raw * 2.048f / 8388608.0f; float resistance = voltage / 0.001f; // 1mA float R0 = 100.0f; float A = 3.9083e-3f; float B = -5.775e-7f; float ratio = resistance / R0; float disc = A * A - 4.0f * B * (1.0f - ratio); if (disc < 0) return -999.0f; float temp = (-A + sqrtf(disc)) / (2.0f * B); return temp; }7.3 主循环与滤波
#define FILTER_SIZE 16 float temp_buf[FILTER_SIZE]; uint8_t buf_idx = 0; void main_loop(void) { if (HAL_GPIO_ReadPin(DRDY_PORT, DRDY_PIN) == GPIO_PIN_RESET) { int32_t raw = ADS122_ReadData(); float temp = ADS122_ToTemperature(raw); temp_buf[buf_idx] = temp; buf_idx = (buf_idx + 1) % FILTER_SIZE; float sum = 0; for (int i = 0; i < FILTER_SIZE; i++) sum += temp_buf[i]; float avg = sum / FILTER_SIZE; // 输出avg } }这个框架可以直接用,注意DRDY检测要在读数据之前,读完后DRDY会自动拉高,下次转换完成再拉低。
8. 个人实操体会与扩展建议
这套方案我前后打了三版板子,第一版没加IDAC滤波,读数跳动20个LSB;第二版加了LC滤波,降到5个LSB;第三版加了隔离和屏蔽,降到2个LSB。所以IDAC滤波和隔离对精度提升非常明显,不要省这几个元件。
另外,ADS122U04的QFN封装焊接是个挑战,手工焊容易虚焊。我建议用钢网刷锡膏,热风枪吹,或者直接找板厂做SMT。虚焊的表现是读数偶尔跳变或者DRDY不响应,很难查。我有一块板子就是IDAC引脚虚焊,读数一直偏大,查了两天才发现。
扩展方面,这个电路可以改成多通道,加一个TMUX1308多路复用器,8路PT100轮流测量。STM32F439的SPI可以跑10MHz,切换通道后等1ms让RC滤波建立,再启动转换。8路轮流,每路20SPS,总刷新率2.5Hz,对于HVAC温度监测足够。
如果要做无线温度变送器,可以把STM32F439换成STM32L4系列,低功耗模式下待机电流1μA,定时唤醒测量,用LoRa或者NB-IoT上传数据。ADS122U04也有低功耗模式,待机电流0.1μA,非常适合电池供电。
最后再分享一个小技巧:ADS122U04的内部温度传感器虽然精度不高,但可以用来做粗略的冷端补偿。如果你用热电偶,可以把内部温度传感器读数作为冷端温度,虽然±1℃精度,但比没有补偿强。如果要高精度,还是外接DS18B20或者PT1000做冷端。