基于STM32的燃气消费控制系统设计

摘 要

随着我国经济的快速发展,对环境也是越来越重视。对资源的高效利用,减少污染,非常重要。而清洁、高效的天然气将成为未来能源发展的重要方向。在西气东输项目启动之后,燃气更是通向了千家万户。传统的燃气收费方式为用户先使用,燃气公司再定期抄表收费。这种收费方式效率低且容易出错,而嵌入式系统的应用,会使得该消费控制方便、安全可靠。
本文主要是基于STM32微控制器为控制核心,以RC522射频模块和IC卡作为燃气计费的载体。该系统通过气体流量传感器实时监测燃气流量信息,把得到的数据传给微控制器,微控制器对气体流速积分运算得到的燃气量,然后根据燃气单价换算成金额后,更新IC卡内余额。并在OLED屏实时显示用户的余额信息。当余额低于阈值时,提示用户IC卡充值。当可用额度为零时,关断继电器,关闭燃气的供应,实现对燃气消费的自动控制。
经过调试后,系统可以对燃气消费量进行扣费,以及IC卡充值。并可以实时显示用户消费信息,同时可以根据卡内余额控制燃气关断和提醒用户提前充值。

关键字: STM32;燃气消费;流量计;RC522射频模块;OLED屏

1 总体方案

本设计采用STM32F103C8T6主控芯片对数据进行采集处理,通过CFA100流量检测燃气的流速,CFA100流量计的信号是模拟信号,单片机通过内部16位ADC,进行模数转换,然后计算出燃气的使用量,结合燃气单价,算出总消费额后,对M1的射频卡进行扣费。
RC522与STM32主控芯片通过SPI进行通信,经过寻卡→防冲突→选卡→读取IC卡中的金额,根据用户使用的燃气流量计算出消费金额后扣除IC卡中的费用,当余额减到设定阈值时,蜂鸣器会报警一段时间,提醒用户燃气充值。当卡内金额减到0.0时,通过IO口控制外部继电器模块关断电磁阀切断燃气供应,并提醒用户IC卡充值。
12864OLED屏与STM32主控芯片采用SPI通信,显示模块主要显示3个界面的芯片:一是用户没有插入IC卡时,消费控制系统的主界面,提示用户插卡消费燃气;二是用户插入IC后,显示用户的基本信息、账户余额、以及燃气使用总量,方便用户实时知道自己的卡内余额和燃气使用量,方便用户提前充值,避免突然切断燃气给消费用户带来的不便;三是余额低于设定阈值时,显示余额不足,提示用户提前进行燃气充值;四是燃气消费额为0.0时,显示余额为0.0,提醒用户充值。五是充值界面,显示用户余额,以及充值金额信息。
继电器通过IO和主控芯片进行通信,主要用于根据用户的卡内余额,打开或者关闭燃气管道电磁阀。无源蜂鸣器模块主要是给用户提示信息,如果用户余额不足,会提起给予报警,提示用户提前充值,以避免给用户带来不便。
根据上述硬件组成,基于STM32的燃气消费控制系统总体框图如图2.1所示。
在这里插入图片描述

图2.1 系统总体框图

2 系统硬件设计

2.1 单片机系统电路设计

2.1.1 电源电路设计

嵌入式设计系统电源电路的设计肯定是必不可少,本设计中采用USB 5V供电,经过ASM117-3.3V稳压芯片输出3.3V电压,3.3v电压STM32F103C8T6,12864OLED屏幕、继电器、LED灯、蜂鸣器、射频卡模块以及流量传感器CAF100提供工作电压。
该系统中还提供了两个5V和两个3.3V的扩展供电模块,以方便连接其他外设。电源电路如图3.1所示。
在这里插入图片描述

图3.1 电源电路

3 单片机晶振电路

在单片机设计中需要添加组件来计量时间,所以添加晶振电路用来作为硬件和软件的基准时间,本系统设计采用8M的外部晶振作为单片机系统的时钟源,经过内部倍频后为主控芯片提供最高72MHZ的系统时钟。
晶振是可以理解为STM32的脉搏,是单片机的驱动之源,为单片机提供精准时钟。在使用任何一个寄存器配置之前都要先打开寄存器对应的时钟,这样的好处是如果暂时不使用这个寄存器,可以先把时钟关掉,从而可以降低系统的功耗,达到节能低功耗的目的。
STM32时钟有3个时钟源提供时钟:1,HSI:8MHZ的内部时钟信号,是STM32单片机内部自带的时钟,但是精度不是很精准;2,HSE:高速的外部晶振,通常使用频率大小为8–12MHZ的晶振,这个高速晶振非常准确;3,LSE:一宽低速的外部晶振,晶振频率为37.768KHZ,通常是在单片机断电的情况下,低功耗为单片机提供时钟,一般用过RTC的精准计时。
本次设计的晶振电路使用的是石英晶体振荡器。该晶振器通过利用石英晶体的特性制作成的谐振器件。石英晶振具有很好的精准度、便宜实惠的价格、易于使用的优势,外部晶振电路如图3.2所示。
在这里插入图片描述

图3.2所示 晶振电路

3.1 单片机复位电路

