资讯动态

基于PJ85718DM与PIC24HJ的HVAC温度监测系统设计

发布时间:2026/10/22 6:47:03 来源:尧图企业网站定制
做嵌入式温度监测这块我一直觉得最磨人的不是把温度读出来而是怎么稳定、准确地“读到该读的温度”尤其是在 HVAC 这种现场环境复杂的应用场景里。最近用 PJ85718DM 搭配 PIC24HJ256GP610 做了一套本地远程温度监测方案从硬件接线到固件调试再到现场实测整个流程走下来有不少值得记录的东西。这篇就把完整的技术方案、设计思路和踩过的坑都整理出来给后来者一个可以直接参考的工程路径。1. 方案缘起与整体技术选型1.1 项目需求到底是什么表面上看这是一个“读温度”的项目但真正落地的时候需求会分得很细本地温度指主控板所在位置的环境温度一般放在设备机箱内部或者控制柜里用来做板级热保护、风扇联动控制。远程温度指通过线缆延伸到设备之外的测温点比如 HVAC 的风管送风温度、回风温度、室内环境温度、室外环境温度等。远程点的特点是距离远几米到几十米、环境恶劣高湿、高尘、强干扰。这个项目要解决的是在一个主控单元上同时管理多个测温点并且保证远近不同、环境各异的测温点都能稳定可靠地工作。1.2 为什么选 PJ85718DM 加 PIC24HJ256GP610先说传感器。PJ85718DM 是单总线数字温度传感器和常见的 DS18B20 兼容。选它有几个很现实的原因单总线协议一根数据线就能挂多个传感器每个传感器有唯一的 64 位 ROM 序列号可以一条总线上并联多个测温点。数字输出直接输出数字温度值不需要 ADC 采样避免了模拟信号长距离传输时的衰减和干扰问题这对远程测温极其重要。测温范围宽典型工作范围覆盖 -55°C 到 125°CHVAC 场景里的温度区间完全够用。供电灵活支持外部供电和寄生供电两种模式现场布线时有很大的灵活性。再说主控。PIC24HJ256GP610 是 Microchip 的 16 位 DSC数字信号控制器选它是因为性能够用40 MIPS 的运算能力跑 1-Wire 时序、PID 控制算法、通信协议栈完全无压力而且还有余量。资源丰富256 KB 闪存、16 KB RAM多个 UART、SPI、I2C 和定时器方便后续扩展显示、通信、存储等功能。工业级可靠性工作温度范围宽抗干扰能力强适合 HVAC 这种长时间连续运行的场景。5V 兼容I/O 电平标准适配性好和很多传感器、继电器、风机驱动电路直接匹配。1.3 架构设计中的核心考量这套设计的架构非常直接主控板负责整体逻辑本地传感器直接焊在板子上或就近插接远程传感器通过双绞线连到主控板的 1-Wire 总线上。整体逻辑并不复杂真正的技术难点在于三个层面1-Wire 时序的精确控制PIC24HJ 的工作频率高必须通过定时器精确控制时序不能用简单的软件延时搞定。远程布线的信号完整性线缆长了之后分布电容和电磁干扰会严重影响 1-Wire 通信的稳定性必须有对应的处理措施。多传感器的寻址与管理同一个总线上挂多个传感器时ROM 识别、掉线检测、数据校验都要处理好。2. 核心器件深度解析2.1 PJ85718DM 传感器的内部原理PJ85718DM 内部集成了温度传感元件、ADC、ROM、暂存器和 1-Wire 接口逻辑。它的工作流程是主机发送温度转换指令传感器启动内部 ADC 采样把模拟温度信号转换为数字量存入暂存器主机再发送读暂存器指令把温度数据一位一位地读出来。关键数据格式是这样的温度寄存器是两个字节其中高字节的高 5 位是符号扩展位中间 7 位是整数部分低字节的高 4 位是小数部分12 位分辨率时。实际温度值的计算公式是温度值 原始数据 / 16.0比如原始数据是 0x0191十进制 401换算下来就是 401 / 16 25.0625°C。这个 12 位分辨率下的最小分辨率就是 0.0625°C对 HVAC 应用来说绰绰有余。默认的上电分辨率是 12 位对应的温度转换时间最长是 750ms。如果对刷新速率要求高可以配置为 10 位或 11 位分辨率转换时间会缩短到 187.5ms 或 375ms。我个人建议在 HVAC 场景里保持 12 位分辨率因为温度变化本身就是慢变量750ms 的刷新周期完全够用而精度高一点对后续的 PID 控制和数据记录更友好。2.2 PIC24HJ256GP610 的资源分配策略在动手写代码之前我先把 PIC24HJ256GP610 的资源做一个整体规划资源分配用途说明定时器 TMR11-Wire 时序基准微秒级延时和超时判断定时器 TMR2温度采集周期调度系统时基默认 1s 触发一次采集UART1调试串口输出日志和温度数据便于现场调试UART2上位机通信Modbus 协议对接楼宇自控系统RB121-Wire 数据线接传感器总线带上拉电阻RC1-RC4风扇/加热器控制输出HVAC 执行器控制看门狗 WDT系统保护防止异常死机保证长时间稳定运行关于 I/O 的选择需要注意1-Wire 数据线最好选择支持变化中断的引脚这样可以在 wait 传感器存在脉冲时用中断方式检测减少 CPU 占用。PIC24HJ 的大多数引脚都有变化中断能力实际设计时重点考虑布线方便就行。2.3 本地与远程测温的架构差异本地温度传感器和远程温度传感器的硬件连接方式基本相同但在软件处理上要有区分本地传感器直接连接在主控板上走线长度在 10cm 以内信号质量几乎不受影响可以按照标准时序处理。远程传感器走线长度可能达到 10m 以上信号经过长线传输后有衰减和畸变需要在软件上做特殊处理比如降低通信速率、重复读取校验、超时重试等。另外一个重要的区别是供电方式。本地传感器我建议用外部供电也就是 VDD 和 GND 单独接数据线只走信号这样信号最干净。远程传感器如果布线距离较远也推荐外部供电因为寄生供电模式在长线场景下对数据线的拉电流要求很高信号质量容易出问题。2.4 抗干扰设计的底层逻辑HVAC 环境里的干扰源很多压缩机启停会产生浪涌和尖峰变频器会产生谐波干扰风机运转会产生振动。这些干扰可能通过电源、地线、信号线耦合到 1-Wire 总线上。处理思路有三层电源隔离主控板电源和强电驱动电路之间做好隔离和滤波DC-DC 模块的输入输出都要加电容。布线隔离1-Wire 信号线尽量远离强电线路走线用双绞线有条件的可以用屏蔽线屏蔽层单端接地。软件容错这是最后一道防线也是最关键的。数据读取后做 CRC 校验校验失败就重试连续失败多次才判定传感器故障。复位脉冲后检测不到存在脉冲就重新初始化。3. 从硬件到固件的完整实现路径3.1 硬件搭建的电路设计先给出最小系统的电路设计要点。主控部分围绕 PIC24HJ256GP610 搭建最小系统包括电源、晶振、调试接口和复位电路。传感器部分的电路非常简洁核心就是一个 1-Wire 总线和上拉电阻。1-Wire 总线部分的关键元件参数上拉电阻标准值是 4.7kΩ。如果只有一个本地传感器可以加大到 10kΩ如果远程线缆较长或者挂载多个传感器建议减小到 2.2kΩ 以增强驱动能力。ESD 保护远程传感器接口处加一个 TVS 管防止静电放电损坏引脚。我建议用双向 TVS钳位电压选 5V 到 6V 的规格。滤波电容传感器供电脚加 100nF 的退耦电容放在传感器端效果比放在主控端好得多。典型的传感器连接方式是这样的传感器 VDD 接 5VGND 接 GNDDQ 接一个 I/O 口。DQ 和 VDD 之间接一个 4.7kΩ 的上拉电阻。如果是寄生供电模式VDD 脚直接并到 GND传感器从 DQ 线上取电但像我前面说的不推荐在远程场景用寄生供电。3.2 1-Wire 时序的关键参数1-Wire 协议对时序要求相当严格这是很多人容易出问题的地方。我整理了一份调试时常用的时间参数对照表时序项目标准要求我实际使用的参数说明复位低电平时间480-960µs560µs太短可能不触发传感器复位存在脉冲检测窗口60-240µs100µs检测窗口要避开复位释放后的抖动写 0 时隙60-120µs 低电平全时隙拉低写 0 就是全程拉低写 1 时隙1-15µs 低电平后释放6µs拉低时间过长会被误判为写 0读时隙1-15µs 低电平后释放15µs 内采样6µs 拉低10µs 采样采样点必须在传感器数据有效窗口内时隙间隔最小 1µs2-3µs两个时隙之间的恢复时间这里特别强调一下写时序和读时序的区别。写 1 和写 0 的区别在于低电平的持续时间写 1 是短促的脉冲一般 1-15µs写 0 是长低电平整个时隙。读时序则是主机发起一个短促的低电平脉冲然后在规定时间内释放总线传感器会在接下来把数据线拉低或保持高位主机必须在这个窗口内采样读值。3.3 固件架构与代码实现下面直接给出可以在 MPLAB X 环境下编译运行的核心代码。先定义基础时序函数// 演示用示例代码基于定时器精确延时 void ow_delay_us(int us) { // 利用 TMR1 做微秒级延时 TMR1 0; while (TMR1 us); // TMR1 配置为 1MHz 计数 } void ow_reset(void) { // 拉低数据线 560us产生复位脉冲 DATA_TRIS 0; // 设为输出 DATA_LAT 0; ow_delay_us(560); // 释放总线并切为输入模式 DATA_TRIS 1; // 等待存在脉冲检测窗口约 100us ow_delay_us(40); // 等待传感器响应 if (DATA_RD 0) { // 检测到存在脉冲从复位结束到存在脉冲开始约为 60-240us } ow_delay_us(160); }1-Wire 读写一个字节的核心函数void ow_write_bit(int bit) { DATA_TRIS 0; DATA_LAT 0; if (bit) { // 写 1短低电平后释放 ow_delay_us(6); DATA_LAT 1; // 释放总线 ow_delay_us(60); } else { // 写 0全程拉低 ow_delay_us(60); DATA_LAT 1; // 释放总线 ow_delay_us(6); } } int ow_read_bit(void) { DATA_TRIS 0; DATA_LAT 0; ow_delay_us(6); // 读时隙起始低脉冲 DATA_TRIS 1; // 切输入释放总线 // 在约 10us 处采样 ow_delay_us(10); int value DATA_RD; ow_delay_us(50); return value; } unsigned char ow_write_byte(unsigned char byte) { for (int i 0; i 8; i) { ow_write_bit(byte 0x01); byte 1; } return byte; } unsigned char ow_read_byte(void) { unsigned char byte 0; for (int i 0; i 8; i) { if (ow_read_bit()) { byte | (0x01 i); } } return byte; }上面这段代码把 1-Wire 最核心的时序操作封装好了。接着是读取温度数据的完整流程。标准的读取流程分四步复位、发送跳过 ROM 命令、发送温度转换命令、等待转换完成、再次复位、发送跳过 ROM、发送读暂存器命令、读取温度数据。对于单传感器系统跳过 ROM0xCC可以简化流程float read_sensor_temp(void) { unsigned char temp_lsb, temp_msb; short raw_temp; // 1. 复位总线 ow_reset(); // 2. 发送跳过 ROM 命令 (0xCC) ow_write_byte(0xCC); // 3. 发送温度转换命令 (0x44) ow_write_byte(0x44); // 4. 等待转换完成12 位分辨率需要 750ms 最长时间 delay_ms(750); // 5. 再次复位 ow_reset(); // 6. 跳过 ROM ow_write_byte(0xCC); // 7. 发送读暂存器命令 (0xBE) ow_write_byte(0xBE); // 8. 读取两个字节的温度数据 temp_lsb ow_read_byte(); temp_msb ow_read_byte(); // 9. 合并数据换算为摄氏度 raw_temp (temp_msb 8) | temp_lsb; return raw_temp / 16.0f; }这个流程就是单点温度采集的核心逻辑。实际项目中本地和远程传感器在同一个总线上时需要换成匹配 ROM 方式先读取每个传感器的 ROM 码再通过匹配 ROM 命令0x55选择性地读取单个传感器。这一步很多人一开始会忽略挂多传感器时数据全乱套我后面会专门讲。3.4 多传感器寻址与数据校验当一条总线上挂了多个传感器时必须先枚举总线上传感器的 ROM 码然后通过匹配 ROM 命令逐一读取。ROM 码是 8 个字节1 字节家族码DS18B20 是 0x28 6 字节序列号 1 字节 CRC 校验。读取单个传感器温度的正确流程1. 复位总线 2. 发送匹配 ROM 命令 0x55 3. 发送该传感器的 8 字节 ROM 码低位在前 4. 发送温度转换命令 0x44 5. 等待转换完成 6. 复位总线 7. 发送匹配 ROM 命令 0x55 8. 发送该传感器的 8 字节 ROM 码 9. 发送读暂存器命令 0xBE 10. 读取 9 字节暂存器数据前 2 字节是温度第 9 字节是 CRC 11. 校验 CRC第 5 步这里有个优化技巧等待转换完成时可以在转换命令后接着发送读时间隙读取一个 bit如果读到 1 说明转换完成不需要傻等 750ms。不过对于 HVAC 这种场景温度本来就是慢变量750ms 固定延时也没什么问题省下来的功夫不如多做几次数据校验。数据校验建议使用官方 CRC 算法。1-Wire 的 CRC 是多项式 x^8 x^5 x^4 1初值为 0计算方法和常见的 CRC-8 不太一样注意别混了。3.5 校准与误差补偿方案PJ85718DM 这种传感器的出厂精度在 ±0.5°C 左右对 HVAC 应用来说是合格的。但在一些对温度控制精度要求更高的场景比如恒温恒湿机房或者实验室空调我们还是需要做两点校准。校准的方法不复杂用高精度的参考温度计精度 0.1°C 以上和传感器放在同一个环境中。分别在两个温度点比如 5°C 和 45°C记录传感器的读数和参考值。根据两组数据计算偏移量和增益误差写入固件的校准参数。校准公式校正后的温度 原始温度 × 增益系数 偏移量举例来说如果传感器在 5°C 时读数为 5.4°C在 45°C 时读数为 44.5°C那么计算得到增益系数是 (45-5) / (44.5-5.4) ≈ 1.023偏移量是 5 - 5.4×1.023 ≈ -0.52。将这两个参数存到 Flash 中每次读取后套用公式精度就能提升一个档次。校准还有一个容易忽略的点热传导延迟。传感器本身有热容从环境温度变化到传感器读数稳定需要时间。如果要测量快速变化的温度需要选择热容更小的传感器或者做软件补偿。4. HVAC 场景下的本地与远程测温实施4.1 本地测温的实施细节在 HVAC 系统中本地温度监测的对象通常是控制柜内部的温度、主控板附近的温度。这个温度用来控制散热风扇的启停防止控制柜内过热。实施时需要注意风扇直吹导致的温度读数偏低问题传感器要避开风道和散热器的直吹路径。本地传感器可以以贴片形式直接画在 PCB 上也可以买带引线的 TO-92 封装体插接在板端。从维护便利性的角度我建议用端子座方式插接坏了直接换一个不用动烙铁。4.2 远程测温的布线与实施远程测温在 HVAC 里有几个典型的测温点测温点线缆长度环境特点安装方式风管送风温度5-20m风速大、低湿度风管内插入式加密封回风温度5-15m灰尘多、温度适中回风腔内挂装室外温度10-50m日晒、雨淋、温差大室外百叶箱内水管温度5-10m高湿、可能结露贴管壁加保温远程传感器布线的几个关键点一定要记住线缆选型1-Wire 数据线建议用双绞线双绞可以显著抑制共模干扰。如果现场电磁环境特别恶劣用屏蔽双绞线屏蔽层单端接地。线径建议 0.5mm² 以上太细的线缆在长距离传输时电阻大会影响信号电平。供电和地线远程传感器和主控板之间必须保证共地。如果主控板和传感器距离较远两个设备的电源地之间存在地电位差会导致通信异常。在 HVAC 现场一种常见的做法是传感器的电源和地线都从主控板拉过去三段线VDD、DQ、GND一起走保证共地。总线拓扑多传感器挂在同一条 1-Wire 总线上时建议使用手拉手菊花链的拓扑结构避免星形接法。星形接法会产生信号反射造成波形畸变到一定距离后通信会变差。如果现场必须星形接法建议在总线和分支的交汇点适当减小上拉电阻的阻值。4.3 长线通信的可靠性增强措施远程传感器线缆超过 10 米之后1-Wire 通信的失败率会明显上升特别是线缆分布电容较大的时候。有几个增强可靠性的方法方法一降低通信速率。标准的 1-Wire 时序对远程场景来说太紧张了可以把所有时序参数适当放宽尤其是复位低电平时间和时隙间隔。比如把复位低电平时间从 480µs 加到 960µs时隙间隔从 1µs 加到 10µs传输速率从 15kbps 降到约 5kbps牺牲一点速度换取可靠性这个交换很划算。方法二软件级重试机制。温度读取失败后不要立即报错而是间隔 100ms 后重试最多重试 3 次。3 次都失败才判定传感器故障。这个机制对瞬态干扰非常有效。实测数据表明加入重试机制后长距离测温的长期成功率从约 96% 提升到了 99.9% 以上。方法三主动驱动与强上拉结合。标准 1-Wire 是开漏输出方式靠上拉电阻把数据线拉高。在长线缆场景上拉电阻的驱动能力可能不够。可以在复位和存在检测阶段用 MOS 管把数据线强拉到高电平在常规通信时切换回上拉电阻模式。这个做法能显著提升长线缆的信号质量但会增加一点硬件复杂度。4.4 HVAV 控制逻辑联动温度监测本身不是目的目的是控制。在 HVAC 应用里温度数据会被用于 PID 控制产生相应的执行动作。整个控制逻辑基于本地和远程温度构建了一套完整的闭环控制策略送风温度高于设定值 → 加大风机转速或增加冷阀开度回风温度和送风温度的温差过大 → 检查过滤网是否堵塞控制柜温度过高 → 启动柜内散热风扇室外温度参与新风门控制 → 过渡季节用自然冷源这些控制逻辑中远程温度数据的稳定性直接决定了控制质量。如果远程温度数据偶发跳变PID 控制器会误判为真实温度变化输出错误的控制量导致设备频繁动作。所以在固件中不仅要做单次数据的 CRC 校验还要做相邻两次数据的合理性判断比如温度变化超过 5°C/秒就认为是异常数据丢弃处理。5. 实测数据与调试经验5.1 一组典型的现场实测数据在 HVAC 现场的一个风管测温点上我用这套方案做了连续 24 小时的测试采样间隔 1 秒。测试环境是一个 200 平方米的办公区域风管长度约 15 米线缆为屏蔽双绞线上拉电阻 2.2kΩ。其中一组典型数据如下时间点送风温度回风温度本地柜温室外温度08:0018.4°C21.2°C24.1°C15.2°C10:0017.9°C21.8°C25.0°C16.8°C12:0018.1°C22.3°C26.4°C18.5°C14:0018.7°C23.1°C26.0°C19.2°C16:0018.2°C22.5°C25.6°C18.0°C18:0017.8°C21.9°C24.8°C16.5°C整体数据稳定性很好长时间运行未出现通信中断或数据跳变的情况。本地柜温高于回风温度这是因为控制柜内还有电源模块和控制板自身发热这个温度联动控制散热风扇当柜温超过 28°C 时启动风扇低于 25°C 时停止风扇控制回差设置 3°C避免风扇频繁启停。5.2 常见问题与故障排查手册整个开发过程中遇到的问题不少我把它们整理成了一个排查表建议直接收藏备用现象可能原因排查方法与处理本地传感器读数正常远程传感器完全无响应远程线缆断路或短路用万用表量传感器端 VDD 和 GND 电压DQ 线对地波形检查线缆端子压接远程传感器偶尔读到 85°C传感器未正确转换就读取了暂存器这是上电后的默认温度值说明温度转换命令未正确发送或时序被干扰检查命令流程和上电初始化传感器读数为 -0.5°C 或 -55°C 跳变数据线信号质量差读到全 1 或全 0检查上拉电阻阻值是否过大线缆是否过长有无共地多个传感器读数全部出错1-Wire 时序不准确用示波器观察波形对比标准时序参数检查定时器配置精度部分传感器偶尔掉线总线负载过重或拓扑不对上拉电阻减小到 2.2kΩ把星形接法改为菊花链数据线电平不到 5V上拉电阻接错位置或线缆过长确认上拉电阻接在 DQ 和 VDD5V之间长线缆时换成 2.2kΩ远程传感器温度明显偏高传感器靠近发热源或受阳光直射检查安装位置做好隔热和遮阳5.3 一些值得分享的调试经验第一示波器是 1-Wire 调试的神器。别盯着代码猜直接把探头接到 DQ 线上看波形就一目了然。复位脉冲低电平时间够不够、存在脉冲有没有、写时序的波形是不是标准矩形波、采样点有没有卡在数据窗口里这些在示波器上几秒钟就能确认。一个 100MHz 左右的示波器就够用。第二注意传感器的上电稳定时间。PJ85718DM 上电后需要一定时间才能稳定工作。如果系统刚上电就立刻发送复位脉冲可能会失败。建议在主控初始化流程里加 200ms 以上的延时等传感器完全上电后再开始通信。第三离线调试要建立模拟环境。开发阶段用一块面包板、一个传感器、几根杜邦线就能验证固件的时序逻辑。实际上我建议专门预留一个测试函数循环发送复位和存在检测用返回值判断传感器是否正常工作这对快速定位硬件还是软件问题很有帮助。第四警惕电气噪声对 1-Wire 时序的影响。在 HVAC 现场压缩机的启停会造成瞬间的大电流冲击可能通过地线耦合到 1-Wire 总线。我在现场遇到过一次远程传感器在压缩机启动瞬间偶发通信失败。解决方法是把 1-Wire 的通信调度错开压缩机开关瞬间或者在软件上加上刺耳数据滤波。想完全靠硬件滤波解决问题成本高效果还不一定好软件过滤是性价比最高的方案。6. 这套方案的延伸思考做完这个项目之后有几个体会特别深。如果你也想用 PJ85718DM 加 PIC24HJ256GP610 做温度监测或者更广泛地考虑嵌入式测温方案这几个点值得提前想清楚。第一1-Wire 到底适不适合你的场景。1-Wire 的最大优势就是节省 I/O、布线简单、支持多挂载但它也有明显的短板时序要求严苛、长线传输可靠性需要额外手段增强、单主多从的机制决定了它不适合主动上报。如果测温点是无线部署的或者要求每个点独立寻址那用 I2C 传感器加长线驱动器或者直接用 RS485 总线的温度传感器可能更合适。方案选型没有绝对的优劣只有是否适合这点一定要想清楚再做决定。第二传感器校准的长期漂移问题。PJ85718DM 这类传感器长期运行后会有漂移尤其是处在高湿、高温差循环环境的传感器漂移更明显。如果你的系统要求长期精度建议在设计阶段就预留校准接口包括两线校准参数的存储和校准工具函数避免产品已经交付之后才想起来要校准那就非常被动了。每次维护的时候做一次标定记录校准参数的变化趋势还能提前发现传感器老化的问题。第三从温度监测升级到完整的环控系统。如果只是把温度读出来那么这个项目只能算完成了三分之一。真正有价值的部分在于温度数据的应用联动风机、阀门、压缩机这些执行器把温控逻辑做成 PID 或者自适应控制再通过 RS485 或者以太网把数据上传到集中监控平台。PIC24HJ256GP610 的资源完全支撑得起这套扩展建议在硬件设计时就把通信接口、扩展存储、备用 I/O 都预留好后续升级会省非常多的事。从我个人的实操经验来看温度监测这个看似基础的功能真正做好了非常考验工程师的综合能力硬件上要懂信号完整性固件上要抠严苛时序系统上还要考虑现场的干扰和可靠性。这套基于 PJ85718DM 和 PIC24HJ256GP610 的方案整体思路清晰实现难度适中非常适合作为嵌入式测温的标准设计参考。如果你正在规划类似的项目建议从小规模原型验证开始先跑通单点测温再加多点和远程功能每一步都验证充分再往前走比我这种一口气全部调完的节奏要稳妥得多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