news 2026/11/5 5:06:09

工业级温度采集方案:ADS122U04与PIC18LF4553实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
工业级温度采集方案:ADS122U04与PIC18LF4553实战

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

工业现场和暖通空调(HVAC)系统里的温度测量,跟实验室里拿个万用表戳两下完全是两码事。前者面对的是长线缆、强电磁干扰、宽温区、多通道轮询,以及动辄要求连续运行好几年的稳定性。我做过好几个这类项目,踩过的坑基本都集中在信号链的前端——传感器选型、激励方式、ADC分辨率与噪声、以及微控制器和ADC之间的通信可靠性上。这次要聊的这套组合,核心是ADS122U04IPWR这颗24位Δ-Σ ADC 搭配PIC18LF4553这颗低功耗8位MCU,目标就是做一套能扛住工业环境、成本又可控的温度采集节点。

先说清楚这套东西是干什么的、适合谁看。ADS122U04IPWR 是德州仪器的一款24位、4通道(两路差分或四路单端)、内置PGA和激励电流源的Δ-Σ型模数转换器,带UART接口。PIC18LF4553 是Microchip的一款8位单片机,自带USB、UART、SPI、I2C,工作电压范围宽,低功耗模式下电流很小。两者搭配,正好能覆盖PT100/PT1000热电阻、热电偶、以及NTC热敏电阻这几类最常见的工业温度传感器。如果你正在做HVAC的楼宇温控、工业炉温监测、或者冷链仓储的温度记录仪,这套方案可以直接抄作业。

为什么选Δ-Σ ADC而不是逐次逼近型(SAR)?这是第一个要讲清楚的选型逻辑。温度信号变化慢,带宽需求低,但精度要求高。PT100在0℃时只有100Ω,满量程也就几百欧姆的变化,对应到电压上是毫伏甚至微伏级别。SAR ADC虽然速度快,但分辨率通常到16位就顶天了,而且没有内置PGA的话,前端还得加仪表放大器,成本和噪声都上去了。Δ-Σ架构通过过采样和数字滤波,能把噪声压得很低,24位分辨率下有效位数(ENOB)做到20位以上很轻松,正好匹配温度测量的需求。ADS122U04IPWR 内置的PGA可以做到1到128倍增益,小信号直接放大后再进ADC,省掉了一级模拟前端。

再说UART接口这个选择。很多人第一反应是SPI或者I2C,但ADS122U04IPWR偏偏给了UART。一开始我也觉得奇怪,后来想明白了:UART是异步的,不需要时钟线,在长线缆传输和光耦隔离场景下,比SPI少一根线,隔离电路更简单。工业现场经常要做电气隔离,UART只需要隔离TX和RX两根线,SPI要隔离四根,I2C虽然也是两根但上拉电阻和总线电容在长线上很头疼。所以这个UART接口在隔离场景下反而是优势。PIC18LF4553 自带EUSART模块,跟ADS122U04IPWR对接不需要软件模拟,硬件直接搞定。

整个信号链的思路是这样的:传感器(PT100或热电偶)接到ADS122U04IPWR的模拟输入,ADC内部完成激励、放大、数字化,然后通过UART把转换结果发给PIC18LF4553。MCU做线性化、温度换算、冷端补偿(如果用热电偶的话),最后通过USB或者另一路UART把数据送出去。电源部分,工业现场通常是24V或者12V母线,需要降压到3.3V给ADC和MCU供电,同时要注意模拟电源和数字电源的隔离。

注意:ADS122U04IPWR的模拟电源和数字电源是分开的引脚,AVDD和DVDD要分别去耦,模拟地和数字地建议在ADC下方单点连接,不要大面积铺在一起,否则数字噪声会串到模拟侧。

这套方案的优势在于集成度高、外围器件少、成本可控。一颗ADC加一颗MCU,加上几个电阻电容和一颗基准源,就能做出四通道的温度采集节点。相比用分立仪表放大器加SAR ADC的方案,BOM能省下不少,PCB面积也小。劣势是采样速率不高,ADS122U04IPWR在20SPS时噪声最低,适合温度这种慢变量,但如果你想做快速多路扫描,就得权衡速度和精度了。

