基于STM32的电能质量控制系统设计与实现

1. 项目概述

1.1 系统架构

本电能质量控制系统采用STM32F103RCT6作为主控芯片,构建了一个集环境监测与电力参数采集于一体的综合监控平台。系统通过多种传感器实时采集环境参数(温度、湿度、烟雾浓度、火焰状态)和电力参数(电压、电流、功率),并通过ESP8266 WiFi模块实现数据远程传输。

系统架构分为三个主要层次:

  • 传感层:包含火焰传感器、MQ2烟雾传感器、SHT30温湿度传感器、人体红外传感器及电力参数采集模块
  • 控制层:STM32主控芯片负责数据处理和系统控制
  • 应用层:包含本地LCD显示和远程APP监控

1.2 设计目标

系统主要实现以下技术指标:

  • 环境温度测量范围:-40℃~125℃,精度±0.3℃
  • 环境湿度测量范围:0~100%RH,精度±2%RH
  • 电力参数测量精度:±1%
  • 报警响应时间:<500ms
  • 无线传输距离:室内环境下≥30米

2. 硬件设计

2.1 主控电路设计

STM32F103RCT6微控制器作为系统核心,具有以下关键设计考虑:

  • 采用8MHz外部晶振提供系统时钟
  • 复位电路采用10kΩ上拉电阻和100nF电容构成RC复位
  • 调试接口采用标准的SWD四线连接方式
  • 电源部分使用AMS1117-3.3稳压芯片,输入5V输出3.3V
// 典型时钟配置代码
void SystemClock_Config(void) {
    RCC_OscInitTypeDef RCC_OscInitStruct = {0};
    RCC_ClkInitTypeDef RCC_ClkInitStruct = {0};
    
    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);
}

2.2 传感器接口设计

2.2.1 温湿度传感器电路

SHT30数字温湿度传感器采用I2C接口连接,设计要点:

  • 使用4.7kΩ上拉电阻确保I2C信号完整性
  • VDD引脚并联100nF去耦电容
  • 传感器地址引脚通过跳线可选(0x44或0x45)
2.2.2 烟雾检测电路

MQ2烟雾传感器接口设计:

  • 采用LM393比较器进行模拟信号处理
  • 比较器参考电压通过10kΩ电位器可调
  • 数字输出端接10kΩ上拉电阻至3.3V
  • 模拟输出通过100nF电容滤波后接入STM32 ADC
2.2.3 电力参数采集接口

电力参数模块通过UART通信:

  • 采用MAX3232芯片实现RS232电平转换
  • 通信波特率固定为9600bps
  • 硬件流控制引脚悬空,采用软件流控制

2.3 无线通信模块设计

ESP8266 WiFi模块配置为AP+TCP模式:

  • 使用CH340G实现USB转串口功能
  • 模块复位电路采用100kΩ下拉电阻和100nF电容
  • GPIO0引脚通过10kΩ电阻上拉至3.3V
  • 天线区域保持净空,避免高频干扰

2.4 报警与显示电路

报警电路采用有源蜂鸣器:

  • 通过S8050三极管驱动
  • 基极串联1kΩ限流电阻
  • 集电极并联续流二极管

1.44寸LCD显示屏接口:

  • SPI通信模式,时钟频率8MHz
  • 背光通过200Ω限流电阻控制
  • 复位信号通过RC电路(10kΩ+100nF)实现上电复位

3. 软件设计

3.1 主程序流程

系统软件采用前后台架构:

  1. 上电初始化硬件外设
  2. 建立WiFi连接
  3. 进入主循环:
    • 采集各传感器数据
    • 执行阈值判断
    • 更新本地显示
    • 打包发送数据
    • 处理接收指令
int main(void) {
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    MX_USART1_UART_Init();
    MX_USART2_UART_Init();
    MX_I2C1_Init();
    MX_SPI1_Init();
    MX_ADC1_Init();
    
    WiFi_Init();
    LCD_Init();
    Sensors_Init();
    
    while (1) {
        Read_Sensors();
        Check_Thresholds();
        Update_Display();
        Send_Data();
        HAL_Delay(500);
    }
}

3.2 传感器驱动实现

3.2.1 SHT30温湿度采集
#define SHT30_ADDR 0x44

uint8_t SHT30_ReadTempHumidity(float *temp, float *hum) {
    uint8_t cmd[2] = {0x2C, 0x06};
    uint8_t data[6];
    
    HAL_I2C_Master_Transmit(&hi2c1, SHT30_ADDR<<1, cmd, 2, 100);
    HAL_Delay(15);
    if(HAL_I2C_Master_Receive(&hi2c1, SHT30_ADDR<<1, data, 6, 100) != HAL_OK)
        return 0;
    
    uint16_t temp_raw = (data[0] << 8) | data[1];
    uint16_t hum_raw = (data[3] << 8) | data[4];
    
    *temp = -45 + 175 * (float)temp_raw / 65535;
    *hum = 100 * (float)hum_raw / 65535;
    
    return 1;
}
3.2.2 电力参数采集

