新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 基于STM32的六氟化硫智能浓度监测仪设计*

基于STM32的六氟化硫智能浓度监测仪设计*

作者:洪明虎,戴其华,冯友志(泰州职业技术学院机电技术学院,江苏泰州 225300)时间:2022-09-24来源:电子产品世界收藏
编者按:本文设计了一种六氟化硫浓度智能监测系统,该系统基于STM32单片机开发,通过超声波传感器监测电力设备使用环境中的六氟化硫浓度,当出现浓度超标时,及时报警,确保人生安全。同时该系统结合人体感应传感器、语音播报系统,当有人接近设备时可语音播报当前六氟化硫浓度,做到实时提醒。

*2021年泰州职业技术学院院级科研项目资助;项目号:TZYKY-21-17。

本文引用地址:http://www.eepw.com.cn/article/202209/438530.htm

六氟化硫(SF6)以其优异的绝缘和灭弧性能,被广泛用于电力工业的高压、超高压断路器和GIS(Gas Insulated Switchgear,气体绝缘金属封闭开关设备)中,由于设备的制造、安装质量差异和设备老化等因素,SF6 气体设备发生泄漏是一种普遍现象[1]。纯净的SF6气体无毒,在常温下化学性质稳定,实际操作中,泄漏的SF6 被电击后将产生有毒气体,这不仅会危及电力安全,对大气环境造成极大危害,而且会造成低层空间缺氧使人窒息[2],出于安全考虑,必须对泄漏的SF6 气体浓度进行实时监测,传统的SF6 气体浓度检测方法是采用气敏传感器进行检测,但气敏传感器的精度低、寿命短[3],同时传统检测硬件系统在成本、功耗以及性能方面均不能满足当前需求,因此本文提出基于STM32 的SF6 实时监测设备设计。

1   系统总体设计

超声波在不同介质中,传播速度是不同的,根据这一原理,当不同浓度的SF6 气体和空气混合后,超声波通过固定距离所需时间与SF6 浓度存在一定关系,通过所需时间长短反应SF6 浓度[4]

本设计是一套集STM32 单片机系统、超声波测量传感器、人体红外感应传感器、电源模块、以及显示模块设计成一体的SF6 浓度监测系统,该设备可实现SF6浓度测量、温湿度监测以及触摸屏显示、超限语音等功能。当有人接近电力设备时,系统及时显示监测浓度值,当浓度超标时进行操作。

1663991764200415.png

2   硬件模块设计

2.1 芯片及电源模块设计

此次设计选用的是STM32F103C8T6 型单片机,出自ST(意法半导体)公司,是一款基于Cortex-M3 内核与ARMv7-M 架构的32 位微控制器,时钟频率高达72 MHz,该芯片功耗低,外围IO 口充足,同时具有9 个通信接口[5]

单片机控制系统外围接口电路如图2,该系统外部采用8 M无源晶体振荡器作为其高速时钟,采用32.768 kKz 的无源晶体振荡器作为RTC 时钟。程序采用SWD 烧写模式。单片机的电源引脚接3.3 V 并就近放置一个0.1 μF 的滤波电容。其余引脚分

配给USART,ADC,I2C 等外设。电源部分采用AC-DC模块,

1663991899431895.png

图2 控制系统电路

将市电交流220 V 转换成12 V 直流,配合压敏电阻,共模电感,滤波电容,提高了电路的安全性和稳定性,屏蔽了外部电源干扰造成整个系统的崩溃。由于系统内部功能模块采用5 V 供电和3.3 V 供电,因此次设计时采用TI 公司的TPS5430 DC-DC 稳压芯片,将12 V 电压降低至5 V,再利用LDO 将5 V 降低至3.3 V给单片机供电。具体电路设计如图3 所示。

image.png

图3 电源电路

2.2 传感器采集电路设计

系统采用SZQ68 型SF6 传感器,是基于超声波吸收原理,具备高灵敏度,寿命长。其测量范围为0~2 000 ppm,测量精度为±5%。该传感器输入供电电压为5 V,通信接口为串口。串口电平为3.3 V 可以与单片机直连。硬件电路如图4 所示。

image.png

图4 SF6传感器电路

温湿度传感器为SHT30,供电电压为3.3 V,通信方式为I2C。由于STM32F1 系列单片机的硬件I2C 不稳定,容易造成锁死。此次设计中SHT30 的引脚并未与单片机的I2C 外设引脚直接相连接,通过模拟I2C 来读取温湿度,这在一定程度上造成了CPU 性能的浪费。硬件电路如图5 所示。

1663992056692312.png

图5 SHT30电路

