news 2026/11/5 3:11:40

ADS122U04搭配PIC18F86K90:工业RTD温度采集方案解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ADS122U04搭配PIC18F86K90:工业RTD温度采集方案解析

1. 项目概述与选型逻辑

先说结论:这是一套典型的“高精度ADC + 工业级MCU”组合方案,用于工业和HVAC场景下的温度采集链路。核心链路是ADS122U04IPWR负责把传感器信号变成数字量,再通过UART把数据丢给PIC18F86K90去做处理、显示和上报。

ADS122U04IPWR是TI出的一款24位Δ-Σ型ADC,重点不在“24位”这个噱头上,而在于它有几个专门为温度测量设计的东西:内置可编程增益放大器(PGA)、两个匹配的激励电流源、内部基准源,以及一个UART通信接口。后面这个“UART接口”才是这颗料最特殊的地方。市面上大部分精密ADC都是SPI接口,像ADS1220、ADS124S08这些,而ADS122U04直接用UART,这对于用的MCU资源紧张、或者想把ADC放在离传感器很近的地方的场合来说,是个很实际的解法。

PIC18F86K90这边,选它的理由也很直白:Microchip 8位MCU里带片上LCD驱动模块的型号不算多,这颗料集成了LCD驱动器和较多的I/O,加上几个EUSART,跟ADS122U04UART对接正好,不需要再折腾SPI引脚复用。另外它在低功耗模式下的电流表现也不错,在HVAC温控器这种需要长期待机的设备里有明显优势。还有一个实用原因:很多老的工业控制板已经在用PIC18系列,固件工程师熟,迁移成本低。

再说场景。工业和HVAC里的温度测量,不像实验室那样环境可控,往往要面对长线缆、强干扰、温度漂移和工作电压不稳这些现实问题。ADS122U04的优势就在于它能把模拟前端(PGA、激励源、基准)和数字接口集中在一个封装里,传感器那头只要做好滤波和防护,剩下的事情交给ADC内部处理。配合PIC18F86K90做线性化计算、比例换算和显示驱动,整个温度采集模块的BOM就非常清爽,不需要额外的高精度仪表放大器,也不需要独立基准芯片,这对成本敏感的项目来说节省非常多。

这套方案适合谁?我的经验是,大多数人不会真的从零画一个温度采集板,而更关心“用现成的芯能搭出什么效果”。这里面有两类人价值最大:一类是要做温控器、数据记录仪、盘柜温度监测的硬件工程师,想确认芯片间的配合细节;另一类是固件工程师,想搞清楚ADS122U04的寄存器配置、数据读出和线性化处理到底怎么落地。下面我把硬件的接法、寄存器的配置、通信时序和固件实现一层层拆开讲。

2. 硬件电路设计要点

ADC选型只是第一步,真正决定采集精度的往往是外部电路。ADS122U04再强,传感器侧的激励、滤波和引线处理搞砸了,读数一样会飘。

2.1 RTD测温的几种接线方式

RTD(热电阻)是工业和HVAC里用得最多的温度传感器,铂电阻PT100、PT1000都很常见。RTD本身是阻值随温度变化的元件,测量原理就是把恒定的激励电流灌进去,测它两端的电压,再反推温度。ADS122U04内部有可配置的激励电流源,不用外挂恒流源,这个设计很省事。

接线方式决定精度,这一点是硬件设计里最关键的取舍。

两线制接法最简单,一根线送电流,同一根线也负责测电压。但问题在于导线自身有电阻,这个电阻会跟RTD的阻值串在一起,造成固定的正偏差。比如100米长的铜导线,线阻可能有5到10欧,对应到PT100上就是十几度的误差。所以两线制只适合传感器到ADC距离很近、精度要求不高的场合。

三线制是工业现场的标配。它的原理是:两根线给RTD提供激励电流回路,第三根线单独用来测量电压。因为第三根线不流过电流,线上不会产生压降,测量电压的回路里就没有线阻引入的误差了。不过严格来说,它还需要ADC内部的匹配电阻网络来抵消两根电流线之间的差异,ADS122U04针对这个需求提供了专门的RTD测量模式,可以自动切换通道来测量参考电阻两侧的电压,从而把导线电阻的影响压到最低。

四线制精度最高,一根线送电流,另一根线测电压,电流回路和电压回路完全分开,电压测量线上几乎不流过电流,所以线阻误差理论上是零。代价是多一根线,接线端子也贵一点。我的建议是:如果传感器是焊在PCB上的,用两线就够了;如果是走现场的、线缆长于3米,直接上三线制;计量级场合才考虑四线制。

