MQ-2可燃气体传感器相关资料
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
摘要
随着电子科学技术的发展,电子技术成为安全方面的有力手段,许许多多安全方面的电子产品,是人们的生活的得力助手。
本设计利用单片机技术结合A/D转换芯片构建了一个可燃气体检测报警器。
当环境中可燃或有毒气体泄露时,当气体报警器检测到可燃气体浓度达到报警器设置的临界点时,可燃气体报警器就会发出报警信号,以提醒工作人员采取安全措施。
本文首先简要介绍了设计可燃气体检测报警器的主要方式以及单片机系统的优势;然后详细介绍了可燃气体检测报警器的设计流程,以及硬件系统和软件系统的设计,并给出了硬件电路的设计细节,包括各部分电路的走向、芯片的选择以及方案的可行性分析等。
本次设计采用MQ-2气体传感器作为可燃气体的信号采集工具,采集到的模拟电压量经过ADC0804转换为数字信号。
单片机采集到ADC0804的数字信号后经过计算,如果可燃气体浓度达到报警器设置的临界点时单片机将驱动LED和蜂鸣器发出报警信号。
在无可燃气体的情况下,发生未知的危险,报警器可以人为的控制按键发出报警信号提醒人们。
按下S1时蜂鸣器报警,LED闪烁;S2用来取消报警。
关键词MQ-2传感器;STC89C52单片机;ADC0804芯片;数码管显示;按键
第一章功能要求及方案论证
1.1选择器件
按系统功能实现要求,决定控制系统采用市场上很普遍的51单片机,A/D转换采用ADC0804,其转换速度完全可以达到本次设计的要求,显示部分由LED数码管进行显示,价格便宜,显示醒目。
1.2系统原理及基本框图
根据毕业设计的要求本次设计采用STC89C52单片机机芯片配合ADC0804模/数转换芯片构成一个简易的可燃气体检测报警系统,显示部分由数码管进行显示可燃气体的浓度级别。
该电路通过MQ-2传感器检测可燃气体并发出0-5V的电压信号并输入到ADC0804芯片采样模拟量电压,经过模/数转换后,产生相应的数字量经过其输出通道DB0~DB7传送给STC89C52单片机的P1口。
STC89C52单片机负责把接收到的数字量经过数据处理,产生正确的7段数码管的显示,显示可燃气体浓度级别。
本系统有单片机最小系统及电源、数码显示、按键、可燃气体检测、报警电路组成。
基本原理如图1-1所示:
图1-1 系统基本方框图
第二章主要元件介绍
2.1STC89C52单片机
2.1.1 概述
STC89C52单片机是STC公司生产的八位单片机。
在这一块芯片上集成了一台微型计算机的各个主要部分。
其中主要有CPU,存储器,可编程I/O口,定时/计数器,串行口等,各部分通过内部总线连接。
STC89C52是一种带8K字节闪烁可编程可檫除只读存储器(FPEROM-Flash Programable and Erasable Read Only Memory )的低电压,高性能COMOS8的微处理器。
该器件采用A TMEL搞密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
2.1.2引脚介绍和最小系统
STC89C52芯片为40引脚双列直插式封装,其引脚排列如图2-1-1所示。
在40条引脚中,有2条用于电源的引脚,2条外接晶体的引脚,4条控制引脚,其它为I/O 引脚。
图2-1-1 AT89S51的引脚图
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
第二功能在单片机与外部设备接口方面具有非常重要的作用。
单片机的最小系统由A T89S51、6M晶振、两个20p电容、10K电阻、复位开关组成。
如图2-1-3所示:
图2-1-3 AT89S51的最小系统
图中电容器C1和C2其稳定振荡频率、快速起振的作用,起电容值一般在15-30pF
本次设计采用22pF电容。
晶振频率的典型值位12MHz,采用6MHz的情况也比较多。
内部振荡方式所得的时钟信号比较稳定,实际电路中使用比较多,本次设计采用12M 晶体振荡器。
上电复位时利用RC充电来实现的。
按键复位又分为:按键电平复位,相当于RST 端通过电阻接高电平;按键脉冲复位,利用RC微分电路产生正脉冲。
2.1.3 定时器描述
A T89S51单片机内有两个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.2模数转换芯片ADC0804
2.2.1概述
ADC0804是典型的8位8通道逐次逼近式A/D转换器,它采用CMOS工艺20引脚集成芯片,分辨率为8位,转换时间约为100us,输入电压范围为0-5V。
芯片内具有三态输出锁存器,可直接连接在数据总线上。
实物如图2-2-1所示:
图2-2-1 ADC0804实物图
2.2.2引脚介绍
ADC0804的内部逻辑结构和引脚封装如图2-4所示:
图2-2-2 ADC0809引脚图
1.CS 芯片选择信号,低电平有效,一旦CS=0表明AD转换器被选中,可以启动工作。
2.RD 外部读取转换结果的控制输出信号。
RD 为高时,DB0~DB7 处理高阻抗;RD 为低时,数字数据才会输出。
3.WR:用来启动转换的控制输入,相当于ADC 的转换开始(/CS=0 时),当/WR 由高变为低时,转换器被清除:当WR 回到高时,转换正式开始。
4.CLK IN,CLK R:时钟输入或接振荡无件(R,C)频率约限制在
100KHZ~1460KHZ,如果使用RC 电路则其振荡频率为1/(1.1RC)
5.INTR:中断请求信号输出,低地平动作.
6.VIN(+) VIN(-) :差动模拟电压输入.输入单端正电压时, VIN(-)接地:而差动输入时,直接加入VIN(+) VIN(-).
7.AGND,DGND:模拟信号以及数字信号的接地.
8.VREF:辅助参考电压.
9.DB0~DB7:8 位的数字输出.
10.VCC: 电源供应以及作为电路的参考电压.
2.2.3 ADC0809典型接法
如图2-2-3所示:
图2-2-3 ADC0804典型接法
2.2.4 A/D转换的性能参数
1、转换精度
通常用A/D转换的最低有效位表示(LSB)
2、转换率
完成一次A/D转换所需时间的倒数。
如完成一次A/D需要100uS,则转换率为
10KHZ.
3、分辨率
对一个n位的A/D,分辨率为2n位
2.2.5 A/D转换的方法和原理
1、计数式A/D转换
2、双积分式A/D转换
前两种速度慢,但是精度高。
3、次逼近式A/D转换
速度快,精度稍差。
2.2.6 连接方式
1、等待连接方式
IN0~IN7接模拟信号8通道轮流采集一次数据,并在内部RAM中。
ADC0804后用地址为0000H~7FFFH,该接口采用延时等待方式,即没有利用EOC信号,而是经过一定的延时等待转换结束,再读取转换结果。
2、中断连接方式
ADC0809的EOC信号经过一反相器反相后接到51的外部中断输入端形成另一种接口电路为中断方式接口电路,即利用EOC信号产生中断,通知单片机A/D转换结束。
3、查询连接方式
ADC0809的EOC信号直接接到51的I/O线上(P1.0),8051通过循环查询EOC 信号,判断转换是否结束。
2.3 MQ-2传感器
MQ-2/MQ-2S气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。
当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。
使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。
MQ-2/MQ-2S气体传感器对液化气、丙烷、氢气的灵敏度高,对天然气和其它可燃蒸汽的检测也很理想。
这种传感器可检测多种可燃性气体,是一款适合多种应用的
低成本传感器。
MQ-2/MQ-2S气敏元件的结构和外形如图2-3-1所示(结构 A 或B),由微型Al2O3陶瓷管、SnO2 敏感层,测量电极和加热器构成的敏感元件固定在塑料或不锈钢制成的腔体内,加热器为气敏元件提供了必要的工作条件。
封装好的气敏元件有6只针状管脚,其中4个用于信号取出,2个用于提供加热电流。
基本电路如图2-3-2。
部件材料
1 气体敏感层二氧化锡
2 电极金(Au)
3 测量电极引线铂(Pt)
4 加热器镍铬合金(Ni-Cr)
5 陶瓷管三氧化二铝
6 防爆网100目双层不锈钢
(SUB316)
7 卡环镀镍铜材(Ni-Cu)
8 基座胶木或尼龙
9 针状管脚镀镍铜材(Ni-Cu)
图2-3-1 结构和外形
图2-3-2 MQ-2基本电路
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-2传感器作为信号采集器件,器件的1、3、4脚连接电源的正极(+5V),2、5、6脚连接地。
采集到的信号通过1k欧姆电阻后送到ADC0804的模拟输入端,R2用来调节输出信号的大小。
具体电路连接如图3-1-1所示:
图3-1-1 信号采集部分
3.2显示部分
显示模块采用共阳极数码管显示。
单片机P0口控制LED数码管显示,其中P0接4.7k欧姆的上拉电阻后8个管脚接1k欧姆的限流电阻后分别于控制数码管的a,b,c,d,e,f,dp连接。
LED显示0-9的段码为
0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90。
具体电路连接方式如图3-2-1所示:
图3-2-1 数码管显示部分
3.3 A/D转换部分
由MQ-2传感器采集到的电压信号接10k欧姆的电阻后接到ADC0804的Vin+端;ADC0804的A-GND和Vin-端接地;CLK-IN端接104电容后接地;CLK-R接10k欧姆电阻接104电容接地;Vref/2接2.5V电压,电路中采用两个1k欧姆的电阻分压得到;DB0-DB7分别连接单片机的P1.0-P1.7用于单片机采集转换后的数字信号;CS、RD、WR三端分别连接P3.0、P3.1、P3.2用于控制单片机于ADC0804进行通信。
具体电路连接方式如图3-3-1所示:
图3-3-1 A/D转换部分
3.4报警显示部分
采集到的数字信号经过单片机计算后如果可燃气体浓度达到报警器设置的临界点时,单片机将控制蜂鸣器报警,同时LED闪烁。
LED的正极接电源正极(+5V),
负极接1K欧姆电阻后接单片机P2.0端。
蜂鸣器采用NPN3041三极管来驱动,三极管集电极接电源正极(+5V),基极接5.1k欧姆电阻后接P2.1端,发射极接蜂鸣器,通过蜂鸣器后接地。
具体电路连接方式如图3-4-1所示:
图3-4-1 报警部分
3.5最小系统及按键
单片机接+5V电源;晶体振荡器频率为12MHz,晶振的两个引脚分别连接在单片机的XTAL1和XTAL2端,晶振的两端再分别连接一个22pF电容后接地;复位电路经电源正极(+5V)接10uF电容后接1k欧姆电阻接地,单片机复位端RST接在电容和电阻之间。
本次设计电路中加入两个按键,用于人为报警。
单片机P3.6和P3.7端分别连接一个按键后接地。
当按下S1时蜂鸣器报警,LED闪烁;S2用来取消报警。
具体电路连接方式如图3-5-1所示:
图3-5-1 最小体统及按键
第四章整体电路
图4-1-1 系统整体图
4.2元器件清单
AT89S52单片机1个、ADC0804转换器1个、蜂鸣器1个、数码管1个、MQ-2传感器1个、LED发光二极管1个、按键2个、22皮法电容2个,10微法电容1个、104电容2个、12MHz晶振1个、3041三极管1个、20k欧姆电位器1个、1k欧姆电阻13个、10k欧姆电阻2个、4.7K欧姆9脚排阻1个。
4.3软件设计部分
4.3.1 软件设计流程图
4.3.2 单片机程序设计
见附录。
第五章总结
经过近一个月的毕业设计,使我对集成电路的使用有了更进一步的认识和了解,要想学好它要重在实践,通过实践,我也发现我的很多不足之处,把所学习到的知识融合到一块还不是想象中的那么简单,其中涉及了单片机、数字电子技术、模拟电子技术、protel 99se等学科知识,要学好这门课程还需要更多的努力。
通过实践的学习,使我对整体的电路设计有了一个更全面的了解,锻炼了重全局考虑局部的能力。
深刻体会了理论联系实际的重要性,从老师提出设计要求到完成设计报告,不断的完善自己的设计和电路。
在图书馆查资料到写出具体的实施方案、画出电路图都要认真考虑,寻找最优的设计方案。
经过多次修改最终于实现了设计要求。
附录
单片机程序:
#include<reg52.h> //载入头文件
#include<intrins.h>
#define uchar unsigned char //简化变量定义方法
#define uint unsigned int
uint num,aa,bb,adval; //定义全局变量
uint table[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//数组用于数码管显示0--9
sbit wr=P3^0; //位定义 AD wr脚
sbit rd=P3^1; //位定义 AD rd脚
sbit csad=P3^2; //位定义 AD cs脚
sbit led=P2^0; //位定义 LED
sbit beep=P2^1; //位定义蜂鸣器
sbit key0=P3^7; //位定义按键0
sbit key1=P3^6; //位定义按键1
void init(); //子函数声明
void start(); //子函数声明
void read(); //子函数声明
void delay(uint z) //延时子函数z ms
{
uint t1,y; //定义局部变量t1,y
for(t1=z;t1>0;t1--)
for(y=110;y>0;y--);
}
void main() //主函数
{
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); //按键松手检测
}
}
}
}
void init() //CS脚置0,定时器0初始化子函数{
csad=0; //CS脚置0
P2=0x01;
TMOD=0x21; //设置定时器工作方式
TH0=(65536-50000)/256; //T0赋初值
TL0=(65536-50000)%256;
ET0=1; //定时计数溢出中断允许位
T2CON=0x00; //T2赋初值
TH2=(65536-50000)/256;
TL2=(65536-50000)%256;
ET2=1;
EA=1; //开总中断
}
void start() //启动AD子函数
{
wr=1;
_nop_(); //延时一个机器周期
wr=0;
_nop_();
wr=1;
}
void read() //AD读操作子函数
{
P1=0xff;
rd=1;
_nop_(); //延时一个机器周期
rd=0;
_nop_();
adval=P1; //读取AD中的数据
rd=1;
}
void timer0() interrupt 1 //T0中断服务程序{
TH0=(65536-50000)/256; //赋初值
TL0=(65536-50000)%256;
aa++;
if(aa==6) //延时300ms
{
aa=0;
led=~led; //LED值取反
beep=~beep; //蜂鸣器值取反}
}
void timer2() interrupt 5 //T2中断服务程序{
TF2=0;
TH2=(65536-50000)/256;
TL2=(65536-50000)%256;
bb++;
if(bb==10)
{
bb=0;
led=~led;
beep=~beep;
}
}。