考虑到智能化使用需求,该监测仪具备人体接近语音播报功能,当人体靠近被测环境时,人体红外感应传感器HC-SR501 触发语音模块JR6001 对当前监测值进行实时播报。人体红外感应传感器与语音模块供电电压均为5 V,硬件电路如图6、图7 所示。为了保护单片机系统,人体红外感应模块触发电平输出与单片机引脚之间采用光耦隔离。

1663992187712549.png

图6 人体红外感应模块电路

image.png

图7 语音模块

3   系统软件设计

本系统进行代码编写与软件调试均采用keil 软件,主要程序流程图如图8 所示。当设备电源开启后,系统各功能进行初始化,初始化完成后对系统参数进行读取,接下来就是对SF6 传感器以及温湿度传感器数据在不超标的情况下进行循环采集,采集过程中如发现泄漏超标,将实时通过器进行报警。在实时数据采集过程中,当有人接近时,语音播报系统将播报当前监测值。

1663992305144219.png

3.1 主程序

STM32 模块主程序典型代码如下 :

u16 SF6_DATA,SF6_POLL_CNT=0; // 定义轮询计数和SF6 数据初始化

u8 IR_CNT=60; // 定义有人计时

u8 Threshold_STA=0;// 定义阈值更新标志位/* 定时器4 中断回调函数*/

void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)

{

  if(htim->Instance == TIM4)

{

if(READ_IR==0)

{

SF6_POLL_CNT=0;

IR_CNT++;

}

// 当感应到附近有人存在时轮询计数归零,有人计时累加

else

{

SF6_POLL_CNT++;

IR_CNT=0;

} // 附近无人轮询计数累加,有人计时归零if(KEY_ON==1) // 当按键寄存器被按下,按键计数累加

{

KEY_CNT++; // 按键计数每秒累加

}

  }

}

int main(void)

{

HAL_Init(); //HAL 库初始化

SystemClock_Config(); // 系统时钟初始化

MX_GPIO_Init(); //GPIO 引脚初始化

MX_DMA_Init(); //DMA 初始化

MX_ADC1_Init(); //ADC 初始化

MX_TIM3_Init(); // 定时器3 初始化,用于us延时

MX_TIM4_Init(); // 定时器4 初始化,1S 定时,用于轮询SF6 测量数值

HAL_TIM_Base_Start_IT(&htim4);// 开启定时器4中断

MX_USART1_UART_Init();// 串口1 初始化,用于播放语音报警

MX_USART3_UART_Init();// 串口3 初始化,用于SF6 传感器通信

FLASH_READ(); // 读取单片机内部FLASH 存储的SF6 报警阈值

OLED_Init(); //OLED 显示屏初始化

while(1)

{

if(SF6_POLL_CNT ≥ 600)//10 分钟轮询一次SF6 数值并更新一次OLED 屏

{

HAL_UART_Transmit(&huart3,POLL_BUFF ,len,1000);// 发送轮询命令

HAL_Delay(100); // 延时100 mssensor_read();

}

if(READ_IR==0) // 当感应到附近有人后

{

HAL_Delay(20); // 延时,防止误报if((READ_IR==0)&&(IR_CNT ≥ 60))// 有人隔1 分钟循环读取超声波SF6 传感器

{

SF6_POLL_CNT =0;// 轮询计数清零sensor_read();

IR_CNT=0;

}

}

if(KEY_CNT ≥ 20)// 当20S 无按键时,OLED 恢

复显示当前SF6 浓度

{

KEY_CNT=0;

KEY_STA=0;

OLED_ShowNum(0,0, SF6_ADC,4,16,1);//OLED

屏幕更新数字

OLED_ShowString(8,16,”ppm”,16,1);// 显示单位

ppm

}

}

}

3.2 传感器监测程序设计

/*****************

传感器读取数据处理。

*****************/

void sensor_read(void)