2. 核心器件解析与关键参数计算

2.1 ADS122U04IPWR 的关键特性与选型理由

ADS122U04IPWR 这颗芯片,我把它拆成几个关键模块来看:输入多路复用器(MUX)、PGA、Δ-Σ调制器、数字滤波器、激励电流源、以及UART通信接口。每个模块在温度测量里都有对应的用法。

输入MUX支持四路单端或者两路差分。做PT100测量时,通常用两路差分:一路接PT100两端测电压,另一路接基准电阻两端测激励电流产生的参考电压,这样能做成比例式测量,消除激励电流漂移的影响。做热电偶时,用单端模式,一路接热电偶正极,另一路接冷端补偿传感器。MUX的切换由寄存器控制,配置起来很直接。

PGA的增益选择是个关键。PT100在0℃时100Ω,如果激励电流选1mA,那么PT100上的电压是100mV。温度每升高1℃,PT100阻值增加约0.385Ω,电压增加0.385mV。如果测量范围是-50℃到200℃,对应电压范围是80.75mV到177mV。这个信号幅度用PGA增益8倍或者16倍比较合适,放大后到0.6V到2.8V,正好落在ADC的输入范围内。增益太大,高温端会饱和;增益太小,低温端分辨率不够。

Δ-Σ调制器的采样率由主时钟决定,ADS122U04IPWR内部有振荡器,也可以外接晶振。数字滤波器的输出速率(SPS)可以配置,从5SPS到2000SPS。温度测量建议用20SPS,这时候50Hz和60Hz的工频干扰抑制同时开启,噪声也低。我实测过,20SPS下PGA增益16倍时,有效分辨率能到21位左右,换算成温度分辨率大概是0.001℃,当然这是理想情况,实际电路上能到0.01℃就很好了。

激励电流源有两路,可以配置成10μA、50μA、100μA、250μA、500μA、1mA、1.5mA、2mA等档位。PT100用1mA比较合适,自热效应小,信噪比也够。PT1000可以用500μA或者250μA,因为阻值大,同样电流下电压更大,但自热也更明显。这里有个计算:PT100在1mA下的自热功率是I²R = 0.001² × 100 = 0.01mW,非常小,引起的温升可以忽略。如果是PT1000在1mA下,自热功率是1mW,在静止空气中可能有0.1℃到0.5℃的温升,所以PT1000建议用500μA以下。

提示:激励电流源的精度直接影响测量精度。ADS122U04IPWR的激励电流源初始精度是±1%,温漂是±50ppm/℃。如果做比例式测量,激励电流的绝对值不重要,重要的是匹配。但基准电阻的精度和温漂就变得很关键,建议用0.1%精度、25ppm/℃的金属膜电阻。

2.2 PIC18LF4553 的资源分配与通信配置

PIC18LF4553 是一颗老牌但很稳的8位MCU,跑温度采集这种任务绰绰有余。它的资源分配大概是这样的:EUSART模块用来跟ADS122U04IPWR通信,USB模块用来跟上位机或者主控通信,定时器用来做采样周期控制,GPIO用来控制ADC的复位和中断引脚。

EUSART的波特率配置要注意。ADS122U04IPWR的UART接口支持最高115200bps,但工业现场长线缆传输建议用9600bps或者19200bps,抗干扰能力更强。PIC18LF4553的EUSART波特率计算公式是:波特率 = Fosc / (16 × (SPBRG + 1))。如果系统时钟是8MHz,想要9600bps,SPBRG = 8,000,000 / (16 × 9600) - 1 = 51.08,取整51,实际波特率是9615bps,误差0.16%,完全在容忍范围内。

USB模块在PIC18LF4553上是全速USB 2.0,做虚拟串口(CDC)最方便。上位机不需要装驱动,直接当串口用。如果不用USB,也可以用另一路UART跟主控通信,但PIC18LF4553只有一个EUSART,所以要么用USB,要么用软件模拟第二路UART。我一般建议用USB,调试方便,而且可以同时供电。