2.2 热电偶与冷端补偿

HVAC里热电偶用得不如RTD多,但工业设备表面温度测量经常会碰到。热电偶输出的是毫伏级的微弱电压,且必须知道冷端温度才能算出热端温度。ADS122U04内置了一个温度传感器,可以让冷端补偿的测量在ADC内部直接完成,减少外部元件。

具体做法是:把热电偶的J型或K型线接到ADC的AINP和AINN通道上,同时ADC内部温度传感器读到的就是芯片附近的冷端温度,然后把热电偶电压加上冷端对应的热电势,再从分度表里查出热端温度。这样做最大的好处是冷端和ADC的温度高度一致,避免了冷端放在PCB不同位置导致温差引起的补偿偏差。

需要注意的一点是热电偶输出的电平极低,K型热电偶大约41uV/℃,24位ADC的LSB尺寸在PGA增益为1时大概是0.6uV左右,所以直接把增益打到64或128,把信号放大后再采样,分辨率能达到0.01℃级别,这个参数对于工业温度记录来说是足够的。

2.3 电源与去耦,还有滤波

ADS122U04的数字电源和模拟电源分开供电更稳。我习惯用AVDD接一个低噪声LDO的输出,DVDD如果系统里有3.3V数字电源,可以直接接,但建议串一个小磁珠隔离一下。去耦电容选1uF和0.1uF的组合,放得离电源引脚越近越好。

传感器侧面的RC滤波特别容易被人忽略。激励电流源驱动的是RTD,RTD的等效阻抗只有100到1000欧左右,如果在激励回路里串了较大的RC滤波电阻,恒流源会在滤波电阻上产生压降,这个压降会直接损耗掉ADC的输入范围。所以在RTD激励路径上要做RC滤波的话,电阻值不能大,常见取几十欧,电容取1nF到10nF,折中滤波效果和建立时间。

3. ADS122U04寄存器配置与UART通信实现

ADS122U04和传统SPI接口ADC最大的区别在于通信协议。它用UART,帧格式可以配置,寄存器操作靠着一个命令字节加上数据字节来搞定。很多人第一次接触这颗芯片时会被它的命令结构绕晕,我先把它拆开。

3.1 UART帧格式与命令字

ADS122U04默认的UART波特率可以设置,常用的是9600、19200、38400,最高可到若干Mbps,但实际项目里我一般用9600或19200,稳而且不挑MCU。每个数据帧由命令字节(CMD)和可选的数据字节组成。

读取数据这条命令最常用,主机发出RDATA命令后,ADS122U04会返回24位转换结果,按高字节、中字节、低字节的顺序发出来。还有一个RDATAC命令是连续读模式,开启后ADC会持续把最新的转换结果自动发出来,主机不用反复发命令,这样能降低UART上的指令开销,适合连续采样型的数据记录仪。如果需要改变配置,则发SDATAC退出连续读模式。

寄存器配置命令是WREG,后面跟着要写的寄存器数量减一和寄存器内容;RREG则用于回读寄存器,调试的时候非常有价值。我提个建议:开发阶段一定写一段RREG回读函数,寄存器写进去再读回来核对一遍,能省去非常多排查“到底配没配进去”的时间。

3.2 关键寄存器配置剖析

ADS122U04有四个主要配置寄存器:配置寄存器0到3。我挑几个重点说一下,这些寄存器位是决定采集链路行为的关键。

配置寄存器0里的PGA_BYPASS位决定了输入信号是否经过内部PGA。如果接热电偶这种微弱信号,必须关掉旁路让PGA介入,同时设置增益倍数。测量RTD时增益设成1到4就够了,因为RTD输出的是相对较大的电压信号,没必要把增益拉高。增益越高,等效输入噪声越低,但输入范围也越小,这个取舍要根据传感器类型定。

配置寄存器1里最重要的是转换模式位。单次转换模式下,ADC完成一次转换后自动进入低功耗状态,这在电池供电的温湿度记录仪里非常有用。连续转换模式则适合实时性要求高的HVAC控制器,每一个转换周期都会有新的数据。另一个关键位是滤波器设置,ADS122U04内置的Δ-Σ调制器配合数字滤波器,可以通过寄存器选择工作在50Hz和60Hz同时抑制的模式,这对中国和欧美市场的工频干扰场景特别有意义。