在本次系统设计中,如果出现了程序紊乱、系统错误或想着重新启动一下系统。比如出现了程序出错、在不明干扰下出现了偏离历程的现象或者系统上电情况,这时候就需要一个复位电路来重启单片机系统。让程序重头读取、运行。这样可以解决意外的问题或者快速重启等问题。
复位电路的原理是单片机NRST引脚接收到1.5-4.5ms的低电平信号,所以NRST引脚通过上拉电阻接电源正极,通过电容接地。单片机上电时对电容充电,复位引脚处于低电平实现上电复位。手动按键按下时,电容放电,复位引脚接地,实现手动对单片机复位。复位电路图如图3.3所示。
在这里插入图片描述

图3.3 复位电路

3.2 系统显示模块

3.2.1 OLED显示模块简介

本设计用于显示用户的燃气消费余额,以及燃气使用量和一些提示信息。选用的为0.96寸的OLED屏幕进行显示。OLED屏有许多显著的优点。OLED的核心层厚度很薄,节省空间。OLED是采用二极管自发光原理,不需要背面光源,发光转化效率高,功耗也比需要背光源的液晶屏幕低。正是由于OLED屏自发光的特征,这也使得OLED屏的视角非常广阔,视角可达到170度,从侧面也不会失真。
本设计采用0.96寸OLED屏幕,其具备高亮度低功耗的特点,显示颜色纯正清晰,即使在阳光环境下也有清晰的显示效果。该款屏幕的分辨率为128*64;大于160度的超大的广阔视角,在3-5V的驱动电压之间都可以正常工作,正常显示时该屏幕功耗为0.06W,节能效果也是非常的好。实物如图3.5所示。
在这里插入图片描述

图3.5 OLED实物图

3.3 射频模块

3.3.1 RC522模块的简介

为了改变以往的先用燃气再收费,收费难的问题,本设计采用RCC522射频模块和IC卡实现对燃气的计费,用户应先持卡缴费,购买燃气后,燃气流量根据IC卡的余额信息,给用户通燃气。
计费模块本设计采用的为MF RC522芯片和M1卡,MFRC522芯片荷兰恩智浦公司的非接触式通信中高集成度读写卡芯片,其射频频率为13.56MHZ。该芯片体积小,安全可靠性高。其主要包括模拟接口部分,用于和IC卡通讯;内部控制机制,处理内部数据;以外部通信接口,和微控制芯片之间数据通信,等三部分。如图3.7为简化的MFRC522框图。
在这里插入图片描述

图3.7 MFRC522的简化框图
本模块可直接装入各种读卡器磨具。模块采用3.3V的供电电压。同过SPI接口简单的几条线就可以直接与任何的控制芯片进行通信。并且可以保证模块的稳定可靠工作,而且读卡距离也比较远。

4 系统调试与结果

4.1 CFA100模块的调试

CFA100流量传感器输出的是模拟量,通过STM32的ADC进行模数转换,把0-3.3V的电压信息线性转化为0-4096个梯度。串口通过TTL转USB工具把出ADC采集的数据发计算机串口助手显示,方便调试。确保CFA100正常工作。

4.2 整个系统调试结果显示

每部分外设调试完成之后,就可以把各个外设统一起来,实现整体功能,如图整个系统处于开机没有IC卡插入,系统和开机界面相同,显示系统名字,以及提示用户插卡消费的提示简图。燃气关断状态的实物图如图5.7所示。

图5.7 燃气关断状态系统实物图
当有效IC卡插入,金额充足,OLED屏显示住户楼层信息、账户余额、以及消费的总气体量。继电器闭合,指示灯亮起,打开燃气阀,供应燃气。燃气处于供应状态的实物图如图5.8所示。
在这里插入图片描述

图5.8 燃气处于供应状态的体统实物图

当用户充值IC卡时,本设计采用按键充值,每次按下充值10.0元,充值界面依然显示用户楼层信息、账户余额,以及充值的金额。IC卡充值界面如图5.11所示。
在这里插入图片描述

图5.11 IC卡充值界面
经过几个月不懈的努力终于把设计完成,后期也会继续努力,升级和完善整个系统。整体实物图如图5.12所示。
在这里插入图片描述

图5.12 整体实物图

5 结 论

本设计中是基于燃气的消费控制,第一点要做的就是对气体的体积测量,因为传感器传送的是实时的流速信息,而且流速一般也不是均匀的,因此这些数据采集后的数据处理算法便成为了我的工作,我查阅资料,在高等数学中微分在工程计算中得到启发,采用数学的定积分近似运算–梯形法对燃气的总体积进行计算,又一次实践体验了数学在实际工程中的应用。在OLED屏显示界面中,因为要进行几个页面的切换,所以都要进行清屏处理,但是如果每刷新一次屏幕都清屏一次,会出现刷屏的问题,后来我想到UCOSII操作系统里的向量集思想,在每个界面刷新设置一个标志位,只在每次界面切换的时候刷新一次屏幕,这样就解决了刷屏的问题。在射频卡模块的学习过程中,一开始对这个模块没有了解,无从下手,后来请教他人,自己也在网上找资料,了解整个模块的工作流程,以及IC卡信息存储原理,IC卡每个块的相同与区别,最终成功驱动射频模块工作。
经过不断地努力探索与调试,最终设计实现通过STM32和射频模块的燃气消费的自动控制,收获良多。
本设计要在实际应用中发挥作用,当然还有很多地方值得去探索和发掘,比如对IC卡内的余额信息安全问题值得进一步提升,对仪表出现故障问题能即使的给出警告信息排查。对进一步的研究探索,我想加入网络信息,将用户燃气消费信息,以及卡内余额信息,都通过网络传输到数据库中,这样既能统计用户的燃气使用量也能增加消费者卡内信息安全。