
1. 工业与HVAC温度测量方案的整体设计思路工业现场和HVAC系统里的温度测量跟实验室里拿个万用表测室温完全是两码事。前者面对的是长线缆、强电磁干扰、宽温区、多通道轮询、还要长期稳定运行不漂移。我做过好几个HVAC控制板和工业变送器的项目踩过的坑足够写一本小册子。这次拿ADS122U04IPWR这颗24位Δ-Σ ADC搭配PIC24F16KA102这颗低功耗16位MCU来做温度采集是我认为在中小型工业与HVAC场景里性价比和可靠性平衡得相当好的一套组合。先说这套方案解决什么问题。工业与HVAC场景里最常见的温度传感器无非三类PT100/PT1000铂电阻、热电偶K型、T型居多、以及NTC热敏电阻。它们输出的信号都很微弱——PT100在0℃时只有100Ω满量程变化也就几十到一百多欧姆热电偶输出是毫伏级甚至微伏级。这种信号直接进MCU的ADC基本等于把噪声当信号读。所以必须有一级高精度、低噪声、带PGA可编程增益放大器的专用ADC来做前端。ADS122U04IPWR正好卡在这个位置上。它是TI的24位Δ-Σ ADC内置PGA增益可到128倍带两个差分输入通道或者四个单端通道还有激励电流源IDAC可以直接给PT100供电做比例测量。UART接口接线简单跟PIC24F16KA102这种资源不算富裕但足够稳定的MCU搭配刚好。PIC24F16KA102是Microchip的16位低功耗MCU16KB Flash、1.5KB RAM带UART、SPI、I2C跑个温度采集、线性化、通信上报的活儿绰绰有余而且它的低功耗特性适合那些靠电池或者总线供电的HVAC节点。为什么不用MCU自带的12位ADC加运放自己搭我试过。12位ADC理论分辨率是1/4096对于PT100在-50到150℃范围、对应大约80Ω到160Ω的变化算下来每个LSB对应的温度分辨率大概在0.1℃量级看着够用。但实际问题是噪声和漂移——运放失调漂移、电阻网络温漂、PCB漏电流随便一项就能把有效位数吃掉三四位最后实际有效分辨率可能只有8到9位温度波动一两度。而ADS122U04IPWR的24位Δ-Σ架构加上内置PGA和斩波稳定有效位数ENOB在增益128、10SPS下能做到20位以上这才是工业级测量该有的底子。从系统架构上看整个方案分四层传感器层PT100/热电偶/NTC、模拟前端层ADS122U04IPWR及其外围的滤波、基准、激励、数字控制层PIC24F16KA102负责配置ADC、读取数据、做线性化和温度换算、通信与电源层UART上报、隔离、供电。这个分层的好处是每一层职责清晰调试的时候可以逐层排查不会一锅粥。HVAC应用还有个特殊点多通道轮询。一个空调机组或者新风系统往往要同时监测送风温度、回风温度、盘管温度、室外温度四到八个测点很常见。ADS122U04IPWR有两个差分通道配合外部多路复用器可以扩展到更多路或者用多颗ADC挂同一条UART总线通过地址区分。PIC24F16KA102的UART加上GPIO控制多路复用器就能实现轮询采集。这里要注意轮询的时序——每次切换通道后要留足够的建立时间让PGA和Δ-Σ调制器稳定下来否则读到的第一个数据是脏的。选型上我还对比过几颗竞品。比如某些24位ADC虽然精度够但要么是SPI接口在长线传输时不如UART方便要么是没有内置IDAC导致PT100激励电路要额外搭。ADS122U04IPWR把PGA、IDAC、基准可选外部、UART都集成进去外围元件少PCB面积小这对HVAC那种空间受限的控制板很关键。PIC24F16KA102这边我选它而不是更便宜的8位PIC是因为16位的数据处理能力在做多项式线性化和浮点温度换算时更从容而且它的低功耗模式休眠电流几百nA适合间歇采集的场景。提示方案选型时不要只盯着ADC的分辨率位数。24位是理论值实际能用的是ENOB。选型第一看ENOB和噪声第二看接口和集成度第三才看价格。工业与HVAC场景里可靠性永远排在成本前面。2. 核心器件细节与硬件设计要点2.1 ADS122U04IPWR的关键特性与引脚配置ADS122U04IPWR是TSSOP-16封装的24位ADC我把它几个关键特性拆开讲因为每一个都直接影响你的电路设计。PGA增益可选1、2、4、8、16、32、64、128。对于PT100我一般用增益8到16对于热电偶用增益64到128。增益越高输入范围越小但对微弱信号的放大越充分。这里有个坑增益不是越高越好。增益128时输入满量程只有±VREF/128如果VREF是2.048V那满量程才±16mV。热电偶在高温时输出可能超过这个范围会削顶。所以增益要根据传感器实际输出范围来定留20%余量。数据速率5SPS到2000SPS可配。工业温度测量不需要快我通常用20SPS或10SPS。为什么Δ-Σ ADC的噪声和速率是反比关系速率越低内部数字滤波器对50Hz/60Hz工频干扰的抑制越好。20SPS时sinc滤波器在50Hz和60Hz处都有零点能有效压制工频干扰。如果你用1000SPS工频抑制就没了读数会跳。IDAC激励电流源两路可编程电流源10μA到1.5mA。做PT100比例测量时用一路IDAC流过PT100和一颗精密参考电阻比如2.5kΩ、0.1%ADC测量PT100上的压降同时参考电阻上的压降作为参考电压。这样激励电流的漂移被比例消掉了测量精度只取决于参考电阻的精度。这是PT100测量的经典接法比恒压激励靠谱得多。内部基准2.048V温漂典型值5ppm/℃。对于大多数工业温度测量够用。但如果要更高精度建议外接一颗低漂移基准比如REF50252.5V3ppm/℃。内部基准的好处是省元件省空间HVAC场景里如果精度要求±0.5℃以内内部基准完全够。引脚配置上模拟输入是AIN0到AIN3可以配成两对差分AIN0/AIN1和AIN2/AIN3或四路单端。UART引脚是TXD和RXD注意这是ADC的UART不是MCU的要交叉连接。还有CLK、CS、DRDY等控制引脚。DRDY是数据就绪中断接到MCU的外部中断引脚上这样MCU不用轮询省CPU也省功耗。2.2 PIC24F16KA102的资源分配与低功耗策略PIC24F16KA102的16KB Flash和1.5KB RAM在温度采集应用里怎么分配我有个惯用的套路。Flash这边主程序加ADC驱动大概占4到6KB温度线性化和查表占2到3KBUART通信协议占2KB剩下的留给参数存储和bootloader如果需要现场升级。RAM这边采集缓冲区开64到128字节够存一轮多通道的数据浮点运算的临时变量占几十字节UART收发缓冲各64字节。1.5KB看着少但精打细算够用。低功耗策略是这颗MCU的亮点。它支持深度休眠休眠电流典型值只有几百nA。我的做法是ADC配置成连续转换模式DRDY中断唤醒MCUMCU读一次数据、做换算、存缓冲然后立刻回休眠。这样MCU的占空比极低平均功耗可以做到几十微安。对于HVAC里那些用两节AA电池或者4-20mA环路供电的节点这个功耗水平能撑好几年。但这里有个细节要注意ADC的功耗。ADS122U04IPWR在正常转换时电流大概几百微安休眠时几微安。如果MCU休眠了但ADC还在连续转换整体功耗下不来。所以更好的策略是让MCU控制ADC的转换节奏——MCU定时唤醒启动ADC单次转换等DRDY读数据然后让ADC也进休眠。这样两个器件的占空比都低系统平均功耗最优。2.3 模拟前端的外围电路设计外围电路这块我按传感器类型分开讲因为不同传感器的前端设计差别很大。PT100的接法用比例测量法。IDAC1从AIN0流出经过PT100到地PT100上端接AIN0下端接AIN1差分测量。同时IDAC2或者同一路IDAC流过参考电阻RREFRREF上的压降接到REF和REF-。这样ADC的读数 (PT100压降 / RREF压降) × 满量程码值。激励电流的绝对值不重要重要的是比例。RREF选2.5kΩ、0.1%、5ppm/℃的金属膜电阻。PT100用三线制接法可以消除引线电阻但ADS122U04IPWR只有两路IDAC三线制需要两个IDAC分别补偿接线稍复杂。四线制最准但线多HVAC现场布线不方便我一般用三线制折中。热电偶的接法热电偶输出是差分毫伏信号直接接AIN0/AIN1增益设64到128。关键是冷端补偿。热电偶测的是热端和冷端的温差冷端温度必须单独测。我通常用一颗NTC或者集成温度传感器比如LM75贴在接线端子附近测冷端温度然后在MCU里做补偿计算。冷端补偿的精度直接影响整体精度NTC要选B值一致性好、精度±0.5℃以内的。NTC的接法NTC阻值随温度变化大非线性强但便宜。用分压法NTC和一颗精密电阻串联中点接ADC输入。NTC的线性化用Steinhart-Hart方程或者查表。查表更省MCU算力我一般把-40到125℃按1℃间隔做成表存在Flash里测量时线性插值。滤波和去耦模拟电源和数字电源分开用磁珠或者0Ω电阻隔离。每个电源引脚配0.1μF和1μF电容靠近引脚放。模拟输入线上串RC低通截止频率设在几kHz滤掉高频噪声。但RC的电阻不能太大否则影响ADC的输入阻抗匹配。ADS122U04IPWR的输入阻抗在增益大于1时是固定的但增益为1时输入阻抗较低串的电阻要小。注意PCB布局时模拟地和数字地要单点连接通常在ADC下方。模拟输入走线要远离时钟线和电源线最好包地。这些是老生常谈但我在实际项目里见过太多因为地没处理好导致读数跳动的案例。3. 实操过程与核心环节实现3.1 硬件搭建与上电检查拿到板子后别急着上电写代码。先做静态检查用万用表量各路电源对地阻抗确认没有短路检查ADC和MCU的焊接特别是TSSOP封装的引脚有没有连锡确认参考电阻、滤波电容的焊接方向电容一般无方向但电阻要注意阻值对不对。上电顺序有讲究。先上数字电源确认MCU能正常复位、晶振起振如果有外部晶振。再上模拟电源用示波器看模拟电源的纹波应该在几毫伏以内。然后测ADC的基准电压内部基准应该是2.048V外部基准按你选的型号。基准电压的稳定性直接决定测量精度这一步不能省。我第一次做这个方案时上电后发现ADC读数一直是满量程。排查了半天发现是IDAC的配置寄存器写错了电流源没打开PT100上没有压降ADC输入悬空导致读数乱跳。所以上电后的第一步应该是读ADC的配置寄存器确认写入的值和读回的值一致这是验证UART通信是否正常的最快方法。3.2 ADC的配置与初始化代码配置ADS122U04IPWR我习惯按这个顺序来复位、配置寄存器、启动转换。下面是我常用的初始化流程用伪代码表示实际用C语言写。// 复位ADC ADS122U04_SendCommand(RESET_CMD); delay_ms(1); // 配置寄存器0增益、数据速率、工作模式 // MUX[3:0]0000 选AIN0/AIN1差分 // GAIN[2:0]011 增益8 // DR[2:0]010 20SPS // 连续转换模式 uint8_t reg0 0x00 | (0x03 4) | (0x02 1) | 0x00; ADS122U04_WriteReg(0, reg0); // 配置寄存器1基准选择、IDAC电流 // VREF选择内部2.048V // IDAC1500uA, IDAC2off uint8_t reg1 0x00 | (0x04 4) | 0x00; ADS122U04_WriteReg(1, reg1); // 配置寄存器2IDAC路由、DRDY模式 // IDAC1路由到AIN0 uint8_t reg2 0x00 | (0x01 4); ADS122U04_WriteReg(2, reg2); // 启动连续转换 ADS122U04_SendCommand(START_CMD);这段代码里增益8、速率20SPS、IDAC 500μA是针对PT100的典型配置。如果你用热电偶增益改成128IDAC关掉基准还是内部2.048V。配置完寄存器后一定要读回来验证因为UART通信可能因为波特率不匹配或者干扰出错。波特率设置上ADS122U04IPWR支持多种波特率我一般用9600或者19200。9600更稳抗干扰余量大19200快一点适合多通道轮询。PIC24F16KA102的UART配置要和ADC一致注意分频系数的计算。比如MCU主频8MHz要得到9600波特率分频值 8000000/(16×9600) - 1 ≈ 51。这个计算要精确否则通信会丢包。3.3 温度换算与线性化处理读到的ADC码值要换算成温度这一步是软件的核心。不同传感器算法不同。PT100的换算先算PT100阻值。ADC码值24位有符号除以满量程2^23-1得到比例乘以RREF得到PT100阻值。然后根据IEC 60751标准用Callendar-Van Dusen方程反算温度。0℃以上用二次方程0℃以下用四次方程。实际工程里为了省算力我常用分段线性插值把-200到850℃按10℃间隔做表精度能到±0.1℃。热电偶的换算ADC码值换算成热电动势mV加上冷端补偿的电动势然后查热电偶分度表NIST提供得到温度。K型热电偶的分度表是非线性的查表加插值最准。冷端补偿用NTC测到的冷端温度查NTC分度表得到冷端电动势加到热电动势上。NTC的换算用Steinhart-Hart方程1/T A B×ln(R) C×(ln(R))^3。A、B、C三个系数由厂家提供或者自己标定。这个方程算起来要开方和对数PIC24F16KA102做起来有点吃力所以我用查表法。把NTC的阻值-温度对应关系做成表测量时算阻值然后查表插值。线性化处理里有个细节浮点还是定点。PIC24F16KA102没有硬件浮点单元浮点运算是软件模拟慢且占空间。我一般用定点运算把温度放大100倍存成整数比如25.50℃存成2550。运算时用32位整数注意溢出。只有在最后上报或者显示时才转成浮点格式。3.4 多通道轮询与时序控制HVAC系统里多通道轮询是常态。ADS122U04IPWR有两个差分通道如果测点超过两个要么外接多路复用器要么用多颗ADC。我用过CD4051这类模拟多路复用器成本低但要注意导通电阻和漏电流。导通电阻会影响PT100的比例测量因为多路复用器的导通电阻会串在激励回路里。解决办法是把多路复用器放在激励回路之外或者用低导通电阻的型号比如ADG708导通电阻几欧姆。轮询时序上我的做法是切换通道后延时至少100ms再启动转换。为什么这么久因为Δ-Σ ADC的PGA和调制器需要时间稳定尤其是增益切换后。100ms是保守值实际测试下来50ms也够但工业现场我宁可留余量。转换完成后读数据然后切下一通道。一轮四个通道大概500ms对于温度这种慢变量完全够。DRDY中断的处理要注意读数据前先清中断标志否则会重复进中断。读数据用UART读注意UART是异步的要等接收完成。我一般用中断接收收到完整帧后置标志位主循环处理。提示多通道轮询时如果某个通道的传感器断线ADC读数会漂到满量程或者零。软件里要加断线检测——如果读数超出合理范围标记该通道故障不要直接上报错误温度。HVAC系统里一个错误的温度读数可能导致机组误动作。4. 常见问题与排查技巧实录4.1 读数跳动大、噪声高的排查这是最常见的抱怨。我遇到过的原因有七八种按概率排序电源纹波大、地线处理不当、IDAC配置错误、滤波不足、传感器引线太长、工频干扰、基准不稳。排查步骤我总结成一个流程。先看电源用示波器测模拟电源的纹波如果超过几毫伏先解决电源。然后看地确认模拟地和数字地单点连接ADC下方的地平面完整。再看IDAC读寄存器确认电流值对不对用万用表测PT100上的压降应该在几十毫伏量级。然后看滤波模拟输入端的RC滤波有没有装截止频率对不对。最后看传感器引线如果引线超过一米考虑用屏蔽线屏蔽层单端接地。工频干扰的典型表现是读数以50Hz或100Hz的节奏跳动。解决办法是把ADC的数据速率设成20SPS或10SPS利用sinc滤波器的工频零点。如果还不行在模拟输入端加共模扼流圈。4.2 UART通信丢包与误码UART通信在工业现场容易受干扰。我遇到过的情况波特率不匹配、地线环路、线太长、没有隔离。波特率不匹配最常见。ADS122U04IPWR的波特率由内部振荡器决定有误差。PIC24F16KA102的波特率由系统时钟分频也有误差。两者误差加起来超过3%就可能丢包。解决办法是用较低的波特率9600误差余量大。或者用ADC的CLK引脚输出时钟给MCU两者同步。地线环路是隐蔽的问题。如果ADC和MCU分别供电两地之间有电位差UART的参考地就漂了。解决办法是单点接地或者用数字隔离器比如ADuM1201隔离UART。工业与HVAC场景里隔离是标配别省这个钱。线太长的话UART的TTL电平驱动能力有限超过几十厘米就可能误码。解决办法是加RS-485收发器差分传输抗干扰强传输距离也远。HVAC系统里RS-485是主流ADC和MCU可以本地UARTMCU对外用RS-485。4.3 温度读数漂移与长期稳定性长期漂移是工业测量的大敌。我做过一个项目板子刚出厂时精度±0.2℃运行三个月后漂到±1℃。排查下来是参考电阻的温漂——选的电阻温漂50ppm/℃机柜内温度变化20℃电阻变化0.1%对应温度误差0.25℃。再加上ADC内部基准的温漂累积起来就大了。解决办法参考电阻选5ppm/℃以内的最好用金属箔电阻。ADC用外部低漂移基准。PCB布局上把参考电阻和ADC放在一起远离发热元件。如果机柜内温度变化大考虑加温度补偿——用板上的温度传感器测环境温度对读数做补偿。还有一个漂移源是PCB漏电流。如果板子受潮或者助焊剂没洗干净模拟输入引脚之间的漏电流会导致读数漂移。解决办法是清洗PCB涂三防漆。HVAC现场湿度大三防漆是必须的。4.4 常见问题速查表现象可能原因排查方法解决措施读数跳动大电源纹波大示波器测模拟电源加LC滤波换LDO读数跳动大地线处理不当检查地平面和单点连接重新布局单点接地读数跳动大工频干扰看跳动频率是否50/100Hz降速率到20SPS加共模扼流圈读数满量程IDAC没开读寄存器测PT100压降正确配置IDAC寄存器读数满量程传感器断线测传感器阻值检查接线加断线检测UART丢包波特率不匹配示波器测波形降波特率或用同步时钟UART丢包地线环路测两地电位差单点接地或加隔离长期漂移参考电阻温漂测不同温度下阻值换低漂移电阻长期漂移PCB漏电流清洗后看是否改善清洗PCB涂三防漆多通道串扰多路复用器导通电阻测切换后读数换低导通电阻型号调整时序4.5 实操心得与避坑技巧做了这么多项目我攒了几条书上不会写的经验。第一ADC的配置寄存器写完一定要读回验证。UART通信在工业现场不是100%可靠配置写错了后面全错。读回验证花不了几毫秒但能省你几天调试时间。第二PT100的三线制接法引线电阻要匹配。三线制的原理是假设三根线电阻相同实际布线时三根线要等长、同材质。如果不等长补偿就不准。我见过用不同长度引线的误差能到好几度。第三热电偶的冷端补偿传感器要贴近接线端子。冷端补偿测的是接线端子处的温度如果传感器离得远测的是PCB温度而不是端子温度补偿就错了。我一般把NTC贴在端子焊盘旁边用导热胶固定。第四多通道轮询的建立时间宁长勿短。我一开始用20ms读数偶尔跳。改成100ms后稳定了。时间就是精度别省这点时间。第五低功耗设计要实测。数据手册的功耗是典型值实际板子有漏电流、有外围器件功耗。我用电流表实测休眠电流发现比预期高一个数量级排查下来是UART引脚的上拉电阻在休眠时还在耗电。把上拉电阻改成MCU控制休眠时断开功耗就下来了。第六温度换算的精度要和ADC精度匹配。有人用24位ADC但用一阶线性换算PT100结果精度还不如12位ADC加查表。换算算法要和ADC精度匹配该查表就查表该用高阶方程就用高阶方程。第七工业现场一定要加隔离。不管是UART隔离还是电源隔离别省。我见过因为没隔离导致ADC被现场浪涌打坏的案例修板子的成本远高于隔离器。第八留调试接口。板子上留UART调试口和几个测试点调试时能省很多事。量产时可以不放但样板一定要留。这套ADS122U04IPWR加PIC24F16KA102的方案我在三个HVAC项目和一个工业变送器项目里用过精度稳定在±0.3℃以内PT100-40到150℃长期漂移小于0.1℃/年。关键是把前端设计、时序控制、线性化算法和隔离这几块做扎实。温度测量看着简单但要做到工业级稳定每个环节都得抠细节。