基于ADS122U04IPWR与PIC18F86J50的工业温度采集方案设计

去年我在做一套工业空调箱控制器的温度采集方案时,遇到了一个非常典型的难题:4 路温度输入,K 型热电偶和 PT100 混接,传感器线最长拉到 30 米,现场变频器和接触器的干扰还特别严重,整套系统控温精度却要求 ±0.5°C 以内。一开始我用 PIC18F86J50 自带的 ADC 搭配外部运放去凑,折腾了几天,结果要么是读数漂移,要么是 50Hz 工频干扰压不住。后来把采集前端换成 ADS122U04IPWR,这个 24 位 Δ-Σ ADC 通过 UART 和 PIC18F86J50 通信,问题才算真正解决。这篇文章把我当时的选型逻辑、硬件设计、固件流程和现场调试踩过的坑完整梳理一遍,给做 HVAC、工业温度采集的朋友一个可以直接复用的参考。

1. 系统方案拆解:为什么是 24 位 ADC 加 8 位 MCU 的搭配

1.1 主控自带 ADC 为什么不够用

很多工程师拿到项目的第一反应是“主控自带的 ADC 能不能直接用”。能不用当然就不用,省芯片、省电源、省布局面积,但前提是精度和稳定性达标。PIC18F86J50 本身只有 10 位 ADC,理论上对 0~5V 满量程信号的分辨率大约 5mV,这放到温度测量里就非常尴尬了。以 K 型热电偶为例,灵敏度大约是 41μV/°C,也就是说 1°C 的温度变化只对应 41μV 的电压变化,10 位 ADC 根本无法分辨,中间还必须经过几十倍甚至上百倍的模拟放大,放大器的温漂、偏置和共模抑制又会引入新的误差。

还有一个被很多人忽略的问题:主控自带的 ADC 参考电压通常直接取自 VDD。在 HVAC 类设备里,电源要供应风机、继电器、电磁阀,VDD 上的纹波和波动几乎不可避免。一旦基准电压跟着抖,采样结果当然也跟着抖。工业现场的共模干扰也很麻烦,传感器线长了以后,两根线之间会有几十伏的共模电压波动,单片机的 ADC 输入结构扛不住这种冲击,轻则读数跳变,重则烧毁引脚。

所以我当时的结论很明确:温度采集这种事,必须交给专业的模拟前端芯片,主控专心做控制逻辑和通信就够了。

1.2 选型逻辑:两边各司其职

ADS122U04IPWR 和 PIC18F86J50 的搭配,本质上是一套“前端专用模拟采集 + 后端通用控制”的分层设计。ADS122U04 负责把热电偶和 PT100 的微弱信号变成高分辨率数字量,PIC18F86J50 负责算温度、跑控制算法、驱动阀门和风扇。两者之间通过 UART 通信,只需要两根线,比 SPI 省两条控制线,布线也简单得多。

从系统可靠性角度看,这种分离还有一个额外收益:模拟采集部分和数字控制部分可以分区域供电、独立去耦,抗干扰能力比“所有功能塞在一颗芯片”的方案要好。而且 ADS122U04 是可编程配置的,以后如果传感器类型变了,不必改硬件,直接通过串口改配置字节就行。这个灵活性在量产阶段特别值钱,我后面会详细讲。

把这个方案拿到具体场景里,它解决的是三个痛点:第一,多路不同类型传感器混接的需求,ADS122U04 有 4 个输入通道,可以按通道分别配增益;第二,工业现场强干扰下的信号保真问题,24 位 Δ-Σ ADC 内置滤波和 PGA,效果远好于普通单片机 ADC;第三,主控资源占用问题,PIC18F86J50 只需要在需要时发起读操作,其余时间可以专心跑控制任务。

2. 核心器件特性解析:ADS122U04IPWR 和 PIC18F86J50 各自能打的地方

2.1 ADS122U04IPWR 真正打动我的几个点

ADS122U04IPWR 是 TI 推出的一款 4 通道、24 位、带 UART 接口的 Δ-Σ ADC。封装很小,但该有的东西都集成在里面了。