配置寄存器2里有两个激励电流源IDAC,电流大小可配。测RTD的时候,激励电流建议选250uA或者500uA。大电流的好处是信号幅度大,信噪比好,但坏处是RTD自己会发热,导致自热误差。PT100在500uA下自热功率大约是0.05mW,在空气中会引起大约0.1℃的温升,这个量级在普通HVAC应用里可以接受,但高精度测量就要降到100uA以下。配置寄存器3主要处理参考源和通道选择,这部分跟着RTD接法走,既要保证参考电压的稳定,又要让测量通道和激励通道匹配。

3.3 完整配置序列示例

下面给一套典型的PT100三线制配置流程。假设我们使用IDAC1通道接到AIN0,作为PT100的激励源;IDAC2接到AIN1;AIN2和AIN3作为参考电阻的测量通道;转换结果从AIN0和AIN1差分对输入。

配置写入顺序是:先发SDATAC确保退出连续读模式,然后连续写入配置寄存器0到3。配置寄存器0写入0x02,表示为内部PGA使能,增益为4;配置寄存器1写入0x14,设置单次转换模式,内部滤波器开启,数据速率设置得当;配置寄存器2写入0xA0,使能IDAC1和IDAC2,电流设为500uA;配置寄存器3写入0x20,使能内部基准源并将参考电阻接到对应基准输入引脚。

写入完成后,发RC命令启动一次转换,然后等待DRDY引脚变低。DRDY是ADS122U04给出的一个关键握手信号,每次转换完成,它都会拉低一段时间。主机检测到这个下降沿,再发RDATA命令,就能取回稳定的24位数据了。这套流程我实测下来,一个完整读数周期包含配置时间在内大约几十毫秒,完全能满足HVAC温控器的5到10秒采样周期要求。

3.4 DRDY引脚与数据就绪判断

一定要用好DRDY。很多初学者只盯着UART数据流,忽略了硬件握手,结果发现读取的数据时而对时而错。根本原因是读取命令和数据转换周期不同步——转换没结束就把数据读出来了。

DRDY是一个推挽输出引脚,转换完成时产生低脉冲。正确做法是用PIC18的外部中断或查询方式去捕获这个引脚的电平变化。在单次转换模式里,每次启动转换后,可以轮询DRDY直到它拉低,然后立刻发RDATA。在连续转换模式里,DRDY会周期性地拉低,主机跟着它的节奏取数就行。

如果项目里不方便接DRDY引脚,也可以完全靠延时判断:配置完寄存器后等一个完整的转换周期(根据数据速率算出来)再去读。这个方法能用,但稳定性差,当环境温度变化导致时钟偏移时,偶尔会读到转换周期切换期间的中间数据。所以我的建议非常明确,DRDY引脚必须接,别省。

4. PIC18F86K90 侧驱动与数据处理

ADS122U04把模拟信号处理完了,剩下的工作就是PIC18F86K90怎么把读到的24位裸数据和温度对应起来。

4.1 初始化EUSART与通信参数

PIC18F86K90上UART对应的外设叫EUSART。初始化需要注意三件事:波特率发生器配置、帧格式匹配和收发中断。

波特率方面,如果系统时钟选8MHz内部振荡器,想得到9600bps的UART波特率,SPBRG寄存器的值要根据公式算出来,注意误差控制在2%以内。对于EUSART这种硬件UART,常见的是设置为8位数据位、无校验、一位停止位,即8N1格式,跟ADS122U04默认配置对齐。

收发中断建议全部打开。读数据的时候用接收中断把三个字节收进环形缓冲区,主循环只管解析缓冲区内容,这样不会因为ADC连续输出的速度过快而来不及处理。发送中断在配置寄存器阶段也可以提高交互效率,但配置动作频率低,用阻塞式发送也可以接受。实测下来,只要波特率误差在允许范围内,通信稳定性是可靠的。

4.2 读取ADC数据的固件流程

固件主流程分几步:上电延时等ADS122U04内部基准稳定,然后发配置寄存器序列,再进入一个循环,等待DRDY引脚拉低后发RDATA命令,收三个字节。

数据解析这里有个容易踩的坑:ADS122U04输出的是二进制补码格式。如果读到的最高字节最高位是1,说明结果是负值,需要先取反加一,再做有符号数处理。很多工程师忽略了这一点,一旦测量的温度低于零点或者热电偶接反,就会得到完全离谱的读数。

数据收齐后,要拼成一个32位有符号整数,再映射到ADC码值对应的电压。ADS122U04内部基准默认是2.048V,在PGA增益为G的情况下,满量程范围就是±2.048/G。每个LSB对应的电压等于满量程电压除以2的23次方,后续温度计算就基于这个电压值展开。

4.3 从电压到温度的计算

