1. 项目背景与核心需求
电缆温度监测在电力系统中一直是个棘手问题。记得去年夏天,我们小区就因为电缆过热导致整片区域停电8小时。当时维修师傅拆开电缆井盖时,那股刺鼻的橡胶味至今难忘。这正是我选择这个毕业课题的初衷——用STM32构建一个能提前预警电缆过热风险的分布式监测系统。
传统的人工巡检方式存在明显缺陷:巡检周期长(通常每月1次)、盲区多(仅能检测表面温度)、数据不连续。而市面上成熟的在线监测设备又存在两个痛点:一是单点式测温只能反映局部状态;二是工业级设备成本过高(单个节点价格通常在2000元以上),难以大规模部署。
这个项目要解决三个核心问题:
- 实时性:需要实现至少每分钟1次的温度采样频率
- 分布式:支持至少20个监测节点组网
- 低成本:单个节点硬件成本控制在300元以内
2. 系统架构设计
2.1 硬件选型方案
主控芯片最终选定STM32F103C8T6(蓝色药丸板),这个选择经历了三次迭代:
- 初版考虑过STM8系列,但发现其AD转换精度不足(仅10bit)
- 第二版测试了ESP8266,虽然自带WiFi但功耗过高(持续工作电流>70mA)
- 最终版采用STM32F103+LoRa模组的组合,实测休眠电流仅1.8μA
温度传感器对比测试数据令人意外:
| 传感器型号 | 精度(℃) | 响应时间(s) | 价格(元) | 适用性 |
|---|---|---|---|---|
| DS18B20 | ±0.5 | 1.2 | 8.5 | 最佳 |
| PT100 | ±0.1 | 3.5 | 35 | 过贵 |
| NTC热敏电阻 | ±1.0 | 0.8 | 0.5 | 漂移大 |
最终选用DS18B20,虽然单价较高,但其防水封装版本可直接捆绑在电缆表面,实测在80℃高温环境下连续工作3个月后,精度仍保持在±0.7℃以内。
2.2 通信协议设计
LoRa组网方案经过两次重大调整:
- 初期采用星型网络,中心节点压力过大(20个终端同时上传时丢包率37%)
- 改进为分层拓扑后,设置4个中继节点,丢包率降至5%以下
通信协议自定义了6字节数据帧结构:
code复制[HEAD][NODE_ID][TEMP_H][TEMP_L][CRC][END]
0x55 0x01 0x02 0x34 0xCD 0xAA
其中温度值采用整型放大存储(示例表示当前温度36.52℃),这种设计使传输效率比JSON格式提升4倍。
3. 核心功能实现
3.1 温度采集模块
DS18B20的驱动开发踩过两个坑:
- 时序问题:最初直接使用库函数,发现采样失败率高达15%。后来改用寄存器级操作,精确控制18ms的转换等待时间,稳定性显著提升。
- 电缆接触:直接用扎带固定传感器会导致测温偏差。改进方案是涂抹导热硅脂后,用铜箔包裹传感器与电缆接触面,实测温差从3.2℃降至0.5℃。
关键代码片段:
c复制void DS18B20_ConvertTemp(void)
{
DS18B20_Reset();
DS18B20_WriteByte(0xCC); // Skip ROM
DS18B20_WriteByte(0x44); // Convert T
delay_ms(18); // 必须精确延时
}
3.2 低功耗设计
功耗优化实现了从初始方案68mA到最终3.2mA的突破:
- 时钟配置:将系统时钟从72MHz降频到8MHz,功耗降低42%
- 外设管理:ADC采样后立即关闭参考电压源
- LoRa模块采用突发模式:每60秒唤醒1次,工作时间压缩到300ms
实测数据对比:
| 模式 | 电流(mA) | 续航(天) |
|---|---|---|
| 持续工作 | 68 | 3 |
| 基础休眠 | 15 | 14 |
| 优化后方案 | 3.2 | 68 |
4. 上位机系统开发
4.1 温度预警算法
采用滑动窗口标准差算法检测异常:
python复制def check_alert(temps):
window = temps[-10:] # 取最近10个数据点
avg = sum(window)/10
std = (sum((x-avg)**2 for x in window)/9)**0.5
return std > 2.0 or max(window) > 70
这个算法成功识别出两种危险工况:
- 渐进式升温(标准差持续增大)
- 突发性过热(单点温度超阈值)
4.2 数据可视化方案
放弃复杂的Web框架,最终选用PyQt5+Matplotlib组合开发桌面程序。关键技巧是使用QCustomPlot控件实现实时曲线,比原生Matplotlib性能提升5倍以上。
界面布局采用三区设计:
- 拓扑图区:显示节点分布
- 曲线区:温度趋势展示
- 告警区:滚动显示最新事件
5. 现场测试与问题排查
5.1 典型故障案例
案例1:节点频繁离线
- 现象:3号节点每天固定时段失联
- 排查:发现该节点安装在路灯杆上,与路灯共用电源
- 解决:增加LC滤波电路,避免路灯开关时的电压冲击
案例2:温度数据跳变
- 现象:8号节点偶尔上报125℃异常值
- 原因:DS18B20的寄生供电模式在长距离传输时不稳定
- 方案:改用外部供电模式,总线长度限制在15米内
5.2 抗干扰措施
总结出"三防"经验:
- 防电磁:LoRa天线远离电缆至少30cm
- 防潮湿:电路板喷涂三防漆,接缝处用704硅胶密封
- 防高温:节点外壳采用铝合金材质,内部贴导热垫
6. 项目成果与改进方向
实测数据表明系统达到设计指标:
- 测温范围:-20℃~120℃
- 测温误差:±0.8℃
- 组网容量:32节点(超出设计目标)
- 单节点成本:278元(含外壳)
后续可优化点:
- 增加电池电压监测功能
- 开发手机APP接收报警通知
- 测试NB-IoT替代LoRa的可能性
这个项目最大的收获是认识到工业现场与实验室的巨大差异。比如最初在实验室测试时LoRa通信距离能达到800米,但实际部署在电缆沟道中,超过200米就需要中继节点。建议后续开发者一定要预留30%的性能余量来应对现场环境损耗。