它的输入结构很灵活,可以配置成 4 路差分输入,也可以配置成 8 路单端输入。对于我的应用场景,PT100 必须用差分测量来抑制共模噪声,热电偶通常也接成差分形式,所以 4 路差分输入刚刚好。每个模拟输入前面都有可编程增益放大器 PGA,增益范围覆盖很广,最低可以衰减大信号,最高可以放大到 128 倍。这样不管是毫伏级的热电偶,还是几百毫伏的 PT100 信号,都能把信号调到接近满量程,充分发挥 24 位分辨率。

它内置两个可编程激励电流源 IDAC1 和 IDAC2,这是做三线/四线 RTD 测量非常关键的功能。有了激励电流源,就不用额外买恒流源芯片了,而且电流大小可以通过寄存器配置,一般选择 0.5mA 或 1mA 就够用,避免自热效应影响精度。

芯片内部还集成了一路温度传感器,用来做热电偶冷端补偿。虽然外部接线端子温度不等于芯片内部温度,但很多低成本方案直接用内部温度传感器做冷端补偿已经可以接受。如果要求更高,可以外接一个 NTC 或 DS18B20 贴在端子上,再把 ADC 内部的传感器关掉,两种方式都支持。

对工业设备来说,断线检测几乎是刚需。热电偶线缆在振动环境下容易断,如果控制器不识别还继续按正常信号控制,就可能发生误动作。ADS122U04 内置烧断检测电流源,配置成连接到 AIN 引脚,当传感器断开时输入电压会被拉到靠近供电轨,通过检测满量程或负满量程就能判定断线。这个功能原来要靠外部上拉电阻实现,现在一颗芯片搞定。

最后再提一句 UART 接口。很多 ADC 都是 SPI 接口,SPI 在板内短距离没问题,但传感器板和控制板分开放的时候,SPI 的片选线和时钟线很容易受干扰。UART 只需要两根线,底层协议自带起始位和停止位,抗长线干扰的能力明显更好。现场调试的时候,只要拿一个 USB 转 TTL 小板,把板子上的 UART 口接出来,就能在电脑上看 ADC 的原始输出,这种便利性是 SPI 接口不具备的。

2.2 PIC18F86J50:一台低调但好用的 8 位主控

PIC18F86J50 是 Microchip 的 8 位 PIC18 系列单片机,80 引脚 TQFP 封装,工作频率最高可以到 48MHz。功能配置在 8 位领域里算是很全面的:两个增强型 EUSART、USB 2.0 全速接口、多个定时器、I2C、SPI、以及 16 通道 10 位 ADC(虽然这次没用上)。选它做温度采集主控,主要是看中三点。

第一,EUSART 资源多。系统里除了要跟 ADS122U04 通信,通常还要跟触摸屏、上位机或者楼宇管理系统通信。PIC18F86J50 有两个独立 UART,一个专门伺候 ADC,一个留给外部通信,互不干扰。这个优势比某些只有 1 个 UART、还必须复用引脚的单片机强太多。

第二,可靠性经得起验证。HVAC 和工业控制产品讲究长期稳定供货,8 位 MCU 在工业控制领域耕耘多年,外围电路设计方法成熟,工具链也非常稳定。对很多老牌设备厂商来说,一颗用了十几年的 PIC18 比一颗刚发布的新内核芯片稳妥得多。

第三,它的指令集和片上外设在实时控制上表现不差。虽然 8 位没有 ARM 那么强悍,但温度采集本身的刷新率只有每秒几次到几十次,根本用不到多高的算力。真正花时间的控制算法,比如 PID 输出调节,PIC18 有硬件乘法器,配合 48MHz 主频,跑一轮控制周期绰绰有余。

2.3 HVAC 和工业现场对这种组合的硬性要求

空调箱的典型温度采集点包括新风温度、回风温度、送风温度、冷热水进出水温度,这些基本都是 0°C 到 100°C 的范围。一般用 PT100 或 NTC,湿度高、灰尘多,传感器线从机组内部走到控制柜,线长不算夸张但环境复杂。工业现场就更苛刻了,可能要测电机轴承温度、排烟温度、工艺管道温度,温度上限动不动就是几百上千摄氏度,必须用热电偶。

这两类场景放在一起,对采集系统提出了四个共同要求:通道数够用、传感器类型可切换、现场抗干扰和故障自诊断。ADS122U04IPWR 加 PIC18F86J50 正好覆盖了这些点。多路通道热电阻和热电偶混接,UART 接口保证长线通信稳定,24 位 ADC 配合数位滤波压制现场噪声,内置断线检测让设备具备“我不知道温度是多少但我知道传感器坏了”的自我诊断能力,故障可以直接上报,而不是输出一个错误温度导致系统误判。