RTD的温度非线性要用Callendar-Van Dusen方程来做。PT100在0℃以下和以上分别使用两组不同的多项式系数,在0℃以上,电阻与温度的关系近似为Rt等于R0乘以一加上alpha乘以t减去beta乘以t方等等,其中alpha在PT100的标准里通常是0.00385055。这个多项式工程上非常好用,精度足以覆盖-50℃到200℃的HVAC区间。

在具体实现时,不要直接用浮点运算硬算高阶多项式,MCU的资源很宝贵。我的做法是先算出一个粗略的查表点,然后用牛顿迭代法或者直接分段线性插值逼近。具体来说,把整段温度区间按1℃分格,预先把每个温度点对应的电阻值存在Flash里。实测值是电压换算出的电阻值,在表里二分查找,找到最接近的两个温度点,再做一次线性插值。这样温度分辨率能轻松达到0.1℃,而且程序运行时间比直接浮点算多项式快两倍以上。

热电偶的处理则是反过来算。先读出ADC电压,加上冷端温度对应的热电势,得到补偿后的热端电压,再用分度表反向查温度。K型热电偶的分度表数据量不大,拟合多项式需要用到高阶项,但查表法仍然是主流选择。

4.4 LCD显示与数据上报

PIC18F86K90的片上LCD驱动器可以直连玻璃LCD屏,内部的电荷泵保证低电压下也能维持显示对比度。驱动LCD的固件部分,把计算出来的温度值格式化成字符串,再调用LCD写字符函数即可。

给温度值格式化的时候,建议多留一位小数,格式字符串用定点和填充处理,防止显示错位。HVAC场景下的温度显示,0.1℃的精度已经能给人很好的体验,过犹不及。

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

这部分是我实际调这块板子踩过坑以后总结出来的。每一类问题都是真实发生过的,排查的路径也是按照性价比排序的。

5.1 UART通信超时与乱码

这是最常见的现象,表现为读回来的数据永远是一堆0xFF或者0x00,或者偶尔读到正确值但很快又变成乱码。

第一步检查波特率误差。如果MCU主频不是晶体而是内部振荡器,温漂会导致波特率偏差,长时间运行后偶发通信错误。我习惯用外置晶振给PIC18F86K90提供时钟,同时在配置里尽量把波特率误差算到0.5%以内。

第二步检查TX/RX是不是接反了。ADS122U04的DIN接MCU的TX,DOUT接MCU的RX。不少人在这个上面翻了车。还有一个隐藏问题,ADS122U04的UART引脚和PIC的EUSART引脚如果共用一个电平域,要注意两者的高电平判断电压是否兼容,如果不一致就需要加电平转换。

如果通信偶尔正常但大部分超时,问题往往出在DRDY时序。建议在发送RDATA命令前先确认DRDY已经拉低,而不是延时盲读。加了DRDY检查以后,通信稳定性会有质的提升。

5.2 温度读数跳动大或者漂移

读数波动大,先看电源和基准。ADS122U04内部基准噪声会影响转换结果,如果AVDD上带有较大的纹波,读数会周期性抖动。这时候用示波器看AVDD波形,通常可以发现几十毫伏的工频纹波,加强去耦电容或者换低噪声LDO能解决大半问题。

另一个常见问题是RTD自热。激励电流选得太大,PT100自己发热,读数会缓慢上升,最终稳定在一个偏高的温度上。这个问题很难从数据处理端解决,只能降低激励电流或者改善传感器散热条件。

还有一类读数漂移来自参考电阻的温漂。如果参考电阻用的是普通厚膜电阻,它的温度系数可能高达50ppm/℃,环境温度变化5℃,测温结果就会出现较大偏差。硬件选型时参考电阻必须选精密电阻,精度0.1%起步、温度系数25ppm/℃以下,最好用金属箔电阻。

5.3 参考电阻与引线电阻带来的系统误差

很多项目用了三线制RTD,但读数在长线下还是不准。原因通常是参考电阻和RTD激励电流的匹配问题。ADS122U04的激励电流源IDAC1和IDAC2虽然经过匹配,但长线缆的电阻不一样,导致两路电流在各自线路上压降不平衡,这个误差会在参考电阻上体现出来。

解决思路有两条路。一是改用四线制RTD,从物理上消除引线电阻的影响。二是针对三线制做软件校准:在系统校准时,把RTD替换成已知精度电阻,测出一组修正系数,后续每个读数乘以这个系数即可。这个方法我试下来效果不错,常温下能把零点几欧的引线误差压到很小的量级。

真正的系统校准确认必须在恒温槽里做。把RTD探头放进恒温槽,设定几个温度点,记录ADC读数对应的温度,拟合出偏移曲线。校准后的系统在0到100℃区间内,整体误差能做到0.2℃以内,这对HVAC场合已经相当理想了。

