如果你负责过工业现场或暖通空调(HVAC)项目的温度采样,大概率遇到过这种场景:传感器精度明明够,ADC 也是 24 位,可一到现场读数就是跳;或者传感器离控制板好几米,引线电阻直接成了误差来源。今天这篇,我就拿自己实际调过的一套方案来聊——用 TI 的 ADS122U04IPWR 搭配 STM32G474RE 测温度,覆盖从 RTD 传感器前端、UART 通信到 MCU 端线性化和故障诊断的完整链路。这套组合尤其适合工业设备和暖通空调项目,对长期稳定性和可维护性要求都高,而且因为 ADC 自带 UART 接口,板间连线比 SPI 省事不少,非常适合工程落地。不管你现在是刚开始搭温度采集,还是已经在用 PT100/PT1000 但觉得噪声压不下去,都可以直接参考这套做法。
1. 系统总体方案:为什么是这组芯片组合
1.1 测量需求拆解:工业与 HVAC 场景的温度测量难点
先说场景。工业和 HVAC 的温度测量,看着简单,实际坑比想象多。
第—个问题是精度和分辨率。HVAC 里回风温度、送风温度、盘管进出口温度,常规控制精度要求 0.1°C 到 0.5°C;工业现场如果是过程控制或设备保护,要求更严,而且往往还要同时测多路温度,比如压缩机排气温度、电机绕组温度、冷却液温度。24 位 ADC 不是噱头,它能保证在微小信号下依然有足够的分辨率,但前提是模拟前端不能拖后腿。
第二个问题是干扰。工业和 HVAC 现场就是个大杂烩:变频器、压缩机、电动阀、开关电源,一上电就是各种谐波和共模噪声。信号线稍微长一点,50/60Hz 工频干扰就会骑在传感器信号上。这个问题要是没处理,后面的算法写得再漂亮也白搭。
第三个问题是传感器本身。RTD 铂电阻(PT100/PT1000)是工业界最常用的测温元件,线性度好、精度高、长期稳定,但它输出电压只有毫伏级别,而且有引线电阻问题。两线制接法在长线场景下误差极大,必须用三线制或四线制去做引线补偿。热电偶虽然测温范围宽,但冷端补偿和低电压信号处理更麻烦,在 HVAC 常规温区一般用不上。
第四个问题是故障诊断。现场工况复杂,探头可能断线、短路、进水,如果系统不能快速识别,轻则显示错误温度,重则控制逻辑误动作,甚至停机检修。所以方案里必须把开路检测、短路检测、通信超时都考虑进去。
这四点需求,直接决定了芯片选型。ADS122U04IPWR 解决模拟前端和信号量化的问题,STM32G474RE 解决数据运算和控制的问题,两者配合,正好覆盖整个采集链路。
1.2 ADS122U04IPWR 的核心价值:高精度 ADC 与 UART 接口
ADS122U04IPWR 这颗芯片,我第一次拿到手就觉得是专门为工业测量设计的。它本质上是一个 24 位 Δ-Σ ADC,带 4 通道多路复用输入,但最让我看重的是它集成了模拟前端里几乎所有关键模块。
它内部有可编程增益放大器(PGA),增益范围从 1 到 128,能把 PT100/PT1000 这种毫伏级信号直接放大到适合 ADC 量化的范围,不用我在外面加一堆运放和调理电路,省下来的 PCB 面积和器件成本都是实打实的。它内部还有两个匹配的激励电流源(IIDAC),专门给 RTD 供电用,电流大小可编程,从 10μA 到 1.5mA,这个设计让比例式测量变得非常方便,我后面在 2.3 节会细说。
其次,它内部有参考电压源,2.048V,也可以选择外部参考。做高精度测温时,我更推荐用外部精密电阻做比例式参考,这样激励电流的波动会被抵消,测量结果几乎不受电源电压和电流源温漂的影响,这是很多新手容易忽略的点。
再一个亮点是 UART 接口。常规的高精度 ADC 基本都是 SPI,SPI 在板内用没问题,但在工业设备里,传感器和主控板之间往往有几米甚至更远的距离,SPI 的时钟线和片选线容易受噪声干扰,而且线多了接线麻烦。ADS122U04IPWR 用 UART 通信,本质上是把 ADC 当成一个异步串口从设备,两根线就能搞定,距离也更远。如果需要多路采集,它还支持多个设备级联和广播模式,我用一根总线挂多个 ADC 也不冲突。
封装是 TSSOP-16,后缀里的 I 代表工业温度范围 -40°C 到 +125°C,这让它能在户外机柜、设备间这些温度环境不太友好的地方正常工作。总之,这颗 ADC 把测量链路的活几乎全包了,选它等于省掉半块调理板。
1.3 STM32G474RE 的角色定位:算力、外设与实时性
STM32G474RE 属于 STM32G4 系列,这是意法半导体专门为数字电源、电机控制和工业应用准备的一代 MCU。它用的是 Arm Cortex-M4F 核心,主频最高 170MHz,带硬件浮点单元,跑温度线性化的多项式计算、PID 控制算法都非常轻松,我实际跑下来,一次 PT100 反向求解只需要微秒级别,完全不影响控制周期。
这芯片的 Flash 有 512KB,SRAM 有 128KB,对于一套温度采集系统来说非常宽裕,哪怕是同时做记录、通信协议解析、多路 PID 控制,也不会捉襟见肘。它的外设也很有意思,内部集成多个 12 位 ADC、DAC、比较器、运算放大器,还有高分辨率定时器 HRTIM,这些在 HVAC 场景里能派上大用场——比如你采集温度之后要控制压缩机频率,或者驱动风机,STM32G474RE 可以独立完成,不需要再挂专用的电机控制芯片。
要说我为什么选它而不是更便宜的 M0 系列,核心原因是实时性和扩展性。现场设备往往不只要测温,还要做报警、联动、远程通信,甚至参数曲线记录。G4 的算力足以支持以后扩展功能,不用每次需求变化都换平台。另外 STM32G4 的生态成熟,HAL 库、CubeMX 配置工具、各种示例代码都有,开发调试速度快,这在项目交付时间紧张的时候非常重要。
在整个方案里,STM32G474RE 的定位就是“大脑”:负责给 ADC 下发配置命令,接收转换结果,做滤波和温度换算,然后根据温度值执行控制策略,同时还要处理看门狗、故障报警、通信协议等任务。而 ADS122U04IPWR 则是“感觉器官”,只管把温度这个物理量变成数字。两者分工明确,代码写起来也清爽。
2. 温度传感器与模拟前端:决定精度的第一公里
2.1 传感器选型:RTD、热敏电阻还是热电偶
在开始画电路之前,先得把传感器定下来。工业设备和 HVAC 里最常用的三种测温传感器是 RTD 铂电阻、热敏电阻和热电偶,各自的性格差异很大。
RTD 铂电阻优点是精度高、重复性好、线性度相对最好,工作范围覆盖 -200°C 到 850°C,在工业界有非常成熟的标准(PT100、PT1000),适合做高精度的温度测量和控制。缺点是价格比热敏电阻贵,而且信号小,需要配合精密 ADC。HVAC 和工业温控里,它是绝对的主流。
热敏电阻(NTC)便宜、灵敏度极高,几 kΩ 的阻值变化能在小温度范围内输出很大的电压变化,早期空调、冰箱的温控器大量用它。但它的非线性极强,一致性差,标定麻烦,不适合需要长期稳定和高精度的场合。放在现代 HVAC 里,它的角色已经越来越边缘了。
热电偶测温范围最宽,最高能到 1800°C 以上,适合高温、超低温场景。但它输出的是微伏级热电动势,信号更弱,必须做冷端补偿,而且线性度差,精度通常不如 RTD。在常规的 HVAC 和工业低温场景,用它属于杀鸡用牛刀,除非要测压缩机排气这种一两百度以上的高温,才会考虑它。
| 传感器类型 | 精度 | 输出信号 | 温度范围 | 线性度 | 成本 | 适用场景 |
|---|---|---|---|---|---|---|
| PT100/PT1000 | 高 | 毫伏级电阻变化 | -200~850°C | 较好 | 中高 | 工业温控、HVAC 盘管、回风 |
| NTC 热敏电阻 | 中低 | 电阻急剧变化 | -50~300°C | 差 | 低 | 家电、简易温控 |
| 热电偶 | 中 | 微伏级电压 | -200~1800°C | 差 | 低中 | 高温、超低温场景 |
我的建议是:HVAC 常规场景无脑选 PT1000,工业控制场景看测温范围选 PT100 或 PT1000。为什么是 PT1000?因为它的标称阻值是 1000Ω,比 PT100 的 100Ω 大一个量级,同样 0.1°C 的温度变化,PT1000 的电阻变化量是 PT100 的十倍,相对的引线电阻影响更小,抗干扰能力更强。
2.2 三线制/四线制接法与激励电流源匹配
传感器定下来之后,紧接着要处理接法问题。RTD 测温的本质是测电阻变化,温度越高电阻越大。比如 PT100 在 0°C 时是 100Ω,100°C 时约为 138.5Ω,每度变化约 0.385Ω。激励电流流过这个电阻,产生一个毫伏级电压,ADC 量化这个电压,再反推温度。那么问题来了:这个激励电流在流经 RTD 之前,还要从传感器引线走一圈,而引线本身也有电阻。
比如一根 10 米的铜线,截面 0.5mm²,电阻大约 0.34Ω,按 PT100 0.385Ω/°C 来算,这就是接近 1°C 的误差。两线制接法完全无法消除这个误差,所以只适合短线、精度要求不高的场景。三线制可以抵消一部分引线电阻的影响:一根引线走激励电流,另一根引线用于电压检测,检测端几乎没有电流流过,因此检测线上的压降基本可以忽略。四线制则在 RTD 两端各接两根线,激励和检测完全分离,彻底消除引线电阻,精度最高,但线缆成本和接线复杂度也最高。
在实际项目里,如果传感器离主控板就几十厘米,两线制勉强能用;超过一米,我强烈建议至少三线制。我通常的做法是:传感器板到主控板之间走三线制或四线制的屏蔽线,屏蔽层单端接地,这样既能解决引线电阻,又能挡住一部分共模干扰。
ADS122U04IPWR 内部有两个匹配的激励电流源,正好支持三线制 RTD 的补偿逻辑。我们可以在其中一个电流源输出上接 RTD 的激励线,另一个电流源做一个匹配通路,ADC 的差分输入分别接 RTD 的两根检测线,从而在计算中把引线压降抵消掉。这个细节很多人容易搞混,实际拉线时一定要对照数据手册上的接线图来做,别凭感觉接。
激励电流大小的选择也很关键。电流越大,RTD 上的压降越大,信噪比越高;但电流同时会在 RTD 上产生自热,导致测得的温度比实际偏高。电流越小,自热越小,但信号也越小,容易淹没在噪声里。工程上有个经验权衡:PT100 常用 1mA 激励,PT1000 常用 250μA 到 500μA 激励。这既能保证信号量级,又能把自热控制在可接受的范围内。
2.3 PGA 增益与参考电压的搭配原则
ADC 的 PGA 并不是增益越大越好,而是要跟参考电压、信号范围精确匹配,否则要么削波,要么白白浪费分辨率。
以 PT100 + 1mA 激励为例。温度从 0°C 到 250°C,PT100 的阻值从 100Ω 到约 195Ω,压降从 100mV 到约 195mV。ADC 内部参考电压是 2.048V,如果直接把 195mV 信号送进 24 位 ADC,那么满量程 2.048V 里面信号只占不到十分之一,相当于浪费了 3 位多的分辨率。这时候就需要 PGA 把信号放大。
PGA 增益的选择公式很简单:最大输入信号 × 增益要小于参考电压的满量程范围。这里最大信号约 195mV,参考 2.048V,所以 2.048V / 195mV ≈ 10.5,取整数档位就是 8。也就是说,PGA 增益选 8 时,最大输入约 1.56V,不会削波,而且充分接近满量程,精度最大化。如果选 16,最大输入对应 3.12V,超过参考电压,信号会被削顶,必然出错。
那如果用 PT1000 呢?常温下 1000Ω,250°C 时约 1950Ω,1mA 激励下最大压降是 1.95V,几乎顶到参考 2.048V,增益只能选 1,这就会浪费一部分高位分辨率。所以 PT1000 更适合用小一点的激励电流,比如 250μA,最大压降约 0.49V,这样 PGA 增益可以选 4,正好让信号占满量程中段,噪声性能也更好。
我再多说一句关于参考电压的理解。做 RTD 测温时,最理想的是“比例式测量”:激励电流同时流过 RTD 和一个外部精密参考电阻,用参考电阻上的电压作为 ADC 参考输入,用 RTD 上的电压作为测量输入。这样如果激励电流发生漂移,两边电压同步变化,比值的误差就被抵消了。这就是 ADS122U04IPWR 内部激励电流源和外部参考输入协同工作的经典玩法。当然,直接用内部 2.048V 参考也能做,只是精度上限略低一档,胜在省一颗精密电阻。我自己的项目里,除了对成本特别敏感的量产机,其他都尽量用比例式。
3. UART 通信链路设计与固件调通
3.1 硬件连接:TXD/RXD、电平与隔离
ADS122U04IPWR 走 UART,接线对比 SPI 会轻松很多。把 ADC 的发送端接 MCU 的接收端,ADC 的接收端接 MCU 的发送端,两边的地要连好,然后处理共地噪声和电平匹配。
电平方面,ADS122U04IPWR 的数字供电范围一般在 2.3V 到 5.5V,而 STM32G474RE 的 I/O 是 3.3V 电平。如果两边供电一致,直接互联没问题;如果 ADC 供 5V、MCU 供 3.3V,那建议用电阻分压或电平转换芯片,别硬连,否则时间长了可能把 MCU 引脚打坏。
我这边实际项目,为了抗干扰,传感器板和控制板之间距离常在五米以上,纯 UART TTL 电平在这种距离下并不可靠。这种情况下我会在传感器板端把 UART 转成 RS-485 差分信号,另一头再用转换芯片变回 TTL,接到 STM32G474RE。也就是“ADC-UART”到“RS-485”再到“STM32G474RE-UART”的全链路。这样既能沿用 UART 简洁的协议,又能获得差分传输的抗干扰能力,线缆可以用双绞屏蔽线,非常稳。
还有一点必须注意:工业现场长线传输时,建议在 ADC 的 UART 引脚和地之间加 TVS 二极管做浪涌保护,低成本的方案也能用电阻串在线上做限流。很多人调不通思品,最后发现是雷击浪涌或电机启停瞬间的尖峰把芯片打挂了,这个坑提前防住比事后排查省事得多。
3.2 ADS122U04 的命令帧格式与寄存器配置
ADS122U04IPWR 的 UART 协议核心是“命令-响应”式的字节流。上电后先给一片复位命令,等它内部完成上电校准,再往配置寄存器里写参数,之后发数据读取命令,就能拿回转换结果。每次命令的应答里通常会带上状态信息,比如是否有超量程、传感器开路等标志位,千万别只看数据字节,状态位才是排查问题最快的入口。
以 PT1000 为例,我会上电后先复位,然后等待一段稳定时间,再写一条配置命令:使能内部激励电流源、电流设 250μA;PGA 增益设为 4;选择 2.048V 内部参考或者外部精密参考;数据速率先设在 20SPS 这个档位。这个 20SPS 不是随手填的,它能把 50Hz 工频及其高次谐波通过数字滤波器压到很低的电平,对板子没有屏蔽壳的现场环境非常友好。
配置命令发完之后,我一般不会立刻读第一帧数据,因为模拟前端和滤波器需要几个采样周期才能稳定下来。实际调试时,我习惯先读一遍设备 ID 或者状态字节,确认链路通了,再发配置,最后进入正常轮询。这个顺序能帮你把故障范围快速缩小:如果连 ID 都读不到,那肯定是接线或电平问题,而不是配置参数问题。
下面是我在 STM32G474 上用串口发送配置命令并读取结果的简化示意,实际寄存器地址请以官方数据手册为准:
// 简化示意,不代表完整协议帧 uint8_t txBuf[8] = {0x2A, 0x01, 0x03, 0xA4, 0x00, 0x00, 0x00, 0x00}; HAL_UART_Transmit(&huart4, txBuf, sizeof(txBuf), 100); // 等待响应 uint8_t rxBuf[8] = {0}; HAL_UART_Receive(&huart4, rxBuf, sizeof(rxBuf), 1000);重点在于配置字节里每一位的选择逻辑:哪些是使能位、哪些是增益位、哪些是滤波器系数选择位,一定要对照数据手册的寄存器表格来梳理,最好写成宏定义和注释,方便以后维护。
3.3 STM32G474RE 侧 UART 接收的稳健做法
ADC 是低速设备,20SPS 下每 50ms 才出一个新数据,按说 MCU 这边随便轮询都行。但实际现场会遇到一个问题:MCU 还要同时干别的事,比如跑 PID、处理通信协议、刷新屏幕,一忙起来就可能错过 UART 中断。这时候用阻塞式接收就是给自己挖坑。
我更推荐的做法是:STM32G474 的 UART 配 DMA 接收 + 空闲中断。每帧数据不定长也没关系,等空闲中断触发时,把 DMA 收到的整帧数据取出来解析。这样 CPU 绝大多数时间都在忙别的,只有一帧完整数据到齐后才被拉去做一次解析,性能开销极小。
解析时不要把第一个字节当成有效数据立刻用,因为协议帧头、状态字、数据字节、校验字节都要做完整性校验。我通常在固件里维护一个简单的状态机:找帧头 → 收状态+数据 → 校验收尾字节 → 置标志位,主循环发现标志位置位后更新温度值。这样即使偶尔来一帧错帧或干扰帧,也能被状态机识别并丢弃,不会污染测量结果。
void UARTRxCallback(void) { // DMA 收到的帧已经完整 if (CheckFrameCrc(rxBuffer, rxLen)) { adcStatus = rxBuffer[1]; // 状态字节 rawCode = (rxBuffer[2] << 16) | (rxBuffer[3] << 8) | rxBuffer[4]; newDataReady = 1; } }主循环里拿到 rawCode 后,再走后续的滤波、线性化、故障判断逻辑。这样整个收发链路是事件驱动的,实时性和稳定性都能兼顾。
4. 从原始采样到精确温度:算法与滤波
4.1 数据速率与数字滤波系数选择
ADS122U04IPWR 内部本身是 Δ-Σ 架构,自带数字滤波器,也就是说它有不同数据速率档位,每个档位对应不同的输出噪声和建立时间。数据速率越低,内部数字滤波越强,噪声越低;数据速率越高,输出越快,但噪声也越大。
在 HVAC 项目里,被测对象(空气温度、水温、盘管温度)本身变化就慢,根本没有必要追求高速。20SPS 通常就是很好的选择:50ms 一个点,足够控制回路使用,而且对工频干扰的抑制非常有效。如果你在现场发现数据还是会周期性跳动,那大概率是数据速率档位选得太高,或者没有配合内部滤波器。
在 MCU 端,我还会再加一道简单的滑动平均,把最近 8 到 16 个有效采样做平均。虽然有点重复滤波,但实际效果很显著,尤其是在变频器启动瞬间,数据毛刺会被彻底丝滑。注意滑动平均只会增加延时,不会改变稳态精度,所以控制逻辑里的滞后补偿要把这个延时算进去。
滤波器的另一个作用是故障识别。当断线时 ADC 输出会跳到接近满量程的正向最大值,如果我加了强滤波,这个跳变会被削平,反而掩盖了故障特征。所以我的做法是:正常数据路径走滑动平均,另外再用一组“原始快速值”做故障监测,两边并行。这样既不耽误故障检测的速度,也不影响控制数据的平滑度。
4.2 RTD 非线性补偿:查表、多项式与迭代计算
很多新人以为 RTD 是线性的,直接把 ADC 读回来的电阻值乘个系数就是温度。PT100 和 PT1000 只是“接近线性”,严格来说它是一个二次或更高次的多项式关系,在高精度场景必须补偿。
工程上常见两种做法:查表插值和多项式计算。查表法精度高、速度快,但需要庞大的标定点数据,而且换一种传感器型号就要重新做表。多项式计算更灵活,适合嵌入式里动态处理。对 RTD 铂电阻,业界标准是 Callendar-Van Dusen 方程。
0°C 到 850°C 的范围,可以用二次方程近似:
[ R(T) = R_0 \times [1 + A T + B T^2] ]
其中 PT100/PT1000 的 A ≈ 3.9083e-3,B ≈ -5.775e-7。已知电阻值求温度时,这是个一元二次方程,直接套求根公式就行。下面是我在 STM32G474 上实际用的函数:
float PT1000_R2T(float R) { const float R0 = 1000.0f; const float A = 3.9083e-3f; const float B = -5.775e-7f; float rr = R / R0 - 1.0f; float disc = A * A - 4.0f * B * rr; if (disc < 0.0f) return -999.0f; return (-A + sqrtf(disc)) / (2.0f * B); }如果温度范围要覆盖 -50°C 以下,二次方程就不够准了,需要带入 C 系数的四次方项。四次方程没有简单的求根公式,这时我用 Newton-Raphson 迭代,几轮就收敛了。G4 有硬件 FPU,跑迭代不是负担。
我更推荐的做法是:把温度区间分成两段,0°C 以上用求根公式,0°C 以下用迭代。这样既保证精度又控制代码复杂度。实际我验证过,这个方案在全温区误差能控制在 0.02°C 以内,完全满足工业级要求。
4.3 故障检测:开路、短路与看门狗
故障检测做到位,系统才算完整。RTD 最常见的故障就三个:探头断线、探头短路、通信中断。
探头断线时,激励电流没地方走,ADC 输入会被拉到参考电位附近,原始码会趋近于一个很大的正值。探头短路时,输入接近零伏,原始码趋近于零或很小的值。我通常在固件里设两个阈值:原始码大于某个高限判定为开路,小于某个低限判定为短路。注意这两个阈值要对 PGA 增益和数据速率做出调整,不能写死,否则换个传感器类型就误报。
通信中断的识别就靠看门狗。我的习惯是:MCU 侧设置一个超时计时器,每次成功解析一帧 ADC 数据就清零。如果超过 1 秒没有新数据,就判定为通信异常,温度值直接进入保持模式,同时置报警标志位。不要在这方面省时间,现场通信一旦异常,最怕的就是 MCU 拿着最后一次的旧数据继续跑控制逻辑。
ADS122U04IPWR 应答帧里的状态字节还能提供更多信息,比如超量程、电源跌落等。我建议把状态字节解析出来,判断依据不要只靠数据高低限,要结合状态位一起判断。这样即使某一次数值碰巧落在正常区间,但状态位已经表示异常,系统也能提前预警。
5. 调试和工程化中常见的坑
5.1 硬件层面:布局、噪声、隔离
我调过好几版温控板,总结出一条规律:温度采集的精度问题,十有八九不是芯片不行,而是 PCB 布局和接地没处理好。
先说接地。ADC 的模拟地和数字地最好单点连接,别在 PCB 上铺一整片地让大电流乱窜。RTD 信号线从传感器端子进来之后,尽量贴着地平面走,避免平行于动力线。如果板子上同时有变频器或开关电源,那模拟区域和电源区域之间要留出隔离带,必要时加屏蔽罩。
去耦电容的位置也很重要。ADS122U04IPWR 的模拟电源引脚和参考引脚旁边,我各放一个 0.1μF 的陶瓷电容,就近打孔接地。很多新人喜欢把电容放在板子边缘,效果会差很多。电源线进入板子之后,先用一个大电容稳住,再经过磁珠分给模拟区,这样高频噪声会被滤掉一大截。
另外,传感器线缆要选屏蔽线,屏蔽层在单端接地。注意不要两端都接地,否则形成地环路,反而引入共模干扰。现场如果传感器离得远,建议用双绞屏蔽线,一路走激励线,一路走检测线,双绞能有效抑制磁耦合噪声。
5.2 软件层面:UART 丢帧、转换一致性
UART 丢帧调得我头大过几次,总结下来常见的三个原因。第一是波特率误差。两边晶振精度不同,长时间传输会累积误差,尤其是长帧。解决办法是用同一个晶振,或者用支持自动波特率检测的 UART,让 MCU 跟踪 ADC 的输出速率。第二是中断优先级和 DMA 配置不当,UART 中断被别的任务抢占,数据帧被截断。这种情况可以把 UART 中断优先级提高,或者干脆用 DMA,让硬件搬运数据,CPU 只在整帧完成后介入。
第三是协议帧被干扰。现场大电流设备的启动瞬间,UART 线上会感应出尖峰脉冲,导致帧头错位。这个靠软件很难完全消除,我一般会在硬件上加串联电阻和 TVS,软件侧再配合状态机,遇到连续几个错误帧就强制重新同步,而不是继续按错位的数据解析下去。
还有一点容易被忽略:ADC 转换结果在每个数据速率下并不是同步就绪的,你在 MCU 端接收到的数据可能存在一个周期的延迟。做闭环控制时,虽然这个延迟很小,但如果你同时做了滑动平均和滤波,累计延迟可能会到几百毫秒。系统调参时要把这个延迟算进环路里,别到现场才发现控制器振荡。
5.3 常见问题速查表
我在调试过程中积累了一张问题排查表,基本覆盖了这类温控项目最常见的毛病,列出来给大家参考。
| 现象 | 可能原因 | 排查与解决 |
|---|---|---|
| 读数持续跳动 | 激励电流过大造成自热、电源纹波大、数据速率过高 | 降低激励电流;检查电源滤波;改用 20SPS 档位 |
| 读数整体偏高 | 自热严重、参考电压偏小、PCB 附近有热源 | 减小激励电流;检查参考电阻布局;远离发热器件 |
| 读数整体偏低 | 引线电阻补偿不足、传感器标称不准 | 改三线制/四线制;检查传感器型号与 R0 |
| 温度显示不变 | 通信看门狗没触发、ADC 处于复位状态 | 检查 UART 接线;读状态字节;确认复位命令是否正确 |
| 偶尔一大跳 | 变频器/电机启动干扰、帧校验失败 | 加屏蔽;调高数据速率抑制配置;软件滤波与故障阈值 |
| 开路/短路不报警 | 阈值和 PGA 不匹配、状态位未解析 | 根据 PGA 和激励电流重新计算阈值;解析状态字节 |
| UART 收不到数据 | 电平不匹配、波特率不一致、TXD/RXD 接反 | 用示波器看 UART 波形;检查电平;核对管脚定义 |
这张表不是理论推演,每一个都是我真刀真枪调过的。如果你是第一次做这种项目,建议先复制一张类似的表放在工位上,排查问题比对着数据手册逐字找快得多。
最后再分享一个我个人的实操习惯:每次硬件改版后,我都会在 ADC 输入端用信号发生器给一阶标准电阻模拟 RTD,把整个链路从模拟量到 MCU 输出温度值的误差记录成一张表。先确认系统偏差,再谈精度优化。这样改版后的回归测试特别快,也不会被一个新问题带着满板子乱找。这套组合我到现在已经量产过好几个项目,ADS122U04IPWR 负责模拟信号、STM32G474RE 负责算力和控制,分工明确,稳定运行,非常适合工业与 HVAC 场景里的高精度温度测量。