3. 硬件设计要点:传感器前端匹配和 PCB 布局的实操细节

3.1 热电偶直接进 ADC,重点在滤波和冷端处理

热电偶输出的是微伏级直流电压,接入 ADS122U04 时首先要处理的是共模干扰和射频干扰。我的习惯是在 ADC 输入端加 RC 低通滤波,具体取值要兼顾噪声抑制和信号建立时间:每根信号线上串联一个 470Ω 到 1kΩ 的电阻,然后在 ADC 输入端并联一个差分电容,容值选 10nF 到 100nF,共模电容可以各接一个 1nF 到 10nF 到地。这个结构能有效滤掉变频器产生的射频干扰,同时不会给信号建立带来太大的滞后。

冷端补偿有两种接法。一种是用 ADS122U04 的内部温度传感器,通过读取内部温度寄存器的值来估算接线端子处的冷端温度,这种做法不增加硬件成本,适合精度要求不高的场合。另一种是外接一个温度传感器放在热电偶接线端子旁边,精度更高,但需要占用一个额外的模拟输入通道。我量产产品里用的是外接方案,因为现场环境变化大,接线端子和芯片之间的温差可能超过好几度,用内部传感器补偿出来误差偏大。

热电偶信号输入还有个注意点:必须保证冷端两极性正确。K 型热电偶红色线通常接正端,黄色或蓝色线接负端,接反了读数会整体偏低甚至完全错误。工业现场经常会遇到操作工接错线的情况,所以我在固件里加了一个“温度符号异常”的检测逻辑,读出来是负几十摄氏度且持续一段时间,就判定接线或者传感器异常,直接报警。

3.2 PT100 比例式测量和激励电流的接法

PT100 在 0°C 时阻值正好是 100Ω,灵敏度约为 0.385Ω/°C。如果直接用一个恒流源激励,然后测量电压,电流源的温漂和参数偏差都会转化为测量误差。更推荐的做法是比例式测量,用同一个激励电流同时流过 PT100 和精密参考电阻,把参考电阻两端的电压作为 ADC 的参考电压。这样激励电流的绝对值即使有误差,也会在计算过程中被约掉。

实际接线时,ADS122U04 的 IDAC1 输出电流经过 PT100,再从 AIN 引脚流回,而 IDAC2 负责抵消另一根导线上的压降。参考电阻 Rref 接在 REF+ 和 REF- 之间,其阻值选择和电流大小要配合好。比如我设定激励电流 0.5mA,Rref 用 4.02kΩ,那么参考电压约 2.01V,接近 ADC 的满量程参考区间。PT100 在 -50°C 时约 80.31Ω,对应 40.15mV;在 150°C 时约 157.33Ω,对应 78.66mV。这个量程完全落在 ADC 的 PGA 可处理范围内,选择合适增益后分辨率可以达到 0.01°C 以下。

Rref 的温漂系数必须小,至少选 10ppm/°C 或更好的精度,否则它自身随温度漂移,整个测量的基准也会跟着漂。千万别在这里省钱,一颗 4 元的精密电阻换来的是整机长期的稳定性。

3.3 PCB 布局:模拟区域和数字区域的处理经验

ADC 和 MCU 在同一块板子上时,接地设计是成败关键。我习惯把所有模拟元器件放在板子一侧,数字电路放在另一侧,PCB 采用完整地平层,模拟地和数字地在 ADC 芯片下方一点单点连接。模拟电源建议单独用一个小功率 LDO 供电,比如从 5V 系统电源取电,经 LDO 降到 3.3V,再经过磁珠和电容滤波后给 AVDD 和 DVDD 分别供电。

数字信号线尽量避免穿过模拟区域,UART 的发送线如果实在要跨过去,就在走线两侧加地线隔离,不要和模拟输入走线平行长距离贴近。ADC 的参考输入和模拟输入引脚尽量就近放滤波电容,参考输入电容尤其重要,它直接决定参考电压的稳定性。

还有一个小细节,很多工程师会忽略:ADC 芯片正下方的地平层不要挖空,要让地平面完整,给回流信号提供低阻抗路径。我第一版样机为了布通信号线把 AIN 走线附近的地挖了一块,结果噪声从 ±0.5°C 劣化到 ±2°C,后来重新铺满地平面才恢复。这个教训必须写出来提醒大家。

