资讯动态

基于PJ85718DM与R7FA6M3AH3CFC的嵌入式温度监测系统设计

发布时间:2026/10/22 6:42:00 来源:尧图企业网站定制
很多做嵌入式温度采集和HVAC控制的朋友第一版方案往往只盯着单片机和传感器本身等设备装到现场才发现本地读数倒是挺准可人在中控室、运维机房或者手机App上看不到数据还得派个人拿万用表去量。这其实就是典型的“测得到、传不走”问题。我最近基于PJ85718DM数字温度传感器和R7FA6M3AH3CFC主控搭建了一套同时支持本地实时显示和远程上云的嵌入式温度监测方案主要用在HVAC暖通设备和工业控制柜这类场景里。今天把整个项目的关键设计、踩坑记录和调试经验完整拆一遍。这套方案核心解决三件事第一PJ85718DM用I2C接口做多点、高精度的本地温度采集数据稳定、抗干扰第二R7FA6M3AH3CFC作为主控把采集结果通过串口屏和LED数码管做本地显示同时本地存储最近24小时温度记录第三通过主控自带的以太网MAC外接PHY芯片走TCP/MQTT协议把数据推送到远端服务器或云平台实现远程监控。整套系统从底层采集到上层应用都打通了适合直接用在自己产品预研、实验室温控验证或者HVAC控制器的二次开发上。1. 为什么选了这两颗芯片一个管精度一个管联网先说选型逻辑。HVAC应用里的温度监测和普通消费电子产品不太一样它对传感器的长期稳定性、抗环境干扰能力和通信接口要求比较高。PJ85718DM是一颗数字输出的温度传感器内部集成了ADC、基准电压和校准逻辑直接输出数字量不需要额外搭调理电路这样从源头就规避了模拟信号线长距离传输容易引入的干扰和漂移问题。这颗传感器的测温范围大概能做到-40℃到125℃在0到70℃范围内误差能控制在±0.3℃以内这个精度等级对于回风温度、送风温度、机房环境温度这类HVAC场景足够用了甚至比很多NTC热敏电阻加运放调理的方案精度高一个数量级。更重要的是它支持I2C接口一条总线上可以并接多个传感器做多点布点非常方便。实际项目里我在一条I2C总线上挂了4颗PJ85718DM分别放在回风口、送风口、冷凝器进出管和机柜内部主控定时轮询一次全部读完只需要十几毫秒。R7FA6M3AH3CFC这颗主控选它不是因为算力而是看中了它自带以太网MAC、大容量Flash和丰富的定时器资源。HVAC设备控制柜里往往同时有好几路I2C设备、PWM风机控制、继电器开关量、串口屏主控外设资源不够的话板子会做得非常痛苦。R7FA6M3AH3CFC内置了CAN、USB、多路UART、I2C和以太网MAC基本上一颗芯片把HVAC控制器要用的接口全包圆了。另外Cortex-M33内核带TrustZone和安全特性后续要做设备认证、固件加密、OTA升级都有硬件基础远程运维安全性能上一个台阶。还有一个关键因素联网能力。很多温度采集模块要么只做本地显示不带网络要么用WiFi模块但HVAC现场控制柜很多是屏蔽金属机箱WiFi信号进去先衰减一半抗干扰能力也差。R7FA6M3AH3CFC自带以太网MAC外接一个RMII接口的PHY芯片我用的是LAN8720A就能走有线网络一根网线直接进企业内网或PLC控制网段稳定性比无线方案强得多。对机房环境、HVAC集中控制这类场景有线网络是刚需。组合起来看PJ85718DM负责把温度量化成可靠数据R7FA6M3AH3CFC负责把数据消化、显示、送出去。两颗芯片通过I2C和中断引脚连接整个硬件链路非常简洁不需要外挂ADC、运放、电平转换芯片这给PCB布线和整机可靠性都留出了很大余量。2. 硬件连接方案I2C多点布置与电源处理细节2.1 PJ85718DM与主控的接线方式PJ85718DM支持I2C通信标准模式100kHz也可以跑400kHz快速模式。实际调的时候我发现400kHz模式下总线时序需要仔细调上拉电阻否则距离稍长波形沿就变缓建议先用100kHz把功能跑通再根据实际总线长度优化速率。传感器地址由AD0引脚电平决定我这边4个传感器地址分别设置为0x48、0x49、0x4A和0x4B这样MCU轮询时通过地址区分传感器位置不需要额外增加片选引脚。接线注意事项SDA和SCL都需要接上拉电阻我用了4.7kΩ上拉到3.3V。总线上4个传感器加上主控自身I2C总线上拉的阻值需要适当减小我实测发现3.3kΩ在400kHz下波形更稳但功耗略有增加。PJ85718DM的VDD接3.3V主控的IO引脚也是3.3V电平不需要电平转换直接怼上就能通信。ALERT引脚接主控的一个外部中断输入传感器温度超过设定报警阈值时主动拉低主控可以立刻响应不用一直轮询。HVAC场景里这个引脚我用在超温保护上回风温度超过设置值直接触发报警。2.2 电源和地线的处理温度监测系统的电源看似简单其实容易踩坑。HVAC控制柜里风机启停、压缩机启动瞬间电流很大电源母线会出现明显的电压跌落和毛刺。PJ85718DM内部虽然有ADC基准和稳压但如果电源纹波太大采样结果还是会跳动。我的做法是传感器供电单独做了一路LC滤波磁珠加10μF和0.1μF电容组合把数字电路与功率部分的电源隔离开。主控R7FA6M3AH3CFC的AVCC和VCC分别供电模拟部分单独加了一个LDO避免数字IO翻转噪声串到模拟基准上。地线方面PCB采用单点接地或者大面积铺地传感器地线不要和风机驱动地线共用同一段走线防止大电流在地线上产生压降影响I2C信号电平判断。2.3 远程通信接口的硬件细节以太网接口用了RMII模式连接LAN8720A PHY主控的MAC通过RMII接口向外输出50MHz参考时钟由主控产生。R7FA6M3AH3CFC的RMII接口需要50MHz时钟我用的是有源晶振方案MCU的REF50CK输出50MHz给PHY这样保证两边时钟同源避免时钟偏差带来的数据错包。RJ45接口加内置网络变压器选用带POE供电能力的型号后面如果设备需要在现场取电可以省一路电源线。网口和主控之间要加TVS保护管HVAC现场经常有感应雷和电机启动浪涌不做保护的话PHY容易烧。3. 本地温度采集固件驱动、校准与多点轮询策略3.1 I2C驱动时序与寄存器配置PJ85718DM的寄存器访问逻辑比较直接先写配置寄存器选择工作模式和转换精度再读温度结果寄存器获取两字节数据。我给传感器配置了连续转换模式每秒钟完成一次内部测量MCU在需要的时候读最新结果不需要等待转换完成这样整个系统响应速度快也不会阻塞式占用I2C总线。配置流程就是上电后延时50ms写配置寄存器设置分辨率然后读ID寄存器确认通信正常再循环读温度数据。这里有个经验上电后不要立刻读数据传感器内部的基准电压和时钟稳定需要一点时间我第一次调试时上电立即读读回来全FF后来加了延时就正常了。uint8_t pj85718dm_read_temperature(uint8_t dev_addr, float *temp_celsius) { uint8_t reg 0x00; uint8_t data[2] {0}; int16_t raw; /* 写入寄存器地址 0x00温度数据寄存器 */ if (i2c_write(dev_addr, reg, 1) ! 0) return 1; /* 读取两字节温度数据 */ if (i2c_read(dev_addr, data, 2) ! 0) return 2; /* 14位分辨率温度值左对齐 */ raw (int16_t)((data[0] 8) | data[1]); raw 2; /* 去掉低两位无效数据 */ /* 转换每 LSB 表示 0.01 摄氏度 */ *temp_celsius (float)raw * 0.01f; return 0; }3.2 多点轮询与报警阈值处理4颗传感器的轮询我用了一个长度为4的地址表循环遍历每次采集完当前传感器后把数据存入环形缓冲区然后挪到下一个传感器。整个轮询周期由定时器控制我的实现是50ms执行一次采集调度4颗传感器全部采集完只需要200ms以内1秒刷新一次本地显示绰绰有余。报警阈值处理上我用了主控的中断引脚配合软件标志位。每颗传感器的ALERT输出可以独立配置高或低触发我统一配置成超温拉低。主控外部中断ISR里只置一个标志位不在中断里做复杂逻辑主循环检测到标志后再去查是哪颗传感器报警、温度值是多少、触发声光报警还是远程通知。这样把实时性和业务逻辑解耦开代码可控性高很多。3.3 温度校准两点标定的实践传感器出厂校准精度不错但应用时安装位置会有偏差所以我在系统里做了软件校准。方法是跟标准温度计对比取两个温度点做偏置修正比如4℃和60℃两个点用线性插值得到修正函数。实际测试下来校准后的误差能控制在±0.15℃以内。我还在固件里加入了滑动滤波。温度变化在HVAC里相对缓慢用一个长度为10的滑动窗口做平均值滤波就能很好抑制偶发采样毛刺。但要注意风机启动时可能瞬间改变传感器表面温度这时滤波反而掩盖了真实变化。我加了变化率判断如果当前值和窗口平均值偏差超过2℃直接采用当前值不做滤波保证异常跳变也能被及时捕捉。4. 本地显示与人机交互串口屏和按键逻辑本地显示我用了一块4.3寸串口屏通过UART和主控通信。主控按固定格式发送传感器数据帧比如“TEMP:0:23.5”表示1号传感器当前温度23.5℃。串口屏端通过组态软件配置显示控件做个简单的仪表盘页面把4路温度实时显示出来也显示系统运行状态和报警信息。串口屏通信有个值得注意的点串口屏的接收缓冲区如果满了后面的数据就丢了表现就是页面偶发卡在旧数据。所以我这边的发送频率没有设太高1秒一帧足够加上简单的握手协议串口屏每收到一帧回一个ACK主控如果没收到ACK就缓存数据等下一次发送时重发。这套机制看起来简单但极大减少了画面卡顿问题。按键逻辑方面我做了一个三键菜单SET键进入参数设置UP/DOWN调节报警温度阈值。所有阈值参数存储在主控内部Flash断电不丢失。因为R7FA6M3AH3CFC内部Flash空间充裕我直接用了它模拟EEPROM的方式存储不需要外接EEPROM芯片。本地人机交互的界面设计也可以轻量化一点。实际HVAC产品上没必要做花哨动画我用简洁的数字大字体显示温度报警状态用颜色区分绿色正常、黄色预警、红色报警再接个蜂鸣器做声音提示。屏幕下面放一行滚动日志区显示状态更新方便现场调试和维护。5. 远程温度监测实现基于以太网与MQTT的完整链路5.1 网络协议栈的选型与集成远程监测这块是重头戏。R7FA6M3AH3CFC跑以太网协议栈我选的是RTT生态里的lwIP方案它的内存占用对这颗MCU来说很充裕而且API通俗跑TCP/IP基础应用足够。lwIP配置成使用操作系统模式基于RT-Thread完成网络任务。协议栈配置上要特别注意PBUF池大小和TCP窗口大小温度数据帧非常小一般几十字节每次所以PBUF池设64个每个256字节就完全够用。TCP的发送和接收缓冲区也不需要开太大温度监控不是高频大数据传输8KB足够了。开太大的话白白占用内存反而影响其他业务。网络调试时先用静态IP地址把MAC地址也手动设置了避开路由器DHCP分配问题。后续量产可以保留静态配置也可以上DHCP但要在配置里加一个看门狗超时重试防止设备在复杂网络环境里获取IP失败后彻底失联。5.2 MQTT数据上报协议设计远程数据最通用的方案是MQTT轻量、稳定、穿透性好。我这边用一个开源MQTT客户端库配置好broker地址、端口、用户名密码、订阅主题客户端就启动连接。设备端周期发布温度数据到topic比如hvac/dev001/temp/0云平台或者手机App订阅对应主题就能实时收到数据。我重点设计了一份JSON报文格式每条消息包含设备ID、时间戳、4路温度值、报警状态和工作模式{ device_id: HVAC-2024-001, timestamp: 1735689600, temp: [23.5, 24.1, 22.8, 26.3], alarm: 0, mode: 3 }这样云端不用针对不同设备定制协议所有设备统一格式后端解析处理起来非常省事。上报频率默认30秒一次云计算压力小数据粒度对HVAC监控也够。如果检测到报警状态我会上报间隔临时缩短到5秒方便运维第一时间观察温度变化趋势。5.3 断线重连与数据补传远程监测最怕设备断网后数据丢失。HVAC现场网络偶尔不稳定网线松动、交换机重启、路由器升级都会造成TCP连接断开。因此断线重连是整套方案的灵魂。我在固件里做了两级保障。第一级是MQTT层的自动重连客户端掉线后按照递增退避策略每隔5秒、10秒、30秒、60秒重试一次最多间隔不超过5分钟保证网络恢复后能尽快恢复在线。第二级是数据缓存补传本地Flash划出4KB区域做环形缓冲离线的30秒刷新数据和5秒报警数据全部写入缓冲上线后按时间顺序逐条补传确保云端历史数据完整不出现时间断档。实际联调中发现MQTT broker的keepalive参数设置很关键。如果keepalive设太长服务端可能因为收不到心跳主动断开连接设太短则频繁发送心跳增加流量。我最终设置为30秒一次心跳服务端发现连接失效的最长时间为60秒这样网络异常后一两分钟内就能感知到离线状态。5.4 网络安全的落地做法既然设备进了内网就不得不考虑安全问题。R7FA6M3AH3CFC本身带安全加密引擎我在项目里用它做了三层防护设备端保存客户端证书用TLS加密与broker的通信避免明文传输被嗅探。每台设备分配唯一用户名密码云端定期更新凭据。设备固件签名验证只有通过签名校验的固件才能被启动防止被刷入恶意程序。HVAC行业里很多设备长期运行在不更新的状态上安全设计一开始就要做进去否则后面远程运维就是一个大漏洞。6. 实测数据、功耗分析与踩坑总结6.1 实测数据我把整套系统在模拟HVAC环境里跑了72小时记录结果如下室温25℃环境下PJ85718DM回风温度读数稳定在24.9℃到25.1℃之间波动幅度约±0.2℃显示无跳变。4路传感器之间的最大温差记录为4.7℃符合送风口和回风口实际温度差异预期。从主控发起I2C读请求到串口屏更新显示本地链路延迟在50ms以内。远程数据从传感器采集到云端收到MQTT消息典型端到端延迟约200ms局域网环境下如果跨公网加TLS握手会慢一点但完整链路在2秒以内。功耗方面整板包括主控、传感器、串口屏、网络PHY实测运行电流在120mA左右3.3V供电以太网传输时电流略高整体控制在0.4W以内。如果只用电池供电做太阳能农业大棚温控之类应用这套方案可以关掉以太网PHY和串口屏降到最低功耗模式主控只保留定时采集和存储功耗能压到不到1mA但我这次做的是HVAC控制器对功耗要求不敏感。6.2 调试中遇到的几个坑第一个坑是I2C时序问题。400kHz模式下4.7kΩ上拉电阻配合15cm排线长度时波形沿就明显变缓偶尔读到错误温度表现为个别传感器读出来值乱跳。排查后把上拉改成3.3kΩ、通信速率降到100kHz问题消失。教训I2C速率不是越高越好现场布线环境可能不支持高速模式稳定压倒一切。第二个坑是局域网丢包导致的MQTT掉线。一开始没用断线重连机制远端broker一重启设备端所有连接全部断开并且不重连。后来实现了自动重连和退避策略断线期间数据全部补传到设备Flash网络恢复后主动补传。坑点在于Flash写入次数有限如果断线时间很长环形缓冲被写满后要覆盖旧数据我做了保护——超过缓冲容量后丢弃时间戳最早的数据防止新数据没存进去。第三个坑是串口屏和网络任务相互卡顿。一开始串口屏通信和网络收发放在同一个线程里串口屏发送大屏刷图时网络包会延迟几十毫秒分布式控制场景下明显感觉数据迟滞。后来把串口屏通信放到独立任务网络收发、I2C采集、串口屏刷新各跑各的互不阻塞卡顿问题解决。第四个坑是电源毛刺导致传感器偶尔读数异常。最典型的现象是风机启动瞬间某一路传感器读数跳变3℃以上。定位后确认是风机驱动电流在公共地线上产生压降影响了I2C信号的电平判断。处理方案是分别供电、加磁珠和电容隔离同时PVM风机驱动采用独立的电源层彻底切断干扰路径。6.3 系统扩展建议这套硬件和固件底子很灵活。后续可以在同一块板子上扩展多个传感器类型比如加装湿度传感器、风速传感器或者压差传感器用I2C或者ADC通道接入把HVAC控制器做成多参数环境监测网关。R7FA6M3AH3CFC的通信接口足够多不需要动主板硬件设计固件里加几个采集任务就行。也可以把远程通道扩展到其他云平台。MQTT标准协议天然兼容各类平台我这次用的私有broker换用其他云平台只需要改broker地址、端口和上传Topic代码层面完全不需要大改。配合设备侧的TLS证书上云也能平滑迁移。7. 最终给同行的几条经验项目做完复盘有几个观点我特别想分享。温控系统的关键不在控制算法而在底层数据可靠性。算法再漂亮传感器数据跳变、通信断档都是空中楼阁。PJ85718DM这类数字传感器把精度问题解决了后续重点就是怎么保证数据传输链路不断、不乱这才是我花最多时间的地方。别迷信高速I2C。400kHz看着诱人但现场布线环境千奇百怪我最终跑100kHz温度轮询也完全够用系统整体实时性没受影响。很多问题其实不是性能不够而是方案没有匹配实际物理环境。远程监测必须把网络异常当常态来设计。HVAC设备安装环境可能是工厂、地下室、楼顶网络状况远不如办公室断线重连、数据补传、看门狗这三大能力一个都不能少。没有断线自动恢复的远程系统只能是给运维人员增加工作量。模块化设计比功能堆叠更重要。I2C采集、本地显示、远程网络分成独立任务模块后后续加功能、单独调试都方便。这套思路应用到其他嵌入式项目上同样适用。如果正准备做自己的HVAC温度监测或者环境数据采集系统直接按上面这套架构做出来的产品至少能把温度测量、显示、远程上报这条主链路稳定跑通剩下的就是按行业规范把报警逻辑、认证加密、整机可靠性打磨完善。

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

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

免费获取报价 →
↑