定时器用来控制采样周期。温度测量不需要很快,1秒采一次足够了。用Timer1做1秒中断,在中断里启动一次ADC转换,转换完成后读取数据。Timer1是16位的,配合预分频器可以轻松做到1秒定时。注意Timer1的时钟源可以选择内部振荡器或者外部晶振,如果对时间精度要求高,建议用外部32.768kHz晶振。

GPIO方面,ADS122U04IPWR的DRDY(数据就绪)引脚接到PIC18LF4553的外部中断引脚,这样MCU不用轮询,ADC转换完成会主动通知。RESET引脚也接一个GPIO,方便MCU复位ADC。START/SYNC引脚用来启动转换,可以接GPIO也可以接PWM,我一般接GPIO,软件控制更灵活。

2.3 温度传感器选型与信号链参数计算

温度传感器选PT100还是PT1000还是热电偶,取决于测量范围和精度要求。PT100适合-200℃到600℃,精度高,线性度好,但需要激励电流。PT1000跟PT100一样,但阻值大10倍,同样的激励电流下电压大10倍,信噪比更好,但自热更明显。热电偶适合高温,能到1000℃以上,但需要冷端补偿,精度不如PT100。

以PT100为例,做-50℃到200℃的测量。PT100的阻值-温度关系用Callendar-Van Dusen方程描述:R(T) = R0 × (1 + A×T + B×T²),其中R0=100Ω,A=3.9083×10⁻³,B=-5.775×10⁻⁷。在-50℃时,R = 100 × (1 + 3.9083×10⁻³ × (-50) + (-5.775×10⁻⁷) × 2500) = 100 × (1 - 0.195415 - 0.00144375) = 100 × 0.803141 = 80.314Ω。在200℃时,R = 100 × (1 + 3.9083×10⁻³ × 200 + (-5.775×10⁻⁷) × 40000) = 100 × (1 + 0.78166 - 0.0231) = 100 × 1.75856 = 175.856Ω。

如果激励电流选1mA,那么-50℃时PT100上的电压是80.314mV,200℃时是175.856mV。电压变化范围是95.542mV,对应250℃的温度范围,平均灵敏度是0.382mV/℃。这个信号用PGA增益16倍放大后,范围是1.285V到2.814V,变化范围1.529V。ADS122U04IPWR的满量程输入范围是±VREF/PGA,如果VREF用2.048V,PGA=16,那么满量程是±128mV。等等,这里有问题:放大后的信号是1.285V到2.814V,但ADC的输入范围是±128mV,明显超了。

所以PGA增益不能这么算。正确的做法是:先确定ADC的满量程输入范围,再反推PGA增益。ADS122U04IPWR的满量程输入范围是±VREF/PGA。如果VREF=2.048V,PGA=16,满量程是±128mV。PT100上的电压是80mV到176mV,都是正值,但超过了128mV。所以PGA增益要降低。如果PGA=8,满量程是±256mV,80mV到176mV都在范围内。如果PGA=4,满量程是±512mV,也够。但增益越低,分辨率越差。所以PGA=8是最优选择。

等等,这里还要考虑比例式测量。如果用比例式,VREF不是固定的2.048V,而是来自基准电阻上的电压。假设基准电阻是1.65kΩ,激励电流1mA,那么VREF = 1.65V。PGA=8时,满量程是±1.65/8 = ±206.25mV。PT100上的电压是80mV到176mV,都在范围内。这样VREF和PT100上的电压都由同一个激励电流产生,比例式测量消除了激励电流漂移的影响。

基准电阻的选择:VREF = I × Rref。如果I=1mA,想要VREF=1.65V,那么Rref=1.65kΩ。这个电阻的精度和温漂直接影响测量精度。建议用0.1%精度、25ppm/℃的电阻。1.65kΩ不是标准值,可以用1.65kΩ的精密电阻,或者用1.6kΩ加微调。

注意:比例式测量时,基准电阻和PT100要放在同一个温度环境下,或者至少基准电阻的温漂要足够小。如果基准电阻跟PT100不在同一个温度,基准电阻的温漂会直接引入测量误差。

3. 硬件设计与实操过程

