news 2026/11/5 1:06:49

工业与HVAC高精度温度测量:ADS122U04与PIC24FV16KA301方案实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
工业与HVAC高精度温度测量:ADS122U04与PIC24FV16KA301方案实战

1. 工业与HVAC温度测量方案的整体设计思路

工业现场和HVAC系统的温度测量,跟我们在实验室里拿个万用表测室温完全是两码事。工业场景下,传感器可能离控制板几十米远,走线要穿过变频器、接触器、电机这些强干扰源旁边;HVAC系统里,你测的可能是管道里的水温、风道里的空气温度,甚至是冷媒管路的表面温度,测温范围从零下几十度到一百多度都有。这种场景下,测量方案的核心诉求就三个词:抗干扰、低漂移、够便宜。

我这次选用的组合是ADS122U04IPWR加PIC24FV16KA301。先说这颗ADC,ADS122U04是TI的一款24位ΔΣ型模数转换器,带UART接口,内置PGA(可编程增益放大器)、两个可编程激励电流源(IDAC)、以及一个温度传感器。PWR后缀是TSSOP-16封装,适合空间紧凑的板子。它最大的好处是把很多模拟前端的东西集成进去了,比如你接RTD(铂电阻)做比例式测量时,激励电流源和参考电压可以共用,直接消除激励源的漂移误差。PIC24FV16KA301是Microchip的一款16位MCU,带12位ADC、运放、比较器,5V供电,工业温度范围-40到+125°C,本身就很适合工业环境。它在这里的角色是系统主控:配置ADS122U04、读取转换结果、做线性化计算、驱动显示或通信。

为什么不用MCU自带的12位ADC直接测?因为工业测温对精度要求往往在0.1°C级别,12位ADC在5V参考下,1LSB就是1.22mV,对应PT100大约0.3°C的分辨率,再加上MCU内部ADC的噪声和温漂,实际有效位数可能只有9到10位,根本不够看。而ADS122U04在20SPS(每秒采样20次)时能给出21.7位有效分辨率,换算到PT100上就是0.005°C级别的分辨力,差距是数量级的。

整个方案的信号链是这样的:PT100或热电偶传感器 → 模拟前端(滤波、保护) → ADS122U04做高精度数字化 → UART送给PIC24FV16KA301 → MCU做温度换算和线性化 → 输出到显示或上位机。下面我会把这个链条上的每个环节拆开讲,包括我实际调试中踩过的坑。

2. 核心器件选型与关键参数解析

2.1 ADS122U04IPWR到底强在哪里

ADS122U04的核心是一个24位ΔΣ调制器,配合一个灵活的多路复用输入。它支持四种测量模式:单端、差分、以及两组差分输入。对于温度测量来说,最常用的是差分输入,因为差分能有效抑制共模干扰,尤其是工业现场那种地电位差很大的情况。

它内置的PGA增益从1到128可调。这个增益怎么用?举个例子,用K型热电偶测温,典型输出是41μV/°C,100°C温差才4.1mV。如果直接用增益1,ADC的满量程是±2.048V(用内部2.048V参考),那4.1mV只占满量程的0.2%,有效位数浪费严重。这时候把PGA设成64或128,信号就被放大到接近满量程,分辨率直接提升。

另一个关键功能是双匹配IDAC电流源。做RTD测量时,你需要给RTD注入一个激励电流,然后测量它两端的电压。传统做法是用一个恒流源,但恒流源的精度和温漂会直接影响测量结果。ADS122U04的做法是:IDAC1和IDAC2分别从两个引脚输出电流,你可以让IDAC1流过RTD,IDAC2流过一颗精密参考电阻,然后把参考电阻两端的电压作为ADC的参考电压。这样RTD上的电压和参考电压都跟同一个激励电流成正比,电流的漂移就被比值消掉了。这就是所谓的比例式测量,是RTD测温精度能做到0.01°C级别的关键。

注意:IDAC的电流值有10μA、50μA、100μA、250μA、500μA、1000μA、1500μA几档。选多大要看RTD的功耗限制。PT100在1000μA下自身发热约0.1mW,自热误差很小;但如果用PT10(10Ω)或者更小的RTD,电流就要降下来,否则自热误差会很明显。

ADS122U04还有一个内部温度传感器,精度大约0.5°C,可以用来做冷端补偿或者板级温度监测,但不要指望它做高精度测量,它的主要价值是给热电偶做冷端补偿提供一个参考。