{

if(SF6_DATA ≥ SF6_ Threshold)

//SF6 数据在串口接收中断中完成读取,当超过阈值后处理过程

{

if(SF6_ADC ≥ SF6_ Threshold)

{

OLED_ShowNum(0,0, SF6_DATA,4,16,1);//OLED屏幕更新数字

OLED_ShowString(8,16,”ppm”,16,1); // 显示单位ppm

HAL_UART_Transmit(&huart1, warn_buff ,2,1000);// 串口1 发送报警数据

}

else // 当SF6 测量浓度未超过阈值,则正常更新OLED 屏数据

{

OLED_ShowNum(0,0, SF6_DATA,4,16,1);//OLED屏幕更新数字

OLED_ShowString(8,16,”ppm”,16,1);// 显示单位ppm

if (SF6_POLL_CNT ==0) // 当有人播放“正常语音”

{

HAL_UART_Transmit(&huart1, normal_buff ,2,1000);

}

}

SF6_POLL_CNT =0;// 轮询计数清零,进入下次

轮询周期

}

3.3 显示及按键程序设计

/*************

OLED 显示数字

x,y: 起点坐标

num:显示数字

len:数字位数

size:字体大小

mode:0 ,反色显示;1,正常显示

************/

void OLED_ShowNum(u8 x,u8 y,u32 num,u8 len,u8

size,u8 mode)

{

u8 t,temp,m=0;

if(size1==8)m=2;

for(t=0;t<len;t++)

{

temp=(num/OLED_Pow(10,len-t-1))%10;

if(temp==0)

{

OLED_ShowChar(x+

(size/2+m)*t,y,’0’,size,mode);

}

else

{

OLED_ShowChar(x+(size/2+m)*t,y,temp+’0’,size,mode);

}

}

}

/*************

OLED 显示字符串

x,y: 起点坐标

chr:字符开头

size:字体大小

mode:0 ,反色显示;1,正常显示

************/

void OLED_ShowString(u8 x,u8 y,u8 *chr,u8 size,u8mode)

{

while((*chr>=’ ‘)&&(*chr<=’~’))

{

OLED_ShowChar(x,y,*chr,size,mode);

if(size1==8)x+=6;

else x+=size/2;

chr++;

}

}

/**********

当减少或者增加按键按下后,OLED 显示相应阈值*********/

void Threshold_change (void)

{

if(ADD_KEY==0) // 当增加阈值按键按下

{

HAL_Delay(20); // 延时消抖

if(ADD_KEY==0)

{

SF6_ Threshold+=10;// 阈值增加10

if(SF6_ Threshold ≥ 2000) SF6_ Threshold=2000;

// 最高值为2000ppm

OLED_Clear();

OLED_ShowChinese(0,0,0,16,1);// 显示“阈”

OLED_ShowChinese(18,0,1,16,1);/ 显示“值”

OLED_ShowString(36,0,”:”,16,1);// 显示“:”

OLED_ShowNum(54,0, SF6_ Threshold,4,16,1);//

显示数字

KEY_ON++1; // 按键标志位置累加

KEY_CNT=0; // 按键计数归零

}

if(CUT_KEY==0) // 当减少阈值按键按下

{

HAL_Delay(20); // 延时消抖

if(CUT_KEY==0)

{

SF6_ Threshold-=10;// 阈值减少10

if(SF6_ Threshold ≤ 100) SF6_ Threshold=100;

// 最低值为100ppm

OLED_Clear();

OLED_ShowChinese(0,0,0,16,1);// 显示“阈”

OLED_ShowChinese(18,0,1,16,1);/ 显示“值”

OLED_ShowString(36,0,”:”,16,1);// 显示“:”

OLED_ShowNum(54,0, SF6_ Threshold,4,16,1);//

显示数字

KEY_ON++; // 按键标志位置累加

KEY_CNT=0; // 按键计数归零

}

}

}

4   系统调试

进行初期硬件静态测试,确认各元器件焊点无虚焊、漏焊等不良现象,电源网络无短路后,通电进行硬件电路功能调试。待硬件电路功能基本实现后开始进行软件烧录、调试以及系统测试。如图所示实物系统测试,测试过程中,出现按键功能混乱问题,通过修正软件后解决该问题。

image.png

图9 实物图

5   结语

基于STM32 的SF6 浓度仪设计,明确了设计需求,结合设计需求,对各功能模块进行硬件系统及软件系统设计,整个系统耗电量小,体积小、精度高,能满足电力行业监测的实际要求,下一步计划采用5G物联网技术实现多点联控,APP 内报警提示。

参考文献:

[1] 郭利民,赵红梅,吕运朋,等.SF6气体泄漏环境在线智能检测系统的设计[J].仪表技术与传感器,2011,(8):76-78.

[2] 蔡艺剧,黄勇,尹遴,等.一种新的微量气体浓度检测方法[J].化工自动化及仪表,2012,39(4):477-479.

[3] 彭静.电力系统SF6气体泄露监测系统的设计[J].电器工业,2011,(2):47-50.

[4] 张龙飞,韩方源,梁沁沁,等.基于超声法的微量SF6泄漏检测[J].电子技术应用,2016,42(8):101-104.

[5] 李芯怡,孙梦茹,郭思蔷,等. 基于STM32F103型单片机的新型车载护童报警装置设计[J].电子设计工程,2021,5(10):101-104.

(本文来源于《电子产品世界》杂志2022年9月期)



评论


相关推荐

技术专区

关闭