3.1 原理图设计与关键元器件选型

原理图设计从电源开始。工业现场通常有24V母线,需要降压到3.3V。我一般用两级降压:第一级用LM2596或者MP1584把24V降到5V,第二级用LDO把5V降到3.3V。LDO选TPS7A4700或者类似的低噪声型号,因为ADC的模拟电源对噪声很敏感。数字电源和模拟电源用磁珠或者0Ω电阻隔开,各自去耦。

ADS122U04IPWR的模拟输入接PT100。PT100用三线制接法,可以消除线缆电阻的影响。三线制需要两个激励电流源,或者一个激励电流源加一个补偿通道。ADS122U04IPWR有两路激励电流源,正好可以用于三线制。具体接法是:第一路激励电流源从PT100的一端流入,第二路激励电流源从PT100的另一端流入,PT100的中间端接ADC的参考地。这样两根线缆的电阻产生的电压降互相抵消。

不过三线制接法比较复杂,如果线缆不长(小于10米),两线制也够用。两线制就是激励电流从PT100一端流入,另一端流出,ADC测量PT100两端的电压。线缆电阻会直接加到测量结果里,每米线缆大概0.1Ω,10米就是1Ω,对应2.6℃的误差。所以如果线缆长,必须用三线制或者四线制。

热电偶的接法更简单:热电偶正负极直接接ADC的差分输入,冷端补偿用一颗LM35或者DS18B20放在接线端子附近,测环境温度。热电偶的信号很小,K型热电偶在100℃时输出约4.1mV,需要PGA增益128倍才能到0.5V左右。ADS122U04IPWR的PGA最大128倍,正好够用。

基准源方面,如果用比例式测量,不需要外部基准源,VREF来自基准电阻。如果用绝对测量,需要一颗外部基准源,比如REF5025或者ADR4525,精度0.05%,温漂3ppm/℃。我一般推荐比例式,省一颗基准源,而且精度更好。

3.2 PCB布局与布线要点

PCB布局对ADC性能影响很大,尤其是24位分辨率下。我总结了几条经验:

第一,模拟部分和数字部分要分开布局。ADS122U04IPWR放在模拟区,PIC18LF4553放在数字区,中间用一条地线隔开。模拟地和数字地单点连接,连接点选在ADC的GND引脚下方。

第二,去耦电容要靠近电源引脚。AVDD和DVDD各放一个100nF和一个10μF电容,100nF尽量靠近引脚,10μF可以稍远。VREF引脚也要放100nF去耦。

第三,模拟输入走线要短且对称。PT100的走线尽量等长,差分输入的两根线要平行走,减少共模干扰。如果走线长,建议用屏蔽线,屏蔽层接模拟地。

第四,晶振要靠近MCU,走线短且包地。PIC18LF4553如果用外部晶振,晶振下面不要走其他信号线。

第五,UART通信线如果长,建议加光耦隔离。光耦选6N137或者ADuM1201,速度快,隔离电压高。隔离后的UART信号再接MCU。

提示:PCB打样后,先用万用表测一下电源对地阻抗,确认没有短路。上电时先用可调电源限流,观察电流是否正常。ADS122U04IPWR的正常工作电流约1mA,PIC18LF4553约5mA,总共不到10mA。如果电流偏大,先检查焊接。

3.3 软件流程与关键代码实现

软件部分分两块:ADS122U04IPWR的配置和PIC18LF4553的主程序。

ADS122U04IPWR的配置通过UART发送命令。命令格式是:第一个字节是命令码,后面跟数据。常用的命令有:RESET(0x06)、START/SYNC(0x08)、POWERDOWN(0x02)、RDATA(0x10)、RREG(0x20)、WREG(0x40)。配置寄存器有四个:REG0到REG3。

REG0配置MUX和PGA。比如要选差分通道0(AIN0和AIN1),PGA增益8,那么REG0的值是:MUX[3:0]=0000(差分通道0),GAIN[2:0]=011(增益8),PGA_BYPASS=0(PGA使能)。所以REG0 = 0x03。

