
作为常年和暖通控制、嵌入式电路打交道的人拿到这个题目会习惯性先问三个问题测哪里、隔多远、精度要多少。PJ85718DM 和 PIC18F86J11 这套组合恰好可以回答这三个问题——前者负责温度感知后者负责数据处理和控制调度。这篇文章就围绕这套组合把本地与远程温度监测从硬件连接、软件驱动、现场标定到问题排查的完整过程掰开揉碎讲清楚。无论你是做 HVAC 系统集成还是在嵌入式项目里需要多点测温这篇内容都适合。我会先讲清楚为什么这个方案能落地再给出一套可以照着画的电路和能直接用的代码片段最后聊一聊只有实际跑过现场才会注意到的坑。1. 项目拆解从需求到器件选型的核心逻辑1.1 嵌入式与HVAC场景中的温度监测需求HVAC 系统里看起来是“测个温度”真正落地时却要面对不少麻烦。本地温度通常指控制柜内部或者回风口附近的空气温度芯片直接贴在 PCB 上或者放在机箱内就能感知远程温度则是室外机盘管、送风管道深处、冷却水管壁面这类远离主控板的测量点。测量点分布范围从几十厘米到几十米都有中间可能还要穿过强电走线槽和金属桥架这对传感器前端和通信链路都有很实际的要求。嵌入式侧的核心需求是“读得准、反应快、不拖后腿”。PIC18F86J11 这种大容量、多外设的 8 位单片机很适合作为主控PWM 输出可以驱动风机调速外部中断可以捕捉告警信号多个串口和 I2C 口还能把采集到的数据分享给人机界面或者上位机。它不追求极高主频胜在资源匹配和控制逻辑稳定这在工业 HVAC 设备里比什么都重要。远程测温如果做成独立节点每个节点都要有 MCU、通信芯片和电源成本直接翻倍。更常见的做法是选一款带“远程通道”的传感器芯片用一对差分线把远端探头接回来。PJ85718DM 这类器件可以在同一颗芯片内同时完成本地 NTC 或硅带隙测温以及远端二极管结电压采样恰好贴合 HVAC 的多点测温场景。一颗芯片加两根延长线就把“本地和远程”变成了一个很经济的方案。1.2 为什么选择 PJ85718DM PIC18F86J11选型不是看谁参数好看而是看谁能在现场长期稳定工作。PJ85718DM 采用数字接口直接把模拟量就近数字化抗干扰能力比模拟电压输出方案强不少芯片内部可以完成冷端补偿和线性化软件不用再去查非线性表。对于单片机工程师来说最直观的价值是省掉了运放和 ADC 校准环节把温度读数变成连续几个字节交给 I2C 总线读回来即可。PIC18F86J11 这侧最大的吸引力在于外设密度。I2C 主控制器、定时器、PWM、UART 都有单颗芯片就能承接传感器读取、阈值判断、继电器控制和通信上报。和常见的 8 位 MCU 不同它还提供了足够的程序空间和 RAM 来放调试代码和运行日志。对于 HAVC 控制器这种需要长时间不断电的设备成熟稳定的架构比新颖的架构更让人放心。我不是说这套组合是唯一答案但它在中小批量的 HVAC 控制器里很常见。项目周期紧时我优先选自己熟悉的、驱动代码现成的器件这颗传感器和单片机都有成熟寄存器定义拿到数据手册就能在两天内把原型跑起来。相比用分立元件搭模拟测温电路这套方案的开发和调试成本低得多。1.3 系统的总体架构整套系统可以画成一条很清晰的数据流远端探头通过屏蔽双绞线连到 PJ85718DM 的远程测温输入PJ85718DM 通过 I2C 总线把本地温度、远端温度、报警状态交给 PIC18F86J11MCU 处理完数据后一路用 PWM 控制风机或加热设备一路通过继电器输出告警还有一路通过 RS485 或者以太网上传给楼宇监控平台。值得注意的是远程温度有“就近数字化”和“远端探头直接进芯片”两种实现方式。就近数字化适合探头和主控距离特别远或者环境电磁干扰大的情况直接用 PJ85718DM 的远程通道连接探头则更适合 5~10 米内、走线规整的 HVAC 设备。单片机侧尽量把 I2C 上拉电阻靠近传感器放置测温 IC 的电源引脚旁边加 0.1uF 和 10uF 电容这两条细节对读数稳定性影响非常大。2. 硬件设计与连接本地与远程通道的搭建2.1 PJ85718DM 的引脚与工作模式PJ85718DM 可以说是一颗“麻雀虽小五脏俱全”的温度传感器。典型封装下会引出电源、接地、I2C 时钟、I2C 数据、报警输出和远程测温正负端口。电源电压常见为 3.3V 或 5VI2C 电平跟着供电走要是主控是 3.3V传感器也统一用 3.3V避免电平不匹配。芯片内部有多个配置寄存器可以设置转换分辨率、报警阈值和工作模式。我们通常在初始化时把分辨率设为 12 位对应约 0.0625°C 的 LSB报警阈值根据项目需求写死比如超过 70°C 触发高温告警低于 0°C 触发低温提示。器件还支持比较模式和中断模式两种告警输出方式我习惯用中断模式这样 MCU 可以通过外部引脚及时感知异常而不是轮询寄存器。给传感器供电时不能忽视启动瞬间的电流尖峰。HVAC 现场常有压缩机启动浪涌会沿着电源线灌进来。我会在 LDO 输出端并一个 220uF 电解电容和两个高频瓷片电容避免传感器电源被拉低。如果主控和传感器距离超过 5 厘米电源和地线最好单独走一对而不是共用长走线。2.2 本地测温与远程测温的连接方式本地测温相对简单把传感器芯片放在需要监测空气温度的区域不要让大功率电阻和散热片直接对着芯片不然读到的是“局部热点”而不是环境温度。有些板卡把传感器放在靠近接线端子的位置结果热量顺着铜箔传上来实测偏高 3~5°C这就是布局不合理。远程测温通道要理解成一对差分输入典型接法是接一个二极管或三极管。测温的原理是利用半导体 PN 结正向压降随温度变化的特性远端探头的二极管必须配对合适通常选 2N3906 这类小信号三极管把基极和集电极短接后只留两个引脚。接线时 V 和 V- 不要反接否则读到的温度会明显异常。远程探头线材的选择是个容易被低估的环节。普通杜邦线平行拉开稍微一靠近变频器线路就能读到噪声。远程通道线长建议控制在 10 米以内并使用屏蔽双绞线屏蔽层一端接单片机地。实测下来用双绞线并加磁环后读数波动能从 ±1.2°C 降到 ±0.2°C 以内效果非常明显。2.3 主控电路与 I2C 总线的设计细节PIC18F86J11 的 I2C 模块工作在主模式需要外接上拉电阻。电阻阻值由总线电容和通信速率决定100kHz 标准模式常用 4.7kΩ400kHz 快速模式则用 2.2kΩ。若总线上同时挂了多个器件上拉电阻要适当减小。我习惯在硬件调试阶段预留不同阻值的焊盘现场根据示波器波形微调。主控的 I/O 口还要特别注意I2C 引脚必须配置成开漏输出否则总线会被钳位。很多新人会踩这个坑初始化时把引脚设成普通推挽输出结果 SDA 拉不低通信怎么都不通。一定要读一遍单片机数据手册关于 MSSP 模块的说明把 PMOS 关断只留 NMOS 负责拉低。总线上如果同时有传感器和 EEPROM地址冲突要提前规划。PJ85718DM 一般有两个地址引脚通过接高接低可以组合出多个地址。用两颗传感器时地址可以分别设为 0x48 和 0x49然后 MCU 依次读取。注意代码里算地址时要包含读写位0x48 的写地址是 0x90读地址是 0x91这种位运算的错误在调试时非常隐蔽。2.4 电源、滤波与接地的注意事项HVAC 现场最让人头疼的是变频器和继电器引起的电源噪声。如果传感器直接从一个没有隔离的开关电源取电温度读数会出现周期性的毛刺。我采取的方案是整块控制板先接一个低噪声 LDOLDO 输出 3.3V 单独给传感器和 MCU 模拟区供电大功率执行机构尽量单独用继电器驱动不要从 3.3V 上取电。接地方面远程探头屏蔽层应该单点接地一般接在主控板的地平面边缘。屏蔽层如果两端接地会在屏蔽层上形成地环路反而把共模噪声引进来。某项目现场一开始把屏蔽层两头都接机壳结果面板温度跳得厉害改成单端接后问题立刻消失。电源和信号线走向也要遵守基本规则I2C 数据线远离继电器触点输出线和 PWM 驱动线PCB 上最好用地线包围隔离。如果控制柜空间有限实在避不开就加一层屏蔽板或者用排线屏蔽罩。这些看起来是细节却决定了产品在客户现场能不能稳定跑一年。3. 软件实现从驱动到控制逻辑3.1 I2C 驱动的底层实现PIC18F86J11 使用 MSSP 模块做 I2C 主设备用 C 语言写起来不算复杂。初始化时设置时钟速率、使能 I2C 模式并配置引脚开漏。下面这段是基于 MPLAB XC8 的初始化思路void i2c_init(void) { TRISCbits.TRISC3 1; // SCL 输入 TRISCbits.TRISC4 1; // SDA 输入 SSPCON1 0x28; // 使能主模式, 时钟 Fosc/4 SSPCON2 0x00; SSPADD ((_XTAL_FREQ/4) / 100000) - 1; // 100kHz }写入一个字节时要等待总线空闲并检查 ACK。I2C 最讲究时序状态每步都要看SSPSTATbits.BF和SSPCON2bits.ACKSTAT。读温度一般要发送器件地址、寄存器地址再产生重复起始信号读取两个字节。省略任何一步数据错位是常见的现象。3.2 读取本地与远程温度数据PJ85718DM 的典型读取流程是配置好转换周期等待转换完成读取本地温度寄存器两个字节再读取远程温度寄存器两个字节。转换完成标志位通常在状态寄存器里连续读时要注意判断。温度数据高位和低位拼接成 12 位带符号数乘以 0.0625 就能得到摄氏温度。int16_t raw (reg_high 8) | reg_low; float celsius raw * 0.0625f;远程温度读数和本地类似但寄存器地址不同。某些型号的远程通道在低于 0°C 时会有符号扩展问题需要把 12 位数先左移 4 位再右移 4 位保证符号位正确。我在一个项目里曾因为没有做符号扩展-5°C 被读成了 4091°C差点触发加热器疯狂工作。数据读取频率也要控制。HVAC 系统热惯性大没必要 1ms 读一次。通常 100ms 读一次就足够每次读完后做一次滑动滤波取当前值和前次值的加权平均。这样既能快速响应温度变化又能滤掉电源抖动引起的单次跳变。3.3 HVAC 控制逻辑与告警处理有了温度数据接下来才是控制逻辑的发挥空间。最基础的双位控制是温度低于下限时开启加热高于上限时关闭加热中间设置 2°C 的回差防止继电器频繁吸合。回差太小会缩短继电器寿命太大又会让温度波动明显需要根据现场实际调节。PIC18F86J11 的 PWM 模块可以做更平滑的比例控制。读取本地和远程温度后取最大值或按偏差加权然后映射到 PWM 占空比。比如加热偏差从 0 到 10°C占空比从 0% 线性增加到 80%。再加上一个简单 PID 环节就能把温度稳定在目标值附近比继电器通断的舒适度好很多。告警处理要用到 PJ85718DM 的 ALERT 引脚。初始化时把高低温报警阈值写入寄存器并配置为中断模式当温度越限时芯片自动拉低 ALERT 引脚。PIC18 的外部中断响应后先读状态寄存器确认是哪种事件然后执行对应的保护动作。注意 ALERT 引脚是开漏输出必须接上拉电阻不然中断检测不到低电平。4. 标定、精度与可靠性调整4.1 误差从哪里来温度误差来源可以分成三类传感器本底误差、远端探头误差和电路引入误差。PJ85718DM 这类数字传感器在 0~70°C 范围内能做到 ±0.5°C但超出这个范围误差会变大。远端 PN 结的一致性也很重要同一型号不同批次的二极管在 100°C 时压差能达到 2~3°C标定时必须使用实际探头。电路引入的误差最隐蔽。传感器附近如果有强辐射源读到的温度会周期性跳动I2C 线过长导致信号边沿变差会造成读数偶尔错位。更常见的是供电电压不稳导致芯片内部基准漂移表现为温度读数随压缩机启动出现瞬态尖峰。要真正控制误差得从源头入手传感器装在通风处但避开直吹气流远程探头用导热硅脂与被测面贴合线缆固定牢靠避免振动。否则后续做再复杂的补偿算法也很难抵消物理层面的测量偏差。4.2 现场标定与补偿现场标定是 HVAC 项目绕不开的步骤。上电后把系统置于恒温环境比如在 0°C 的冰水混合物和 50°C 的恒温槽里各放一段时间记录实际温度和读取值的差。通常只需要在两个温度点做偏移校准中间温度用线性插值即可。如果把校准结果写进 PICC18 的 EEPROM批量生产时就能避免给每台设备手动改代码。具体做法是保留两个变量cal_offset_low和cal_offset_high在读取温度后按当前温度区间选择对应补偿值。多台设备用同一套固件只是 EEPROM 内容不同维护起来很方便。某项目的经验是标定时不要把手放在传感器旁边人体热辐射会影响远端探头读数导致校准结果偏离真实值。校准前要等设备充分热机 30 分钟让电路板自身温度达到稳定否则后续实际运行时会一直偏高。4.3 远程探头走向与干扰抑制远程探头走线很考验现场经验。必须避开变频器输出线和继电器控制线至少保持 20 厘米距离。如果迫不得已要并行走线中间要加屏蔽隔板。双绞线绞距越密抗噪声能力越强现场临时用直通线代替绞线往往会在设备满载时暴露问题。探头本身的接地也很讲究。远端探头外壳如果直接接触金属风管建议用绝缘套管隔离。否则风管电位与主控地不一致会在测温回路形成共模电压。我在做室外机盘管测温时就把探头套了一个热缩管再扎到管壁上既保证热接触又消除了接地环路读数稳定多了。如果远程距离超过 10 米单纯靠传感器远程通道可能力不从心。可以考虑在远端加一个小型信号变送器用 4-20mA 电流环把温度送回来。PIC18F86J11 的 ADC 输入加一个 250Ω 采样电阻就能读电流信号这种方案虽然多了器件但长距离抗干扰能力显著提升。5. 现场问题排查与经验速查表5.1 典型故障与定位思路跑现场最怕的是温度读数“神游”。常见现象、可能原因和处理办法我整理成了速查表遇到问题时按顺序排查通常十分钟内能定位。故障现象可能原因检查与处理办法本地温度读数显零传感器电源没通或 I2C 地址错误用万用表量 VCC用 I2C 扫描程序确认地址远程温度读数异常偏高远程探头开路或接反检查 D/D- 线路替换标准二极管测试读数周期性跳动电源纹波或变频器干扰增加滤波电容远程线改用屏蔽双绞线I2C 通信偶发失败SDA/SCL 上拉电阻不合适示波器看边沿调整上拉阻值或降通信速率温度变化反应迟缓滤波过度或探头热耦合不良检查滤波系数重新涂导热硅脂其中远程探头开路导致读数偏高的原因很多人不理解传感器内部会把远程通道的测量电流倒灌给开路引脚开路状态下压差极大换算温度自然飞到上限。遇到这种读数先怀疑接线断或者探头坏别急着怀疑算法。5.2 调试工具与操作细节现场调试我习惯带三种工具万用表、示波器和带 I2C 扫描功能的逻辑分析仪。先用万用表确认供电和接线再用逻辑分析仪抓取总线波形最后对着波形看 ACK 位和寄存器地址。调试时别直接上满负荷控制可以先用一个小功率加热器模拟测试确保温度控制闭环正确再接到真实设备上。还有一个容易忽略的操作细节用 ICSP 烧录程序时如果调试器供电能力不足PIC18F86J11 和传感器会同时欠压。表现出来的现象是程序能烧进去但运行后传感器偶尔通信失败。这时应该用外部电源单独给目标板供电调试器只接地线和数据线立即会稳定很多。修改固件时要留意 MCU 的看门狗是否开启。HVAC 设备常年运行一旦程序跑飞看门狗能自动复位。但看门狗超时时间要大于温度采集周期的几倍否则正常流程中被误复位现场会出现设备无规律的断电重启很难排查。5.3 长期运行的一些改动建议项目正式交付前我会做两个改动一是把温度采样结果定期写入 EEPROM便于追踪历史趋势二是给 MCU 增加一个运行计数累计通电时间达到一定阈值后主动刷新传感器配置。这两个功能可以帮助现场人员判断故障是瞬时干扰还是趋势性老化。针对 HVAC 设备长期运行传感器远程探头属于易损件。建议在结构上设计成可插拔端子而不是焊死在板子上。客户更换探头时无需重新校准因为远端探头的一致性在标定时已经覆盖只要选用同一型号即可。最后再分享一个在多个项目里验证过的小习惯给每一台设备在出厂前做一次 24 小时高低温循环测试读数稳定后再发货。这比在客户现场发现问题再处理要节省大量成本尤其对于季节性强、设备分散的 HVAC 项目前期多花一天后期能少跑好几趟。这个东西后续还可以扩展成多区域温度监测只要把相同传感器挂到同一根 I2C 总线上PIC18F86J11 仍然有足够的资源去处理。加上 RS485 接口就能把本地与远程温度数据统一上传到集中监控平台。无论项目规模怎么变这套架构的核心思路——数字传感器就近采集、MCU 统一处理、控制与告警分离——始终可以复用。