做嵌入式设备和暖通空调(HVAC)系统的人应该都有同感:温度监测这事儿看着简单,真正落地的时候全是细节。最近我把 PJ85718DM 这颗数字温度传感器和 TM4C129XKCZAD 这颗主控搭在一起,做了一套同时采集本地温度和远程温度的监测方案,分别用在嵌入式机柜和 HVAC 风管两个场景里,实测下来数据稳定、调试也算顺利。如果你正在纠结怎么选传感器、怎么处理远距离探头的干扰、怎么让温度数据既能本地显示又能远程上报,这篇可以给你一个能直接参考的实际案例。
这个项目的核心是把“近处的温度”和“远处的温度”放到同一个数据链路里处理:本地温度用传感器内部测温单元直接读,远程温度通过外接探头拉长线采集,主控统一解析、滤波、存储和上报。整套方案没有用复杂的RTOS或者云端框架,就是裸机驱动加轮询读取,但可靠性并不差,关键是每一层的细节都处理到位了。
1. 项目背景与整体设计思路
1.1 这个项目到底在解决什么问题
先说说我为什么要做这套监测方案。当时有两个需求几乎同时过来:一个是嵌入式设备机柜里的主板温度监控,要求精度在±0.5°C以内,读数异常时能触发告警;另一个是HVAC项目里的风管温度监测,需要把探头放到离控制板好几米远的风管内部,实时采集送风温度,并且要能区分“控制板所在位置的室温”和“风管里的实际温度”。这两个需求单独拆开都不难,合在一起就有点意思了——我需要一颗既能测本地温度、又能接远程探头的传感器,还需要一颗性能足够、外设丰富、最好自带网络能力的主控芯片来做数据汇总。
传统做法是用MCU的ADC直接采热敏电阻,本地一个NTC、远程一个NTC,各自接分压电阻,再用查表法算温度。这个做法在单点场景没问题,但一旦要求精度高、抗干扰强、探头线长,麻烦就来了:ADC基准电压温漂、分压电阻精度、长线引入的噪声都会叠加到读数上。用数字温度传感器把模拟前端搬进芯片内部,是更省心的方案。
所以我定了三条硬性需求:第一,传感器必须同时支持本地和远程两个通道,且远程通道要能适应2到5米的线缆长度;第二,主控要有硬件I2C、足够多的定时器,最好带以太网,方便后续把温度数据直接传到上位机;第三,整套方案在HVAC那种电机启停频繁、干扰大的现场环境下,不能出现读数乱跳或者通信死锁。PJ85718DM加TM4C129XKCZAD这个组合,正好把这三条都满足了。
1.2 器件组合的选型逻辑
先说传感器侧。PJ85718DM这颗芯片的定位是低功耗数字温度传感器,内部测温单元负责本地通道,另外还有一个专门的外部探头接口,可以通过两根线连接NTC探头或者PN结形式的远程测温元件,芯片内部完成线性化和模数转换,最后通过I2C总线把两个通道的温度值一起读出来。这个“一颗芯片两路温度”的特性,是我选择它的最主要原因。如果只用单通道传感器,远程探头就得另配一颗独立传感器,不仅增加PCB面积,还要多占用一路I2C或者其他通信资源,系统复杂度明显上升。
再说主控侧。TM4C129XKCZAD属于TM4C129x系列里的高配型号,Cortex-M4F内核,主频120MHz,自带浮点运算单元,这对我后面做温度滤波和标定计算非常友好。它内部集成了硬件I2C、UART、SPI、PWM、ADC还有以太网MAC和PHY,意味着我不需要额外挂一颗以太网芯片就能把温度数据打包成网络帧送出去。对HVAC这种需要远程监控的场景来说,这个能力特别实用——现场控制板采集到温度之后,可以直接通过网线把数据送到楼宇自控系统,省掉一路RS485转以太网的中间设备。
选型的时候我其实也纠结过:要不要用更简单的8位MCU加一颗专用温湿度传感器?后来放弃了,原因是HVAC现场往往需要同时处理多路数据——温度、湿度、阀门状态、风机启停状态,8位MCU的资源很快就吃紧。而TM4C129XKCZAD这颗芯片的外设冗余度足够大,即使以后要加一路压力传感器或者电量监测,也不用换主控。
1.3 “本地”和“远程”到底指什么
很多第一次接触这个项目的人会问:本地温度和远程温度,不就是传感器离主控的远近吗?实际操作下来,这里的语义要更细致一些。
本地温度,指的是PJ85718DM芯片所在位置的环境温度,也就是PCB周围空气的温度。它反映的是控制板附近的温升情况,用来判断机柜散热是否正常、芯片自身是否过热。因为传感器就焊在板子上,所以它测到的温度包含了主控、电源芯片等发热器件带来的影响,这一点在后期标定的时候必须考虑进去。
远程温度,指的是通过专用探头接口外接的温度传感器所处位置的温度。探头可以放在风管里、水管的表面、空调回风口、室外机旁边,跟主控的距离从几十厘米到几米不等。由于探头和主控之间存在线缆电阻、分布电容、电磁干扰等问题,远程通道的硬件设计和软件滤波就要比本地通道花更多心思。
我在这套方案里的做法是:本地通道的数据直接作为机柜内部温度的判据,远程通道的数据作为HVAC环境温度控制的输入。两路数据都经过同样的滤波和标定流程,但告警阈值和上报周期是分开配置的——本地温度超过70°C就触发过温告警,远程温度则根据不同的空调工况设置不同的目标区间。这样的设计让一套硬件同时服务两个完全不同的应用场景,后期维护也只需要维护同一套代码逻辑。
2. 核心器件与关键原理拆解
2.1 PJ85718DM 的测温原理与关键参数
这颗芯片最核心的部分是它的测温前端。本地通道采用带隙基准和Σ-Δ ADC相结合的方案,带隙电路产生一个与温度成正比的电压信号,经过Σ-Δ调制器转换成数字量,再经过芯片内部的数字滤波器输出最终的12位温度数据。用带隙基准的好处是它对电源电压的波动不敏感,供电从2.7V到5.5V变化时,读数不会有明显偏移。
远程通道的原理稍微复杂一点。芯片的探头接口输出一个恒定的激励电流,流过外接的NTC探头或者PN结测温元件之后,在芯片内部测量其上的压降,再通过内置的线性化查找表把压降映射成温度。因为这个测量过程是芯片主动激励、主动读取的,所以对外部元件的阻值误差不敏感,普通精度5%的NTC探头配合这颗芯片也能做到±0.5°C以内的综合精度。
| 参数 | 典型值 | 说明 |
|---|---|---|
| 本地测温范围 | -40°C ~ +125°C | 覆盖嵌入式和HVAC常规场景 |
| 远程测温范围 | -40°C ~ +125°C | 取决于外接探头规格 |
| 温度分辨率 | 0.0625°C | 12位ADC,高位有效 |
| 本地精度 | ±0.3°C(典型) | 25°C附近实测更好 |
| 远程精度 | ±0.5°C(配合NTC) | 需标定偏移 |
| 接口 | I2C(支持100kHz/400kHz) | 7位地址可配置 |
| 转换时间 | 典型25ms | 12位模式连续转换 |
我在实际项目里把I2C速率配置成100kHz而不是400kHz,原因后面在排查章节会详细讲。简单说,远程探头线缆比较长的时候,高速I2C对线缆电容特别敏感,降速是最省事的抗干扰手段。
2.2 TM4C129XKCZAD 主控侧需要关注什么
这颗主控在我看来最适合这个项目的点,不是它的主频多高,而是它的“接口储备”非常到位。首先它有多个硬件I2C模块,我可以把传感器挂在专用的I2C总线上,把EEPROM挂在另一条总线上,互不干扰,调试的时候也容易定位问题。其次它的GPIO几乎都能映射到定时器输入捕获或PWM输出上,如果以后想用PWM控制HVAC的电动阀门,不需要额外加芯片。
还有一点很实用:TM4C129XKCZAD内部自带以太网MAC和PHY,只需要外接一个网络变压器和RJ45座子就能把温度数据发到局域网。我在HVAC场景里就是用它自带的以太网接口,把两路温度和告警状态打包成自定义的UDP报文,每秒钟发一次,楼宇自控那边直接解析UDP就行,完全不用写复杂的HTTP服务。
功耗方面这颗芯片不算低,正常运行时电流在几十毫安水平,但对HVAC和机柜监控这种供电充沛的场景,功耗根本不是约束。我在设计电源的时候直接用一个宽压输入的DC-DC把24V降到3.3V,前端再加TVS管和共模电感,现场实测下来电源纹波对温度读数没有可感知的影响。
2.3 双通道数据流怎么组织
数据流的设计决定了后续代码的复杂程度。我在项目里把整个温度数据通路分成三层:采集层、处理层、上报层。采集层由主控每500ms通过I2C读取一次PJ85718DM的本地通道和远程通道寄存器;处理层对两组原始数据进行滑动平均滤波、标定补偿和阈值比较;上报层则根据配置把处理后的数据输出到OLED屏、串口或者以太网。
这种分层最大的好处是每一层都可以单独调试。比如发现远程读数偏大,我可以先通过I2C波形确认采集层没问题,再检查处理层的滤波参数和标定偏移,最后才去看上报层是不是把数据格式搞错了。如果所有逻辑都堆在一个大循环里,出问题的时候根本无从下手。
另外我特意把两路数据的“新鲜度标记”也纳入了上报帧。每次从传感器读到数据后,对应通道的位置位会更新;如果连续三次读取失败,新鲜度标记会被置为无效,上位机端就能明确区分“传感器断线”和“温度真的超高”,不至于把断线误判成火灾报警,这是HVAC现场安全性的一个关键细节。
3. 硬件设计、接线与实地布署要点
3.1 电路连接与电源设计
先给出一份我在实际项目中验证过的硬件连接方案,你可以直接照抄:
- PJ85718DM的VDD接3.3V,旁边放一个100nF陶瓷电容和一个10uF钽电容,两个电容尽量靠近芯片电源引脚。
- I2C的SDA和SCL分别拉到TM4C129XKCZAD的硬件I2C引脚上,两条线各接一颗4.7kΩ上拉电阻到3.3V。
- 远程探头接口接到PH1/PH2两个引脚(具体引脚以上一颗芯片数据手册为准),走线尽量短,如果探头接口在PCB边缘,预留一个2.54mm的排针方便插拔。
- PJ85718DM的ALERT告警输出脚接到主控的一个GPIO中断引脚,温度超限时硬件自动拉低,主控通过中断响应,不需要软件轮询寄存器。
- TM4C129XKCZAD的电源引脚统一接3.3V,去耦电容每两个电源引脚配一颗100nF,并在整个板子的电源入口处放一颗钽电容做储能。
电源设计上,HVAC现场的干扰主要来自压缩机和风机的启停,瞬间电流变化会在电源线上产生比较大的压降。我建议整个板子的电源入口先经过一个共模电感,再接DC-DC模块,DC-DC输出再接一个LDO给传感器单独供电。LDO的好处是能把数字主控的开关噪声和传感器隔离开,实测在用LDO单独供电之后,远程通道的读数跳动从±0.3°C降到了±0.1°C以内。
3.2 布线、滤波与防护
温度传感器是慢信号,很多人就放松了警惕,随便布线。实际上远程探头的线缆就是一根天线,HVAC现场电机一启动,电磁干扰就会耦合进探头线。我的做法是:探头线在PCB上走差分对的形式,两根线并肩走,周围用地铜皮包住;如果PCB空间允许,在探头接口处加一个100nF的差模滤波电容,再串一个小阻值的电阻,当作简单的RC低通滤波器。
对于探头线本身的选型,我强烈建议用屏蔽双绞线,屏蔽层在探头那一端单点接地,主控这一端不接或者通过1nF电容接地。单点接地可以避免形成地环路,地环路反而是工频干扰的主要来源。这个细节我踩过坑,一开始屏蔽层两端都接地,结果远程读数在工频50Hz上周期性波动,后来改成单点接地就干净了。
另外,如果是室外安装的探头,线缆进入控制箱的位置一定要做防水处理,线缆本身要选带护套的室外型号。HVAC项目的施工现场不比实验室,风吹日晒加上老鼠咬线,再好的屏蔽层坏了也白搭。我在室外探头线入口处加了一个防水格兰头,既能固定线缆又能防潮,实测一个夏季没有出现读数异常。
3.3 HVAC 现场长线探头的走线方案
远程探头走线问题在HVAC项目里比在嵌入式机柜里更突出。机柜里的探头一般就在同一块板上,距离不到几十厘米;风管探头就不一样了,风管可能在吊顶里,控制箱在墙壁上,两者之间的线缆往往要走三到五米甚至更长。
我总结了几条实测下来的走线规则:第一,探头线尽量远离变频器和电机动力线,如果无法避免交叉,必须垂直交叉而不是平行走线,交叉时动力线穿金属管做屏蔽;第二,探头线不要和220V电源线绑在同一根线槽里,哪怕是隔着一段距离也容易被干扰;第三,线缆长度超过三米时,I2C总线速率必须降到100kHz,并且探头接口处的滤波电容加大到220nF。
这里还要注意一个容易忽略的问题:线缆电阻会造成电压降,对于NTC探头来说,激励电流在线缆电阻上产生的压降会让芯片误以为探头阻值变大,读数就会偏高。为了抵消这个误差,我在软件里加了一个“线阻补偿”参数——把探头两端短路,读出PJ85718DM显示的值,这个差值就是线阻造成的偏移,记录下来在后面做标定时减掉。这个方法不需要额外的硬件,操作起来也很简单。
4. 软件实现与数据读取
4.1 驱动初始化与寄存器配置
软件部分我采用的是裸机轮询加中断告警的结构,没有上操作系统,逻辑清晰也不容易出死锁。主控上电后先初始化时钟和GPIO,然后配置I2C,最后对PJ85718DM做寄存器初始化。
PJ85718DM的寄存器布局比较简单,核心配置在CONFIG寄存器里。我初始化时把分辨率设置为12位、转换模式设为连续转换、告警输出设为比较模式。初始化的代码大致如下:
#define PJ85718DM_ADDR 0x48 /* 寄存器地址定义 */ #define REG_TEMP_LOCAL 0x00 #define REG_TEMP_REMOTE 0x01 #define REG_CONFIG 0x03 #define REG_ALERT_LOW 0x05 #define REG_ALERT_HIGH 0x06 void pj85718dm_init(void) { uint8_t cfg; /* 读取当前配置寄存器 */ cfg = i2c_read_reg(PJ85718DM_ADDR, REG_CONFIG); /* 12位分辨率 + 连续转换 + 告警输出使能 */ cfg &= 0xE0; cfg |= 0x1A; i2c_write_reg(PJ85718DM_ADDR, REG_CONFIG, cfg); /* 设置告警阈值:本地超过85℃或远程超过80℃触发 */ i2c_write_reg_16(PJ85718DM_ADDR, REG_ALERT_LOW, 0x0550); /* 85℃ */ i2c_write_reg_16(PJ85718DM_ADDR, REG_ALERT_HIGH, 0x0500); /* 80℃ */ }这里有个容易踩的坑:告警阈值的寄存器存储格式是16位补码,低4位是小数位。也就是说85.0°C对应的寄存器值是0x0550而不是0x0055,我第一次就是没左移4位,导致85°C被写成了5.3°C,上电就误告警。这个格式一定要仔细看数据手册的温度数据格式说明。
4.2 温度读取与工程值换算
温度数据的读取我用了一个带超时保护的I2C读取函数,避免传感器没响应时整个系统卡死在等待ACK上。读取本地和远程两个通道的代码如下:
float pj85718dm_read_local(void) { int16_t raw; raw = i2c_read_reg16(PJ85718DM_ADDR, REG_TEMP_LOCAL); raw >>= 4; /* 12位有效数据,丢弃低4位 */ return (float)raw * 0.0625f; } float pj85718dm_read_remote(void) { int16_t raw; raw = i2c_read_reg16(PJ85718DM_ADDR, REG_TEMP_REMOTE); raw >>= 4; return (float)raw * 0.0625f; }0.0625这个系数来自12位AD的分辨率:满量程对应温度范围是-40°C到+125°C,每个LSB代表0.0625°C。把原始值先右移4位得到11位整数加符号位,再乘以0.0625就是摄氏温度。这里必须强调,原始寄存器是高字节在前,低字节在后,我使用的I2C读取函数返回的是合并后的16位数值,如果你的平台字节序不同,要手动交换高低字节,否则读出来的温度会非常离谱。
主控有FPU,直接用float计算没有问题。如果用的是不带FPU的MCU,我建议把乘法改成整数运算加查表,省下的CPU时间虽然不多,但在高负载的HVAC控制周期里能少一点算力是一点。
4.3 滤波、标定与异常检测
采集到原始温度之后,我做了三件事:滑动平均滤波、多点标定补偿、异常数据剔除。
滑动平均滤波我用的窗口是8个采样点,每500ms采一次,这样滤波的时间跨度是4秒。对HVAC这种温度变化本来就很慢的应用来说,4秒的响应延迟完全不影响控制,但换来的是读数平稳性大幅提升。8点滑动平均的实现很简单,就是一个环形缓冲:
#define FILTER_LEN 8 static float filter_buf[FILTER_LEN]; static uint8_t filter_idx; float temp_filter(float new_sample) { float sum = 0.0f; int i; filter_buf[filter_idx] = new_sample; filter_idx = (filter_idx + 1) % FILTER_LEN; for (i = 0; i < FILTER_LEN; i++) { sum += filter_buf[i]; } return sum / (float)FILTER_LEN; }标定补偿我采用两点标定法。把本地探头和远程探头放到恒温槽里,在0°C和50°C两个点分别记录传感器读数和标准温度计读数,算出偏移和斜率,在软件里做线性修正。对大多数应用来说两点标定足够了,之后的误差基本由传感器本身的非线性决定,一般都在±0.3°C以内。标定参数我存在主控的Flash末尾区域,通过串口命令可以现场修改,这样运维人员带着一个测温仪就能在现场重新标定,不用返厂。
异常检测的逻辑比较关键。我在每次读取后先判断返回值是否在合理范围(-50°C到+150°C),超出就丢弃该样本;同时维护一个连续失败计数器,如果连续三次I2C读取失败,就把该通道标记为无效,并且在上报帧的状态字节里置位。这个做法让上位机能够区分“传感器被拔了”和“传感器读到真实高温”,在HVAC场景里可以避免把断线误报成火灾。
5. 常见问题与排查技巧实录
5.1 I2C 通信失败与总线卡死
我在调试过程中遇到最多的就是I2C通信问题,现象是传感器偶尔读不到ACK,严重时整个I2C总线卡死,后续所有设备都无法通信。排查下来主要原因有三个:上拉电阻过大、线缆电容过大、总线被异常电平卡死。
上拉电阻我一开始用了10kΩ,在400kHz速率下,总线电容稍大信号上升沿就很慢,超过I2C协议要求的时限就会导致通信失败。后来把上拉电阻改到4.7kΩ,I2C速率降到100kHz,问题基本消失。如果你的总线电容特别大,可以更激进一些,用2.2kΩ,但要注意待机电流会随之增大,电池供电的设备要谨慎。
总线卡死的情况比较隐蔽。排查思路是先把SDA和SCL两根线分别恢复到高电平,然后逐个断开从设备,找到是哪一个设备把总线拉低了。PJ85718DM在收到错误地址或者电源不稳的时候,偶尔会把SDA拉死不释放。我的解决方法是给它加一个独立的I2C复位通路,通过主控的一个GPIO控制传感器供电,发现异常时断电重启传感器。这个方法虽然粗暴,但在现场非常有效。
| 故障现象 | 可能原因 | 排查与解决 |
|---|---|---|
| 无ACK响应 | 接线错误或芯片未上电 | 检查VDD电压、SDA/SCL是否接反 |
| 偶尔通信失败 | 上拉电阻过大或线缆过长 | 改用4.7kΩ上拉,降速到100kHz |
| 总线永久拉低 | 从设备锁死 | GPIO控制传感器电源,断电复位 |
| 读回全0xFF | 传感器未工作或SCL断线 | 示波器确认时钟波形是否正常 |
5.2 远程读数漂移与精度偏差
远程读数的漂移是HVAC现场最恼人的问题。我遇到过远程通道在风机启动瞬间读数猛跳2°C、然后又慢慢回落的现象。这类问题基本都是电磁干扰导致的。排查的时候我先用示波器看探头接口处的波形,发现风机一启动,探头线上就叠加了很大的共模噪声尖峰,幅度甚至超过了信号本身。
解决方法是双管齐下:硬件上给探头接口加RC滤波,把截止频率压低到几十赫兹;软件上把滤波窗口从4秒加长到8秒。FT测试之后,风机启停瞬间的读数波动从2°C降到了不到0.3°C。如果你的项目里响应速度要求不高,滤波窗口还可以继续加长。记住一个原则:对温度这种缓变量,滤波永远比屏蔽便宜,也往往更有效。
另一个精度偏差来源是线缆压降,我之前提过用短路补偿法消除。具体操作时还要注意一点:短路补偿的温度点是室温,如果项目工作温度区间很宽,最好在工作温度的高端再测一次,看线阻补偿是否仍然准确。铝导线的电阻温度系数比较大,在高温环境下线阻会升高,导致同一个补偿值在高低温下效果不同。
5.3 上电时序、负温度与告警误触发
这个项目的传感器和主控是同时上电的,但两个芯片的复位时间不同。如果主控先完成初始化,立刻去读传感器,而传感器还没完成内部自检,就会读到全0xFF的无效数据。我的处理方式是上电后延迟200ms再执行传感器初始化,并且在初始化完成后先读一次配置寄存器做校验,如果读到的值和写入值不一致,再重新初始化一次。
负温度的处理也是容易出问题的点。PJ85718DM的温度寄存器用二进制补码表示负值,如果你把它当无符号数处理,-10°C会读成一个大正数。我在代码里明确用int16_t类型接收原始值,然后右移再转float,这样负数天然就是正确的。有一部分代码是用uint16_t接收的,结果在零下的冬天测出了+246°C这种离谱读数,排查了很久才发现是类型问题。
告警误触发还有一个容易被忽略的地方:PJ85718DM默认的告警输出极性可能和你预期相反。有的版本是高电平有效,有的是低电平有效,配置寄存器里对应位如果不设置,接在主控中断脚上的电平就会一直处在误触发状态。我在初始化代码里显式配置了告警极性,并且用LED上电自检的方式验证:手动把告警阈值调到当前温度以下,看LED能否正确点亮,验证通过后再把阈值调回正常值。
| 故障现象 | 可能原因 | 排查与解决 |
|---|---|---|
| 上电瞬间读到0xFF | 传感器自检未完成 | 延迟200ms后初始化 |
| 零下温度显示246°C | 无符号类型接收补码 | 改用int16_t类型接收 |
| 告警一直触发 | 告警极性配置错误 | 显式配置极性并做LED自检 |
| 温度缓慢偏移 | 探头线阻受温度影响 | 高温端复核线阻补偿值 |
6. 实测效果与经验心得
6.1 两套场景的实测数据
在嵌入式机柜场景里,PJ85718DM的本地通道放在主控板角落,远离电源模块,距离约3厘米。连续运行24小时,读数稳定在28.1°C到28.3°C之间,波动不超过0.2°C。把另一个高精度温度计放在传感器旁边做对比,差值在0.1°C以内,说明本地通道的精度完全够用。
在HVAC场景里,远程探头放在送风风管内,控制箱与风管之间走了约4米屏蔽双绞线。风机运行时远程读数波动在±0.3°C以内,停止时波动小于±0.1°C。和风管里预装的高精度温度传感器对比,绝对误差在0.4°C以内。这个精度对HVAC的送风温度控制来说已经相当宽裕。
| 场景 | 通道 | 波动范围 | 与标准表偏差 | 备注 |
|---|---|---|---|---|
| 嵌入式机柜 | 本地 | ±0.1°C | ±0.1°C | 连续24小时 |
| 嵌入式机柜 | 远程 | ±0.2°C | ±0.3°C | 探头距离2m |
| HVAC风管 | 本地 | ±0.2°C | ±0.2°C | 控制箱内 |
| HVAC风管 | 远程 | ±0.3°C | ±0.4°C | 风机开启状态 |
我还验证了断线检测功能:拔掉远程探头后,软件在1.5秒内把该通道状态置为无效,上位机界面立刻显示“传感器故障”而不是异常高温,这在现场调试时帮了大忙,省去了无数次“以为要着火了”的虚惊。
6.2 几条值得记住的经验
我个人在实际操作中最深的体会是:数字温度传感器的精度上限很高,但系统级精度往往死在接口和软件上。I2C时序、寄存器格式、数据类型、滤波参数,任何一环出了问题,最后读出来的数都可能差出十万八千里。所以调试温度项目不要一上来就盯着滤波和标定,先把原始寄存器值裸读出来,对照数据手册确认格式正确,再做上层处理。
另外,给远程通道预留一个短路补偿测试点非常值得。我在PCB上留了一组跳线,可以直接把探头的两根线短路。现场维护人员只需要短接跳线、等两秒、记录读数、断开跳线,就能快速算出线阻误差,根本不需要额外仪表。这个设计不到一颗电容的成本,却让整个系统的可维护性上了一个台阶。
最后再分享一个小技巧:PJ85718DM的ALERT引脚是个好东西,但不要只把它当纯硬件告警用。我把它同时接在主控的GPIO中断脚上,通过中断里读取告警状态寄存器的方式,让系统在温度超限时可以立即记录当时的上下文——比如风机是否在转、阀门开度是多少。这个“温度事件联动状态记录”功能,在事后分析HVAC系统为什么超温时,比单纯看温度曲线有用得多。后续如果想扩展,这套硬件还可以再加一路湿度传感器或者压力传感器,主控剩下的I2C总线和GPIO完全够用,把监测系统升级成完整的环境监控平台只是时间问题。