5.4 低功耗模式下的唤醒时序

记录仪类产品通常会使用单次转换模式。ADS122U04完成转换后会自动进入低功耗待机,但它的UART模块是否保持监听取决于具体的配置。实测时我发现一个坑:进入单次转换睡眠前,如果把UART也一起关掉,那主机后续发RDATA命令就完全收不到响应。

解决方案是让UART始终在接收使能状态而ADC在空闲时进入低功耗。具体实现时要注意,ADC的START命令和唤醒命令通过同一根UART线发送,时序上必须先唤醒再发命令。我习惯的做法是检测到DRDY低脉冲之后延时1ms,再发RDATA,确保ADC内部的转换结果寄存器已经稳定锁存。

5.5 常见问题速查表

下面把上述问题整理成一个快速排查表,方便现场调试时对照。

现象可能原因排查方法解决措施
通信一直超时TX/RX接反、波特率不匹配示波器看UART波形交换TX/RX,重新计算SPBRG
读数固定为0xFFFFFF转换未完成即读数据检查DRDY时序改为DRDY下降沿触发读取
读数缓慢升高RTD自热查看激励电流设置降低IDAC电流,改善散热
读数随温度漂移参考电阻温漂用精密电阻替换选用低温度系数参考电阻
长线时读数偏大引线电阻不平衡短接传感器测量线阻三线制软件校准或改四线制
低功耗唤醒失败UART被关闭检查寄存器设置保持UART监听,只关ADC转换

6. 实测心得:这套方案到底怎么样

项目做到最后阶段,我拿了一块自己画的测试板做了一轮完整的评估。测试条件是环境温度25℃,用恒温槽把RTD探头从0℃逐步升到120℃,记录系统的显示温度,和恒温槽的标准仪表读数比较。整个测试下来,全量程最大误差出现在低温段,大约0.15℃,中温段基本在0.1℃以内。这个结果对HVAC应用绰绰有余,对于工业设备表面测温也足够参考。

功耗方面,系统待机状态进入低功耗模式后,整体电流大约能压到很低的水平。如果是电池供电的数据记录仪,配合5到10秒的采样周期,续航可以做到一年以上,这对现场部署来说非常有说服力。

再分享一个硬件布局上的小技巧。ADS122U04对模拟输入的走线比较敏感,把传感器过来的两根差分线等长、并行走,同时用地线包围,能明显减少共模干扰。参考电阻到基准引脚的走线尽量短而粗,不要经过过孔再绕一圈回来。这些细节不一定每次都能看出差别,但在现场电磁环境糟糕的地方,布局规范与否直接决定系统能否稳定运行。

如果后续想扩展这套方案,比较简单的是增加第二路ADS122U04,通过两个不同的UART接口分别连接PIC18F86K90的EUSART1和EUSART2,实现多通道温度采集。另外也可以把ADS122U04换成ADS122U04的兄弟型号,比如带更多通道的,配合同一个PIC MCU,就能覆盖多点温度监测的场景。固件层面,线性化代码写得好,其实可以做成一个小的温度采集库,后面换传感器类型时只改配置项,不需要动大框架。

最后说一句实在话:这套方案真正的价值不在于某个单芯片参数有多亮眼,而在于信号链端到端的完整性。从传感器激励、信号放大、模数转换到线性化处理,每个环节都有厂商方案兜底,工程师要做的只是把各个环节正确对接起来。做扎实了,它就是一个可靠、低功耗、精度够用的通用温度采集模块,放到工业盘柜、HVAC控制箱或者暖通数据采集项目里都能直接落地。

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

工业温度测量硬件设计:ADS122U04IPWR+STM32F745ZG高精度信号链构建

/* 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 3:11:16

基于ADS122U04与PIC18F87J50的高精度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 3:11:14

工业级温度测量:ADS122U04+STM32F207高精度抗扰设计

/* 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 3:11:13

ADS122U04+STM32F072RB:工业高精度温度采集系统设计与调试实录

/* 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 3:11:06

ADS122U04+STM32L031多路RTD/NTC温度采集设计指南

/* 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 3:10:30

从热词impeccable到技能精进:一套打磨‘无可挑剔’能力的实操法

最近“impeccable”这个词突然在很多评论区窜了出来,连带“impeccable skill”也成了热词。有人把它当高级形容词用,说某某人的穿搭 impeccable,某某人的操作 impeccable;也有人拿它当目标,说自己想把某项技能练到 imp…

作者头像 李华