可燃气体检测装置论文.docx
《可燃气体检测装置论文.docx》由会员分享,可在线阅读,更多相关《可燃气体检测装置论文.docx(21页珍藏版)》请在冰豆网上搜索。
可燃气体检测装置论文
摘要
随着电子科学技术的发展,电子技术成为安全方面的有力手段,许许多多安全方面的电子产品,是人们的生活的得力助手。
本设计利用单片机技术结合单片机内部自带的A/D转换器构建了一个可燃气体检测报警器。
当环境中可燃气体泄露时,当气体报警器检测到可燃气体浓度达到报警器设置的临界点时,可燃气体报警器就会发出报警信号,以提醒工作人员采取安全措施。
本文首先简要介绍了设计可燃气体检测报警器的主要方式以及单片机系统的优势;然后详细介绍了可燃气体检测报警器的设计流程,以及硬件系统和软件系统的设计,并给出了硬件电路的设计细节,包括各部分电路的走向、芯片的选择以及方案的可行性分析等。
本次设计采用MQ-4气体传感器作为可燃气体的信号采集工具,采集到的模拟电压量经过STC90C54AD单片机内部自带的A/D转换器为数字信号。
单片机采集到的数字信号后经过计算,如果可燃气体浓度达到报警器设置的临界点时单片机将蜂鸣器发出报警信号。
在无可燃气体的情况下,发生未知的危险,报警器可以人为的控制按键发出报警信号提醒人们。
关键词MQ-4传感器;STC90C54AD单片机;数码管显示;按键
第一章功能要求及方案论证
1.1选择器件
按系统功能实现要求,决定控制系统采用市场上很普遍的51单片机而且内部自带A/D转换功能,A/D转换速度完全可以达到本次设计的要求,显示部分由LED数码管进行显示,价格便宜,显示醒目。
1.2系统原理及基本框图
根据毕业设计的要求本次设计采用STC89C54AD单片机机内部自带模/数转换芯片构成一个简易的可燃气体检测报警系统,显示部分由数码管进行显示可燃气体的浓度级别。
该电路通过MQ-4传感器检测可燃气体并发出0-5V的电压信号并输入到单片机内部自带的A/D转换器采样模拟量电压,经过模/数转换后,产生相应的数字量经过单片机处理后进行显示。
STC89C54AD单片机负责采样传感器的模拟信号和把接收到的数字量经过数据处理,产生正确的7段数码管的显示,显示可燃气体浓度值。
本系统有单片机最小系统及电源、数码显示、按键、可燃气体检测、报警电路组成。
基本原理如图1-1所示:
图1-1系统基本方框图
第二章主要元件介绍
2.1STC90C54AD单片机
2.1.1概述
STC90C54AD单片机是STC公司生产的八位单片机。
完全兼容
STC89C51单片机的多有功能,STC90C54AD比STC89C51多了一个内部集成的A/D模拟信号采集功能。
在这一块芯片上集成了一台微型计算机的各个主要部分。
其中主要有CPU,存储器,可编程I/O口,定时/计数器,串行口等,各部分通过内部总线连接。
STC90C54AD是一种带16K字节闪烁可编程可檫除只读存储器(FPEROM-FlashProgramableandErasableReadOnlyMemory)的低电压,高性能COMOS8的微处理器。
该器件采用ATMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
2.1.2引脚介绍和最小系统
STC90C54AD芯片为40引脚双列直插式封装,其引脚排列如图2-1-1所示。
在40条引脚中,有2条用于电源的引脚,2条外接晶体的引脚,4条控制引脚,其它为I/O引脚。
图2-1-1STC90C54AD的引脚图
1、电源引脚Vss和Vcc
Vss(20):
接地;Vcc(40):
正常操作时接+5V电源。
2、外接晶体引脚XTAL1和XTAL2
当外接晶体振荡器时,XTAL1和XTAL2分别接在外接晶体两端。
当采用外部时钟方式时,XTAL1接地,XTAL2接外来振荡信号。
3、控制引脚RST/VPD、ALE/PROG、PSEN、EA/Vpp
RST/VPD:
当晶体振荡器正常运行时,在此引脚上出现二个机器周期以上的高电平使单片机复位。
Vcc掉电期间,此引脚可接备用电源,以保持内部RAM的数据。
当Vcc下降到低于规定的电压,而VPD在规定的电压范围内,VPD接向内部RAM提供备用电源。
ALE/PROG(30):
当访问外部存储器时,由P2口送出地址的高8位,P0口送出地址的低8位,数据也是通过P0口传送。
作为P0口某时送出的信息到底是低8位地址还是传送的数据,需要有一信号同步的进行分别。
当ALE信号(允许地址锁存)为高电平(有效),P0口送出低8位地址,通过ALE信号锁存低8位地址。
即使不访问外部存储器,ALE端仍以不变的频率周期性地出现正脉冲信号,此频率为振荡器频率的1/6,因此可以做对外输出的时钟。
对于有程序存储器的单片机在对内部程序存储器编程期间,此引脚用于输入编程脉冲。
PESN(29):
程序存储器读选通信号,低电平有效。
51单片机可以外接程序存储器及数据存储器,它们的地址可以是重合的。
51单片机时通过相应的控制信号来区别到底是P2口和P0口送出的是程序存储器还是数据存储器地址。
从外部程序存储器取指令(或常数)期间,每个机器周期两次PSEN有效,此时地址总线上送出地址程序存储器地址;如果访问外部数据存储器,这两次有效的PSEN信号将不出现。
外部数据存储器是靠RD及WR信号控制的,PSEN同样可以驱动8个LSTTL输入。
EA/Vpp(31):
当EA保持高电平时,访问内部程序存储器(4KB),但当PC(程序计数器)值超过0FFFH时,将自动转向执行外部程序存储器内的程序。
当EA保持低电平时,则只访问外部程序存储器(从0000H开始),不管单片机内部是否有程序存储器。
对于内部有程序存储器的单片机在对内部程序新学期编程期间,此引脚用于施加21V的编程电源(Vpp)。
4、输入输出引脚
P0.0-P0.7:
P0口时一个漏极开路型标准双向I/O口。
在访问外部存储器时,它是分时切换的地址(低8位)和数据总线,在访问外部设备期间使用内部的上拉电阻。
在对内部程序存储器编程时,它接收指令字节,而在验证内部程序时,则输出指令字节。
验证内部程序时,要求外接上拉电阻。
P1.0-P1.7:
P1口是带内部上拉电阻的8位双向I/O接口。
在内部程序存储器编程和验证时,它接收8位地址。
P2.0-P2.7:
P2口时一个带内部上拉电阻的8位双向I/O接口。
在访问外部存储器时,它送出高8位地址。
在对内部程序存储器编程和验证期间,它接收高8位地址。
P3.0-P3.7:
P3口是一个带内部上拉电阻的8位双向I/O接口。
在51单片机中,这8个引脚还兼有第二功能,这些功能见图2-1-2.
端口线
第二功能
P3.0
RXD串行输入
P3.1
TXD串行输出
P3.2
INT0外部中断0输入
P3.3
INT1外部中断1输入
P3.4
T0定时器0外部输入
P3.5
T1定时器1外部输入
P3.6
WR外部数据存储器写信号
P3.7
ED外部数据存储器读信号
图2-1-2P3口的第二功能
第二功能在单片机与外部设备接口方面具有非常重要的作用。
单片机的最小系统由AT89S51、6M晶振、两个20p电容、10K电阻、复位开关组成。
如图2-1-3所示:
图2-1-3STC90C54AD的最小系统
图中电容器C1和C2其稳定振荡频率、快速起振的作用,起电容值一般在15-30pF本次设计采用22pF电容。
晶振频率的典型值位12MHz,采用6MHz的情况也比较多。
内部振荡方式所得的时钟信号比较稳定,实际电路中使用比较多,本次设计采用12M晶体振荡器。
上电复位时利用RC充电来实现的。
按键复位又分为:
按键电平复位,相当于RST端通过电阻接高电平;按键脉冲复位,利用RC微分电路产生正脉冲。
2.1.3定时器描述
STC90C54AD单片机内有两个16位定时器/计数器:
定时器1(T0)、定时器2(T1)、和定时器3(T2)它们都有定时或对外部事件计数的功能,可用于定时控制、延时、对外部事件检测和计数等场合。
定时器T0和T1两个16位定时器实际上都是16位加1计数器。
T0实际是由两个8位专用寄存器TH0(8CH)和TL0(8AH)组成,T1是由TH1(8DH)和TL1(8BH)组成。
每个定时器都可由软件设置为定时工作方式或计数工作方式及其他灵活多样的可控功能方式。
这些都是由专用寄存器TMOD设置和TCON控制。
在89S52单片机中,增加了一个16位`定时/计数器T2。
T2和T0和T1有类似的功能即可以做定时器或计数器使用,同时还增加了捕捉等新的功能。
它的功能比其它两个定时器更强,使用也较复杂。
在特殊功能寄存器组中有6个与T2有关的积存器,它们分别是:
控制寄存器T2COM、方式控制寄存器T2MOD、捕捉寄存器RCAP2L和RCAP2H、定时/计数器TL2、TH2。
它们在片内存储器中的地址依次从C8H至CDH。
设置为定时方式时,定时器记数片内震荡器输出经12分频后的脉冲(机器周期信号)。
即每个机器周期使定时器(T0或T1)的数值增加1直至计满溢出。
当采用12MHZ晶体时,一个机器周期为1US,计数频率为1MHZ。
设置为计数方式时,通过引脚T0(P3。
4)和T1(P3。
5)对外部脉冲信号计数。
当输入脉冲信号产生由1至0的下降沿时,定时器的值增加1。
在每个机器周期的S5P2期间采样T0和T1脚的输入电平,若前一个机器周期采样值为1,下一个机器周期采样值为0,则计数器加1。
此后的机器周期53P1期间,新的数值装入计数器。
所以,检测一个1至0的跳变需要二个机器周期,故最高计数频率为震荡频率的1/24。
虽然对输入信号的占空比无特殊要求,但为了确保某个电平在变化之前至少被采样一次。
要求电平保持时间至少是一个完整的机器周期。
2.2STC90C54AD单片机内部A/D模块介绍
2.2.1A/D转换介绍
STC9C54AD单片机自带A/D转换器介绍:
STC9C54AD在P1口,有10位精度的高速A/D转换器,P1.7-P1.0共8路电压输入型,可做按键扫描,电池电压检测,频谱检测等。
89个时钟可完成一次转换,如表1所示:
表1A/D转换器
Add
Name
7
6
5
4
3
2
1
0
ResetValue
P1_ADC_EN
97h
允许P1.x成为A/D口
ADC_P17
ADC_P16
ADC_P15
ADC_P14
ADC_P13
ADC_P12
ADC_P11
ADC_P10
0000,0000
ADC_CONTR
05h
A/D转换控制寄存器
-
ADC_SPEED1
ADC_SPEED0
ADC_FLAG
ADC_START
CHS2
CHS1
CHS0
xxx0,0000
ADC_DATA
C6h
A/D转换结果寄存器高8位
-
-
-
-
-
-
-
-
0000,0000
ADC_LOW2
C7h
A/D转换结果寄存器低2位
P1_ADC_EN特殊功能寄存器:
P1.x作为A/D转换输入通道来用允许特殊功能寄存器相应位为“1”时,对应的P1.x口作为A/D转换使用,内部上拉电阻自动断开。
ADC_CONTR特殊功能寄存器:
A/D转换控制特殊功能寄存器。
CHS2/CHS1/CHS0:
模拟输入通道选择,CHS2/CHS1/CHS0。
CHS2
CHS1
CHS0
模拟输入通道选择
0
0
0
选择P1.0作为A/D输入来用
0
0
1
选择P1.1作为A/D输入来用
0
1
0
选择P1.2作为A/D输入来用
0
1
1
选择P1.3作为A/D输入来用
1
0
0
选择P1.4作为A/D输入来用
1
0
1
选择P1.5作为A/D输入来用
1
1
0
选择P1.6作为A/D输入来用
1
1
1
选择P1.7作为A/D输入来用
ADC_SPEED1/ADC_SPEED0:
ADC转换速度控制位
[ADC_SPEED1:
ADC_SPEED0]=[0,0]完成1次A/D转换需要89个时钟(如果要取10位转换结果,建议不要选择最快转换速度)
[ADC_SPEED1:
ADC_SPEED0[=[0,1]完成1次A/D转换需要178个时钟
[ADC_SPEED1:
ADC_SPEED0[=[1,0]完成1次A/D转换需要356个时钟
[ADC_SPEED1:
ADC_SPEED0[=[1,1]完成1次A/D转换需要534个时钟
模拟/数字转换结果计算公式如下:
如果要取8位A/D转换结果:
(ADC_DATA[7:
0])=256xVin/Vcc
如果要取10位A/D转换结果:
(ADC_DATA[7:
0],ADC_LOW2[1:
0])=1024xVin/Vcc。
Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。
ADC_START:
模拟/数字转换(ADC)启动控制位,设置为“1”时,开始转换
ADC_FLAG:
模拟/数字转换结束标志位,当A/D转换完成后,ADC_FLAG=1。
ADC_DATA特殊功能寄存器:
A/D转换结果特殊功能寄存器
2.2.2A/D转换的性能参数
1、转换精度
通常用A/D转换的最低有效位表示(LSB)
2、转换率
完成一次A/D转换所需时间的倒数。
如完成一次A/D需要100uS,则转换率为10KHZ.
3、分辨率
对一个n位的A/D,分辨率为2n位
2.2.3A/D转换的方法和原理
1、计数式A/D转换
2、双积分式A/D转换
前两种速度慢,但是精度高。
3、次逼近式A/D转换
2.3MQ-4传感器
MQ-4气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。
当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。
使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。
MQ-4气体传感器对液化气、甲烷、丙烷、氢气的灵敏度高,对天然气和其它可燃蒸汽的检测也很理想。
这种传感器可检测多种可燃性气体,是一款适合多种应用的低成本传感器。
MQ-4气敏元件的结构和外形如图2-3-1所示(结构A或B),由微型Al2O3陶瓷管、SnO2敏感层,测量电极和加热器构成的敏感元件固定在塑料或不锈钢制成的腔体内,加热器为气敏元件提供了必要的工作条件。
封装好的气敏元件有6只针状管脚,其中4个用于信号取出,2个用于提供加热电流。
基本电路如图2-3-2。
图2-3-1结构和外形
图2-3-2MQ-4基本电路
2.4数码管
LED数码管分共阳极与共阴极两种,其工作特点是,当笔段电极接低电平,公共阳极接高电平时,相应笔段可以发光。
共阴极LED数码管则与之相反,它是将发光二极管的阴极(负极)短接后作为公共阴极。
当驱动信号为高电平、端接低电平时,才能发光。
LED数码管等效于多只具有发光性能的PN结。
当PN结导通时,依靠少数载流子的注人及随后的复合而辐射发光,其伏安特性与普通二极管相似。
在正向导通之前,正向电流近似于零,笔段不发光。
当电压超过开启电压时,电流就急剧上升,笔段发光。
因此,LED数码管属于电流控制型器件,其发光亮度L(单位是cd/m2)与正向电流IF有关,用公式表示:
L=KIF即亮度与正向电流成正比。
LED的正向电压U,则与正向电流以及管芯材料有关。
使用LED数码管时,工作电流一般选10mA左右/段,既保证亮度适中,又不会损坏器件。
图2-4-1一位数码管的原理图
本实验的显示模块主要由一个4位一体的7段LED数码管(SM410564)构成,用于显示测量到的电压值。
它是一个共阳极的数码管,每一位数码管的原理图如图2-4-1所示。
每一位数码管的a,b,c,d,e,f,g和dp端都各自连接在一起,用于接收STC89C52的P1口产生的显示段码。
1,2,3,4引脚端为其位选端,用于接收STC89C52的P3口产生的位选码。
图2-5-2分别为其实物图和引脚图。
图2-4-2数码管的实物图和引脚图
第三章电路各部分介绍
3.1可燃气体信号采集部分
在本设计中,采用MQ-4传感器作为信号采集器件,器件的1、3、4脚连接电源的正极(+5V),2、5、6脚连接地。
采集到的信号通过1k欧姆电阻后送到ADC0804的模拟输入端,R14用来调节输出信号的大小。
具体电路连接如图3-1-1所示:
图3-1-1信号采集部分
3.2显示部分
显示模块采用共阳极数码管显示。
单片机P2口控制LED数码管显示。
位选用PO口来控制。
具体电路连接方式如图3-2-1所示:
图3-2-1数码管显示部分
3.3A/D转换部分
由MQ-4传感器采集到的电压信号接单片机P1.0。
具体电路连接方式如图3-3-1所示:
图3-3-1A/D转换部分
3.4报警显示部分
采集到的数字信号经过单片机计算后如果可燃气体浓度达到报警器设置的临界点时,单片机将控制蜂鸣器报警,同时LED亮。
LED的正极接电源正极(+5V),负极接1K欧姆电阻后接单片机P2.0端。
蜂鸣器采用NPN9013三极管来驱动,三极管集电极接电源正极(+5V),基极接4.7k欧姆电阻后接P2.1端,发射极接蜂鸣器,通过蜂鸣器后接地。
具体电路连接方式如图3-4-1所示:
图3-4-1报警部分
3.5最小系统及按键
单片机接+5V电源;晶体振荡器频率为24MHz,晶振的两个引脚分别连接在单片机的XTAL1和XTAL2端,晶振的两端再分别连接一个22pF电容后接地;复位电路经电源正极(+5V)接10uF电容后接10k欧姆电阻接地,单片机复位端RST接在电容和电阻之间。
本次设计电路中加入4个按键,用于人为报警和设置报警的上限值。
按键分别接单片机P1.1、P1.2、P1.3、P1.4端。
S1是设置键,S2是数字键加,S3是数字键减,当按下S4时蜂鸣器报警,LED亮;再次按下S4用来取消报警。
具体电路连接方式如图3-5-1所示:
图3-5-1最小体统及按键
第四章整体电路
图4-1-1系统整体图
4.3软件设计部分
4.3.1软件设计流程图
4.3.2单片机程序设计
见附录。
第五章总结
经过近一个月的毕业设计,使我对集成电路的使用有了更进一步的认识和了解,要想学好它要重在实践,通过实践,我也发现我的很多不足之处,把所学习到的知识融合到一块还不是想象中的那么简单,其中涉及了单片机、数字电子技术、模拟电子技术、protel99se等学科知识,要学好这门课程还需要更多的努力。
通过实践的学习,使我对整体的电路设计有了一个更全面的了解,锻炼了重全局考虑局部的能力。
深刻体会了理论联系实际的重要性,从老师提出设计要求到完成设计报告,不断的完善自己的设计和电路。
在图书馆查资料到写出具体的实施方案、画出电路图都要认真考虑,寻找最优的设计方案。
经过多次修改最终于实现了设计要求。
参考文献
[1]ISBN7-81077-517-0,李光飞,单片机课程设计实例指导,-1版,-北京,-北京航空航天大学出版社,2004
[2]ISBN7-81077-368-2,马忠梅,单片机的C语言应用程序设计,-3版,-北京,-北京航空航天大学出版社,2003
[3]ISBN978-7-5084-4302-7,张道德,单片机接口技术:
C51版,-1版,-北京,-中国水利水电出版社,2007
[4]ISBN7-900101-08-X,夏路易,电路原理图与电路板设计教程protel99se,-1版,-北京,-北京希望电子出版社,2002
附录
单片机程序:
#include//载入头文件
#include
#defineucharunsignedchar//简化变量定义方法
#defineuintunsignedint
uintnum,aa,bb,adval;//定义全局变量
uinttable[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//数组用于数码管显示0--9
sbitwr=P3^0;//位定义ADwr脚
sbitrd=P3^1;//位定义ADrd脚
sbitcsad=P3^2;//位定义ADcs脚
sbitled=P2^0;//位定义LED
sbitbeep=P2^1;//位定义蜂鸣器
sbitkey0=P3^7;//位定义按键0
sbitkey1=P3^6;//位定义按键1
voidinit();//子函数声明
voidstart();//子函数声明
voidread();//子函数声明
voiddelay(uintz)//延时子函数zms
{
uintt1,y;//定义局部变量t1,y
for(t1=z;t1>0;t1--)
for(y=110;y>0;y--);
}
voidmain()//主函数
{
init();//定时器AD初始化
while
(1)//while循环
{
start();//启动AD
delay(200);//延时200ms用于AD处理
read();//读取AD数据
num=adval/12;//数据处理
if(num>9)num=9;
P0=table[num];//数码管显示数据
if((num>2)||(num==2))//检测数据大于或等于3开定时器0报警
TR0=1;
if(num<2)//如果数据小于3关定时器0取消报警
{
TR0=0;//关定时器0
beep=0;//关蜂鸣器
led=1;//关LED
}
if(key0==0)//报警按键
{
delay(20);//消抖
if(key0==0)
{
TR2=1;
while(!
key0);//按键松手检测
}
}
if(key1==0)//报警取消
{
delay(20);//消抖
if(key1==0)
{
TR2=0;//关定时器2
beep=0;//蜂鸣器报警
led=1;//LED闪烁
while(!
key1);//按键松手检测
}
}
}
}
voidinit()//CS脚置0,定时器0初始化子函数
{
csad=0;