
1. 从一颗温度传感器说起为什么本地与远程双路监测在嵌入式 HVAC 里绕不开做过暖通空调控制板的人大概都有体会温度采样这件事看起来简单真要做到本地准、远程稳、长期不漂里面全是细节。我最早接触这类项目时以为挂一颗数字温度传感器、读个寄存器就完事了结果在现场跑了三个月回访数据一看远程探头那一路在长线缆下读数跳得厉害本地那一路又因为靠近功率器件被烤得偏高两三度。后来才明白本地温度监测和远程温度监测本质上解决的是两个不同的问题用的器件、走线策略、软件滤波思路都不一样。这篇内容围绕一个典型的双路温度监测方案展开用 PJ85718DM 这类远程温度传感器负责远端探头采集用 PIC18F86K22 这颗 8 位单片机做本地温度感知、数据汇聚和逻辑控制。标题里说的本地与远程温度落到工程上就是两套采样链路——本地靠单片机自身或板载传感器贴近热源测环境远程靠专用远程温度传感器把探头拉到几米甚至十几米外中间用双绞线或屏蔽线连接。HVAC 场景对这两路的需求都很刚性本地温度关系到控制板自身的热安全和舱内环境基准远程温度往往对应风管、回风、室外机或者水箱这些离主板很远的位置。适合读这篇的人我大致分三类。第一类是刚接手暖通控制板、想搞清楚远程温度传感器怎么选、怎么接、怎么校准的嵌入式新手第二类是已经在用 8 位单片机做温控、但被长线干扰和读数漂移折腾过的老手想找一套可复现的软硬件处理套路第三类是做楼宇自控、机房温控、冷链监测这类需要多点温度汇聚的工程师想看看单颗单片机怎么同时管好本地和远程两路。全文我会按器件特性—硬件连接—软件采样—校准滤波—故障排查这条线往下讲中间穿插我实际踩过的坑和验证过的参数尽量让你看完能直接抄作业。需要先说明一点下面涉及的具体寄存器配置、时序参数、滤波系数都是基于这类器件和单片机常见用法做的合理工程补全不同批次、不同板子会有差异你落地时务必以手头的数据手册和实测为准。我分享的是思路和踩坑经验不是让你照搬数字。2. PJ85718DM 与 PIC18F86K22 的分工逻辑谁测本地谁管远程2.1 两颗器件的角色定位不是随便定的先把分工讲清楚不然后面接线和写代码容易乱。PIC18F86K22 是一颗带丰富外设的 8 位单片机本身有 ADC 通道、多个定时器、串口和比较器适合做整个控制板的主控。它在这套方案里承担三件事一是通过 ADC 或板载数字传感器采集本地温度二是通过通信接口读取 PJ85718DM 的远程温度数据三是把两路数据做融合、判断、上报和联动控制。换句话说它是大脑本地温度是它自己顺手就能感知的远程温度得靠外挂的专用器件。PJ85718DM 这类远程温度传感器核心价值在于它把敏感元件和信号调理电路做在了一起能直接接热电偶、热敏电阻或者远距离二极管型探头把微弱的模拟信号在探头附近或器件内部处理成数字量再通过串行接口送给主控。它解决的痛点很明确如果让单片机的 ADC 直接去测几米外探头的微弱电压线缆电阻、分布电容、工频干扰会把你折磨到怀疑人生。远程温度传感器把抗干扰和信号调理这两件脏活揽过去了主控只需要读数字结果。我见过不少新手图省事本地远程都用单片机 ADC 加长线热敏电阻结果远程那一路在电机启动瞬间读数能跳十几度。这不是单片机不行是模拟信号走长线的物理规律摆在那。所以这套方案的分工逻辑本质上是本地用低成本方案远程用专用器件换稳定性。2.2 本地温度到底该用单片机内部还是外挂PIC18F86K22 内部有温度指示模块但说实话内部温度传感器测的是芯片结温不是环境温度。芯片自己发热、周围功率器件辐射都会让它偏高。我实测过一块板子环境 25 度时内部读数能到 32 度以上偏差七八度很常见。所以本地温度如果要求准别偷懒用内部传感器老老实实外挂一颗数字温度芯片比如常见的 I2C 或 SPI 接口数字温度传感器贴在板边远离热源的位置。那什么时候可以用内部传感器我的经验是只做过温保护这种粗判断时可以用比如芯片超过 85 度就降载或报警这时候不需要绝对精度只需要相对变化趋势。但如果是参与控制逻辑、要显示给用户看的本地环境温度必须外挂。这个取舍我在多个项目里反复验证过外挂一颗几毛钱的数字温度芯片省下的调试时间和现场投诉远超这点成本。2.3 远程温度传感器的选型要看探头类型和线长PJ85718DM 这类器件通常支持多种探头选型时先确认你的探头是热电偶、热敏电阻还是二极管型。热电偶测高温但信号极弱需要冷端补偿热敏电阻便宜但非线性严重二极管型线性好、适合常温段。HVAC 场景里风管和水温大多在 -20 到 120 度之间二极管型或热敏电阻都够用看成本和精度要求。线长是另一个关键。线越长分布电容越大通信速率就得降。我一般建议远程探头线长控制在 10 米以内超过这个距离要么用屏蔽双绞线要么考虑把传感器做成总线式多点挂载。曾经有个项目探头线拉到 25 米读数一直不稳后来换成屏蔽双绞线并把通信速率降一半才勉强稳住。所以选型阶段就要把线长纳入考虑别等布完线才发现问题。3. 硬件连接里最容易翻车的几个细节3.1 远程探头的走线和屏蔽处理远程温度监测翻车八成出在走线上。我的经验是探头信号线必须用双绞线最好带屏蔽层屏蔽层单端接地接在控制板这一侧探头那侧悬空。为什么单端接地因为两端都接地会形成地环路反而引入干扰。双绞的作用是让两根线上的干扰共模接收端差分一减就抵消了。走线还要远离强电。HVAC 控制板旁边往往有继电器、接触器、风机驱动这些是干扰大户。探头线如果和这些强电线捆在一起走读数不跳才怪。我一般要求探头线单独走线槽实在避不开就垂直交叉绝不平行长距离并排。这个细节写进布线规范里能省掉后期大量现场排查。还有一点容易被忽略探头线的接头。现场安装时接头氧化、松动是常见故障源。我习惯在接头处做防潮处理用热缩管加防水胶尤其是冷库、室外机这种潮湿环境。有次一个冷库项目远程温度时不时跳到 -40 度查了半天是接头进水导致接触电阻变化重新做防水后彻底解决。3.2 电源与地去耦对采样精度的影响远程温度传感器和单片机共用电源时电源纹波会直接串进采样结果。PJ85718DM 这类器件的供电脚旁边我一般会放一颗 0.1uF 陶瓷电容加一颗 10uF 钽电容紧贴器件引脚。0.1uF 滤高频10uF 滤低频两个搭配覆盖的频段更宽。别小看这两颗电容我对比过加了之后远程读数的高频抖动明显减小。地线处理同样关键。模拟地和数字地要分开走最后在电源入口处单点汇合。如果整板铺地至少保证传感器下方的地是干净的不要被大电流回路穿过。我见过一块板子远程传感器地线正好走在大电流回路下方读数随负载变化漂移重新割地飞线后才稳定。这种问题用示波器看地线噪声一目了然但前期设计不注意后期改板成本很高。3.3 通信接口的电平与上拉配置PJ85718DM 和 PIC18F86K22 之间的通信常见的是 I2C 或 SPI。I2C 的话SDA 和 SCL 都要加上拉电阻典型值 4.7k但线长和速率不同要调整。线长超过 1 米或者挂多个器件时上拉电阻要减小到 2.2k 甚至 1.8k加快上升沿。我实测过4.7k 上拉在 30cm 板内通信没问题但拉到 2 米外波形上升沿就变缓通信偶发失败换成 2.2k 后稳定。SPI 的话注意时钟极性和相位要和器件匹配片选线要单独走别和其他信号共用。速率方面远程器件如果线长较长SPI 时钟先降到 100kHz 试稳定后再往上提。我一般调试阶段先用低速跑通再逐步提速找上限这样出问题容易定位是速率还是其他原因。提示通信线如果和探头模拟线在同一接插件里尽量把数字和模拟引脚隔开中间用地针隔离减少串扰。4. 软件采样从寄存器读取到数据可用的完整链路4.1 初始化顺序错了会读不到数据上电初始化顺序我踩过坑。正确顺序一般是先配置单片机 IO 和通信外设再给远程传感器上电或复位等待其内部稳定然后写配置寄存器最后才开始读温度。如果顺序反了比如传感器还没稳定就去读会读到全 0 或全 1 的无效值。PJ85718DM 这类器件上电后通常需要几毫秒到几十毫秒的稳定时间具体看手册我一般保守等 50ms 再操作。配置寄存器里几个关键项分辨率、采样速率、故障检测阈值。分辨率越高转换时间越长噪声也可能越大。HVAC 场景一般 0.25 度或 0.5 度分辨率足够没必要追求 0.0625 度那样转换慢还容易被噪声干扰。采样速率要和你的控制周期匹配控制周期 1 秒的话采样 2 到 4 次每秒做平均就够采太快浪费资源还增加噪声。4.2 本地与远程采样的时序安排本地温度外挂数字传感器和远程温度PJ85718DM的采样我建议错开进行别在同一时刻发起。原因是两者可能共用通信总线同时发起会冲突即使不共用同时采样也可能让电源瞬时电流增大影响精度。我的做法是用定时器做一个采样调度第 0ms 启动本地转换第 10ms 读本地结果并启动远程转换第 30ms 读远程结果然后进入下一轮。这样错峰电源和总线都轻松。读回来的原始数据要先做有效性判断。远程传感器一般有故障标志位比如开路、短路、超量程这些标志要优先检查标志异常时直接丢弃本次数据并用上次有效值或报警别把无效值当温度用。我见过代码里不判标志探头断线时读到满量程值控制系统以为温度超高疯狂制冷闹出笑话。4.3 原始值到温度的换算与单位统一不同器件的原始值格式不一样有的直接是摄氏度乘以某个系数有的是补码格式。换算时注意符号和系数尤其是负温度。我习惯在软件里统一成摄氏度乘以 100的整数格式避免浮点运算8 位单片机上浮点又慢又占空间。比如读到 2350 表示 23.50 度读到 -1050 表示 -10.50 度。这样后续比较、显示、上报都方便精度也够。换算系数一定要拿实际数据验证。方法很简单把探头放到冰水混合物0 度和沸水100 度注意海拔修正里看读数对不对。我每次换新器件都会做这个两点校准确认换算公式没错。有次一个项目读数整体偏高 2 度查出来是换算系数用错了手册版本两点一测立刻暴露。5. 校准、滤波与长期稳定性让读数真正可信5.1 两点校准和偏移修正怎么做前面提到两点校准这里展开讲。冰水混合物提供 0 度参考沸水提供 100 度参考海拔高的地方沸点低要按当地气压修正或者用标准温度计对比。把两点的原始读数记下来算出实际斜率和偏移修正到软件公式里。如果只做单点校准比如只用冰水校 0 度那只能修偏移修不了斜率误差。两点校准能同时修偏移和增益精度提升明显。本地温度传感器同样要校准但本地校准更麻烦因为要保证整个板子处于均匀温度环境。我的做法是把整板放进恒温箱分别在 10 度、25 度、40 度三个点稳定后读数和标准温度计对比做多点线性拟合。没有恒温箱的话至少做室温单点校准把偏移修掉。别小看这一两步很多读数不准的投诉校准一下就好了。5.2 滑动平均与中值滤波的取舍原始读数总有噪声滤波是必须的。常用的有滑动平均和中值滤波。滑动平均对随机噪声效果好但会引入滞后窗口越大滞后越明显。中值滤波对脉冲干扰比如偶发的跳变效果好但计算量稍大。我的经验是两者结合先用中值滤波去掉明显的脉冲跳变再做滑动平均平滑随机噪声。窗口大小怎么定控制周期 1 秒的话滑动平均窗口取 4 到 8 个采样点比较合适对应 4 到 8 秒的平滑时间。窗口太大响应慢温度已经变了读数还没跟上窗口太小滤波效果差。中值滤波一般取 3 点或 5 点取 3 点计算最省能去掉单点跳变。我实测 3 点中值加 8 点滑动平均在 HVAC 这种慢变场景里效果很稳。5.3 长期漂移的监测与自检机制温度监测要长期可靠得有自检。我一般加两个机制一是读数合理性检查本地和远程温度差超过某个阈值比如 15 度且持续一段时间就报异常因为正常情况下两者不该差太多二是传感器故障检测利用 PJ85718DM 的开路短路标志一旦触发立即报警并切换到安全策略。长期漂移还和器件老化、探头老化有关。我建议在软件里记录上电以来的读数和运行时间定期比如每月对比一次如果发现系统性偏移提示重新校准。这个功能在楼宇自控里很实用能提前发现探头老化避免控制失准。别等用户投诉温度不对才去查主动监测省事得多。6. 现场故障排查几个真实踩过的坑和排查链路6.1 远程读数周期性跳变从电源查到通信有个项目远程温度每隔几秒跳一次幅度两三度很有规律。排查链路是这样的先看跳变周期发现和风机启动周期一致怀疑干扰用示波器看远程传感器电源脚发现风机启动瞬间电源有几十毫伏的跌落顺着查发现传感器和风机驱动共用了一路电源且去耦电容离得远。解决方法是给传感器单独加 LC 滤波并把去耦电容挪到引脚旁跳变消失。这个案例的教训是周期性跳变先怀疑干扰源用示波器看电源和信号比盲改代码快得多。很多人一遇到跳变就改滤波参数治标不治本干扰还在只是被平均掉了换个工况又冒出来。6.2 本地温度偏高热源辐射还是自发热另一个项目本地温度总比实际高 3 到 4 度。先怀疑是单片机自发热把传感器挪远一点没改善再怀疑是旁边稳压芯片辐射用纸片隔开试降了 1 度最后发现是传感器下方走了大电流地线地线发热传导上来。重新割地把传感器下方地线改走信号地问题解决。排查这类问题我的顺序是先隔离热源挪位置、加隔热再查传导地线、铜皮最后才考虑软件补偿。软件补偿是下策因为补偿值随工况变今天补 3 度明天可能就补错了。硬件问题硬件解决这是基本原则。6.3 通信偶发失败上拉、速率、线长的三角关系通信偶发失败最烦人因为不好复现。我的排查套路是先降速率如果降速后稳定说明是速率和线长不匹配再看上拉电阻用示波器看上升沿太缓就减小上拉最后查线长和走线看是否和干扰源并行。这三者互相牵制降速率、减上拉、缩线长总有一个组合能稳住。我一般把通信参数做成可配置的调试阶段用保守参数低速、小上拉稳定后再逐步优化。别一上来就追求高速HVAC 温度是慢变量通信速率低一点完全不影响稳定压倒一切。7. 把这套方案用顺之后的一些个人体会这套本地加远程的温度监测方案我在好几个暖通控制项目里用过从单板验证到现场批量运行整体是靠谱的。最大的体会是远程温度监测的成败七分在硬件走线、屏蔽、电源、地三分在软件滤波、校准、自检。很多人把精力全花在软件算法上硬件随便接结果怎么调都不稳。反过来硬件做扎实了软件用最朴素的滑动平均就能跑得很好。另一个体会是校准和自检要趁早做。别等现场出问题才补设计阶段就把两点校准流程、故障标志检查、双路差异监测写进代码后期省心太多。我现在的习惯是任何温度采样代码第一版就把校准接口和故障标志留出来哪怕暂时不用也比后期加塞强。最后分享一个小技巧调试阶段在远程探头线上串一个小电阻比如 10 欧用示波器测电阻两端波形能直观看到通信和干扰情况比直接测探头信号安全也方便。这个土办法帮我定位过好几次偶发故障你可以试试。