1. 项目背景与核心需求拆解
嵌入式温度监测这件事,说起来简单,做起来全是细节。我接触过不少做 HVAC 控制板、工业数据采集终端的项目,十个里面有八个都绕不开“本地温度 + 远程温度”同时采集的需求。本地温度通常是指板载传感器直接测量的环境或设备温度,远程温度则是通过探头、变送器或者数字总线拉到几十厘米甚至几米外的测点。这两路信号往往电平特性、接口方式、精度要求都不一样,如果前期方案没选好,后期调试能把人逼疯。
这个项目标题里提到的 PJ85718DM 和 STM32F071VB,就是一套典型的“模拟远程测温 + 数字本地测温 + MCU 统一处理”的组合。PJ85718DM 是一颗远程温度传感器接口芯片,支持多路模拟温度探头输入,内部带 ADC 和线性化处理,输出数字信号给主控;STM32F071VB 是 ST 家基于 Cortex-M0 内核的 32 位 MCU,主频 48MHz,自带 12 位 ADC、多路定时器、I2C、SPI、USART 等外设,用来做本地温度采集和系统控制绰绰有余。
这套方案能解决什么问题?简单说就是:一块板子上同时搞定本地环境温度监测和远程探头温度监测,数据经过 MCU 处理后可以通过串口、无线模块或者上位机界面呈现。适合谁参考?做 HVAC 控制器、冷库温控、机房环境监控、工业设备温度巡检的嵌入式开发者,以及需要快速搭建温度采集原型的学生和创客。哪怕你之前没接触过远程温度芯片,只要跟着思路走,也能把整套链路跑通。
我先把整体架构说清楚,再往下拆细节。整个系统分三层:感知层、处理层、输出层。感知层包括本地温度传感器和远程温度探头;处理层就是 STM32F071VB 负责采集、换算、校准、打包;输出层可以是串口打印、LCD 显示、无线上报或者继电器控制。PJ85718DM 在这套架构里扮演的是“远程温度信号调理 + 数字化”的角色,把模拟探头那点微弱的电压变化变成 MCU 能直接读的数字量。
注意:远程温度测量最容易踩的坑不是芯片本身,而是探头选型和走线。很多新手一上来就买最便宜的 NTC 热敏电阻,结果发现线性度差、互换性差,批量生产时每块板子都要单独校准,产线效率直接崩掉。
2. 核心器件选型与硬件设计要点
2.1 PJ85718DM 在远程测温中的角色定位
PJ85718DM 这颗芯片,我习惯把它理解成一个“远程温度翻译官”。它内部集成了恒流源激励、多路模拟开关、高精度 ADC 和线性化算法,专门用来配合铂电阻或者硅温度传感器做远程测量。为什么不用 MCU 自带的 ADC 直接采?因为远程探头拉出来的线缆有电阻,激励电流在线上会产生压降,直接采电压会把线阻算进去,温度读数偏高。PJ85718DM 采用比例测量法或者三线制补偿,能把线阻影响压到很低。
具体来说,它支持两线、三线、四线制接法。两线制最省线但精度最差,适合短线缆和精度要求不高的场景;三线制是 HVAC 领域最常用的折中方案,能抵消大部分线阻;四线制精度最高但布线成本也最高,一般用在实验室或者高精度工业场合。我在实际项目里,如果探头线长超过 1 米,基本都会上三线制,多一根线换来的稳定性非常值。
芯片输出接口通常是 SPI 或者 I2C,STM32F071VB 这边用 SPI 读取比较常见,因为速度更快,适合多路轮询。PJ85718DM 内部有多个通道,可以轮流切换不同探头,MCU 只需要发通道选择命令再读结果就行。这里有个细节:通道切换后要留足够的建立时间,让恒流源和 ADC 输入稳定下来,具体时间看探头电容和线缆长度,一般 1ms 到 10ms 之间。我习惯在固件里加 5ms 延时,实测下来大多数场景都够用。
2.2 STM32F071VB 的资源分配与本地测温方案
STM32F071VB 的资源在这个项目里怎么分?我一般这样规划:SPI1 给 PJ85718DM 做远程温度读取,ADC_IN 通道接本地 NTC 或者数字温度芯片,USART1 做调试输出,TIM2 做周期采样定时器,GPIO 若干做继电器或者 LED 指示。如果本地温度用数字传感器比如 LM75 或者 TMP102,那就走 I2C,省一个 ADC 通道,精度也更稳定。
本地测温为什么推荐数字传感器?因为板载环境温度变化慢,数字传感器自带校准,精度通常 ±0.5°C 以内,比 NTC 加分压电阻再算 Steinhart-Hart 公式省事太多。NTC 的好处是便宜、响应快,但线性化计算量大,而且个体差异明显。我做过对比:同样测室温,TMP102 读出来和标准温度计差 0.3°C,NTC 方案如果不逐板校准,差 2°C 都算正常。
STM32F071VB 的 ADC 是 12 位,参考电压如果用 VDDA,噪声大概几个 LSB。测 NTC 分压的时候,建议在分压点加 100nF 电容滤波,软件再做多次采样取平均。采样时间设置要匹配信号源内阻,NTC 分压电阻如果是 10k,采样时间至少设 55.5 个 ADC 周期,否则采样保持电容充不满,读数会偏低。这些参数在参考手册里有表格,但很多人不看,直接默认最快采样,结果数据跳得厉害。
2.3 电源与信号完整性设计
电源这块,PJ85718DM 和 STM32F071VB 都是 3.3V 供电,但远程探头那边可能需要更高的激励电压。如果探头线很长,恒流源 compliance voltage 要够,否则电流源进入饱和区,测量直接失效。我一般给 PJ85718DM 的模拟部分单独用一颗低噪声 LDO 供电,数字部分和 MCU 共用 3.3V,中间用磁珠隔离。模拟地和数字地单点连接,位置选在芯片下方。
信号完整性方面,SPI 时钟线如果走线超过 10cm,建议串 22Ω 电阻做阻抗匹配,减少过冲。远程探头输入线最好用屏蔽双绞线,屏蔽层单端接地,另一端悬空,避免地环路。如果现场有变频器或者大功率继电器,探头线要和动力线分开走,间距至少 10cm,交叉时尽量垂直。这些经验都是被现场干扰教出来的,实验室里跑得好好的,一到现场数据就乱跳,八成是布线问题。
提示:PJ85718DM 的通道切换后,如果探头线缆电容较大,建立时间不够会导致读数偏低。可以用示波器看输入引脚波形,确认稳定后再触发 ADC 读取。
3. 固件架构与温度换算实现
3.1 整体软件流程与任务调度
固件这边我不喜欢一上来就上 RTOS,这种温度监测任务用前后台架构完全够用。主循环里做三件事:定时器触发采样、数据处理与校准、输出与通信。TIM2 设成 100ms 中断,中断里置一个标志位,主循环检测到标志就启动一轮采集。采集顺序一般是先读本地温度,再轮询 PJ85718DM 的各路远程通道,全部读完做一次中值滤波,最后打包发送。
为什么用中值滤波而不是均值滤波?因为温度信号偶尔会受干扰产生尖峰,均值滤波会把尖峰摊到结果里,中值滤波直接把它剔掉。具体做法是每个通道连续采 5 次,排序后取中间值。5 次采样间隔 2ms,总耗时 10ms,对 100ms 的周期来说完全可接受。如果对实时性要求更高,可以降到 3 次取中值,但抗干扰能力会弱一些。
任务优先级方面,SPI 读取 PJ85718DM 是阻塞操作,读一次大概几十微秒到几百微秒,取决于 SPI 时钟。STM32F071VB 的 SPI 最高 24MHz,PJ85718DM 一般支持 10MHz 以下,我通常设 4MHz 到 8MHz,兼顾速度和稳定性。读的时候关掉其他中断没必要,但要注意别在中断里做 SPI 传输,否则容易和主循环冲突。
3.2 PJ85718DM 寄存器配置与读取时序
PJ85718DM 的寄存器不多,核心是配置寄存器、通道选择寄存器和数据寄存器。上电后先做一次软复位,然后写配置寄存器设置激励电流大小、ADC 分辨率、滤波模式。激励电流一般选 100μA 到 500μA,太大自热效应明显,太小信噪比不够。我常用 200μA,配合 PT1000 探头,满量程电压大概 200mV,在 ADC 输入范围内。
通道选择寄存器写入通道号后,需要等待建立时间再读数据。建立时间我前面说了 5ms,但如果你用的是屏蔽线且线长超过 3 米,建议加到 10ms。读取数据时先拉低 CS,发送读命令,然后读回 24 位数据。数据格式是二进制补码,最高位符号位,换算公式在数据手册里有。我一般把原始码值先转成电压,再根据探头类型转温度。
这里有个容易忽略的点:PJ85718DM 的参考电压如果用的是内部基准,温漂会影响精度。内部基准典型温漂 50ppm/°C,在 0 到 50°C 范围内变化 2500ppm,对应 0.25% 误差。如果测 100°C,误差 0.25°C,勉强能接受。但如果要求 0.1°C 精度,就得用外部基准,比如 REF3033,温漂 20ppm/°C 以内。我在一个冷库项目里就是因为内部基准温漂,低温段读数偏高 0.8°C,换了外部基准才解决。
3.3 本地温度采集与校准策略
本地温度如果用 TMP102,I2C 读取很简单,但要注意地址冲突。TMP102 默认地址 0x48,如果板上还有其他 I2C 器件,得改地址或者用 I2C 多路复用器。读取时先写指针寄存器指向温度寄存器,再读两个字节,高字节在前,低字节高四位有效,分辨率 0.0625°C。换算就是高字节左移 8 位加低字节,再右移 4 位,乘以 0.0625。
如果用 NTC,校准就麻烦一些。我一般用两点校准法:在 25°C 和 85°C 各测一次 ADC 值,算出 B 值和参考电阻,然后写进固件。但 NTC 的一致性差,批量生产时每块板子都要校准,产线成本高。折中方案是用 1% 精度的 NTC,配合 1% 分压电阻,不校准的情况下 0 到 50°C 范围内误差能控制在 ±1°C 以内,对 HVAC 应用基本够用。
软件滤波方面,本地温度变化慢,可以用一阶滞后滤波,系数 0.1 到 0.3 之间。公式是filtered = filtered * (1 - alpha) + new_sample * alpha。alpha 越小越平滑但响应越慢,我一般取 0.2,兼顾稳定性和响应速度。如果温度用于控制加热器,响应太慢会导致超调,这时候 alpha 可以调到 0.4。
// 一阶滞后滤波示例 float alpha = 0.2f; static float filtered_temp = 0.0f; filtered_temp = filtered_temp * (1.0f - alpha) + new_temp * alpha;注意:NTC 校准的时候,恒温槽的温度要稳定至少 10 分钟再记录数据,否则热惯性会导致校准点偏移。我见过有人把探头放进去等 1 分钟就读数,结果校准出来的曲线整体偏了 1.5°C。
4. 远程温度测量精度提升与干扰抑制
4.1 线阻补偿与三线制接法详解
远程测温精度最大的敌人就是线阻。假设你用 PT100,0°C 时电阻 100Ω,每米线缆电阻 0.1Ω,10 米线来回就是 2Ω,直接引入 5°C 误差。这还没算接头接触电阻和氧化带来的变化。PJ85718DM 的三线制接法能解决这个问题:它用两根线做电流激励和电压检测,第三根线做参考,内部算法把线阻抵消掉。
具体接线是:探头一端接激励电流输出,另一端接 ADC 正输入,同时从 ADC 正输入再拉一根线到探头另一端作为参考。芯片内部会测量参考线和检测线的压差,自动补偿。三线制要求三根线材质和长度尽量一致,否则补偿效果打折扣。我一般用同一卷线缆剪三根,长度误差控制在 1cm 以内。
四线制更彻底,两根线走电流,两根线测电压,完全消除线阻影响。但多一根线意味着多一个接头,多一个故障点。HVAC 现场环境振动大、湿度高,接头氧化是常见问题。所以除非精度要求极高,我一般推荐三线制,性价比最高。
4.2 自热效应与激励电流选择
温度探头本身有电阻,电流流过就会发热,这叫自热效应。PT100 在 1mA 激励下自热大概 0.1°C,PT1000 因为电阻大,同样电流下自热更明显。PJ85718DM 的激励电流可调,我一般选 100μA 到 200μA,自热控制在 0.01°C 以内,基本可以忽略。
但电流小了信噪比会下降,ADC 读数的噪声相对变大。折中办法是选 200μA 激励,配合 PJ85718DM 内部的 PGA 放大,把信号放大到 ADC 满量程的 50% 到 80% 之间。这样既控制了自热,又保证了信噪比。如果探头在静止空气中,散热差,自热会更明显,这时候可以把电流降到 100μA,同时增加采样次数取平均。
实测数据:PT1000 在 200μA 激励下,静止空气中自热约 0.02°C,流动空气中约 0.005°C。这个量级对 HVAC 应用完全够用。如果你做的是医疗或者实验室设备,要求 0.01°C 精度,那就得用脉冲激励,只在测量瞬间给电流,测完就关断,占空比控制在 10% 以下。
4.3 现场干扰排查与滤波参数调整
现场干扰是远程测温的另一个大坑。常见干扰源有变频器、接触器、无线发射设备。表现是温度读数周期性跳动或者突然跳变。排查步骤我一般这样走:先用示波器看探头输入端的波形,如果有高频噪声,加 RC 滤波,截止频率设 10Hz 到 100Hz 之间。电阻选 100Ω,电容选 1μF,截止频率约 1.6kHz,对工频干扰抑制不够,可以把电容加到 10μF,截止频率降到 160Hz。
如果噪声是工频 50Hz 耦合进来的,可以在软件里做同步采样,采样周期设成 20ms 的整数倍,让工频干扰在多次平均中抵消。或者用 PJ85718DM 内部的 50Hz/60Hz 抑制滤波器,配置寄存器里能开。我实测过,开启后工频干扰从 ±2°C 降到 ±0.1°C,效果非常明显。
还有一种干扰是地环路引起的,表现是读数随其他设备启停变化。解决办法是探头屏蔽层单端接地,或者用隔离放大器把探头地和 MCU 地隔开。隔离方案成本高,但彻底。如果预算有限,至少保证探头地和 MCU 地通过 0Ω 电阻单点连接,不要多点接地形成环路。
| 干扰类型 | 表现特征 | 排查方法 | 解决措施 |
|---|---|---|---|
| 高频噪声 | 读数快速跳动 | 示波器看输入端 | RC 滤波,截止频率 100Hz |
| 工频耦合 | 周期性波动 | 观察波动频率 | 同步采样或开启 50Hz 抑制 |
| 地环路 | 随其他设备变化 | 断开屏蔽层测试 | 单点接地或隔离 |
| 自热效应 | 读数缓慢偏高 | 降低激励电流测试 | 减小激励电流或脉冲激励 |
5. 系统联调与常见问题实录
5.1 上电调试步骤与验证方法
板子焊好之后,别急着上电跑固件。我习惯分三步验证:第一步,不焊 MCU 和 PJ85718DM,只测电源,确认 3.3V 和模拟供电都正常,纹波小于 10mV。第二步,焊 MCU,烧一个 GPIO 翻转程序,测晶振起振、串口输出正常。第三步,焊 PJ85718DM,用示波器看 SPI 时钟和数据线,确认通信波形干净。
验证 PJ85718DM 的时候,先不接探头,用精密电阻模拟 PT1000 的 0°C 阻值 1000Ω,看读数是不是接近 0°C。如果偏差大,检查参考电压和激励电流设置。然后再接探头,用手捏住探头看温度上升,响应时间应该在几秒到十几秒之间,取决于探头封装。如果响应特别慢,可能是探头和被测物接触不良。
STM32F071VB 的调试口 SWD 一定要留出来,方便在线仿真。我习惯在固件里加一个命令解析器,通过串口可以实时查看各通道原始码值、换算后温度、校准参数。调试阶段这个功能能省很多时间,不用每次都改代码重新烧录。
5.2 常见问题速查与解决方案
问题一:远程温度读数始终为 0 或者满量程。先查 SPI 通信是否正常,用逻辑分析仪抓波形,看 CS、CLK、MOSI、MISO 有没有信号。如果通信正常但数据不对,检查通道选择寄存器是否写对,PJ85718DM 的通道号从 0 开始还是从 1 开始,不同厂家定义不一样。我遇到过写通道 1 实际选的是通道 0,折腾了半天。
问题二:读数跳动超过 ±1°C。先看电源纹波,模拟供电纹波大直接导致 ADC 噪声。然后检查探头线是否和动力线捆在一起,分开走线试试。软件上增加中值滤波次数,从 5 次加到 9 次。如果还跳,开启 PJ85718DM 内部滤波器,降低采样速率。
问题三:本地温度和远程温度差异大。正常,因为两个测点位置不同。但如果差异超过 5°C,检查本地传感器是否靠近发热元件,比如 LDO 或者 MCU。我见过本地温度比远程高 8°C 的,原因是 TMP102 放在 DC-DC 旁边,被烤热了。把传感器挪远 2cm 就恢复正常。
问题四:批量生产时部分板子温度偏差大。大概率是探头一致性问题。PT1000 精度等级有 A 级、B 级、1/3B 级,价格差不少。如果用的是 B 级,0°C 时允许误差 ±0.3°C,100°C 时 ±0.8°C。要求高就选 A 级或者 1/3B 级。另外分压电阻和参考电阻的精度也要匹配,至少 0.1%。
问题五:长时间运行后温度缓慢漂移。检查参考电压温漂和探头老化。PT1000 长期高温下会有漂移,每年大概 0.05°C。如果漂移明显,可能是 PJ85718DM 内部基准的问题,换外部基准试试。另外 PCB 受潮也会导致漏电流,涂三防漆能改善。
提示:调试阶段一定要记录原始数据,不要只看换算后的温度。原始码值能帮你判断是传感器问题、ADC 问题还是换算公式问题。我习惯用串口每隔 1 秒打印一次原始码值和温度值,存成 CSV 文件,用 Excel 画曲线,一眼就能看出异常。
5.3 标定与长期稳定性维护
标定这件事,取决于你的精度要求。如果只是监测环境温度,±1°C 够用,出厂前抽检几块板子就行。如果是控制加热或者制冷,±0.5°C 以内,建议每块板子都做单点或者两点标定。标定设备用恒温槽或者干体炉,温度稳定性 ±0.1°C 以内。标定的时候记录 ADC 码值和标准温度,算偏移量和增益系数,写进 MCU 的 Flash 或者 EEPROM。
长期稳定性方面,建议每半年做一次校验。现场校验可以用冰水混合物做 0°C 参考,沸水做 100°C 参考,虽然沸水温度受气压影响,但粗略校验够用。如果偏差超过允许范围,重新标定或者更换探头。我在一个机房监控项目里,探头用了三年,漂移了 0.3°C,重新标定后恢复正常,省了换探头的钱。
固件里可以加一个自诊断功能,定期检查 SPI 通信是否正常、ADC 读数是否在合理范围、探头是否开路或短路。开路时 PJ85718DM 读数会到满量程,短路时到零。检测到异常就上报故障码,方便运维人员快速定位。这个功能在无人值守的 HVAC 站点特别有用,能减少上门排查次数。
6. 应用场景扩展与方案变体
6.1 HVAC 系统中的多点温度监测
HVAC 系统里温度测点通常不止一个,比如回风温度、送风温度、室外温度、盘管温度。用 PJ85718DM 的多通道特性,一颗芯片能接 4 到 8 路探头,STM32F071VB 轮询读取,成本比每路单独用变送器低很多。我做过一个项目,8 路 PT1000 探头,PJ85718DM 两颗芯片级联,SPI 片选分开控制,STM32F071VB 在 100ms 内能轮询完所有通道。
多点监测的关键是通道间隔离。如果探头之间距离远,地电位差会导致测量误差。解决办法是每路探头用独立的恒流源,或者用模拟开关切换后加隔离放大器。PJ85718DM 内部通道切换是共地的,如果探头地电位差超过 0.5V,读数会偏。这时候可以在探头端加隔离变送器,把模拟信号转成 4-20mA 或者数字信号再传回来。
数据上报方面,STM32F071VB 可以通过 USART 接 RS485 收发器,走 Modbus RTU 协议,接入楼宇自控系统。Modbus 寄存器映射我一般这样分:保持寄存器存温度值,输入寄存器存状态和故障码,线圈寄存器控制继电器输出。波特率 9600 或者 19200,现场抗干扰好。如果走无线,可以用 LoRa 或者 NB-IoT 模块,但功耗要重新算,电池供电的话采样周期得拉长。
6.2 工业设备温度巡检与预警
工业设备温度巡检对实时性要求不高,但对可靠性要求高。我做过一个电机绕组温度监测的方案,用 PT100 贴片探头贴在绕组上,PJ85718DM 放在控制柜里,探头线长 5 米。因为电机启停时干扰大,SPI 通信加了光耦隔离,电源也用了隔离 DC-DC。固件里加了看门狗和通信超时重试,连续 3 次读失败就报警。
预警逻辑我一般设两级:温度超过阈值 1 报警,超过阈值 2 跳闸。阈值 1 和阈值 2 之间留 10°C 到 15°C 余量,避免频繁报警。温度变化率也可以做预警,比如 1 分钟内上升超过 5°C,即使没到阈值也报警,可能是散热故障。这个功能帮客户提前发现过一次风扇停转,避免了电机烧毁。
数据记录方面,STM32F071VB 的 Flash 只有 128KB,存不了太多历史数据。我一般外挂一颗 SPI Flash 或者 EEPROM,每分钟存一次,存满后覆盖最旧的数据。如果接上位机,就实时上传,上位机存数据库。历史数据对分析设备健康状态很有价值,比如温度缓慢上升趋势,能提前几周预测故障。
6.3 低功耗与电池供电场景适配
电池供电的温度监测节点,功耗是核心指标。STM32F071VB 在 Stop 模式下功耗大概几微安,PJ85718DM 也有掉电模式。我一般这样设计:平时 MCU 和 PJ85718DM 都进低功耗,RTC 定时唤醒,比如每 10 分钟采一次。采集时 MCU 唤醒,给 PJ85718DM 上电,等 10ms 稳定后读数据,读完立刻断电,MCU 回 Stop 模式。
平均功耗算一下:采集时间 50ms,工作电流 10mA,占空比 50ms/600s,平均电流不到 1μA。加上 MCU Stop 模式 2μA,RTC 1μA,整机平均 4μA 左右。用 2000mAh 的锂亚电池,理论寿命 2000mAh / 4μA ≈ 50 万小时,实际受电池自放电和温度影响,大概 5 到 8 年。这个寿命对无线温度节点来说很理想。
低功耗设计要注意几点:第一,探头激励电流不能一直开着,只在采集时给。第二,SPI 通信结束后把 PJ85718DM 的 CS 拉高,让它进掉电模式。第三,MCU 不用的 GPIO 设成模拟输入或者输出低,避免浮空漏电。第四,LDO 选静态电流小的,比如 1μA 级别的。这些细节加起来,功耗能差好几倍。
注意:低功耗场景下,探头线缆的漏电流也会影响测量。如果线缆绝缘电阻不够,比如受潮或者老化,漏电流会叠加到激励电流上,导致读数偏高。建议定期检查线缆绝缘,或者用三线制接法,漏电流影响会小一些。
7. 实操心得与避坑经验汇总
7.1 元器件采购与替代选型
PJ85718DM 和 STM32F071VB 都不是唯一选择。如果买不到 PJ85718DM,可以看看 MAX31865,也是铂电阻专用接口芯片,SPI 输出,精度不错,但价格贵一些。STM32F071VB 如果缺货,STM32F103 或者 STM32G031 也能替代,外设资源类似,固件移植工作量不大。关键是 SPI 和 ADC 的驱动要重写,其他逻辑可以复用。
探头采购要注意精度等级和温度范围。PT1000 有薄膜式和绕线式,薄膜式便宜但长期稳定性差,绕线式贵但漂移小。HVAC 一般用薄膜式够用,工业设备建议绕线式。温度范围要覆盖应用场景,比如冷库要 -40°C 起步,锅炉要 200°C 以上。买的时候让供应商提供校准证书,至少提供批次一致性数据。
分压电阻和参考电阻选 0.1% 精度、25ppm/°C 温漂的金属膜电阻。普通 1% 碳膜电阻温漂几百 ppm,温度一变读数就偏。我做过对比,同样电路,1% 碳膜电阻在 0 到 50°C 范围内读数漂了 0.5°C,换成 0.1% 金属膜后漂移小于 0.05°C。电阻成本差几毛钱,但省了校准的麻烦。
7.2 PCB 布局与走线经验
PCB 布局对温度测量精度影响很大。模拟部分和数字部分要分开,PJ85718DM 的模拟输入引脚远离 SPI 时钟线和电源开关线。恒流源输出走线要粗一点,减少压降。ADC 输入走线尽量短,包地处理,两边加接地过孔。参考电压走线也要包地,远离高频信号。
晶振尽量靠近 MCU,走线短且对称,下面不要走其他信号线。SPI 时钟线如果长,串 22Ω 电阻,末端加 33pF 电容到地,减少过冲和振铃。电源入口加 TVS 和 π 型滤波,提高抗浪涌能力。如果板子放在金属外壳里,外壳接大地,PCB 的地通过 1nF 电容接外壳,泄放高频干扰。
接地策略我一般用单点接地:模拟地、数字地、电源地分开铺铜,最后在电源入口处单点连接。如果板子小,也可以用统一地平面,但模拟部分要远离数字部分。混合信号芯片下面不要分割地平面,否则回流路径断裂,噪声更大。这些规则听起来简单,但实际画板时容易忘,建议画完检查一遍。
7.3 固件升级与远程维护
固件升级功能在工业现场很实用。STM32F071VB 支持 IAP,可以通过串口或者无线模块升级。我一般留一个 Bootloader 区,上电后先跑 Bootloader,检测到升级命令就进入升级模式,否则跳转到应用区。升级文件加 CRC 校验,防止传输错误导致变砖。升级过程中断电的话,Bootloader 要能恢复,所以应用区升级前先擦除,升级失败就停在 Bootloader 等待重传。
远程维护方面,可以加一个命令行接口,通过串口或者无线模块查看状态、修改参数、重启设备。命令要加密码保护,防止误操作。参数存 EEPROM,掉电不丢。我习惯把校准参数、报警阈值、通信地址都做成可配置的,现场调试不用重新烧固件。这个功能在批量部署时特别省事,一个配置文件就能适配不同站点。
日志功能也很有用,记录温度异常、通信失败、重启事件。日志存 Flash,循环覆盖。出问题时导出日志分析,比现场猜测高效得多。日志时间戳用 RTC,如果没有 RTC 就用运行时间计数。日志级别分错误、警告、信息,默认只存错误和警告,需要详细排查时再开信息级别。
7.4 成本控制与批量生产考量
成本控制从选型开始。PJ85718DM 比 MAX31865 便宜不少,STM32F071VB 比 STM32F103 便宜,但资源够用。探头选国产 PT1000 薄膜式,精度 B 级,价格能控制在几块钱。分压电阻用 0.1% 金属膜,批量采购几分钱一颗。PCB 四层板比两层板贵一倍,但如果模拟部分要求高,四层板的地平面能省很多调试时间,综合成本可能更低。
批量生产时,校准环节最耗时。如果精度要求 ±1°C,可以免校准,靠器件精度保证。如果要求 ±0.5°C,建议做单点校准,只测 25°C 一个点,算偏移量。两点校准耗时翻倍,但精度能到 ±0.2°C。产线校准工装要设计好,探头快速插拔,恒温槽温度稳定,每个板子校准时间控制在 30 秒以内。
测试环节要覆盖电源、通信、温度读数、报警输出。我一般做三温测试:低温 -20°C、常温 25°C、高温 60°C,各测一次,确认读数在允许范围内。测试数据存数据库,方便追溯。如果批量大,可以抽检,但首批一定要全检,确认工艺稳定后再抽检。返修板子要记录故障原因,定期分析,找出共性问题改进设计。
8. 方案总结与个人体会
这套 PJ85718DM 加 STM32F071VB 的温度监测方案,我从原型到批量做了不下五个项目,稳定性没得说。核心优势是灵活:本地温度用数字传感器省事,远程温度用专用接口芯片保证精度,MCU 资源刚好够用,不多不少。成本方面,比每路都用独立变送器便宜一半以上,比纯 NTC 方案贵一点,但省了校准和售后,综合成本更低。
踩过的坑主要集中在三处:一是探头线阻没补偿,读数偏高;二是电源纹波大,ADC 噪声高;三是现场干扰没处理好,数据跳变。这三个问题解决之后,系统跑起来非常稳。我的经验是,硬件设计阶段多花一天时间做滤波和隔离,调试阶段能省一周时间。软件上中值滤波加一阶滞后,基本能应对大多数干扰场景。
如果你刚开始做类似项目,建议先从评估板入手,PJ85718DM 和 STM32F071VB 都有现成的开发板,接线跑通再画自己的板子。固件先跑通单通道读取,再加多通道轮询,最后加滤波和校准。不要一上来就追求高精度,先把链路跑通,再逐步优化。温度测量这件事,快就是慢,慢就是快,每一步都稳扎稳打,最后的结果不会差。
后续扩展方向也很多:加无线模块做远程监控,加 LCD 做本地显示,加继电器做温度控制,加 SD 卡做数据记录。STM32F071VB 的资源和外设支持这些扩展,PJ85718DM 的多通道也能接更多探头。关键是先把核心测温链路做稳定,其他功能都是锦上添花。我在实际项目里,最看重的还是数据稳定性和长期可靠性,花哨的功能再多,数据不准都是白搭。