4. 固件实现流程:从 UART 初始化到温度数值输出的完整步骤

4.1 UART 初始化和 ADC 配置寄存器写入

PIC18F86J50 有两个 EUSART,我用 EUSART1 连接 ADS122U04。波特率选择要综合考虑:波特率越低抗干扰越强,但刷新率会受影响。我最终用的是 9600bps,8 位数据、无校验、1 位停止位。ADS122U04 的采样率配置在 20SPS 时,9600bps 的通信速度完全够用。

初始化完成后,第一步是通过 UART 向 ADC 写入配置寄存器。ADS122U04 的命令帧格式在 TI 用户指南里写得很详细,每个命令都有固定帧头和命令字节。我在量产固件里使用的一组典型配置大致是:PGA 增益按通道分别设置,热电偶通道放大倍数较高,PT100 通道放大倍数较低;启用内部 2.048V 参考电压;使能需要的激励电流源;打开烧断检测;采样率设为 20SPS。配置总线统发给 ADC,结构可以封装成一个固定长度的数组,便于统一管理和修改。

以下是我项目里的配置发送流程示意:

// 伪代码:通过 USART 向 ADS122U04 写入一组配置 uint8_t config_frame[] = { 0x00, // 帧头1 0xAA, // 帧头2 0x40, // 写配置命令 0x00, // CONFIG0 0x1C, // CONFIG1 0xC0, // CONFIG2 0x10 // CONFIG3 }; for (uint8_t i = 0; i < sizeof(config_frame); i++) { uart1_write(config_frame[i]); }

写入配置后最好回读一遍,确认配置真正生效。我遇到过写配置命令被干扰截断的情况,如果只发不回读,表面上初始化成功,实际转换可能用的是默认配置,读出来的数据全乱套。所以建议量产代码里加上配置回读校验,读到的寄存器和写入值不一致就报初始化错误。

4.2 连续转换模式下读取数据

配置完 ADC 后,需要向 ADC 发送连续转换启动命令,它就会开始以 20SPS 的速率转换。主控这边不用一直轮询,可以在需要刷新温度时才发送读取数据命令,读取当前最新转换结果。每次读取得到的是一组 24 位数据,按二进制补码格式存放,存储在高位在前。主控收到后把它拼接成有符号数,然后进行后续计算。

// 伪代码:拼接 24 位有符号原始值 int32_t raw = (int32_t)((buf[0] << 16) | (buf[1] << 8) | buf[2]); if (raw & 0x800000) { raw |= 0xFF000000; // 符号扩展到 32 位 }

从原始码换算到电压很简单,公式是:电压 = 原始码 × 参考电压 / (2^23 × PGA 增益)。这个公式是所有后续温度计算的基石,我在代码里封装成一个函数,输入原始码和通道增益,输出毫伏值。

多通道采集时,因为 ADS122U04 的通道轮换是通过内部多路复用器实现的,切换通道后需要等待建立时间,我一般会舍弃切换后的第一次转换结果,从第二次开始取数。这个细节特别容易踩坑,如果不舍弃第一次结果,读到的数值往往是上一个通道的残余,温度会来回跳。

4.3 热电偶和 RTD 的温度换算

温度换算这一步主要分成三块:热电偶多项式线性化、RTD 的电阻温度转换、冷端补偿。

热电偶的电压和温度是非线性关系,工程上常用 ITS-90 分度表的多项式拟合。直接查表也可以,但表要占不少存储空间。我的做法是把分度表做成一个分段线性查表数组,温度每隔 1°C 存一个对应的热电势值,线性插值计算。K 型热电偶从 -40°C 到 1000°C 覆盖比较广,分段查表法的误差在 0.3°C 左右,已经满足大多数应用。如果要追求更高的精度,可以换更高阶的多项式拟合,但代码量和计算量都会明显增加。

冷端补偿的做法是:先测得出冷端温度,查到该温度对应的热电势,然后把它加到 ADC 实测的热电势上,得到一个补偿后的总热电势,再去查表反算被测端温度。这个流程逻辑上很简单,但冷端温度自身的测量精度直接影响最终结果。冷端测温偏差 1°C,输出温度就会偏 1°C,完全是一比一的关系。

