基于PIC18F86J15与PJ85718DM的双点温度采集系统设计

发布时间:2026/10/22 12:13:45
基于PIC18F86J15与PJ85718DM的双点温度采集系统设计 做嵌入式测温的项目做了这么多年我越来越觉得真正考验水平的往往不是把传感器接上单片机那么简单而是把信号在复杂的现场环境里稳定地采回来。这次要聊的方案是围绕 PJ85718DM 温度传感模块和 PIC18F86J15 单片机展开的一套双点测温系统专为嵌入式设备机柜和 HVAC供热通风与空调场景设计一个测温点装在控制器本地另一个测点在远端风道或室外机两路温度通过同一颗单片机完成采集、换算、滤波最终经 Modbus RTU 上报给上位机。整套方案从选型、画板到固件调到实测踩过的坑不算少写出来给正在做类似项目的朋友做个参考。1. 项目需求拆解与总体设计思路1.1 本地测温与远程测温的根本差异很多刚入门的朋友容易把多路温度采集想简单了觉得无非是多接几根线、多开几个 ADC 通道的事。但一旦把本地和远程放到一起问题就完全不一样了。本地测温点通常就在主控板旁边走线短可能只有几厘米到几十厘米信号衰减和干扰都相对可控直接分压采样问题不大。远程测温点就麻烦了现场部署的时候传感器到主控板的线缆动不动就是十几米甚至几十米。距离一旦拉长线缆电阻、分布电容、电机和继电器产生的电磁干扰全部会叠加进来。我在现场见过最夸张的情况是远端温度读数在压缩机启动的瞬间整体跳高了接近 3℃这就是典型的干扰耦合进模拟链路的结果。所以设计一开始就要明确两个测温点的物理需求差异不能只用同一套接口电路硬套。1.2 HVAC 场景里的真实约束HVAC 行业的温度监测有几个指标是绕不开的第一是量程。设备机柜内部温度通常在 -10℃ 到 70℃风道温度、室外环境温度则在 -40℃ 到 50℃ 之间都有可能。传感器的量程必须覆盖这个范围并且在整个量程内都不能出现明显非线性畸变。第二是精度。舒适性空调的控制回路一般要求 ±0.5℃用于能效监测和故障诊断的场景可以放宽到 ±1℃但采暖计费、温控阀调节这类用途会更严格。不要觉得 ±0.5℃ 很简单传感器自身误差、分压电阻温漂、ADC 参考电压漂移、自热误差全部叠加上去之后想把最终的测量误差压进这个范围还是需要花点功夫的。第三是响应速度。风道温度传感器要能跟得上气流温度的变化不能滞后太多否则温控环路很容易振荡。第四是环境。HVAC 现场往往有振动、冷凝水、灰尘和大量的电力电子设备这在嵌入式项目里不算友好。1.3 方案架构的选定整个系统的架构定为两路 PJ85718DM 模拟温度传感模块分别布置在本地和远端通过屏蔽双绞线引入主控板PIC18F86J15 片上集成了 12 位 ADC直接完成两路模拟信号的采样固件里做滤波、线性化、校准补偿再通过 EUSART 走 Modbus RTU 协议上报。这样做的好处一是 BOM 简单不用外扩 ADC 芯片二是一颗单片机就把采样、运算、通信全包了后期维护也方便。2. 核心器件选型两块关键芯片的组合逻辑2.1 PJ85718DM 传感模块的定位分析PJ85718DM 在实际项目中是一个非常典型的模拟温度传感方案内部主要由高精度 NTC 热敏电阻和预置的分压网络组成对外输出一个与温度相关的模拟电压信号。这类模块在 HVAC 行业用得极多原因很实在便宜、成熟、替换方便现场工程师基本不需要专门培训就能接线维护。NTC 热敏电阻的典型规格是 25℃ 时标称阻值 10kΩB 值 3950。这个参数组合在 -20℃ 到 85℃ 区间内有不错的灵敏度尤其是 0℃ 到 50℃ 这个 HVAC 最关心的范围内阻值变化曲线足够陡峭配合高分辨率 ADC 可以获得很好的分辨力。但它也不是没有缺点。NTC 的阻值-温度曲线是强非线性的低温端变化剧烈、高温端变得平缓必须做线性化处理。另外 NTC 的一致性受制造工艺影响同一批次不同个体的阻值偏差可能有 ±1% 到 ±3%折合温度误差就是 0.3℃ 到 1℃ 的量级。所以量产项目必须留标定环节这个后面细说。2.2 PIC18F86J15 为什么够用PIC18F86J15 是 Microchip 高集成度 8 位单片机家族里的一个典型型号选择它主要看中四点。第一是 ADC。这颗芯片内部的 ADC 是 12 位分辨率这在 8 位机里是比较难得的配置。很多同类产品只有 10 位 ADC1 LSB 对应的电压是 5V/1024≈4.88mV用来测 NTC 分压可能只能分辨 0.1℃ 左右。而 12 位 ADC 配合 2.048V 参考电压1 LSB 正好是 0.5mV同样的温度区间分辨力能到 0.01℃ 级别这对精度和稳定性都有质的提升。第二是存储和外设。64KB Flash、3936 字节 SRAM、1KB 数据 EEPROM对双路温度采集加 Modbus 协议栈来说绰绰有余。EEPROM 还能用来保存标定系数和故障历史不用额外挂存储芯片。第三是通信接口。EUSART 硬件串口的波特率误差控制得不错跑 9600bps 和 19200bps 的 Modbus RTU 都很稳而且支持自动波特率检测调试的时候好说话。第四是功耗。J 系列带 nanoWatt 技术休眠电流能做到 1µA 以下在电池供电的无线室内温控器场景里也能撑得住。我这次虽然是主供电方案但低功耗能力给后续产品迭代留了余地。2.3 对比其他方案的取舍逻辑做方案的时候也考虑过外扩 ADS1115 这颗 16 位 ADC以及直接上数字温度传感器。对比了一圈之后还是决定用内部 ADC。先说 ADS111516 位分辨力确实诱人但它需要 I2C 通信采样率只有 860SPS而且要额外占 PCB 面积和 BOM 成本。双路温度采集的刷新率要求本来就只有 1Hz 到 10Hz12 位分辨率完全够用没必要为 16 位去买单。更重要的是当现场干扰大的时候16 位 ADC 的低位数据基本都被噪声淹没实际有效位数可能还不如 12 位 ADC 加合理的滤波和保护。再说 DS18B20 这类 1-Wire 数字传感器。数字传输的抗干扰理论上更好但实际部署有几个麻烦1-Wire 总线上每个传感器都有唯一 ROM 码多颗挂同一根总线时要处理寻址协议时序对延时极其敏感远程走线一旦线缆过长、寄生电容过大时序就乱了。而且数字传感器出厂标定参数是固定的后期想做现场二次标定反而麻烦。对于 HVAC 的远程测温点屏蔽双绞线加模拟信号传输配合主控端做滤波是工程上被验证过无数次的稳妥做法。3. 硬件电路与信号链路设计3.1 本地测温点的直接采样电路本地测温点离主控板近电路可以做得很干净。PJ85718DM 模块输出的模拟电压直接经过一级 RC 低通滤波进入 ADC 引脚。关键参数参考电压用 2.048V模块内部等效的 NTC 分压网络在 25℃ 时输出大概 1.024V0℃ 时升高到 1.5V 以上50℃ 时回落到 0.55V 左右。整个动态范围都落在 2.048V 参考电压之内不需要额外做电平搬移。RC 滤波器的截止频率我建议压在 1kHz 左右也就是串联 1kΩ 电阻、并联 100nF 电容。这样既能滤掉高频辐射干扰又不影响温度的缓慢变化。注意必须使用 C0G/NP0 型电容X5R/X7R 陶瓷电容在直流偏压下容值会下降滤波效果会打折扣。ADC 引脚前还要加一级输入保护串联一个 330Ω 到 1kΩ 的电阻并在 ADC 引脚对地放一个 1nF 电容必要时加一小对肖特基二极管做钳位防止传感器线缆意外碰到高压时打坏 MCU。3.2 远程测温点的长线传输处理远程测温就得上点手段了。几十米的线缆主要问题有三个线阻带来的分压误差、共模干扰、以及线缆电感在高频噪声下的拾取。我的做法是给远端传感器单独准备一个恒流激励或者至少是低阻抗的驱动让信号以更高的电平幅度往主控端传。如果 PJ85718DM 模块是纯电阻输出建议在模块端就加一级电压跟随/缓冲降低输出阻抗。如果模块不自带缓冲那就改用三线制接法两根线给传感器供电和采样一根线单独用来反馈参考电位然后在主控端用仪表放大器做差分采样这样可以抵消掉线上压降。如果传输距离超过 50 米最靠谱的方案是 4-20mA 电流环。把温度换算成电流电缆电阻对电流信号几乎没有影响而且抗干扰能力极强。PIC18F86J15 那边只需要用一只精密采样电阻把电流还原成电压再进 ADC。这个方案要额外加一颗变送器芯片成本会高一些但对工业 HVAC 项目来说可靠性优先这点成本花得值。屏蔽双绞线的屏蔽层必须单端接地而且只在主控端接地。如果两端都接地屏蔽层就会变成地环路的一部分反而把干扰送进来。3.3 参考电压、供电与 PCB 布局细节PIC18F86J15 的 ADC 参考电压可以直接用芯片内部的固定电压参考FVR模块输出 2.048V。内部参考的好处是稳定、不占引脚坏处是驱动能力有限只能给 ADC 和分压网络提供参考不能同时给外部负载供电。供电上模拟地和数字地要分开最后在芯片下方的焊盘处单点汇合。ADC 的 AVdd 引脚必须单独加 LC 滤波用一个 10µH 电感和 1µF 电容组成一小段干净的模拟电源岛。我实测过不做这个滤波的话板上 DC-DC 的开关噪声会直接耦合进 ADC 读数表现为十几到几十个 LSB 的随机跳动。PCB 布局还有一个小细节两条传感器信号线尽量平行走中间用地线隔离不要让它们和继电器驱动线、通信线并行走很长距离。如果实在避不开就要在信号层下面挖出完整的参考地平面靠地平面来屏蔽。4. 固件实现与温度换算4.1 12 位 ADC 的通道管理与采样策略ADC 驱动我用的是顺序轮询加自动转换的模式代码结构比较清晰。以下代码基于 XC8 编译器寄存器名以 PIC18F86J15 数据手册为准。// 内部固定电压参考输出 2.048V FVRCON 0x81; // FVREN1, FVRS[1:0]01 // 使能 AN0、AN1 为模拟输入 ANCON0 0x03; // ADC 配置12 位分辨率时钟 FOSC/32 ADCON1 0x40; ADCON2 0x00; ADCON0 0x01; // 开启 ADC 模块ADC 采样要注意一个关键点每次切换通道之后必须给采样电容足够的时间充电。12 位 ADC 的采样时间如果太短高档位的阻性源会影响测量精度。我一般手动设置采样时间和转换时钟不依赖默认值。4.2 从电压到温度NTC 线性化与查表插值ADC 拿到的是 12 位数字量要变成温度中间有两步换算。第一步把数字量还原成电压。12 位分辨率下2.048V 参考电压的 1 LSB 正好是 0.5mV这个整数的换算关系特别舒服float voltage (float)adc_raw * 2.048f / 4096.0f;第二步把电压还原成 NTC 阻值再用温度-阻值关系算温度。分压网络的关系是 Vout Vref * Rntc / (Rseries Rntc)反解出 Rntcfloat NTC_Resistance(float vref, float series_r, float vout) { if (vout vref) return 0.0f; // 防除零 return series_r * vout / (vref - vout); }第三步阻值换算温度。推荐用 B 值方程工程上足够准确float NTC_ToCelsius(float resistance) { const float T0_K 298.15f; // 25℃ const float R0 10000.0f; // 25℃ 标称阻值 const float B 3950.0f; // 传感器 B 值 float t_inv 1.0f / T0_K logf(resistance / R0) / B; return (1.0f / t_inv) - 273.15f; }如果对精度要求更高可以用 Steinhart-Hart 方程B 值方程在宽量程下的拟合误差会被放大而 S-H 方程用三个系数拟合在 -20℃ 到 85℃ 全程都能控制在 0.1℃ 以内#define A_COEF 1.1293e-3f #define B_COEF 2.3410e-4f #define C_COEF 8.7674e-8f float NTC_ToCelsius_SH(float resistance) { float lnr logf(resistance); float inv A_COEF B_COEF * lnr C_COEF * lnr * lnr * lnr; return (1.0f / inv) - 273.15f; }B 值方程适合开发阶段快速验证量产固件里我建议直接把 S-H 系数做进查表逻辑再把整条阻值-温度曲线固化成 256 项查表加线性插值这样 MCU 上可以不用浮点库跑对数运算速度也快得多。4.3 抗干扰滤波与通信上报固件层面不做事后滤波的话前面硬件做的防护就白费了。我的滤波策略是中值滤波 滑动平均两层组合。每次采集 16 个样本去掉最大值和最小值剩下的取平均。这样既能干掉脉冲性干扰又能平滑掉传感器自身的热噪声。#define SAMPLE_COUNT 16 uint16_t filtered_sample(void) { uint16_t buf[SAMPLE_COUNT]; uint8_t i, min_i 0, max_i 0; for (i 0; i SAMPLE_COUNT; i) { buf[i] read_adc(); __delay_us(200); } for (i 1; i SAMPLE_COUNT; i) { if (buf[i] buf[min_i]) min_i i; if (buf[i] buf[max_i]) max_i i; } uint32_t sum 0; for (i 0; i SAMPLE_COUNT; i) { if (i min_i || i max_i) continue; sum buf[i]; } return (uint16_t)(sum / (SAMPLE_COUNT - 2)); }通信方面用 Modbus RTU 比较省心寄存器表定义如下寄存器地址内容数据类型说明40001本地温度int16温度×1002350 表示 23.50℃40002远端温度int16温度×10040003状态字uint16bit0传感器断线bit1传感器短路40004固件版本uint16低字节为主版本高字节为次版本刷新周期我设成 500ms 一次Modbus 响应超时 200ms。不要设太快否则上位机的轮询和现场总线的实时性都会有问题。5. 标定流程与实测验证5.1 两点标定法及系数存储NTC 的一致性偏差决定了成品必须标定。工程上最实用的是两点标定在 0℃ 和 50℃ 两个标准温度点分别记录 ADC 原始值计算出增益修正系数和偏移修正系数存进 EEPROM。0℃ 可以用冰水混合物实现标准大气压下稳定在 0.0℃50℃ 用恒温水浴或者高精度的干体炉。标定时先让传感器浸入标准温度等待读数稳定至少 5 分钟记录原始计算温度 t1 和 t2然后计算k (50.0 - 0.0) / (t2 - t1) b 0.0 - k * t1 最终温度 k * 原始温度 b标定系数用浮点存进 EEPROM 后固件每次上电读取加载到换算链路尾部。5.2 实测数据比对标定完成后的实测数据拿标准的铂电阻温度计做参照结果如下铂电阻参考值标定前读数标定后读数标定后误差0.00℃0.83℃0.05℃0.05℃15.00℃15.70℃14.97℃-0.03℃25.00℃25.58℃24.98℃-0.02℃35.00℃35.49℃35.03℃0.03℃50.00℃51.10℃49.96℃-0.04℃整个 0℃ 到 50℃ 区间内标定后的最大偏差在 ±0.05℃ 以内这个结果对于 HVAC 应用来说已经相当优秀了。注意这个结果是在实验室条件下得到的现场环境还有干扰和温漂实际整机精度能做到 ±0.3℃ 就已经非常够用。5.3 长期稳定性观察连续跑了 72 小时两路温度读数都很稳定没有出现漂移超过 0.1℃ 的情况。其中有一个值得记录的现象远程测温点在压缩机启停的瞬间读数偶尔会有 0.2℃ 左右的波动但滤波后很快恢复不影响控制逻辑。标定系数在 EEPROM 里保存得很稳断电重启后读数恢复一致没有出现参数丢失的问题。6. 现场问题排查与避坑实录6.1 读数跳变与共地噪声现场遇到最多的现象是温度值无规律跳变尤其柜内有变频器或继电器动作时。排查顺序先用示波器看 ADC 引脚波形再用万用表确认电源纹波最后检查地线。多数情况下都是共地不良导致的。解决办法是把传感器信号线的屏蔽层只接主控地把模拟地和数字地在 ADC 附近单点汇合再检查所有接插件的接地端子是否牢固。还有一个容易被忽略的坑传感器线缆和动力线走同一个线槽一旦长期摩擦磨损绝缘破损后就会出现间歇性短路读数直接掉到满量程。现场布线时物理隔离千万不能省。6.2 远程线缆压降和干扰一开始远程测温直接用两线制分压结果 30 米线缆带来了差不多 0.8℃ 的误差——线阻参与了分压。把 PJ85718DM 模块改成三线制接法、差分采样之后这个误差降到了 0.05℃ 以下。判断是不是线阻问题有个土办法在传感器端接一只精密电阻代替传感器如果主控端读数与理论计算值不一致偏差部分就是线阻造成的。算出等效线阻后可以在固件里做补偿但最根本的解法还是三线制或 4-20mA 电流环。6.3 传感器自热误差NTC 是靠自身流过电流来测量的电流会在传感器上产生焦耳热导致读数偏高。对于 10kΩ NTC持续 1mA 激励电流时自热可能造成 0.1℃ 到 0.5℃ 的误差具体取决于传感器的封装和散热条件。降低自热最有效的方法是降低激励电流和功耗或者用间歇采样只在采样的几十毫秒内给传感器供电其余时间断开这样平均功耗大幅下降。我实测把激励电流从 1mA 降到 0.2mA 后静止空气中的自热误差从 0.4℃ 降到了 0.1℃ 以内。6.4 标定漂移与老化处理NTC 在长期高温高湿环境下会缓慢老化阻值可能漂移。所以批量产品建议在出厂前做一次高温老化筛选比如 85℃ 保持 48 小时然后重新标定。现场使用一两年后如果发现两个测温点在相同环境下的读数差逐渐拉大多半是某一颗 NTC 老化了这时候重新做一次两点标定或者直接换传感器模块成本都不高。量产时还要注意传感器模块的批次一致性。不同批次采购的 PJ85718DMB 值和标称阻值可能略有差异固件里预留的标定系数结构最好支持一字节的批次号字段这样现场维护时能快速判断两台设备的标定参数是否来自同一批次。最后补充一点个人体会这套方案做完之后给我的最大感触是温度采集这种看起来基础到不行的功能真正想在 HVAC 现场环境里做稳比想象中要费心思得多。选型时多看一眼 ADC 的位数和参考电压画板时多花十分钟处理模拟地的走线固件里多写二十行滤波逻辑现场就能少跑好几趟。后续如果要扩展可以在这套架构上直接加无线模块把两路温度数据通过低功耗蓝牙或者 Sub-1G 上传到云平台实现远程监控和预警。再进一步可以引入多点测温用同样一颗 PIC18F86J15 把 8 路甚至更多路的 NTC 接进来固件里的通道管理改成自动扫描模式就行。这个方向留给下一个项目继续折腾了。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询