这个电气火灾监测系统是我去年为一个工厂配电房设计的实际项目,经过3个月的开发和调试最终投入实际使用。系统以STM32F103C8T6为主控芯片,通过多传感器协同工作实现了对电气设备的全方位监控。在实际运行中,它成功预警了两次因线路老化导致的过热隐患,避免了可能发生的火灾事故。
核心监测参数包括:
关键设计要点:所有传感器信号都经过隔离和滤波处理,确保在强电磁干扰的工业环境下仍能稳定工作。
选择STM32F103C8T6的原因:
c复制// 系统时钟配置示例
void SystemClock_Config(void) {
RCC_OscInitTypeDef RCC_OscInitStruct = {0};
RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
// 配置HSE振荡器
RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSE;
RCC_OscInitStruct.HSEState = RCC_HSE_ON;
RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON;
RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSE;
RCC_OscInitStruct.PLL.PLLMUL = RCC_PLL_MUL9;
HAL_RCC_OscConfig(&RCC_OscInitStruct);
// 配置系统时钟
RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK|RCC_CLOCKTYPE_SYSCLK
|RCC_CLOCKTYPE_PCLK1|RCC_CLOCKTYPE_PCLK2;
RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK;
RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1;
RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV2;
RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV1;
HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_2);
}
采用ZMPT101B电压互感器:
使用ACS712-30A霍尔传感器:
DS18B20单总线连接:
c复制// DS18B20读取示例
float Read_DS18B20(void) {
uint8_t temp[2];
DS18B20_Start(); // 启动转换
HAL_Delay(750); // 等待转换完成
DS18B20_Read(temp); // 读取温度值
return (float)((temp[1]<<8)|temp[0])/16.0;
}
mermaid复制graph TD
A[系统初始化] --> B[传感器校准]
B --> C[主循环]
C --> D[读取传感器数据]
D --> E[数据处理与滤波]
E --> F[阈值判断]
F -->|超限| G[触发报警]
F -->|正常| H[显示数据]
H --> I[数据传输]
I --> C
c复制#define FILTER_LEN 10
float voltage_filter(float new_val) {
static float buffer[FILTER_LEN] = {0};
static uint8_t index = 0;
static float sum = 0;
sum -= buffer[index];
buffer[index] = new_val;
sum += new_val;
index = (index + 1) % FILTER_LEN;
return sum / FILTER_LEN;
}
采用迟滞比较避免频繁误报:
c复制void check_alarm(float value, float threshold) {
static uint8_t alarm_state = 0;
float hysteresis = threshold * 0.1; // 10%迟滞
if(!alarm_state && value > threshold) {
trigger_alarm();
alarm_state = 1;
}
else if(alarm_state && value < (threshold - hysteresis)) {
clear_alarm();
alarm_state = 0;
}
}
采用Modbus RTU协议:
数据帧格式:
| 地址 | 功能码 | 数据长度 | 数据 | CRC校验 |
|---|---|---|---|---|
| 1字节 | 1字节 | 1字节 | N字节 | 2字节 |
AT指令配置流程:
使用Qt开发的上位机主要功能:
数据库采用SQLite,表结构设计:
sql复制CREATE TABLE sensor_data (
id INTEGER PRIMARY KEY AUTOINCREMENT,
timestamp DATETIME DEFAULT CURRENT_TIMESTAMP,
voltage REAL,
current REAL,
temperature REAL,
smoke_level INTEGER
);
传感器读数不稳定
RS485通信失败
WiFi频繁断开
在某纺织厂配电室部署后的运行数据:
| 指标 | 数值 |
|---|---|
| 平均无故障时间 | 8760小时 |
| 预警准确率 | 98.7% |
| 误报率 | 0.3次/月 |
| 平均响应时间 | <30秒 |
现场安装注意事项:
这个项目最让我自豪的是,在去年夏天最热的那周,系统准确预警了变压器温度异常,避免了一次可能引发火灾的重大事故。现场维护人员根据报警信息及时处理了散热故障,这种实实在在的安全保障正是这个系统的价值所在。