2.2 PIC24FV16KA301的角色定位

PIC24FV16KA301是一颗16位MCU,16KB Flash、2KB RAM,带12位ADC、两个运放、三个比较器。它在这个方案里不直接参与模拟测量,而是做数字处理。为什么选它而不是更便宜的8位MCU?因为温度线性化计算需要浮点或者至少32位定点运算,尤其是热电偶的NIST多项式,系数多、阶数高,8位MCU跑起来很吃力。PIC24是16位架构,配合XC16编译器,做这些计算很轻松。

它还有一个好处是5V供电。工业现场很多传感器和变送器是5V或24V系统,5V MCU跟ADS122U04(模拟供电2.7到5.5V)可以直接对接,不需要额外的电平转换。另外它的UART、SPI、I2C外设齐全,跟ADS122U04的UART通信只需要两根线。

2.3 传感器选型:PT100还是热电偶

这是方案设计时第一个要回答的问题。PT100(铂电阻)精度高、线性度好、稳定性强,适合-200到+600°C范围,但响应速度慢,而且需要激励电流。热电偶响应快、测温范围宽(K型可以到1372°C)、成本低,但输出信号极小、需要冷端补偿、线性度差。

在HVAC场景里,水温、风温测量大多用PT100或PT1000,因为温度范围在-50到+150°C之间,PT100的精度优势明显。工业过程控制里,高温炉、锅炉烟道这些地方用热电偶更多。我这个方案两种都支持,因为ADS122U04的输入多路复用和PGA配置可以覆盖两种传感器的信号范围。

对比项PT100K型热电偶
测温范围-200~+600°C-200~+1372°C
灵敏度约385μV/°C约41μV/°C
精度(典型)±0.1°C±1~2°C
线性度好差,需多项式修正
冷端补偿不需要必须
激励需求需要电流源不需要
成本较高低

3. 硬件电路设计与实操要点

3.1 模拟前端电路怎么搭

PT100的接口电路我采用的是三线制比例式测量。三线制的目的是消除引线电阻的影响。PT100在0°C时是100Ω,而一根普通导线的电阻可能有0.1到1Ω,如果不补偿,1Ω引线电阻就带来约2.6°C的误差,这在工业场景里是不可接受的。

具体连接方式:IDAC1从ADS122U04的引脚输出,经过一根引线到PT100的一端;PT100的另一端经过第二根引线回到ADC的AIN0;第三根引线从PT100的一端直接连到AIN1。同时IDAC2流过一颗精密参考电阻Rref(比如1.65kΩ,0.1%精度,5ppm/°C温漂),Rref两端的电压接到ADC的REF+和REF-。

这里有个细节:Rref的选值要跟IDAC电流匹配。假设IDAC设为500μA,PT100在0°C时是100Ω,两端电压是50mV。如果Rref用1.65kΩ,那参考电压是825mV。ADC的满量程输入是±Vref/增益,增益设成1时,输入范围是±825mV,PT100的50mV只占6%,分辨率浪费了。所以增益要设成16,这样输入范围变成±51.6mV,50mV刚好接近满量程。这就是为什么PGA增益的选择要跟传感器信号幅度和参考电压一起算。

热电偶的接口电路就简单得多:热电偶的正负极直接接到ADC的差分输入,PGA增益设成128(因为信号只有几十μV到几十mV)。但冷端补偿是必须的,我后面会讲怎么用ADS122U04的内部温度传感器或者外接一颗LM35来做。

3.2 电源和去耦设计

ADS122U04有模拟电源AVDD和数字电源DVDD,我建议用独立的LDO分别供电,或者至少用磁珠隔离。模拟电源的噪声直接影响ADC的转换结果,尤其是做24位转换时,电源上的几十μV纹波就能让最后几位跳变。

去耦电容的布局很关键。每个电源引脚旁边放一个0.1μF的陶瓷电容,尽量靠近引脚,另外在电源入口处放一个10μF的钽电容或MLCC做储能。AVDD和DVDD之间不要共用一条走线,从LDO出来就分开。

实操心得:我第一版板子把AVDD和DVDD接在同一个3.3V上,结果ADC的噪声底比数据手册标称值高了将近10倍。后来改成AVDD用一颗低噪声LDO(比如TPS7A4700),DVDD用另一颗普通LDO,噪声立刻降下来了。这个坑花了我两天时间排查,希望大家不要重复。