电力参数模块采用Modbus RTU协议:

  • 设备地址:0x01
  • 功能码:0x03(读保持寄存器)
  • 电压寄存器地址:0x0000
  • 电流寄存器地址:0x0008
  • 功率寄存器地址:0x0010

3.3 无线通信协议

ESP8266数据传输协议设计:

  • 数据帧格式:帧头(2B) + 长度(1B) + 命令(1B) + 数据(NB) + CRC(2B)
  • 帧头固定为0xAA55
  • CRC采用CRC-16/MODBUS算法
  • 数据上传周期:500ms

典型数据包示例:

AA 55 10 01 00 12 00 64 01 F4 00 96 00 00 01 00 00 00 00 23 45

解析:

  • 帧头:AA55
  • 长度:16字节
  • 命令:01(数据上报)
  • 数据:温度(0x0012=18℃)、湿度(0x0064=100%)、电压(0x01F4=500V)...
  • CRC:2345

3.4 报警逻辑实现

报警判断采用多级阈值机制:

  1. 初级判断:单次采样值超过阈值
  2. 中级判断:连续3次采样超过阈值
  3. 高级判断:5秒内累计超过阈值次数>50%
void Check_Thresholds(void) {
    static uint8_t temp_alarm_cnt = 0;
    
    if(current_temp > temp_threshold) {
        temp_alarm_cnt++;
        if(temp_alarm_cnt >= 3) {
            Set_Alarm(TEMP_ALARM);
            temp_alarm_cnt = 0;
        }
    } else {
        temp_alarm_cnt = 0;
    }
    
    // 其他参数类似判断...
}

4. 系统测试与验证

4.1 功能测试项

测试项目 测试方法 预期结果 实际结果
温度测量 使用标准温度源对比 ±0.5℃精度 符合
湿度测量 湿度盐箱校准 ±3%RH精度 符合
烟雾检测 标准烟雾浓度测试 检测灵敏度可调 符合
电力参数 可调电源+标准表对比 ±1%精度 符合
无线传输 距离测试+数据完整性 30米无丢包 符合

4.2 性能优化

通过测试发现以下改进点:

  1. ADC采样增加软件滤波算法:
#define FILTER_LEN 5
uint16_t ADC_ReadWithFilter(ADC_HandleTypeDef* hadc) {
    uint16_t buf[FILTER_LEN];
    uint32_t sum = 0;
    
    for(int i=0; i<FILTER_LEN; i++) {
        HAL_ADC_Start(hadc);
        HAL_ADC_PollForConversion(hadc, 10);
        buf[i] = HAL_ADC_GetValue(hadc);
        sum += buf[i];
    }
    
    // 去掉最大最小值后取平均
    uint16_t max = buf[0], min = buf[0];
    for(int i=1; i<FILTER_LEN; i++) {
        if(buf[i] > max) max = buf[i];
        if(buf[i] < min) min = buf[i];
    }
    
    return (sum - max - min) / (FILTER_LEN - 2);
}
  1. WiFi通信增加重传机制:
  • 发送失败后延迟100ms重试
  • 连续3次失败则重新初始化模块
  • 数据包增加序列号检测丢包

5. BOM清单与成本分析

5.1 关键器件清单

器件名称 型号 数量 单价(元) 备注
主控芯片 STM32F103RCT6 1 15.00 LQFP64封装
WiFi模块 ESP8266-12F 1 8.50 含PCB天线
温湿度传感器 SHT30 1 12.00 I2C接口
烟雾传感器 MQ2 1 5.50 含比较器板
LCD显示屏 1.44寸TFT 1 9.80 SPI接口
电力采集模块 - 1 18.00 定制方案
蜂鸣器 有源5V 1 0.80 3kHz

5.2 设计改进建议

  1. 电源优化:
  • 增加TVS二极管防护电源浪涌
  • 关键芯片电源引脚增加10μF钽电容
  • 采用隔离型DC-DC模块提高抗干扰能力
  1. 扩展接口:
  • 预留RS485接口支持工业现场总线
  • 增加TF卡槽用于本地数据存储
  • 设计JTAG接口方便调试
  1. 结构设计:
  • 传感器采用模块化插接设计
  • 外壳增加通风孔兼顾散热与防尘
  • 安装孔位符合DIN导轨标准
Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