PT100 的换算用的是 Callendar-Van Dusen 方程。0°C 以上时,PT100 的阻值公式可以简化成 R(T)=R0×[1+A×T+B×T²],其中 R0 是 100Ω,A、B 是铂电阻的常数。反解一元二次方程就能从阻值算出温度。0°C 以下时方程要再加一个 C 项,计算稍微复杂一点。代码实现时先判断阻值对应的温度范围再选不同分支,这样能保证整车量程内的准确度。

5. HVAC 与工业应用中的差异化处理策略

5.1 采样率、滤波策略和输出频率选择

ADS122U04 的采样率可以从很低一直配置到几千 SPS,但采样率不是越高越好,特别是在工业现场。我的经验是:默认用 20SPS,刚好可以滤除 50Hz 工频及其整数倍干扰,PGA 之前配合外部 RC 滤波,读数非常干净。如果现场有变频器,干扰频率往往不是工频,此时可以试试其他抗干扰滤波模式,TI 的 Δ-Σ 系列对于特定频率干扰有专门的抑制能力,要根据现场谐波成分选择。

HVAC 场景温度变化慢,风管里的温度一分钟都不一定能变 0.2°C,用 20SPS 甚至更低完全没有问题。工业应用如果需要对温度做快速响应,比如保护停机,采样率可以提高到 100SPS 甚至 500SPS,但数字滤波要相应调整,否则噪声会明显上升。

主控把多路温度值采集回来后,不应该直接把瞬时值用于控制。一般先做中值滤波,取连续 3 到 5 次采样的中间值,再把中间值做一阶低通滤波。这么做能同时抑制脉冲干扰和持续噪声,而且代码便宜得几乎可以忽略。

5.2 传感器断线和故障诊断

ADS122U04 的烧断检测功能在 HVAC 和工业场景里都很实用。HVAC 现场的温度传感器可能因为风管振动导致接头松动,工业现场更不用说,高温振动直接断线是常事。

配置烧断检测时要注意,它会把一个微小的电流源拉到输入引脚,如果传感器正常,这个电流产生的电压会被传感器低阻路径吸收,不会干扰测量。如果传感器开路,输入引脚会被拉到某一侧的电源轨,转换结果出现明显超量程。固件里只要检测到原始码接近正满量程或负满量程,就直接判定为“断线故障”,同时关闭该通道参与联锁控制的资格,避免系统按照一个不存在的数据去动作。

这里有个细节:烧断检测电流源如果配置不当,会对高阻传感器产生明显影响。比如某些 NTC 传感器在高温下阻值很高,这时烧断检测电流流过,会在传感器上产生一个附加电压,导致读数偏高。所以配置烧断电流大小时要结合传感器阻值范围综合考虑,阻值高的传感器选小电流档。

5.3 多通道轮询和报警策略

多通道轮询要合理安排读取顺序和时间片。因为是单颗 ADC 分时复用,每个通道采集完都要给信号建立留出时间。我的做法是:主控每次向 ADC 发出切换到通道 N 的指令,然后延时一个转换周期,等 ADC 的 MUX 稳定后,再发起读取数据命令。这样可以保证每次读到的都是当前通道的稳定数据,而不是上一个通道的泄漏信号。

报警策略方面,温度上限、下限和变化率报警要分开处理。上限下限用于常规保护,变化率报警用来发现传感器劣化和工艺异常。比如风管送风温度在几秒内突然跳变 10°C,不是传感器已坏就是有冷凝水直接淋到探头上,这时候按变化率报警处理更合理。

HVAC 系统的报警处理通常要求回差,温度到达报警点后要回升或下降一定数值才能解除,防止继电器频繁动作。工业应用往往要求更严格,可能还需要做冗余采集,两个通道测同一个点,偏差过大时系统报警并切换可信通道。这一整套逻辑属于应用层,放在 PEG18F86J50 上跑完全没问题。

6. 现场问题排查与调试实录

6.1 UART 乱码或者通信完全不通

这个问题在样机阶段经常出现,第一次上电时 ADC 完全没有反应,用示波器看 TX 引脚根本没有波形。原因基本都是主控没有正常工作。PIC18F86J50 需要外部晶振和复位电路,我第一版原理图把晶振负载电容选错了,起振失败,主控完全没有跑起来。后来把电容值改为数据手册推荐值后正常。