3.3 PCB布局的注意事项

混合信号PCB布局的核心原则是:模拟区域和数字区域分开,地平面单点连接。ADS122U04下面不要走数字信号线,尤其是时钟线。UART的TX和RX线要远离模拟输入引脚,最好走在板子另一层,中间用地平面隔开。

PT100的引线接入端子后,要先经过RC滤波再进ADC。我通常用1kΩ电阻串联加100nF电容到地,截止频率约1.6kHz,能滤掉大部分高频干扰,又不会影响温度信号的带宽(温度变化本身很慢,带宽几Hz就够了)。

参考电阻Rref的布局也很讲究。它要靠近ADC的REF+和REF-引脚,走线尽量短且对称。Rref本身要选低温漂的,我用的是Vishay的PTF系列,0.1%精度、5ppm/°C,虽然贵一点,但它是整个测量精度的基准,省不得。

4. 固件实现:从寄存器配置到温度换算

4.1 ADS122U04的寄存器配置流程

ADS122U04通过UART通信,上电后需要配置四个寄存器:配置寄存器0到3。我以PT100三线制、增益16、20SPS、IDAC 500μA为例,给出配置值。

配置寄存器0(地址0x00):

  • 多路复用器MUX[3:0]:选AIN0和AIN1差分输入,对应值0x00
  • 增益GAIN[2:0]:增益16,对应值0x04
  • PGA旁路:使能PGA,值0

配置寄存器1(地址0x01):

  • 数据速率DR[2:0]:20SPS,对应值0x00
  • 工作模式:正常模式
  • 转换模式:单次或连续,我选连续
  • 温度传感器:关闭
  • burnout电流源:关闭
  • 参考电压选择:外部参考,对应值0

配置寄存器2(地址0x02):

  • IDAC电流值:500μA,对应值0x04
  • IDAC1路由:AIN0,IDAC2路由:AIN1(用于三线制引线补偿)

配置寄存器3(地址0x03):

  • IDAC2路由继续配置
  • 其他保留位

实际写寄存器时,每个寄存器写一个字节,通过UART发送命令0x40+寄存器地址,然后跟一个数据字节。比如写配置寄存器0,发送0x40、0x00,再发送配置值。

// PIC24FV16KA301 UART发送配置示例 void ADS122U04_WriteReg(uint8_t reg, uint8_t value) { UART1_SendByte(0x40 | (reg << 2)); // 写命令 + 寄存器地址 UART1_SendByte(value); __delay_ms(1); // 等待ADC处理 }

4.2 读取转换结果与数据格式处理

ADS122U04的输出是24位二进制补码,范围从0x800000到0x7FFFFF,对应-Vref/Gain到+Vref/Gain。读取时发送0x10命令(RDATA),然后连续读三个字节,高位在前。

