1. 项目概述与设计思路
在工业固废处理场景中,料位监控是确保安全生产的关键环节。传统的人工巡检方式存在效率低、响应慢等弊端,而基于STM32的超声波料位监控系统通过非接触式测量实现了24小时无人值守监测。这个方案特别适合粉尘大、腐蚀性强的固废仓环境,相比机械式传感器具有更长的使用寿命。
系统采用模块化设计思路,核心功能单元包括:
- 测量端:HC-SR04超声波模块负责距离检测,DS18B20数字温度传感器补偿声速
- 人机交互:LCD1602实时显示测量数据和阈值
- 通信链路:ESP8266 WiFi模块实现与手机APP的双向通信
- 报警单元:有源蜂鸣器提供现场声光报警
设计要点:超声波在空气中的传播速度受温度影响,每升高1℃声速增加0.6m/s,因此必须进行温度补偿才能保证测距精度。
2. 硬件系统搭建
2.1 核心控制器选型
采用STM32F103C8T6最小系统板作为主控,这款Cortex-M3内核的MCU具有:
- 72MHz主频满足实时性要求
- 64KB Flash存储程序
- 20KB RAM处理数据
- 37个GPIO接口满足外设连接需求
- 内置12位ADC可扩展其他传感器
c复制// 典型时钟配置
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);
2.2 关键外设连接
| 模块 | 连接引脚 | 备注 |
|---|---|---|
| HC-SR04 | PB8(Trig) | 触发信号输出 |
| PB9(Echo) | 回波信号输入 | |
| DS18B20 | PA0 | 单总线接口 |
| LCD1602 | PB0-PB7 | 8位数据线 |
| PA4(RS) | 寄存器选择 | |
| PA5(RW) | 读写控制 | |
| PA6(EN) | 使能信号 | |
| ESP8266 | PA9(TX) | 串口1发送 |
| PA10(RX) | 串口1接收 | |
| 蜂鸣器 | PC13 | 低电平触发 |
布线技巧:超声波模块信号线建议使用双绞线,长度不超过50cm,避免电磁干扰导致测距跳变。
3. 软件实现关键点
3.1 超声波测距算法优化
常规的定时器捕获方法存在±1个计数周期的误差,我们采用输入捕获+中断的方式提高精度:
c复制// TIM3输入捕获配置
TIM_ICInitTypeDef TIM_ICInitStructure;
TIM_ICInitStructure.TIM_Channel = TIM_Channel_3;
TIM_ICInitStructure.TIM_ICPolarity = TIM_ICPolarity_Rising;
TIM_ICInitStructure.TIM_ICSelection = TIM_ICSelection_DirectTI;
TIM_ICInitStructure.TIM_ICPrescaler = TIM_ICPSC_DIV1;
TIM_ICInitStructure.TIM_ICFilter = 0x0;
TIM_ICInit(TIM3, &TIM_ICInitStructure);
// 中断处理
void TIM3_IRQHandler(void) {
if(TIM_GetITStatus(TIM3, TIM_IT_CC3) != RESET) {
if(echo_state == 0) {
rise_time = TIM_GetCapture3(TIM3);
TIM_OC3PolarityConfig(TIM3, TIM_ICPolarity_Falling);
echo_state = 1;
} else {
fall_time = TIM_GetCapture3(TIM3);
distance_cm = (fall_time - rise_time) * 34000 / (2 * SystemCoreClock);
TIM_OC3PolarityConfig(TIM3, TIM_ICPolarity_Rising);
echo_state = 0;
}
TIM_ClearITPendingBit(TIM3, TIM_IT_CC3);
}
}
温度补偿公式:
code复制实际距离 = 测得距离 × √(273 + 当前温度) / √(273 + 校准温度)
3.2 WiFi通信协议设计
采用自定义的轻量级协议保证数据传输效率:
| 字节 | 内容 | 说明 |
|---|---|---|
| 0 | 0xA5 | 帧头 |
| 1 | 0x01 | 数据类型(0x01:上传数据) |
| 2-3 | 距离值 | 单位cm,大端格式 |
| 4-5 | 温度值 | 单位0.1℃,大端格式 |
| 6 | 报警状态 | 0x00正常,0x01距离报警 |
| 7 | 0xAA | 帧尾 |
APP端设置指令示例:
code复制A5 02 00 64 00 00 00 AA
// 设置距离阈值为100cm
4. 系统调试经验
4.1 超声波模块常见问题
-
测量死区问题:
- HC-SR04最小测量距离2cm
- 解决方案:安装时模块倾斜15°角
-
多次反射干扰:
- 在固废仓内壁加装吸音材料
- 软件上采用滑动平均滤波算法
-
温度补偿滞后:
- DS18B20每5秒读取一次
- 采用一阶滞后滤波算法平滑数据
4.2 WiFi连接稳定性优化
-
天线布置:
- 避免靠近金属仓体
- 使用外置天线延伸至仓外
-
心跳包机制:
c复制void WiFi_KeepAlive(void) {
static uint32_t last_send = 0;
if(HAL_GetTick() - last_send > 5000) {
uint8_t buf[] = {0xA5, 0x03, 0xAA};
ESP8266_Send(buf, sizeof(buf));
last_send = HAL_GetTick();
}
}
- 断线重连策略:
- 首次连接失败后等待10秒重试
- 连续3次失败进入休眠模式
- 通过硬件看门狗复位系统
5. 实际应用效果
在某化工厂固废仓的实测数据显示:
- 测量范围:5cm-350cm
- 静态精度:±1cm
- 动态精度:±3cm(物料下落时)
- 温度测量范围:-20℃~80℃
- 报警响应时间:<500ms
系统持续运行6个月后,料位测量误报率从人工巡检的12%降至0.8%,同时减少了75%的维护人力成本。对于高粉尘环境,建议每3个月清洁一次超声波探头表面。