24位ADC+8位MCU实现稳定可靠的温度采集系统设计

发布时间:2026/11/5 7:37:03
24位ADC+8位MCU实现稳定可靠的温度采集系统设计 前一阵把一套温度采集模块从选型到调试完整走了一轮。核心链路其实不复杂传感器K型热电偶或PT100的毫伏级/电阻信号先由ADS122U04IPWR这颗24位ADC采集转成数字量再经UART串口交给PIC18LF45K22单片机在MCU里完成线性化、冷端补偿、数字滤波和工程量换算。这套组合我在工业现场和HVAC暖通空调两类场景都实测过写这篇文章就是为了把这套测温方案里说明书上不会写的事全部抖出来。项目本身不算多高深但涉及信号链、通信协议、算法、校准和抗干扰几个环节任何一个地方没处理好最终温度数据就会跳、会偏、会“飘”。文章适合正在做温度变送器、暖通DDC控制器、工业数据采集模块或者想用独立高精度ADC给单片机扩展测温通道的朋友。看完至少能少走三个月弯路尤其是后面“常见问题”那一节都是我用示波器和烙铁一点点试出来的。1. 方案选型思路为什么坚持用独立24位ADC加8位MCU1.1 工业现场和HVAC测温难在哪里先说痛点。工业现场和HVAC的测温和实验室里搭个电路完全是两回事。第一关是信号太微弱。K型热电偶的热电势只有约40uV/°C测个300°C的管道表面满量程也就12mV左右。这种级别的信号单片机自带的10位或12位ADC根本没法用——不是分辨率不够是噪声和失调就足以把有效位吃掉大半。PT100这类热电阻稍微好一点但也要恒流源激励还要处理引线电阻带来的误差。第二关是环境太恶劣。HVAC系统里有变频器、压缩机、风机盘管工业现场更不用说电机启停、电磁阀动作全是电磁干扰源。温度传感器信号线稍微走长一点采集到的就是一堆毛刺。我见过不少项目选型时ADC精度很高实际跑起来读数后面两位一直在跳最后只能靠软件把精度“糊”回去。第三关是长期稳定性。HVAC设备是7x24小时跑的工业过程控制更不能三天两头校准。ADC的内部基准温漂、放大器的失调漂移、冷端补偿传感器的位置偏差这些平时看不出来的问题跑一个月后全都会暴露。所以这套方案的目标很明确在恶劣环境里稳定采到可重复、可信赖的温度值而不是单纯追求一个实验室条件下的高精度指标。1.2 为什么选ADS122U04IPWR而不是SPI接口的ADS1220ADS122U04和经典的ADS1220在核心架构上同源都是24位ΔΣ型ADC内置PGA可编程增益放大器、低温漂基准电压源、IDAC恒流源但通信接口从SPI换成了UART。这个改动对8位MCU方案来说非常关键。第一个好处是引脚占用极少。PIC18LF45K22这边只需要两根线——TX和RX就能完成和ADC的通信。SPI接口听起来也不复杂但实际用起来要管SCK、MISO、MOSI、CS四根线还得仔细伺候时序。如果MCU的SPI模块被别的外设占了还得用GPIO模拟波特率和时序一致性很难保证。UART就轻松多了几乎所有单片机都自带硬件UART模块开个中断就能收发。第二个好处是抗干扰能力强。工业现场的长距离通信UART天生比SPI更有优势。SPI是同步通信时钟线和数据线并行走线稍微有点干扰就导致时序错乱UART是异步通信只要波特率误差在容忍范围内线缆上的共模干扰很难让它误码。我在现场用1.5米长的屏蔽双绞线连ADC和MCUUART跑9600波特率实测一整天误码率为零。第三个好处是隔离方便。如果要做4-20mA两线制变送器或者系统需要和高压侧隔离UART用光耦或数字隔离器非常方便隔离器选型也成熟。SPI做隔离就要考虑时钟同步问题麻烦不少。另外ADS122U04内置了仪表放大器级别的PGA外部不用再配精密运放内部基准源温漂指标够用省掉一颗基准芯片IDAC恒流源刚好给PT100/PT1000做激励。算下来BOM里省掉的模拟器件不是一两个。注意这里说的ADS122U04IPWRIPWR只是TI的封装和包装后缀芯片功能就是ADS122U04。选型时别被这串字母干扰直接用ADS122U04查手册就行。1.3 PIC18LF45K22在系统中扮演什么角色按理说ADS122U04已经是数字输出了随便配个MCU都能把温度算出来。为什么选PIC18LF45K22而不是STM32或者更高端的平台原因很务实。成本。8位MCU在HVAC控制器和工业仪表领域成本优势仍然明显。一颗PIC18LF45K22在批量采购时价格只有32位ARM的几个零头对温控器、DDC模块这种单价敏感的产品来说BOM每省一毛钱都是利润。供货稳定和生态成熟。Microchip的PIC系列在工控领域用了二十年生命周期长不会说换就换。很多老工程师手里都有成熟的PIC18开发环境代码移植成本低。外设够用。PIC18LF45K22这颗芯片带两个EUSART模块一个给ADS122U04另一个可以留给RS-485通信刚好满足工业现场最常见的Modbus组网需求。它还有外设引脚选择PPS功能UART的TX/RX可以映射到不同引脚画PCB时走线能省不少事。还有一个容易忽略的点功耗。LF后缀代表低电压版本工作电压1.8V到3.6V静态功耗极低。如果整套设备要由电池供电或者在断电时切换到备用电源维持关键测温通道这颗MCU比ARM平台有优势得多。当然如果项目里还有复杂的PID控制、人机界面、文件系统这些需求PIC18就有点吃力了该上32位就上32位。但单纯做测温采集Modbus转发这个级别的任务8位MCU性能绰绰有余。2. 硬件设计信号链和PCB布局的关键细节2.1 热电偶与RTD两种接入方案实际项目里HVAC系统用得最多的是PT100/PT1000热电阻工业现场则热电偶和热电阻各占一半。两种传感器的接入方式完全不同需要分开设计。热电偶是电压输出型传感器两个不同金属接点产生热电势。接线最简单直接把热电偶的正负极接到ADC的差分输入端就行。但热电偶有几个坑一是信号极弱必须用PGA放大。二是热电偶的冷端也就是接线端子处温度会变化必须做冷端补偿。三是热电偶引线电阻很小对ADC输入阻抗要求不高但线缆如果经过强干扰区域必须加滤波。我的做法是差分输入前各串一个100Ω电阻再对地并一个1nF的陶瓷电容构成一阶低通滤波截止频率大约800kHz能滤掉大部分射频干扰。如果现场变频器噪声特别凶可以把电容加到10nF代价是采样稳定时间变长软件里要多等一会儿再读数据。RTD是电阻输出型传感器需要恒流源激励然后测电压。这里必须用ADS122U04的IDAC功能而不是外部恒流源。原因很简单IDAC和ADC内部是同步设计的激励电流的温漂和ADC基准的温漂有很好的相关性能抵消一部分误差。外部恒流源做得再好也很难达到这种协同效果。RTD接线方式直接影响精度。两线制最省线但导线电阻直接叠加到传感器电阻上误差没法消除三线制用两根线走激励电流第三根线做电压检测能抵消大部分引线电阻误差四线制最理想激励电流和电压检测完全分开导线电阻几乎不产生误差。在HVAC项目里传感器到控制器的距离通常不超过几十米我建议用四线制。铜导线20米长双绞线来回电阻大概有几个欧姆对PT100来说这个误差在100°C时能造成几度的偏差完全不可接受。四线制虽然多拉一根线但对精度的提升是决定性的。2.2 PGA增益与激励电流的配平计算这个环节特别容易翻车我见过不止一个人把PGA设得过大导致信号超过满量程读数直接“顶天”。增益的选择要基于传感器输出范围反推不能拍脑袋。先说K型热电偶。假设项目里测的是0到300°C范围热电势大约0到12.2mV。ADS122U04内部基准默认是2.048VPGA增益设为32时最大输入满量程对应2.048V/3264mV。12.2mV的信号用32倍增益后是390mV远没到满量程留了足够裕量。这样做的目的是防止传感器超温、或者线缆上串入异常电压时ADC不会立刻饱和。如果测温上限到600°C热电势约24.9mV此时PGA还是32够用吗24.9mV乘32等于797mV离满量程64mV不对这里满量程是64mV所以24.9mV对应的放大值是797mV已经超过满量程了。所以增益要降到8或16。增益和量程的匹配关系是选型时最先要算清楚的。PT100就完全不同了。用IDAC给500uA激励电流PT100在0°C时电阻100Ω产生50mV电压100°C时电阻138.51Ω产生69.3mV电压。信号范围约19mV。这里有两个选择PGA设为16把0°C时的基础电压50mV放大到800mV100°C时放大到1.1V都不会超过2.048V满量程。如果PGA设为32100°C时是2.2V超了直接饱和。所以PGA16是合适的。PT1000呢电阻是PT100的10倍激励电流要降下来用250uA。0°C时250mV100°C时346mVPGA设为4刚好能覆盖。激励电流不是越大越好电流大了传感器会自热PT100在500uA下的自热误差大约0.03°C左右可以接受但如果是插入式探头在静止空气中自热会更明显电流降到250uA更稳妥。我把常用的配平参数整理成一个表方便直接抄作业传感器测温范围激励电流PGA增益放大后最大电压是否安全K型热电偶0~300°C无32约0.39V安全K型热电偶0~600°C无8约0.20V安全PT100四线制0~100°C500uA16约1.11V安全PT1000四线制0~100°C250uA4约1.39V安全2.3 电源、PCB布局与冷端传感器放置这部分是硬功夫很多人的板子就是栽在这里。电源设计原则很简单模拟部分和数字部分分开。ADS122U04的模拟电源AVDD用一颗低噪声LDO单独供电数字电源DVDD可以和MCU共用一颗LDO但两者之间要放磁珠和去耦电容。ADC的参考电压引脚对滤波要求极高我习惯在REF引脚放一个10uF钽电容加两个100nF陶瓷电容位置尽量靠近芯片引脚。PCB布局上首先要保证ADC底下有完整的模拟地平面。数字地和模拟地在ADC下方单点连接避免数字信号电流流过模拟地平面。ADS122U04的UART走线不要贴着模拟输入走实在躲不开就加地线隔离。冷端温度传感器的位置是热电偶方案里最容易被忽视的致命细节。冷端补偿的原理是测出热电偶接线端子处的实际温度再把这个温度对应的热电势加到测量结果里。所以冷端传感器必须紧贴热电偶的接线端子而且要尽量和两个端子保持等距。我踩过一个大坑最开始把NTC放在板上角落离接线端子有两厘米远。结果板子上有个稳压芯片工作时发热把NTC附近的温度抬高了3°C导致整条测量链路恒偏高3°C。后来把NTC挪到正对端子下方的位置又加了一个小散热片隔开热源偏差才回到0.2°C以内。冷端温度传感器用什么我的经验是NTC加PIC内部10位ADC就够了。冷端温度变化缓慢本身不要求多高的分辨率10位ADC配合合适的分压电阻能分辨到0.1°C已经远超需求。但如果系统里没有多余ADC通道也可以用数字温度传感器走I2C接口只是BOM里多一颗芯片。3. 软件实现从原始码值到稳定温度值3.1 UART通信协议与状态机ADS122U04是UART从机MCU是主机。上电后ADC不会主动上报任何数据必须由MCU发命令帧ADC收到后回应答帧。所以通信协议的核心就是“一问一答”。我的协议帧结构设计得很简单一共6个字节字节序号内容说明00xAA帧头1命令字0x01读数据0x02写配置2参数通道号或寄存器值3数据高字节24位转换结果的高8位4数据低字节24位转换结果的低16位中的低8位5CRC8校验字节这里命令字、参数和返回数据的具体布局可以根据自己需求微调。关键是两点帧头必须要防止数据流错位CRC校验必须要哪怕是简单的CRC8也能挡掉绝大多数UART偶然误码。PIC侧的接收建议用状态机实现不要用阻塞式等待。中断收到一个字节状态机推进一次收满6字节后置标志位主循环处理数据。这套结构在8位MCU上非常经典占资源少逻辑清晰。发送端要考虑超时重试。ADC偶尔会没响应比如正在写EEPROM、或者上电初始化主机发完读命令后等50ms没收到应答就重新发一次。连续三次超时判定通信异常置位错误标志。3.2 传感器线性化处理热电偶和PT100的传感器特性都不是线性的。PT100在0到100°C之间电阻温度关系的线性度还算可以但严格算下来也有零点几度的非线性。热电偶的非线性更明显K型在300°C附近同样的温度差对应的电动势差是变化的。处理非线性有两种常用做法查表插值和多项式拟合。8位MCU上查表插值是王道。分度表放在const数组里占用Flash空间不占RAM查表速度飞快。以PT100为例我直接用0到100°C每隔10°C的分度表配合线性插值精度就能到0.05°C以内/* PT100分度表0~100°C间隔10°C单位欧姆 */ const float pt100_table[11] { 100.00f, 103.90f, 107.79f, 111.67f, 115.54f, 119.40f, 123.24f, 127.08f, 130.90f, 134.71f, 138.51f }; float pt100_resistance_to_temp(float r) { uint8_t i; float slope, temp; if (r pt100_table[0]) return 0.0f; if (r pt100_table[10]) return 100.0f; for (i 0; i 10; i) { if (r pt100_table[i] r pt100_table[i 1]) { slope (pt100_table[i 1] - pt100_table[i]) / 10.0f; temp (float)i * 10.0f (r - pt100_table[i]) / slope; return temp; } } return 100.0f; }这个函数每次调用都会遍历一次表性能不是最优的。如果采样速率要求高可以改成二分查找但HVAC场景一秒采一次线性遍历完全够用。热电偶的查表原理一样只是数据量更大。K型热电偶0到1000°C每隔10°C一个点需要101个浮点数或定点数PIC18的Flash完全装得下。分度表数据网上有标准版本千万别手抄直接从NIST的公开数据表提取。3.3 冷端补偿的实现流程这个环节是热电偶方案里最容易算错的我必须花点篇幅讲清楚。热电偶输出的电动势是热端和冷端的温差电动势。所谓“冷端”就是热电偶的接线端子那边温度通常不等于0°C。要得到真实的热端温度必须把冷端温度“补偿”掉。标准流程分三步/* 冷端补偿以K型热电偶为例 */ /* 输入v_meas 为ADC测得的热电偶电动势单位uVt_cj 为冷端温度单位°C */ float thermocouple_compensated_temp(float v_meas, float t_cj) { /* 第一步由冷端温度查分度表得到冷端对应的电动势 */ float e_cj ktype_temp_to_emf(t_cj); /* 单位uV */ /* 第二步总电动势 测量电动势 冷端电动势 */ float e_total v_meas e_cj; /* 注意符号方向 */ /* 第三步由总电动势反查温度 */ float t_hot ktype_emf_to_temp(e_total); return t_hot; }这里最容易错的是第二步的符号。冷端温度高于0°C时冷端电动势是正的所以要用“加”。很多人想当然地写成了“减”结果环境温度越高测得的热端温度反而越低。我就犯过这个错当时校准的时候怎么都对不上最后用万用表直接量热电偶毫伏值手工算了一遍才发现是符号问题。还有一个细节冷端温度传感器读出来的是板上温度但热电偶端子和PCB的温度可能有细微差别。要缩小这个误差除了物理上让NTC紧贴端子还可以在软件里做一次“位置校准”把热电偶探头放在已知温度比如冰水混合物中微调冷端温度的偏移量让读数正好等于已知温度。这一步能在不换硬件的情况下把冷端补偿误差再压缩零点几度。3.4 数字滤波与50Hz工频干扰抑制ADC输出的是24位原始码值如果不滤波读数最后两三位基本稳定不下来。尤其是生产车间里动力电的50Hz工频感应无处不在温度数据会呈现周期性波动。ADS122U04内部的ΔΣ调制器和数字滤波器理论上对50Hz工频有抑制能力但前提是采样率和工频正好成整数倍关系。如果芯片配置成20SPS每秒采样20次50Hz正好是2.5倍抑制效果一般配置成50SPS时效果会好很多。我习惯把ADC配置成50SPS让内部数字滤波器的陷波点对准50Hz。软件层再叠加两道滤波第一道是中值滤波采样3次取中间值目的是剔除偶发的尖峰干扰。这类尖峰来自电机换向、继电器触点抖动单纯平均的话会被拉偏中值滤波能直接干掉。第二道是移动平均取16次有效采样做算术平均。50SPS下16次平均耗时约0.32秒HVAC和工业测温对这个响应速度完全能接受。平均后的数据有效分辨率能比单次采样提升约2位也就是说24位ADC在这种噪声环境下实际用到18到19位是靠谱的。移动平均的窗口别贪大。我试过取64次平均数据确实稳得一匹但温度变化时跟踪速度明显变慢传感器碰到热水都要好几秒才能反映出来现场调试时感觉特别“闷”。16次是个不错的折中。4. 校准流程与精度验证4.1 两点校准怎么操作系统装好后不能直接用必须做一次两点校准。校准的目的是消除系统性的失调和增益误差这两类误差主要来自PGA的输入失调、基准电压的初始精度、以及PCB上的微小漏电流。第一步校准零点。把温度探头放进冰水混合物注意是“冰水共存”的状态温度稳定在0°C。读取当前ADC转换值记录下来作为零偏值。冰水混合物的关键在于冰块和水的温度平衡别用纯冰块也别用刚从冰箱拿出来的冷水等冰水界面稳定下来再读数。第二步校准满量程。工业上推荐用干体炉设定一个稳定温度比如100°C把探头插进去等温度稳定后读取ADC值记录为满量程值。如果没有干体炉用沸水也行但海拔影响水的沸点高原地区沸点不到100°C要把当地实际沸点查清楚再算。校准系数存到MCU的EEPROM里。校准完成后软件里的换算公式变成/* 线性校准raw为ADC读数raw_zero和raw_span为校准值t_span为校准温度跨度 */ float calibrated_temp(float raw) { float k (float)(t_span) / (raw_span - raw_zero); return (raw - raw_zero) * k; }这个公式的前提是传感器响应线性PT100在窄范围内够用。热电偶的非线性由查表算法处理校准相当于把整条曲线整体平移和拉伸效果也稳定。校准系数写EEPROM要写两次并读回校验防止掉电瞬间写了一半下次上电读到乱码。这是我吃过亏才加的保险。4.2 实测数据与误差分配我在测试台上用干体炉和精密温度计做了多组对比校准后的典型数据如下参考温度(°C)校准前读数(°C)校准后读数(°C)误差(°C)0.000.830.020.0225.0025.6124.97-0.0350.0050.4849.98-0.0275.0075.3775.030.03100.00100.1999.97-0.03校准前最大偏差0.83°C校准后偏差控制在±0.05°C以内。这个数据是用PT100四线制测的算是这套方案最好的表现。如果是K型热电偶整体误差会大一些。误差分配是这样的热电偶本身允差是±1.5°C或±0.4%读数取大者这是传感器自身的物理限制ADC和PGA引入的误差大约±0.1°C冷端补偿误差大约±0.3°CPCB和长线的干扰误差约±0.2°C。累加起来K型热电偶方案的典型总误差在±1°C左右。这里要说一句可能不爱听的话系统做得再准也突破不了传感器本身的精度上限。PT100的A级允差是±0.15°C普通K型热电偶是±1.5°C。如果你买的传感器本身就一个度都不准那后面做再多校准都是白费力气。选传感器时一定要问清楚允差等级HVAC风管测温可以用B级PT100但工业过程控制至少要用A级。5. 常见问题与排查技巧实录5.1 问题速查表把我在调试中遇到的高频问题整理成一张表按现象排查最方便现象可能原因排查手段与解决办法读数末尾2~3位乱跳PGA增益过高噪声被过度放大降低PGA增益增加软件移动平均次数检查基准去耦电容温度整体偏高或偏低几度冷端补偿位置不对或冷端传感器受热用热成像或手摸排查板上热源把NTC紧贴端子并隔开热源温度读数呈周期性波动50Hz工频干扰采样率未对准把ADC采样率配置成50SPS增加中值滤波信号线用屏蔽双绞线UART偶发错帧或掉线波特率误差、缺上拉、共地不良检查MCU与ADC共地TX/RX加上拉10kΩ协议加CRC校验和超时重试上电后ADC无响应TX/RX接反或供电时序不对万用表量电压和信号线电平示波器抓UART波形确认是否有数据发出读数接近满量程“顶天”PGA设置过大导致信号饱和按2.2节的配平表重新计算PGA增益和激励电流校准值掉电后丢失EEPROM写入被中断写两次校验写完立即读回对比加写保护延时5.2 三个我踩过的深坑第一个坑是跳字。量测读数稳定在0.38°C到0.42°C之间来回跳以为是PGA增益不够把增益从16提高到32结果跳得更凶。用示波器测ADC的电源引脚发现上面叠了一层几百kHz的毛刺来自板子另一侧的开关电源。把开关电源的开关频率调低、在ADC供电端加了一个10uF低ESR电容后毛刺消失读数稳定到0.01°C。这件事教会我跳字先查电源别急着改软件。第二个坑是冷端偏差。现场调试时K型热电偶读数总是比实际温度高3°C左右怎么校准都拉不回来。后来发现是冷端NTC旁边有一颗LDO满载工作时表面温度比环境高出一截把NTC“烤”热了。解决方法是把NTC挪走同时在LDO和NTC之间加了一个小铜皮作为热屏蔽。之后冷端偏差降到0.2°C以内。第三个坑是UART通信偶发乱码。一开始把波特率设成了115200现场布线较长时一天能遇到几次错帧。排查发现是数据线过长导致信号边沿变缓加上现场有变频器干扰。把波特率降到9600数据线换成双绞屏蔽线屏蔽层单端接地同时软件里加了CRC校验和三次重试机制之后连续跑了两个星期没有一帧错误。5.3 长线传输的干扰处理经验如果ADC和MCU之间的距离超过1米或者线缆必须经过变频器、动力电缆附近有几点经验值得单独说。信号线一定要用屏蔽双绞线屏蔽层在MCU端单点接地。屏蔽层两端都接地容易形成地环路电流反而引入更多噪声。热电偶的输入线如果特别长在ADC输入端加的RC滤波电容可以适当调大但要注意采样稳定时间软件里需要等待足够长的时间再读数。UART通信线也是一样。TX、RX两根线最好放双绞线里不需要特殊阻抗匹配但一定要走差分不要一根信号线一根地线那样并排走。地线回路要单独拉粗线确保MCU和ADC的参考地是同一个电位。两板距离较远时最好在ADC板的地和MCU板的地之间加磁珠或共模电感切断地环路干扰。6. 一点个人的总结和体会这套方案从原理图到稳定运行前后花了不少时间但每一步踩坑都值回票价。我自己最大的体会是ADS122U04这类带UART接口的高精度ADC对8位MCU项目来说是一个极好用的组合把模拟前端和数字主控之间的接口简化到了极致你可以把精力花在线性化算法和现场抗干扰上而不是折腾SPI时序和驱动能力。如果让我给刚开始做类似项目的朋友一个建议我会说不要一上来就做热电偶先用PT100四线制把整条链路跑通理解清楚ADC的初始化、通信协议、滤波和校准流程再切到热电偶方案。热电偶的冷端补偿和线性化是两座大山提前把链路跑熟了遇到这两座大山时才不会手忙脚乱。最后再分享一个小技巧正式上量产前把同一套程序烧到几块板上接上不同传感器放进恒温箱里跑72小时每10分钟记一次数据。温度稳定性和重复性数据比任何实验室精度指标都更能说明问题。这套流程走下来你对这套方案的信心会比任何仿真和计算都来得扎实。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询