基于PJ85718DM与PIC18LF46K22的HVAC本地远程双路测温方案 1. 从一颗温度传感器说起为什么本地与远程双路测温在HVAC场景里绕不开做嵌入式暖通空调控制这行的人大概都有过类似的经历板子上焊了一颗温度芯片读出来的数值看着挺正常可一旦把探头拉到几米外的风管或者水管上数据就开始飘要么偏高两三度要么干脆跳变。问题往往不在传感器本身而在于本地测温与远程测温这两件事从信号链到地回路再到软件滤波压根就是两套逻辑。这篇内容围绕一个具体的组合展开——用PJ85718DM这颗温度传感芯片配合PIC18LF46K22这颗8位单片机搭建一套能同时监测本地板载温度和远程探头温度的方案。关键词很直白嵌入式、HVAC、本地温度、远程温度、温度监测。它解决的核心问题是在一个暖通控制节点上如何用低成本、低功耗的器件把机器自己热不热和环境/管道到底多少度这两类信息同时拿准。适合谁看如果你正在做风机盘管控制器、新风机组、地暖分集水器控制板、冷库温控器这类产品或者你只是单纯想搞明白为什么我的远程测温总是不准这篇内容都能直接拿去参考。我不会只给你一份数据手册的复述而是把选型理由、电路细节、软件滤波、实测踩坑这些真正决定成败的东西讲透。先说结论性的判断本地测温用板载传感器追求的是快速响应和芯片自身结温的准确反映远程测温用外接探头追求的是长线缆下的抗干扰和一致性。这两者的目标不同所以从硬件布局到软件处理必须分开对待。PJ85718DM 这类器件的好处在于它把传感和调理集成得比较完整而 PIC18LF46K22 这种带多路ADC和丰富外设的8位MCU恰好能把两路信号都接进来统一处理成本还压得住。2. PJ85718DM 与 PIC18LF46K22 的搭配逻辑为什么是这两颗2.1 PJ85718DM 在测温链路里扮演什么角色PJ85718DM 是一颗面向嵌入式测温场景的温度传感器件它的典型价值在于把温度敏感元件和必要的信号调理做了集成输出形式对MCU友好。在HVAC这类应用里它的定位不是实验室级的高精度基准而是在宽温区、有电磁干扰、供电不那么干净的环境下依然能给出可信读数的工程级器件。我选它的核心理由有三条。第一它的测温范围覆盖了HVAC常见的工况区间无论是冷冻水回路的低温还是热水供暖的高温都在可测范围内不需要额外做量程切换。第二它的输出接口简单无论是模拟电压输出还是数字接口形式接到PIC18LF46K22上都不需要太复杂的外围。第三它的封装和功耗适合长期在线运行的控制器不会因为自身发热把本地温度读数带偏。这里有个容易被忽略的点传感器自身的自热效应。任何测温器件工作时都会消耗功率功率转化成热量就会让敏感元件测到的温度略高于真实环境温度。PJ85718DM 在低功耗设计上做得比较克制配合间歇采样策略自热误差可以压到可接受范围。但如果你让它持续大电流工作本地温度读数就会系统性偏高这个坑后面会细讲。2.2 PIC18LF46K22 为什么适合做这个测温主控PIC18LF46K22 是PIC18系列里比较经典的一款8位MCULF后缀意味着它支持低电压工作这对电池备份或者低功耗待机的HVAC控制器很关键。它的几个特性直接决定了它适合这个任务多通道ADC本地温度和远程温度可以分别接到不同的ADC通道硬件上天然隔离软件上分时采样互不干扰。丰富的定时器资源温度采样往往需要周期性触发定时器配合ADC自动触发可以做到采样节奏稳定减少软件抖动。低功耗模式HVAC控制器很多时候是长期通电但不需要全速运行的MCU可以在采样间隙进入休眠靠定时器唤醒整体功耗能压得很低。足够的GPIO和通信外设本地显示、远程上报、继电器输出这些外围它都能带得动。把这两颗器件放在一起本质上是用一颗工程级传感器保证前端信号可信用一颗资源均衡的MCU保证后端处理灵活。这个组合不追求极致性能追求的是在成本、功耗、可靠性之间找到平衡点这正是HVAC量产产品最看重的。2.3 本地与远程测温的硬件拓扑差异很多人把本地和远程测温当成同一件事只是探头位置不同这是最大的误解。它们的硬件拓扑从根上就不一样。本地测温传感器和MCU在同一块板子上走线短地平面共享参考电位一致受干扰的概率低。这时候重点是避免板级热源干扰比如稳压芯片、功率器件、继电器这些发热大户传感器要尽量远离它们或者做热隔离。远程测温传感器通过线缆连接到主板线缆可能几米甚至十几米。这时候问题就复杂了线缆电阻会带来压降线缆电感会耦合干扰长线还容易形成天线效应拾取环境噪声。更麻烦的是地电位差——远程探头的地和主板的地之间可能存在电位差这个差值直接叠加到信号上读数就飘了。所以远程测温通常需要差分信号传输或者恒流激励这类抗干扰手段而不是简单地把单端信号拉长线。PJ85718DM 如果支持差分或者电流型输出远程场景就要优先用这种模式如果是单端电压输出那线缆屏蔽、双绞、就近滤波这些措施一个都不能少。3. 硬件设计细节从供电去耦到远程探头的线缆处理3.1 供电与去耦测温精度的隐形地基温度测量本质上是测量一个微弱的物理量变化供电上的任何纹波和噪声都会直接反映到读数里。PIC18LF46K22 和 PJ85718DM 的供电处理我一般按下面的原则来做。MCU的VDD引脚旁边必须放0.1μF的陶瓷去耦电容位置要尽可能贴近引脚走线要短。这个电容的作用是给MCU瞬间的电流需求提供本地储能避免电流突变通过供电走线影响到传感器。如果板子上还有继电器、电机驱动这类大电流负载MCU和传感器的供电最好单独走一路LDO和功率部分分开物理上隔开。传感器的供电去耦更讲究。除了0.1μF的高频去耦我还会并一颗1μF到10μF的电容做低频储能形成高低搭配。如果传感器对电源纹波特别敏感可以在供电入口加一级RC滤波或者磁珠把开关电源带来的高频噪声挡在外面。注意去耦电容的接地端要就近打到地平面不要绕远路。很多测温噪声问题最后查出来就是去耦电容的地线太长等效电感太大高频去耦根本没起作用。3.2 本地测温的布局让传感器远离热源本地测温测的是板子附近的温度但板子上有太多发热的东西。LDO、DC-DC、功率MOS、继电器线圈这些器件工作时温度可能比环境高十几度甚至几十度。如果传感器挨着它们读出来的就是板子有多热而不是环境有多热。我的做法是在PCB布局阶段就把温度传感器放在板子边缘、远离功率区的位置下方尽量不走大电流走线必要时在传感器周围做开窗或者挖槽减少通过铜皮传导过来的热量。如果结构允许传感器甚至可以放在板子伸出去的一个小舌片上进一步远离热源。还有一个细节MCU自身的发热。PIC18LF46K22 在低功耗模式下发热很小但如果全速运行、驱动多个外设自身也会温升。如果本地温度传感器离MCU太近测到的就是MCU的结温影响后的温度。所以本地传感器和MCU之间也要留出距离或者用软件补偿的方式修正。3.3 远程探头的线缆与接口处理远程测温的成败一大半在线缆和接口上。我总结了几条实操经验。线缆选型上双绞线是底线。双绞的意义在于两根线绞在一起外界干扰在两根线上感应出的噪声基本相等到了接收端做差分或者共模抑制时就能抵消掉。如果用普通平行线两根线拾取的噪声不一样抵消效果差很多。屏蔽线更好但屏蔽层要单端接地一般接在主板这一侧远端悬空避免形成地环路。接口处理上主板侧的连接器附近要放滤波和防护。一个简单的RC低通滤波截止频率设在几十赫兹就能把大部分高频干扰挡掉。如果线缆可能被拔插或者感应到静电还要加TVS管做防护。远端探头如果离主板很远供电线上要加储能电容保证探头瞬间电流需求时电压不塌。地电位差的问题如果传感器支持差分输出直接用差分接收问题基本解决。如果是单端输出可以考虑用隔离或者准隔离的方式比如光耦或者电容隔离把两边的地彻底分开。成本敏感的场景至少要用星型接地让信号地和功率地分开走最后单点汇合。处理项本地测温远程测温线缆板内短走线双绞屏蔽线单端接地滤波简单RC即可RC低通TVS防护地处理共享地平面差分或星型接地防地环路热源远离功率器件探头远离被测环境的热源干扰自热低功耗间歇采样恒流激励注意功耗4. 软件层面的温度采集与滤波让读数稳下来4.1 ADC采样时序与参考电压的选择PIC18LF46K22 的ADC要做温度采集参考电压的选择直接决定分辨率。如果用VDD做参考而VDD本身有波动那读数就会跟着波动。所以只要条件允许我都会用外部基准或者内部固定基准让ADC的量化基准稳定下来。采样时序上温度信号变化慢不需要很高的采样率但每次采样要保证采样保持电容充分充电。如果传感器输出阻抗比较高采样时间就要拉长否则采到的值还没稳定就转换了读数会偏低或者跳变。我一般会把采样时间设到数据手册推荐值的1.5到2倍宁可慢一点也要稳。多通道采样时通道切换后要丢弃第一组转换结果。因为切换瞬间采样保持电容上还残留着上一个通道的电荷第一次转换是不准的。这个细节很多人不注意结果本地和远程两路读数互相串扰查半天查不出来。4.2 滑动平均与中值滤波的组合用法原始ADC读数一定是有噪声的直接拿来用会看到末位跳变。滤波是必须的但滤波方式要选对。滑动平均适合抑制随机噪声它把最近N次采样求平均噪声标准差会降到原来的1/√N。但它对突发尖峰无能为力一个大的干扰脉冲会把平均值拉偏而且需要N次采样才能恢复。中值滤波适合抑制突发尖峰它把最近N次采样排序取中间值单个尖峰直接被剔除。但它对持续的随机噪声抑制效果一般。我的做法是两者组合先做中值滤波去掉尖峰再做滑动平均平滑随机噪声。窗口大小根据采样率和响应要求来定一般中值取5点平均取8到16点。这样既不会被尖峰带偏读数又足够平滑。// 简化的组合滤波示例伪代码风格 #define MED_WIN 5 #define AVG_WIN 16 int median_filter(int new_sample) { static int buf[MED_WIN]; static int idx 0; buf[idx % MED_WIN] new_sample; // 复制排序取中值 int tmp[MED_WIN]; memcpy(tmp, buf, sizeof(tmp)); sort(tmp, MED_WIN); return tmp[MED_WIN / 2]; } int average_filter(int new_sample) { static long sum 0; static int buf[AVG_WIN]; static int idx 0; sum - buf[idx]; buf[idx] new_sample; sum new_sample; idx (idx 1) % AVG_WIN; return (int)(sum / AVG_WIN); }4.3 本地与远程读数的交叉校验两路温度同时存在其实给了我们一个额外的校验手段。正常情况下本地温度和远程温度的差值应该在合理范围内。如果某一路突然偏离而另一路正常那大概率是那一路的传感器或者线缆出了问题。我一般会设一个差值阈值比如两路温差超过某个范围并持续一段时间就报传感器故障。这个逻辑在HVAC里很实用远程探头如果被老鼠咬断线读数会跳到量程极限或者悬空值交叉校验能第一时间发现。本地传感器如果被板级热源烤到差值也会异常提醒你检查布局。提示交叉校验的阈值不要设得太死因为本地和远程本来就可能存在真实温差比如远程探头在冷水管上本地在控制箱里温差十几度是正常的。阈值要结合具体安装场景来定。5. 实测中踩过的坑从读数跳变到长期漂移5.1 远程读数周期性跳变地环路在作怪最早做的一版远程探头读数每隔几秒就跳一下跳的幅度不大一两度但很有规律。查了传感器、查了滤波都没问题。后来用示波器看远程信号的地发现主板地和探头地之间有几十毫伏的工频波动这个波动叠加到信号上ADC采到的值就跟着跳。解决办法是把远程接收改成差分输入让ADC采的是两根信号线的差值共模的地电位波动被抑制掉。改完之后跳变立刻消失。这个坑让我记住长线测温地电位差是头号敌人单端方案在短线上能用长线上一定要谨慎。5.2 本地读数偏高被LDO烤热的传感器另一版板子本地温度读数总是比实际环境高五六度。用手摸板子传感器附近确实温热。查下来是LDO离传感器太近LDO工作时的热量通过铜皮传导过来。把传感器挪到板子另一侧边缘中间加开槽隔断热传导读数就正常了。这个坑的教训是本地测温的敌人不是电磁干扰是热传导。电磁干扰可以用滤波解决热传导只能靠布局和结构。如果结构已经定了改不了那就只能做软件补偿但补偿的前提是你知道热源和传感器的热阻关系这个标定起来很麻烦不如一开始就布局好。5.3 长期运行后的缓慢漂移有一批产品运行几个月后用户反馈温度读数慢慢偏了。拆回来测传感器本身没问题是连接器和线缆的接触电阻变了。远程探头的连接器在潮湿环境下氧化接触电阻增大如果是电压型输出接触电阻上的压降就导致读数偏低。对策是改用电流型输出或者四线制接法让接触电阻不影响信号。如果成本不允许至少要用镀金的连接器并且在软件上做定期自校准用已知的基准点修正漂移。5.4 采样通道串扰第一组数据必须丢弃前面提过通道切换后第一组数据不准我实际踩过这个坑。本地和远程两路ADC通道挨着切换后如果不丢弃第一次转换两路读数会互相影响表现为一路变化时另一路也跟着微动。丢弃第一组数据后串扰消失。这个细节在数据手册里往往一笔带过但实际影响不小。6. 把方案落到产品上标定、功耗与量产考虑6.1 温度标定单点和两点的取舍量产产品必须考虑标定。温度传感器的初始精度有限要保证出厂一致性标定环节不能省。单点标定是在一个已知温度点比如25℃下测出偏差然后整体平移修正。它简单快速适合对绝对精度要求不高的场景。两点标定是在两个温度点比如0℃和50℃下测偏差同时修正增益和偏移精度更高但产线工序更复杂。我的建议是如果产品用在舒适性空调这种对绝对温度不苛刻的场景单点标定够了如果用在冷链、医药存储这种对温度准确性要求高的场景必须两点甚至多点标定。标定的基准要用经过校准的标准温度源不能用另一颗未经校准的传感器当基准否则误差会传递。6.2 低功耗策略间歇采样与休眠唤醒HVAC控制器很多是长期通电的功耗直接影响运行成本和电源设计。PIC18LF46K22 的低功耗模式配合间歇采样可以把平均功耗压得很低。具体做法是MCU大部分时间处于休眠靠定时器周期性唤醒唤醒后给传感器供电、等稳定、采样、滤波、判断、上报然后再次休眠。采样间隔根据应用需求定舒适性空调几十秒一次足够冷链监控可能几秒一次。传感器不采样时断电既省电又减少自热。注意传感器从断电到上电稳定需要时间这个稳定时间要算进采样周期里。如果稳定时间不够采到的就是没稳定的值读数会偏低或偏高。6.3 量产中的一致性与测试量产时每块板子的本地温度读数应该一致远程通道在接标准电阻或者标准探头时读数也应该一致。产线测试要覆盖这两项把偏差超出范围的板子挑出来。测试工装可以用标准温度源加多路切换一次测多块板子。测试数据要记录方便追溯。如果发现某批次一致性差优先查传感器的批次和焊接工艺其次是标定环节。7. 一些零散但值钱的经验做这类测温方案这些年攒了一些不成体系但很实用的经验一并分享。关于传感器选型不要只看精度指标要看长期稳定性和批次一致性。实验室里精度再高量产时批次差异大标定成本会吃掉利润。关于PCB温度传感器的走线要远离时钟线、开关电源走线这些高频噪声源。如果实在避不开中间加地线隔离。关于软件滤波窗口不是越大越好。窗口太大响应变慢温度已经变了读数还没跟上控制逻辑就会滞后。要在平滑和响应之间找平衡。关于故障判断温度读数超出物理可能范围比如-50℃或者150℃基本可以判定传感器或线路故障。这个判断逻辑要写进固件比交叉校验更直接。关于文档把标定参数、滤波参数、故障阈值这些做成可配置的不同产品型号用不同配置不要硬编码在代码里。后期维护会省很多事。这套 PJ85718DM 加 PIC18LF46K22 的方案说到底就是把测得准和算得动这两件事用合适的器件分工完成。本地和远程两路测温硬件上分开处理软件上统一滤波和校验标定和功耗按产品需求取舍。真正决定成败的往往不是芯片本身而是布局、线缆、滤波、标定这些细节。把这些细节做扎实一颗普通的工程级传感器也能给出让人放心的读数。