还有一种情况是波特率不匹配。PIC18 的内部振荡器在常温下精度可以接受,但量产设备用在室外机柜里,温度变化大,内部振荡器会漂移。和 ADS122U04 通信这种对时序敏感的场景,建议使用外部晶振,并在代码里测量振荡器校准值。我看到过因振荡器偏差导致 UART 帧头误码的现象,表现为 ADC 偶尔回读错误,改波特率后情况反而更随机。最终换了外部晶振才彻底解决。

接线层面也容易被忽视。UART 电平是 TTL 电平,不是 RS232,也不要把 ADC 的 TX 和主控的 TX 接到一起。正确连接是 ADC 的 TX 接主控的 RX,ADC 的 RX 接主控的 TX,交叉连接。板子和外部调试转接板之间要共地,不共地的话通信一定不稳定。

6.2 读数跳动大,噪声甚至超过 ±0.5°C

如果在机房里读数很稳,一到现场就跳动,十有八九是接地和电源的问题。我遇到过最典型的一个案例:设备一启动,温度读数跟着继电器开关频率一起跳。排查半天发现,电源是开关电源,ADC 的模拟电源直接取同一个 5V,没有做任何隔离。继电器的开关电流在地线上产生了很大的脉冲噪声,耦合进了 ADC 的参考电压。

解决办法是把模拟供电单独用 LDO 从输入级取电,数字地和模拟地严格单点连接。如果 Final 无法避免干扰源靠近,可以考虑在模拟输入前加共模扼流圈,或者用屏蔽双绞线传输传感器信号,屏蔽层单端接地。还有一个容易忽略的细节是参考电压的去耦电容,参考输入引脚上要放两个电容,一个大容量、一个小容量,小容量靠近芯片引脚,滤高频,大容量负责稳定低频。

6.3 冷端补偿不准,读数整体偏移

冷端补偿不准的典型现象是:传感器接好以后,测室温时读数比实际温度高或低好几度。第一次做热电偶测量时,我直接用 ADC 的内部温度传感器做补偿,在办公室环境温度 26°C 时还可以接受,但把设备放到室外,冷端和芯片温度差能达到 5°C 以上,输出误差就爆炸了。

解决思路是把冷端测温点放到接线端子附近。如果你用一个外接温度传感器,尽量避免让这个传感器和热电偶端子之间有过大的温度梯度,不要让风机直接对着端子吹。成品设计里,可以把冷端传感器贴在一块铜块上,铜块再和热电偶接线端子良好贴合,利用铜的导热性让两者温度一致。这个办法成本很低,效果却非常明显。

6.4 排查思路速查表

结合前面的实际问题,整理了一张现场排查参考表:

现象可能原因排查方向
UART 无响应晶振没起振、波特率不匹配、TX/RX 接反示波器查波形,测主控是否工作正常
数据偶发错误内部振荡器漂移、线缆接触不良换外部晶振,检查接头
读数噪声大模拟电源纹波大、地平面被破坏单独 LDO 供电,检查铺地
温度整体偏移冷端补偿不准、参考电阻温漂太大外接冷端传感器,换低温漂 Rref
某一通道跳变MUX 切换读取太快、前通道残余信号延长建立时间,丢第一次转换结果
断线检测误报烧断电流档位太大,高阻传感器误触配置合适检测电流档位

这张表不是最终结论,但覆盖了我实际项目里遇到的绝大多数问题。真遇到难缠的干扰问题,先把 ADC 切换成单通道固定测量,排除多路切换干扰,再逐步恢复多通道配置。这种二分法排查思路在复杂电磁环境下特别管用。

我个人在实际操作中的体会是,ADS122U04IPWR 加 PIC18F86J50 这套方案,核心价值在于把“模拟测量”和“数字控制”两件事彻底分开,各用最合适的工具,中间只用 UART 交换数据。整个项目最耗时不是选型,也不是写代码,而是老老实实把电源和接地耐心处理好。这中间踩过不少坑,但最后还是把精度稳稳压在 ±0.3°C 左右,比项目要求的指标还宽裕了不少。

最后再分享一个小技巧:量产固件里我给每块板子留了一个校准参数区,用 ADC 的偏移和增益校准寄存器,出厂时通过 PC 端工具对每个通道做一次两点校准,把偏差系数存进 EEPROM。温度和电压两套校准参数都存在芯片里,换板子不用重新校准。这个做法在 HVAC 和工业设备后续维护里省了非常多的事。