前阵子帮客户做一套新型 HVAC 控制板,要同时测水温、管温、环境温度,精度要求做到 ±0.2℃ 左右,还得扛得住现场变频器带来的干扰。选型选了一圈,最后敲定的方案是 TI 的 24 位 ΔΣ ADC —— ADS122U04IPWR,搭配 Microchip 的 PIC18F67K40 单片机:ADC 负责把传感器信号变成数字,单片机负责跑 UART 通信协议、控制逻辑和显示。整个链路做下来,稳定性、成本、开发效率都在可接受范围内,中间有不少值得记录的细节。
这套方案解决的是工业和 HVAC 场景里最常见的痛点:传感器数量不少,信号幅值小,现场干扰大,又必须在成本可控的前提下保证测量精度。如果你也在做温控器、楼宇自控、压缩机控制器、冷链监测这类产品,这篇文章里提到的选型逻辑、寄存器配置、通信协议、温度换算算法和现场排查经验,应该能帮你少走不少弯路。文章按“为什么这么选—电路怎么搭—固件怎么跑—温度怎么算—现场怎么调”的顺序来写,不绕弯子。
1. 工业与 HVAC 测温场景下,这套方案为什么成立
1.1 需求拆解:测温项目真正难在哪
很多人以为测温就是“ADC 读一下电阻换算成温度”,真正上手才发现根本不是这么回事。工业和 HVAC 场景有几个绕不开的现实约束:
第一,信号幅值太小。PT100 在 0℃ 时电阻只有 100Ω,用 1mA 激励电流也只能产生 100mV 压降,NTC 在高温段电阻变化率更是急剧下降。如果直接用单片机内置 10 位、12 位 ADC 去采,一个 LSB 对应的温度可能就好几度,完全没法满足 ±0.2℃ 的需求。
第二,现场噪声和干扰不可控。HVAC 项目里变频器、压缩机、继电器启停到处都是,共模干扰、辐射噪声、地弹随时可能出现在模拟前端。测温板放在电控箱里,旁边就是 220V 动力线,这种环境下精度再高的 ADC 如果前端布线、滤波做得不好,读出来的数也是乱跳。
第三,传感器类型多,接口要通用。同一个项目里可能既有 PT100/PT1000,又有 NTC,甚至还要预留热电偶通道。如果每路传感器都单独设计调理电路,BOM 成本、PCB 面积、调试工作量都会失控。
第四,工业场景对长期稳定性和可维护性要求高。设备装上去可能要跑五年八年,温漂、器件老化、现场维修都是要考虑的问题。用带 UART 接口的高精度 ADC,好处是数字信号直接进 MCU,模拟链路尽量缩短,后期排查故障也方便。
所以这类项目的核心矛盾不是“选一个多高精度的 ADC”,而是“在低成本、强干扰、多传感器类型的约束下,把模拟信号可靠地变成数字量”。ADS122U04IPWR 这种集成度很高的 24 位 ADC,正好命中这个点。
1.2 为什么是 ADS122U04IPWR,而不是 ADS1220 或 ADS124S08
ADS122U04 和更常见的 ADS1220 在 ADC 核心上有很多相似之处,都是 24 位 ΔΣ 架构,都内置 PGA、参考电压、激励电流源。但 ADS122U04 最大的区别是通信接口改成了UART,而不是 SPI。
这个差异在工业现场非常关键。SPI 是同步接口,SCLK 和片选信号在长距离布线时容易受干扰,而且需要占用 MCU 至少 3~4 个 GPIO,走线稍长就容易出现时序问题。UART 是异步串行接口,只需要一根发送线、一根接收线,抗干扰能力和布线友好度都明显更好,而且在很多工业设备里本来就预留了串口资源。
我见过很多工程师纠结“为什么不用 SPI 的 ADS1220”,用下来你就会发现,在 HVAC 控制板这种 PCB 空间紧张、MCU 引脚又被占满的项目里,UART 接口省下的 GPIO 和走线空间是实打实的价值。另外,UART 可以很方便地通过 RS-485 收发器做长距离传输,如果传感器板和控制板分开放置,这个优势就更明显了。
再对比一下 ADS124S08 这类多通道高精度 ADC:通道确实更多,但价格也更高,对于只需要 2~4 路的 HVAC 应用来说有点浪费。ADS122U04 提供 4 个模拟输入通道(可配置为差分或单端),内置两个匹配的激励电流源,内部还有温度传感器可以做热电偶冷端补偿,基本覆盖了工业测温的常见需求。
后缀 IPWR 指的是 TSSOP 小封装和卷带包装,适合自动化贴片,也为整机省了不少 PCB 面积。这颗料在 TI 的产品线里属于中等偏上定位,性能够用,价格在批量采购时也不离谱。
1.3 PIC18F67K40 在这套方案里扮演什么角色
有人会问:都 2025 年了,还用 8 位单片机?这里有个很实际的原因:HVAC 和工业控制领域,8 位 MCU 的出货量依然巨大,因为很多应用根本不需要跑 Linux、不需要大内存,PIC18 系列在成本、供货稳定性、开发资料丰富度上都有优势。
PIC18F67K40 是 Microchip 8 位产品线里比较有代表性的型号,128KB Flash、8KB RAM、4KB EEPROM,工作电压 2.3V~5.5V,最高运行频率 64MHz。它最吸引我的是外设配置:双 EUSART、SPI/I2C、多个定时器、CLC 可配置逻辑单元、PWM、ADC 等一应俱全。
在这套测温方案里,PIC18F67K40 主要干三件事:一是通过 EUSART 和 ADS122U04 通信,发命令帧、收数据帧;二是用定时器控制采样节奏,做滤波和温度换算;三是把最终温度值通过另一路 UART 或者 RS-485 送到上位机或显示面板。
XC8 编译器和 MPLAB X IDE 的开发体验比较成熟,网上资料也多,工程师上手快。对于工业客户来说,后续要改功能、加协议、调整控制逻辑,8 位 MCU 的代码维护成本反而比复杂平台更低。
2. 传感器与信号链的完整设计思路
2.1 PT100 / PT1000 / NTC 到底怎么选
传感器选型会影响整个模拟链路的参数设定,所以要先定下来。
PT100是最经典的铂电阻,0℃ 时电阻 100Ω,精度高、线性度好,但温漂响应在小信号时对激励电流和布线阻抗比较敏感。因为电阻值小,导线电阻(哪怕只有 0.5Ω)也能造成明显误差,所以长距离布线最好用三线制或四线制。
PT1000是 PT100 的高阻版本,0℃ 时电阻 1000Ω,导线电阻的影响被缩小了 10 倍,非常适合两线制、短距离 HVAC 应用。比如水系统管路温度、风管温度,用 PT1000 加两线制就能满足要求,省成本也省事。
NTC热敏电阻胜在便宜、响应快、灵敏度高,但非线性严重,有效测温范围窄。HVAC 里常用于室温、盘管温度这类要求不太高的测点,配合单片机查表或 Steinhart-Hart 方程换算。
我个人的项目经验是:主控板上的关键温度(水温、回气温度)用 PT1000,次要测点(环境温度)用 NTC 就够。这样模拟通道的压力小,成本也能压住。如果客户明确要求高精度且现场干扰大,主测点用 PT100 三线制,效果会更好。
为了方便对比,这里给个参考表:
| 传感器 | 0℃ 电阻 | 灵敏度 | 线性度 | 适用场景 | 成本 |
|---|---|---|---|---|---|
| PT100 | 100Ω | 约 0.385Ω/℃ | 较好 | 高精度工业测点 | 中等 |
| PT1000 | 1000Ω | 约 3.85Ω/℃ | 较好 | HVAC 管路、风管 | 中低 |
| NTC 10k | 10000Ω | 高但非线性 | 较差 | 环境温度、低成本 | 低 |
2.2 激励电流、PGA 和参考电压怎么配合
ADS122U04 内部集成了 PGA 可编程增益放大器和可配置的激励电流源。这三者配合得好不好,直接决定测量分辨率。
以 PT1000 为例,假设我们选 500μA 的激励电流,那么 0℃ 时传感器上的压降是 0.5V。如果参考电压也取自同一路电流在一个精密电阻上产生的压降,就构成了比例测量:激励电流的波动会同时影响信号和参考,二者相除,电流漂移被抵消。这是 RTD 测量最可靠的做法。
PGA 增益的选择要保证最大温度对应的信号放大后不超出 ADC 输入范围。比如 PT1000 在 200℃ 时电阻约 1758Ω,500μA 下的压降约 0.879V。如果参考电压选 2.5V,PGA=2 时放大后约 1.76V,小于 2.5V,留有余量,这个组合就比较合适。如果想进一步压缩噪声,把 PGA 调到 4,信号放大后 3.5V 超过参考电压,就会饱和,这时候就得把激励电流从 500μA 降到 250μA,或者把参考电压提高。
一个基本的量程计算思路:满量程输入 = 参考电压 / PGA。只要传感器最大压降 × PGA < 参考电压,就不会削顶。留出 20% 左右的余量更稳妥,因为还有温漂和器件离散性。
这里有个容易踩的坑:不要为了追求分辨率盲目加大 PGA。PGA 高了,信号放大了,但噪声、失调和温漂也会被一起放大。在 HVAC 这种干扰较多的场合,我通常希望信号经过 PGA 后的满量程利用率在 50%~80% 之间,而不是顶着满量程跑。
2.3 ADS122U04 与 PIC18F67K40 的接线与 PCB 要点
硬件连接上,ADS122U04 和 PIC18F67K40 的直连非常简单:
- ADS122U04 的 DIN 接 PIC 的 TX 引脚(EUSART 发送)
- ADS122U04 的 DOUT 接 PIC 的 RX 引脚(EUSART 接收)
- 两个芯片共地,电源各自就近去耦
- 如果软件里需要做复位控制,RESET 引脚可以接一个 PIC GPIO
- DRDY 引脚可以接 GPIO,也可以完全靠 UART 命令轮询,看个人习惯
电源部分,ADS122U04 的 AVDD 和 DVDD 都需要干净电源。建议用 3.3V LDO 供电,AVDD 前加磁珠,每个电源引脚放 0.1μF 陶瓷电容,靠近芯片放置。模拟地和数字地建议采用单点连接,避免数字开关噪声通过地平面窜到模拟回路。
PCB 布线上,传感器输入线尽量短,远离继电器、变压器、变频器功率线。我习惯在差分输入引脚上加一个 1nF~10nF 的共模滤波电容,可以有效抑制高频干扰。如果传感器线比较长,还要考虑串联 1kΩ~10kΩ 的限流电阻,配合 ADC 内部的 EMI 滤波器。
如果传感器板和控制板距离超过 30cm,尽量用屏蔽双绞线,屏蔽层单端接地。两线制接法下,传感器返回线不能直接跟功率地走在一起,否则地线上的压降会直接叠加到测量信号上,造成莫名其妙的读数漂移。
3. 固件实现:从 UART 初始化到稳定出温度
3.1 ADS122U04 的寄存器配置
ADS122U04 的 UART 通信是主机—从机模式,PIC 作为主机,每次发送一个 4 字节命令帧,ADC 返回对应响应帧。命令帧前 3 个字节是命令和数据,第 4 个字节是 CRC8 校验。
首先要配置 PIC18F67K40 的 EUSART,波特率设为 38400bps,8 位数据、无校验、1 停止位。波特率计算用内部振荡器,SPBRG 寄存器的值需要按数据手册公式计算。以 64MHz 系统时钟为例,BRGH=1、BRG16=1 时:
// 波特率 = Fosc / (16 * (SPBRG + 1)) // SPBRG = Fosc / (16 * 38400) - 1 #define UART_BAUD_RATE 38400UL #define SPBRG_VALUE ((_XTAL_FREQ / (16UL * UART_BAUD_RATE)) - 1)初始化代码大致如下:
void uart1_init(void) { TRISC6 = 0; // TX 引脚输出 TRISC7 = 1; // RX 引脚输入 SP1BRGL = SPBRG_VALUE & 0xFF; SP1BRGH = (SPBRG_VALUE >> 8) & 0xFF; TX1STA = 0x24; // TXEN=1, BRGH=1 RC1STA = 0x90; // SPEN=1, CREN=1 BAUD1CON = 0x08; // BRG16=1 }初始化 ADC 之前,建议先发一个复位命令,让芯片回到已知状态,然后写入 4 个配置寄存器。寄存器具体位定义要以数据手册为准,但通常包括:
- 寄存器 0x00:输入多路复用配置,选择哪个通道、差分还是单端
- 寄存器 0x01:系统控制,PGA 增益、数据速率
- 寄存器 0x02:参考电压源选择,内部还是外部
- 寄存器 0x03:激励电流源电流值、IIDAC 路由
比如要配置通道 AIN0/AIN1 为差分输入、PGA=2、外部参考、激励电流 500μA 接到 AIN0,那么可以向对应寄存器写入适当的值,再读回验证。
void adc_write_reg(uint8_t addr, uint8_t value) { uint8_t frame[4]; frame[0] = ADS_CMD_WRITE_REG; // 写寄存器命令 frame[1] = addr; frame[2] = value; frame[3] = crc8(frame, 3); // 计算 CRC8 uart_send_bytes(frame, 4); }注意:写寄存器之后最好用读寄存器命令把值读回来确认一遍。我遇到过因为 CRC 计算或者 UART 时序导致配置没写进去,结果读数完全不对,排查了很久才发现是配置丢失。读回校验这个习惯能省很多事。
3.2 通信命令帧与 CRC8 校验
ADS122U04 的 UART 帧格式固定为 4 字节:命令字节、数据字节 1、数据字节 2,最后是 CRC8。CRC8 多项式是 0x07,初始值为 0。这个和常见的 Modbus CRC16 不一样,千万别搞混。
CRC8 计算代码:
uint8_t crc8(uint8_t *buf, uint8_t len) { uint8_t crc = 0; for (uint8_t i = 0; i < len; i++) { crc ^= buf[i]; for (uint8_t j = 0; j < 8; j++) { if (crc & 0x80) { crc = (uint8_t)((crc << 1) ^ 0x07); } else { crc <<= 1; } } } return crc; }发送命令帧后,ADC 会在一定时间内回复响应帧。响应帧的前几个字节包含命令回显和数据,最后同样带 CRC8。接收端必须对完整响应帧做 CRC 校验,校验失败就丢弃,重新发起命令。这是保证通信可靠性的关键,尤其在工业现场,串口数据被干扰的概率并不低。
读转换结果的命令发送后,ADC 返回 3 字节(或更多,具体看配置)有符号数据。24 位数据是二进制补码,组合时要小心符号扩展:
int32_t combine_24bit(uint8_t msb, uint8_t mid, uint8_t lsb) { int32_t raw = ((int32_t)msb << 16) | ((int32_t)mid << 8) | lsb; if (raw & 0x800000) { raw |= ~0xFFFFFF; // 符号扩展 } return raw; }这里踩过坑:如果直接把 3 字节拼成 int32 而忽略符号位,负温度会变成很大的正数,看起来像传感器断路。
3.3 采样、轮询和滤波的工程习惯
ADS122U04 的 UART 模式下,主机可以主动发命令读取最新转换结果,也可以配置连续转换模式后周期读取。HVAC 应用对实时性要求不高,100ms 采样一次已经足够,甚至 500ms 都没问题。
我习惯在主循环里用一个状态机:初始化完成后,每隔固定时间(比如 100ms)发一次读数据命令,收到有效数据后做以下处理:
- 剔除异常值:如果连续读到的码值跳变超过预设阈值,多半是受到了继电器吸合或变频器干扰,这帧数据直接丢弃。
- 滑动平均:保留最近 5~10 次有效样本,做算术平均,能有效压低随机噪声。我甚至会在极端干扰场合做“冒泡排序后去掉最大最小值再平均”,实际效果很明显。
- 数字滤波和模拟滤波配合:硬件上的 RC 滤波负责滤高频,软件上的平均负责滤随机噪声,两者互补,比单靠一种方式效果好得多。
关于 ADS122U04 的数据速率,建议选 20SPS 或 40SPS 左右。速率太高,工业现场噪声来不及被过滤,显示数字会抖;速率太低,响应速度太慢,控温环路容易滞后。20~40SPS 对 HVAC 来说是比较甜的区间。
另外有个细节:长时间不通信后 ADC 可能进入休眠或低功耗状态,最好在每隔一段时间(比如 1 秒)发一个时钟同步或状态查询命令,保持链路活跃。否则突然去读,可能第一帧就超时。
4. 温度换算算法:从 ADC 码值到摄氏度的完整链路
4.1 比例测量的原理与 ADC 码值换算
前面说过,最可靠的 RTD 测量方式是比例测量。原理是用同一路激励电流分别流过 RTD 和精密参考电阻,RTD 上的压降作为信号,参考电阻上的压降作为 ADC 的参考电压。由于 ADC 输出的是输入信号与参考电压的比值,激励电流的漂移和温漂被抵消了。
设双极性模式下 ADC 输出码值为 N(24 位补码,满量程对应 2^23),PGA 增益为 G,则:
Rrtd = N × Rref / (2^23 × G)
举个具体例子:Rref = 3.3kΩ,PGA = 2,某次读到 N = 1095000,那么 Rrtd 约为:
Rrtd = 1095000 × 3300 / (8388608 × 2) ≈ 215.3Ω
对照 PT1000 分度表,这个阻值大约对应 52.6℃。整个过程只需要做整数乘除和一次浮点除法,在 PIC18F67K40 上跑毫无压力。
参考电阻建议选温漂系数在 ±10ppm/℃ 以内的精密电阻,最好是金属箔或薄膜电阻。参考电阻的精度直接决定最终测量精度,这里不能省成本。如果系统要求标定,可以在出厂时用标准电阻做两点校准,修正增益误差和失调。
4.2 PT100 / PT1000 的温度—电阻换算
铂电阻的温度—电阻关系最准确的做法是查分度表,工程上也可以用 Callendar-Van Dusen 方程:
0~850℃ 范围,简化公式:
Rt = R0 × (1 + A×t + B×t²)
其中 A = 3.9083e-3,B = -5.775e-7,R0 是 0℃ 电阻(PT100 为 100,PT1000 为 1000)。
从电阻反算温度时,方程不好直接求逆,两个办法:一是查表,表格里存 -50℃~300℃ 每隔 1℃ 的电阻值,线性插值;二是用迭代法,先给一个初值,迭代几次就能收敛。HVAC 需求温和,查表插值法最简单,表格放 ROM 里也不占多少空间。
反算迭代的参考思路:
- 先用线性近似 t ≈ (Rt - R0) / (R0 × A) 得到初值
- 再用 CVD 公式计算该初值下的理论电阻
- 根据误差修正温度,通常迭代 2~3 次就能到 0.01℃ 以内
如果只是显示和粗略控制,直接用线性插值查表实现,速度最快。我自己在项目里是 1℃ 间隔的分度表,线性插值后分辨率完全够。
4.3 NTC 的换算和标定
NTC 的电阻和温度关系用 Steinhart-Hart 方程描述:
1/T = A + B×ln(R) + C×(ln(R))³
三个系数需要用三个标准温度点的实测电阻值拟合。工程上更常用的是简化 β 公式:
R = R25 × exp(β × (1/T - 1/298.15))
其中 R25 是 25℃ 时的电阻值,β 是材料常数,典型值在 3435~4500 之间。
来自实测例子:R25 = 10kΩ,β = 3950,如果测得电阻为 15kΩ,那么:
- ln(15000/10000) ≈ 0.4055
- 1/T = 1/298.15 + (1/3950) × 0.4055 ≈ 0.0034568
- T ≈ 289.2K ≈ 16.05℃
NTC 的精度很大程度上取决于 β 值的离散性。同一批次还好,换批次可能就差 1~2℃。所以 NTC 测点一般只做次级控温参考,关键测点还是用 PT100 或 PT1000。如果 NTC 要用于关键控制,出厂前必须逐个标定,或者用标准温度源校准后写系数。
如果项目里同时存在 RTD 和 NTC,建议代码里把温度换算封装成一个基础模块,输入是“传感器类型+ADC 原始码值+校准系数”,输出统一成 0.01℃ 精度的温度值。这样后续换传感器型号、加测点,只需要在参数表里加一条记录,不用改动核心算法。
5. 现场最容易翻车的 6 个问题和排查实录
5.1 读数乱跳、24 位 ADC 白买了?
这是最常被问的问题。现象是:上位机看到的温度在 0.1℃~1℃ 的范围内来回跳,明明用了 24 位 ADC,分辨率却感觉像 12 位。
排查顺序基本是:
- 先把激励电流降下来。电流太大会导致传感器自热,PT1000 在静止空气中 1mA 激励可能自热 0.1℃ 以上,读数自然稳不下来。我一般先用 250μA 或 500μA 试。
- 看电源纹波。把示波器夹在 AVDD 引脚上,如果开关噪声超过几 mV,ADC 内部模拟电路再强也白搭。AVDD 前端加 LC 滤波,比单纯加大电容有效。
- 检查输入滤波电容。差分输入两端各加一个小电容到地,能显著抑制共模高频干扰。
- 确认参考电阻是不是精密电阻。便宜电阻自身温漂几十一百 ppm,环境温度一变读数就飘,那是硬件问题不是算法能解决的。
我在现场遇到过最典型的案例:客户反馈温度跳 0.3℃,查了一圈,最后发现是 ADC 旁边的继电器吸合瞬间,数字电源跌落,AVDD 跟着抖。后来在 AVDD 上加了磁珠和 47μF 电容,问题立刻消失。模拟供电和数字供电的隔离,从一开始就要认真对待。
5.2 UART 丢帧、通信偶尔卡死
UART 通信偶尔丢帧,逻辑分析仪一看,波形乱得像抽象画。大多数时候是这几个原因:
- 波特率误差偏大。SPBRG 计算用了四舍五入或者系统时钟配置不对,38400 波特率下累计误差超过 2% 就可能偶尔错帧。建议用逻辑分析仪实测一下帧间隔,或者回读 SPBRG 配置确认。
- 共地没做好。PIC 和 ADS122U04 各有供电,如果地线连接阻抗偏高,收发瞬间地电位浮动,收发器判错电平。两块板之间至少要有一根短粗的地线。
- 接收中断处理不及时。响应帧连续到达时,如果 MCU 正忙于其他中断或者执行长代码,UART 接收缓冲区溢出,数据就丢了。
固件层面,我建议在协议上增加超时重传机制:发送命令后开启一个 5ms 看门狗定时器,如果超时未收到合法响应帧,重发 3 次,仍失败则报通信故障。有了这层保障,偶尔一帧丢数据不会再导致整个系统数据失效。
另外,UART 帧的校验一定要做 CRC,不能只看帧头。我见过不少代码只判断第一个字节就当作有效帧,数据错位时 CRC 能帮你抓住大部分错误。
5.3 误差偏大、线性度不好
如果读数稳定但就是不准,先别急着怀疑 ADC。工业测温系统里,误差来源往往比想象得多:
- 参考电阻精度:Rref 漂移 0.1%,最终温度就偏 0.3℃以上(取决于量程)。换高精度低温漂的电阻是性价比最高的改善手段。
- PCB 焊盘热电势:不同金属接触会产生热电势,几个 μV 的量级对 24 位 ADC 来说已经可感知。尽量让焊盘处于等温状态,远离大功率发热元件。
- 标定问题:出厂时如果只做零温标定,高温段误差可能放大。建议做两点或三点标定:0℃、50℃、100℃ 各校一次,在固件里做线性或二次修正。
- 传感器本身误差:PT100 有 A 级、B 级之分,B 级允许偏差达到 ±0.3℃,如果现场用的传感器本身精度不够,后端 ADC 再精确也没用。如果客户对精度要求高,务必选用 A 级铂电阻或做整机校准。
我调试时习惯用标准电阻箱替代传感器,先在 ADC 输入端注入精确电阻值,验证整个信号链的换算是否准确。这样可以把“传感器误差”和“电路板误差”分开定位,效率高很多。
5.4 布线、电源和接地:几条土办法
最后分享几条从现场摸爬滚打出来的经验,看起来不“高大上”,但非常管用:
- 传感器线用屏蔽双绞线后,屏蔽层只能一端接地,两端都接会形成地环路,噪声反而更大。
- ADC 芯片下方不要走数字信号线,至少保证一个完整的地平面。如果板层不够,用敷铜做局部地岛。
- 电源入口的 π 型滤波器(磁珠+电容+磁珠)比单纯并联一堆电容强得多,对抑制传导干扰很有帮助。
- 如果项目允许,把传感器激励电流尽量调小。250μA 和 1mA 相比,自热效应低得多,高温段误差明显改善。
- 现场调试时,先断开所有输出负载(继电器、加热器),看传感器读数是否稳定。如果断开后读数稳定、接上后跳动,问题基本就在电源或地回路上,而不是模拟前端。
我在实际项目里还有一个习惯:在固件里保留“原始码值读取模式”。现场排查时通过调试串口直接把 24 位原始码值吐出来,配合标准电阻箱,很快就能判断到底是硬件问题、配置问题还是算法问题。这套方法帮我解决过不少“看起来像硬件故障”的软件 bug。
做完整套下来,我最深的体会是:24 位 ADC 只是给了你一个很高的“理论天花板”,能不能真正用出高精度,取决于传感器选型、参考电阻、供电、布线、滤波、标定这一整条链路的每一环。ADS122U04IPWR 和 PIC18F67K40 这个组合,胜在集成度高、接口简单、开发成本低,把设计者的精力从“和模拟信号搏斗”转移到“把数据用好”上。只要供电和布线稍微用心,它给出的温度数据在工业现场完全够用,而且长时间稳定性也经得起考验。