REG1配置数据速率和模式。20SPS对应DR[2:0]=010,连续转换模式CM=0,工频抑制同时开启。REG1 = 0x02。

REG2配置激励电流源和基准。激励电流1mA对应IDAC[2:0]=101,激励电流源1和2都开启对应IDAC1[1:0]=11和IDAC2[1:0]=11。REG2 = 0x3D。

REG3配置IDAC路由和基准选择。基准选外部基准(来自基准电阻),对应VREF[1:0]=00。REG3 = 0x00。

配置代码大概长这样:

void ADS122U04_Init(void) { ADS122U04_SendCommand(0x06); // RESET __delay_ms(1); ADS122U04_WriteRegister(0, 0x03); // MUX=差分0, GAIN=8 ADS122U04_WriteRegister(1, 0x02); // 20SPS, 连续转换 ADS122U04_WriteRegister(2, 0x3D); // IDAC=1mA, 双路开启 ADS122U04_WriteRegister(3, 0x00); // 外部基准 ADS122U04_SendCommand(0x08); // START }

PIC18LF4553的主程序流程:初始化系统时钟、EUSART、USB、定时器。然后进入主循环,等待DRDY中断。DRDY中断触发后,读取ADC数据,做温度换算,通过USB发送出去。

温度换算用Callendar-Van Dusen方程的反函数。已知电阻R,求温度T。对于T≥0℃,用公式:T = (-A + sqrt(A² - 4B(1 - R/R0))) / (2B)。对于T<0℃,要用高阶多项式或者查表法。我一般用查表加线性插值,精度够用,计算量小。

float PT100_ResistanceToTemperature(float R) { float R0 = 100.0; float A = 3.9083e-3; float B = -5.775e-7; float T; if (R >= R0) { T = (-A + sqrt(A*A - 4*B*(1 - R/R0))) / (2*B); } else { // 查表法,-200℃到0℃ T = PT100_LookupTable(R); } return T; }

USB通信用CDC类,PIC18LF4553的USB模块配置成CDC设备,上位机识别为虚拟串口。发送数据用putcUSB()函数,接收命令用getsUSBUSART()函数。数据格式我一般用ASCII码,方便调试,比如"T1=25.34\r\n"。

注意:ADS122U04IPWR的UART是3.3V电平,PIC18LF4553的EUSART也是3.3V,可以直接对接。如果MCU用5V,需要电平转换,否则会损坏ADC。

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

4.1 温度读数跳动大怎么办

这是最常见的问题。原因可能有几个:激励电流噪声、基准电阻温漂、PGA增益不合适、数字滤波器配置不对、或者电源噪声。

先检查电源。用示波器看AVDD和DVDD的纹波,如果超过10mV,就要加强去耦。我遇到过LDO自激振荡导致纹波200mV的情况,换了一颗LDO就好了。

再检查PGA增益。如果增益太高,信号接近满量程,噪声也会被放大。可以试着降低增益,看跳动是否减小。如果降低增益后跳动减小,说明信号幅度太大,需要重新计算增益。

数字滤波器配置也很关键。20SPS下工频抑制最好,如果配置成2000SPS,工频干扰会直接混进来。确认REG1的DR位设置正确。

基准电阻的温漂容易被忽略。如果基准电阻跟PT100不在同一个温度,基准电阻的温漂会直接引入误差。我一般把基准电阻放在PT100接线端子附近,让它们温度接近。

4.2 UART通信失败怎么排查

UART通信失败,先查波特率。ADS122U04IPWR的波特率是固定的,上电默认9600bps,但可以通过命令修改。PIC18LF4553的波特率要跟ADC匹配。用示波器看TX线上的波形,测量位宽,确认波特率。

再查电平。ADS122U04IPWR的UART是3.3V CMOS电平,如果MCU是5V,需要电平转换。我见过直接对接烧掉ADC的情况,所以一定要确认电平匹配。

还要查时序。ADS122U04IPWR的UART命令之间需要延时,尤其是RESET命令后要等1ms。如果命令发得太快,ADC可能来不及响应。我在代码里加了5ms的延时,问题就解决了。

如果以上都正常,检查硬件连接。TX和RX有没有接反?地线有没有接?光耦隔离的话,光耦的供电有没有?这些问题看起来很基础,但实际调试时经常遇到。

4.3 热电偶冷端补偿不准怎么处理

热电偶冷端补偿不准,通常是冷端传感器的问题。LM35的精度是±0.5℃,DS18B20是±0.5℃,对于K型热电偶来说,冷端误差1℃对应测量误差1℃,因为K型热电偶的塞贝克系数约41μV/℃,冷端补偿的电压直接加到测量结果里。

如果要求高精度,可以用PT100做冷端补偿,精度能到±0.1℃。或者用一颗高精度的温度传感器,比如TMP117,精度±0.1℃。

冷端传感器的位置也很重要。要放在接线端子附近,但不要被其他发热元件影响。我一般把冷端传感器放在接线端子的背面,用导热硅脂贴合,减少热阻。

还有一个容易忽略的问题:热电偶的延长线。如果延长线用错了型号,会引入额外的热电势。K型热电偶必须用K型补偿导线,不能用普通铜线。

4.4 常见问题速查表

问题现象可能原因排查方法解决方案
温度读数跳动大电源纹波大示波器看AVDD纹波加强去耦,换低噪声LDO
温度读数跳动大PGA增益过高降低增益看跳动重新计算增益
温度读数跳动大基准电阻温漂测量基准电阻温度换低温漂电阻,靠近PT100
UART通信失败波特率不匹配示波器测位宽确认波特率配置
UART通信失败电平不匹配测TX电平加电平转换
UART通信失败命令延时不够增加延时RESET后等1ms
热电偶冷端补偿不准冷端传感器精度低对比标准温度计换高精度传感器
热电偶冷端补偿不准延长线型号错误检查延长线用补偿导线
PT100读数偏高线缆电阻短接PT100看读数用三线制或四线制
PT100读数偏高自热效应降低激励电流用500μA以下

提示:调试时先用一个固定电阻代替PT100,比如100Ω的精密电阻,看读数是不是0℃。如果不是,先校准。校准可以用两点法:0℃和100℃,算出增益和偏移。

5. 实操心得与经验分享

5.1 校准与标定技巧

温度测量节点做好之后,校准是必须的。我一般用两点校准:冰水混合物(0℃)和沸水(100℃,注意气压修正)。把PT100放进冰水混合物,等读数稳定,记录ADC值;再放进沸水,记录ADC值。然后用这两点算线性方程。

如果要求更高,可以用三点校准:-50℃、0℃、100℃。用干体炉或者恒温槽提供标准温度。校准的时候要注意,PT100和标准温度计要放在同一个位置,等热平衡后再读数。热平衡时间至少5分钟。

校准系数存在MCU的EEPROM里,每次上电读取。PIC18LF4553有256字节的EEPROM,存几个浮点数绰绰有余。

5.2 低功耗设计考虑

如果做电池供电的温度节点,低功耗很重要。ADS122U04IPWR在20SPS下的工作电流约1mA,PIC18LF4553在8MHz下约5mA,加起来6mA。如果1秒采一次,每次采样10ms,那么平均电流是6mA × 10ms / 1000ms = 60μA。加上休眠电流,整体可以做到100μA以下。

休眠时把ADC配置成POWERDOWN模式,MCU进入SLEEP模式。Timer1用外部32.768kHz晶振,在SLEEP模式下继续计时。定时器中断唤醒MCU,启动ADC转换,转换完成后读取数据,通过无线模块发送,然后继续休眠。

无线模块的选择要看场景。如果是楼宇HVAC,可以用Zigbee或者LoRa。如果是工业现场,可以用RS485有线。我一般用LoRa,距离远,功耗低,穿墙能力也不错。

5.3 电磁兼容性(EMC)处理

工业现场的电磁干扰很严重,尤其是变频器、接触器、电机这些设备。温度测量节点要做EMC处理,否则读数会乱跳。

第一,电源入口加TVS管和共模电感。TVS管选SMBJ系列,共模电感选10mH以上。

第二,模拟输入加RC滤波。PT100的输入端加100Ω电阻和100nF电容,截止频率约16kHz,能滤掉高频干扰。

第三,PCB布局时模拟区和数字区分开,地平面分割。如果做四层板,模拟信号走内层,上下用地平面包住。

第四,外壳用金属屏蔽,接大地。如果外壳是塑料的,内壁喷导电漆。

我做过一个工业炉温监测的项目,现场有大型变频器,一开始读数跳动±5℃。后来加了共模电感和RC滤波,跳动降到±0.1℃。所以EMC处理不能省。

5.4 长期稳定性与漂移处理

温度测量节点要连续运行几年,长期稳定性很重要。我遇到过运行半年后读数漂移2℃的情况,最后查出来是基准电阻的温漂累积效应。换了25ppm/℃的电阻后,漂移降到0.1℃以内。

PT100本身也有长期漂移,每年大概0.05℃。如果要求高,每年校准一次。或者用两颗PT100互为参考,定期比对。

ADC的漂移主要是 offset drift 和 gain drift。ADS122U04IPWR的 offset drift 是0.1μV/℃,gain drift 是1ppm/℃。在-40℃到85℃范围内,offset drift 引起的误差是12.5μV,对应PT100约0.03℃。gain drift 引起的误差是125ppm,对应PT100约0.03℃。所以ADC本身的漂移很小,主要问题在外部器件。

提示:长期运行的数据建议存到SD卡或者上传到云端,方便做趋势分析。如果发现读数缓慢漂移,先查基准电阻和PT100,再查ADC。

6. 方案扩展与变体设计

6.1 多通道温度采集的实现

ADS122U04IPWR只有四路单端或者两路差分,如果要采集更多通道,可以用多颗ADC级联。PIC18LF4553有两个UART?不,只有一个EUSART。但可以用GPIO模拟UART,或者用SPI接口的ADC,比如ADS122S04,跟ADS122U04IPWR功能一样但接口是SPI。PIC18LF4553有SPI模块,可以接多颗SPI ADC,用片选信号选择。

如果通道数很多,比如16路或者32路,可以用模拟多路复用器,比如ADG708或者CD4051,把多路信号切换到ADC的输入端。但多路复用器有导通电阻,会影响精度。导通电阻大概100Ω,跟PT100的100Ω比,误差很大。所以多路复用器适合热电偶或者NTC,不适合PT100。

更好的方案是用多颗ADS122U04IPWR,每颗负责两路差分。PIC18LF4553的EUSART可以接一颗,其他用GPIO模拟UART。或者用一颗MCU带多个UART,比如PIC18F46K22有两个EUSART。

6.2 无线传输与物联网集成

温度数据要上传到云端或者本地服务器,可以用无线模块。LoRa模块比如SX1278,通过SPI跟MCU通信,距离能到几公里。WiFi模块比如ESP8266,通过UART跟MCU通信,距离短但带宽大。蓝牙模块比如HC-05,适合近距离调试。

如果做物联网集成,可以用MQTT协议。MCU把温度数据打包成JSON格式,通过无线模块发送到MQTT broker。上位机订阅主题,实时显示温度曲线。

数据格式我一般用JSON:{"device_id":"node01","temperature":25.34,"timestamp":"2024-01-01T12:00:00"}。JSON可读性好,解析也方便。

6.3 隔离设计要点

工业现场经常需要电气隔离,防止地环路和高压串扰。UART隔离用光耦或者数字隔离器。光耦选6N137,速度10Mbps,够用。数字隔离器选ADuM1201,集成度高,功耗低。

电源隔离用隔离DC-DC模块,比如B0505S,输入5V输出5V,隔离电压1500V。或者用反激拓扑自己做,但设计复杂,建议用模块。

隔离后的地和未隔离的地要分开,间距至少2mm。PCB上开槽,增加爬电距离。

注意:隔离后的电源要给ADC和MCU供电,但ADC的模拟地和数字地还是要单点连接,不能因为隔离了就随便接。

7. 调试工具与测试方法

7.1 必备调试工具

调试这套方案,几样工具不能少:示波器(看电源纹波和UART波形)、万用表(测电压和电阻)、逻辑分析仪(抓UART数据)、精密电阻箱(模拟PT100)、恒温槽(校准用)。

示波器建议用带宽100MHz以上的,探头用10:1的。看电源纹波时用AC耦合,带宽限制20MHz,减少高频噪声干扰。

逻辑分析仪用Saleae或者类似的,抓UART数据很方便。设置波特率9600,8数据位,1停止位,无校验。抓到的数据可以直接解析。

精密电阻箱用0.01%精度的,模拟PT100的阻值。比如设置100Ω,看读数是不是0℃。设置138.51Ω,看读数是不是100℃。

7.2 测试方法与验收标准

测试分几步:先测电源,再测ADC,再测温度换算,最后测通信。

电源测试:上电后测AVDD和DVDD,应该是3.3V±1%。纹波小于10mV。

ADC测试:用精密电阻箱模拟PT100,测ADC的原始数据。在100Ω时,ADC数据应该是某个值,在138.51Ω时,ADC数据应该是另一个值。两个值的差应该跟理论计算一致。

温度换算测试:把ADC数据代入公式,看温度读数是不是跟电阻箱设置的温度一致。误差应该在±0.1℃以内。

通信测试:用逻辑分析仪抓UART数据,看命令和响应是否正确。用上位机软件看USB数据,看温度读数是否稳定。

验收标准:温度测量误差±0.1℃(-50℃到200℃),长期漂移小于0.1℃/年,通信误码率小于10⁻⁶。

7.3 常见故障与快速定位

故障定位用二分法:先确定是硬件问题还是软件问题。硬件问题用示波器和万用表查,软件问题用逻辑分析仪和调试器查。

如果ADC没有数据,先查DRDY引脚有没有中断。如果没有中断,查ADC的配置寄存器是否正确。如果配置正确,查ADC的电源和时钟。

如果温度读数不对,先查ADC原始数据是否正确。如果原始数据不对,查PGA增益和基准电压。如果原始数据正确,查温度换算公式。

如果通信失败,先查波特率和电平。如果都正确,查命令格式和时序。

我一般会在代码里加一些调试输出,比如把ADC原始数据通过USB发出来,方便对比。调试完成后把这些输出关掉,减少开销。

8. 方案总结与个人体会

这套ADS122U04IPWR加PIC18LF4553的方案,我在三个项目里用过:一个是楼宇HVAC的温控节点,一个是工业炉温监测,一个是冷链仓储的温度记录仪。三个项目都跑得很稳,最长的已经运行了两年多,漂移在0.1℃以内。

最大的体会是:模拟电路的设计比数字电路难得多。数字电路只要逻辑对,基本就能跑。模拟电路要考虑噪声、漂移、干扰、布局,任何一个细节没做好,性能就上不去。我踩过的坑大部分都在模拟部分,比如电源纹波、基准电阻温漂、PCB布局。

另一个体会是:校准很重要。再好的硬件,不校准也有误差。校准可以消除器件本身的偏差,让测量结果更准。我一般建议至少两点校准,有条件的话三点校准。

最后分享一个小技巧:如果温度读数偶尔跳一下,可以在软件里加一个中值滤波。连续采5个点,去掉最大和最小,取中间3个的平均。这样能滤掉突发的干扰,又不影响响应速度。我实测下来,中值滤波能把跳动从±0.5℃降到±0.05℃。

这个方案后续还可以扩展:加一个LCD显示屏,本地显示温度;加一个继电器输出,做温度控制;加一个SD卡,本地存储数据。这些扩展都不难,PIC18LF4553的GPIO和外围模块够用。

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

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

/* 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 5:04:47

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

/* 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 5:04:12

ADS122U04与dsPIC33EP组合的HVAC温度采集系统设计与干扰处理

/* 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 5:03:55

工业级温度测量:ADS122U04IPWR+STM32F215RE高精度闭环设计

/* 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 5:03:45

ADS122U04+PIC18F57K42高精度温度采集方案详解

/* 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 5:03:06

STM32搭配24位ADC:单线UART与比例式测量的高精度温度采集方案

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

作者头像 李华