int32_t ADS122U04_ReadData(void) { uint8_t buf[3]; int32_t result = 0; UART1_SendByte(0x10); // RDATA命令 buf[0] = UART1_ReceiveByte(); buf[1] = UART1_ReceiveByte(); buf[2] = UART1_ReceiveByte(); result = ((int32_t)buf[0] << 16) | ((int32_t)buf[1] << 8) | buf[2]; if (result & 0x800000) { // 负数,扩展符号位 result |= 0xFF000000; } return result; }

拿到原始码值后,要换算成电压,再换算成电阻,再换算成温度。以PT100为例:

电压 = (原始码值 / 2^23) × (Vref / Gain)

电阻 = 电压 / IDAC电流

温度 = (电阻 - 100) / 0.385 (近似线性,高精度需要查表或Callendar-Van Dusen方程)

Callendar-Van Dusen方程是PT100的标准换算公式:

  • T ≥ 0°C时:R(T) = R0 × (1 + A×T + B×T²)
  • T < 0°C时:R(T) = R0 × (1 + A×T + B×T² + C×(T-100)×T³)

其中A=3.9083×10^-3,B=-5.775×10^-7,C=-4.183×10^-12。反解温度需要迭代或者用分段线性插值。我在PIC24上用的是查表加线性插值,每10°C一个点,精度足够0.01°C。

4.3 热电偶的冷端补偿与线性化

热电偶的冷端补偿原理是:热电偶输出的是热端和冷端的温差电动势,要得到热端绝对温度,必须知道冷端温度,然后加上冷端对应的电动势。具体做法是:用ADS122U04的内部温度传感器或者外接LM35测出冷端温度T_cold,查K型热电偶分度表得到T_cold对应的电动势E_cold,然后实际热端电动势E_hot = E_measured + E_cold,再用E_hot查表得到热端温度。

K型热电偶的NIST多项式有十几阶,在PIC24上直接算太慢。我的做法是把-200到+1372°C分成若干段,每段用低阶多项式拟合,误差控制在0.1°C以内。比如0到500°C这一段,用四阶多项式就够了。

注意:热电偶的冷端补偿精度直接影响整体精度。如果冷端补偿有1°C误差,测量结果就有1°C误差。所以冷端温度传感器的精度和它跟热电偶接线端子的热耦合很重要。我通常把冷端传感器贴在接线端子旁边,中间涂导热硅脂,确保两者温度一致。

5. 常见问题与排查技巧实录

5.1 读数跳动大怎么办

这是最常见的问题。24位ADC读数跳动,原因可能有很多。我按排查顺序列一下:

第一,检查参考电压是否稳定。用示波器看REF+和REF-之间的电压,如果有几十μV的纹波,读数肯定跳。解决办法是加大参考端的滤波电容,或者在Rref旁边并联一个1μF的陶瓷电容。

第二,检查IDAC电流是否稳定。IDAC的输出电流对电源电压和温度敏感,如果AVDD不稳,IDAC就会漂。确保AVDD的LDO有足够的PSRR。

第三,检查输入滤波。PT100引线如果太长,会引入工频干扰。在ADC输入端加共模扼流圈或者RC滤波。

第四,检查ADC的转换速率和滤波设置。20SPS时ADC内部有sinc滤波器,对50Hz和60Hz工频有很好的抑制。如果设成更高速度,工频抑制就差了。

现象可能原因排查方法解决措施
读数跳动±1°C参考电压不稳示波器测REF引脚加滤波电容,换低温漂Rref
读数跳动±0.1°C输入干扰短接输入端看是否还跳加RC滤波,远离干扰源
读数缓慢漂移温度漂移恒温箱测试选低温漂电阻,做软件补偿
读数固定偏差引线电阻未补偿测量引线电阻用三线制或四线制
读数随机跳变UART通信错误检查波特率、校验加CRC校验,降低波特率

5.2 UART通信不稳定的处理

ADS122U04的UART接口在高速率下容易受干扰。我建议波特率不要超过115200,用9600或19200更稳。另外,UART的TX和RX线要加33Ω的串联电阻,抑制反射。如果通信距离超过10cm,最好用屏蔽线。

还有一个坑:ADS122U04的UART命令和数据的时序有要求。发送命令后要等至少50μs才能发送下一个字节,否则ADC可能来不及处理。我在代码里加了1ms的延时,虽然慢一点,但稳定。

5.3 自热误差的评估与处理

PT100的激励电流会在电阻上产生热量,导致测量值偏高。自热误差的计算公式是:ΔT = I² × R × Rth,其中Rth是PT100的热阻,空气中大约30°C/W,水中大约10°C/W。

以500μA、100Ω为例:P = (500μA)² × 100Ω = 25μW。在空气中,ΔT = 25μW × 30°C/W = 0.00075°C,完全可以忽略。但如果用1mA,P = 100μW,ΔT = 0.003°C,还是很小。所以500μA到1mA的激励电流对PT100来说自热误差可以忽略。但如果是PT10或者更小的RTD,就要小心了。

实操心得:我曾经用2mA激励一个PT100,在静止空气中测量,读数比实际高了0.05°C。后来降到500μA,偏差就消失了。所以不要盲目追求大电流来提高信噪比,自热误差是个隐性成本。

5.4 校准方法与精度验证

任何高精度测量系统都需要校准。我的校准方法是:用一颗高精度电阻(比如100.000Ω,0.01%)代替PT100,读取ADC码值,计算出系统的增益误差和偏移误差,然后在固件里做两点校准。

具体步骤:

  1. 接100.000Ω精密电阻,记录ADC读数R1
  2. 接138.505Ω精密电阻(对应100°C),记录ADC读数R2
  3. 计算增益系数K = (138.505 - 100) / (R2 - R1)
  4. 计算偏移量Offset = 100 - K × R1
  5. 实际测量时,温度 = K × R_measured + Offset

校准时的环境温度要稳定,最好在25°C±1°C。校准电阻的精度要至少比目标精度高一个数量级。

6. 系统集成与HVAC场景适配

6.1 HVAC系统中的安装注意事项

HVAC系统的温度传感器安装位置很讲究。测水温时,传感器要插入管道足够深,通常要求插入深度是管道直径的1/3到1/2,否则测的是管壁温度而不是水温。测风温时,传感器要避开风口和死区,放在风道截面中心位置。

传感器引线要远离变频器输出线。变频器的PWM输出含有丰富的高频谐波,如果引线和变频器电缆平行走线,干扰会直接耦合进来。我通常要求引线用双绞屏蔽线,屏蔽层单端接地(接在控制板一侧)。

6.2 与上位机的通信协议设计

PIC24FV16KA301处理完温度数据后,需要通过RS-485或者Modbus送给上位机。我用的协议是Modbus RTU,温度值用两个寄存器表示,高16位是整数部分,低16位是小数部分,或者直接用32位浮点。

Modbus的波特率通常用9600或19200,地址可配置。数据更新率不用太高,1秒一次就够了,因为温度变化本身很慢。

6.3 低功耗设计的考虑

如果系统是电池供电或者需要低功耗,ADS122U04可以设成单次转换模式,转换完自动进入休眠。PIC24也有多种低功耗模式。但工业HVAC系统通常有24V供电,功耗不是主要矛盾,所以我这个方案没有特别优化功耗。

7. 实测数据与性能评估

我在实验室里用恒温槽对这套方案做了测试。恒温槽温度稳定性±0.01°C,用标准铂电阻温度计做参考。测试结果如下:

设定温度测量值误差
0°C0.02°C+0.02°C
25°C24.98°C-0.02°C
50°C50.03°C+0.03°C
100°C99.97°C-0.03°C
150°C150.05°C+0.05°C

整体精度在±0.05°C以内,满足大多数工业和HVAC应用的要求。噪声方面,在20SPS下,短接输入端的峰峰值噪声约2μV,对应PT100约0.005°C,跟数据手册标称值吻合。

热电偶模式下,用K型热电偶在300°C测试,误差约±0.5°C,主要来自冷端补偿的误差和热电偶本身的公差。如果换用更高等级的K型热电偶(比如1级),误差可以降到±0.3°C。

8. 方案扩展与变体

这套方案不只能测温度。ADS122U04的24位分辨率和灵活的多路复用,让它也能测压力、流量、应变等低电平信号。比如把PT100换成压力传感器电桥,配置好PGA增益和激励电流,就能做高精度压力测量。

另一个扩展方向是多通道测量。ADS122U04有两组差分输入,可以同时接两个传感器,通过配置寄存器切换。如果需要更多通道,可以用外部多路复用器(比如ADG1609)扩展。

在通信方面,如果不想用UART,ADS122U04也支持SPI接口(ADS122S04),配置方式类似,只是物理层不同。SPI速度更快,适合需要高速采样的场景。

最后说一个我在实际项目中遇到的教训:有一次客户现场的温度读数总是偏高2°C,排查了半天发现是PT100的引线接错了,把三线制接成了两线制,引线电阻没有补偿。所以接线端子的标识一定要清楚,最好用不同颜色的线区分。这个坑虽然低级,但现场调试时很容易犯。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/5 1:06:35

S7-200 SMART Modbus RTU数据侦听实战:报文解析与CRC校验

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

作者头像 李华
网站建设 2026/11/5 1:06:34

ADS122U04+STM32F446ZE:兼顾热电偶与RTD的高精度温度采集方案

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

作者头像 李华
网站建设 2026/11/5 1:04:37

基于ADS122U04与STM32F042K6的工业级温度采集方案设计与实现

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

作者头像 李华
网站建设 2026/11/5 1:04:24

基于ADS122U04与PIC32的工业级RTD测温方案设计

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

作者头像 李华
网站建设 2026/11/5 1:04:00

UART接口ADC实现长距离RTD测温:ADS122U04与STM32F091RC实战

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

作者头像 李华
网站建设 2026/11/5 1:03:52

ADS122U04+STM32F334的工业温度采集方案:从PT100到UART总线

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

作者头像 李华