基于单片机的一氧化碳报警器设计.docx
《基于单片机的一氧化碳报警器设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的一氧化碳报警器设计.docx(30页珍藏版)》请在冰豆网上搜索。
基于单片机的一氧化碳报警器设计
第一章概述
1.1设计背景
一氧化碳(CO为无色、无味、无刺激性气体,比重0.967,几乎不溶于水,不易被
活性炭吸附。
当碳物质燃烧不完全时,可产生CO如人体短时间内吸收较高浓度的C0,
或浓度虽低,但吸时间较长,均可造成急性中毒。
CO与血红蛋白结合能力超过氧和血红蛋
白的结合能力的200-300倍,当CO与血红蛋白结合形成的碳氧血红蛋白含量达到5%寸,就会对人体产生慢性损害,达到60%寸就会昏迷,达到90%ft会死亡。
唐山中润煤化工有限公司甲醇分厂,是利用炼焦过程产生的焦炉气,经过净化、脱硫等工段后,纯净的焦炉气传输到甲醇分厂再各个工段用来生产甲醇。
净化后焦炉气主要含量是CO在生产现场及
周围不可避免的有煤气存在,当CO超出安全范围时,常人很难发现,为了保证人员财产安全和正常生产不受影响,检测其含量十分重要。
所以基于单片机设计制作一氧化碳报警器,保障人们的生命财产安全。
1.2一氧化碳报警器概述
首先我们应该对国家标准规定的燃气报警器的种类有所了解。
燃气报警器可分为可燃气体泄漏仪(简称“检漏仪”),可燃气体报警控制器(简称“控制器”)、可燃气体探测器(简称“探测器”)、可燃气体报警器(简称“报警器”)四大系列产品。
可燃气报警器的核心是气体传感器,俗称“电子鼻”。
当气体传感器遇到燃气时,传感器电阻随燃气浓度而变化,随之产生电信号,供燃气报警器后继线路处理。
经过电子路线处理变成浓度成比例变化的电压信号,由线性电路加以补偿,使信号线性化,经微机处理、逻辑分析,输出各种控制信号,即当燃气浓度达到报警设定值时,燃气报警器发出声光报警信号。
1.3设计的目的及意义
设计出性能更加可靠,经济实惠的一氧化碳报警器。
意义在于:
(1)成本低廉并能对一氧化碳准确报警。
(2)该产品不需专业人员操作,只要放在合适位置,通电即可,连续使用方便,操作简单。
(3)能起到预防一氧化碳中毒的效果,使人们安全放心的工作。
(4)出现一氧化碳漏或者着火时,报警器能够立即鸣笛报警,告之工作人员及时采
取措施
第二章设计方案
2.1单片机的介绍和选用
单片机是一种集成在电路芯片,是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU随机存储器RAM只读存储器ROM多种I/O口和中断系统、定时器/计时器等功能(可能还包括显示驱动电路、脉宽调制电路、模拟多路转换器、A/D转换器等电
路)集成到一块硅片上构成的一个小而完善的计算机系统,目前单片机渗透到我们生活的各个领域,几乎很难找到哪个领域没有单片机的踪迹。
导弹的导航装置,飞机上各种仪表的控制,计算机的网络通讯与数据传输,工业自动化过程的实时控制和数据处理,广泛使用的各种智能IC卡,民用豪华轿车的安全保障系统,录像机、摄像机、全自动洗衣机的控制,以及程控玩具、电子宠物等等,这些都离不开单片机,更不用说自动控制领域的机器人、智能仪表以及各种智能机械了。
因此,单片机的学习、开发与应用将造就一批计算机应用与智能化控制的科学家、工程师。
设计选用ATMEl公司的AT89C51和美国国家半导体公司生产的ADC080
2.2设计要求及思路
设计要求:
报警器需在一氧化碳浓度达到100ppm时启动报警。
具体实现如下功能:
(1)系统要求设置正常工作状态除正常工作状态外丄ED红灯处于熄灭状态,蜂鸣器处于关闭状态。
(2)在正常工作状态下,绿灯应长亮。
当室内一氧化碳浓度达到100ppm时系统应启动蜂鸣器报警,红灯闪烁。
设计思路:
采用单个传感器检测气体浓度,将检测结果通过高精度运算放大器放大后送入模/数转换芯片中进行转换,传给单片机进行数据处理。
处理后的信息将通过单片机控制,驱动报警。
2.3初始方案与确定
(1)初始设计以设计思路展开研究:
根据该设计要实现的基本功能,设计大概应该分为信号接收,信号处理,信号控制和信号响应四个部分。
A.信号采集接收部分即通过检测一氧化碳气体浓度,并将这种变化量转换成电压或者电流等模拟量的变化
B.信号处理部分是将接收部分得到的电压或电流等变化进行必要放大,为后一部分信号控制提供准备。
C.信号控制部分是通过预定控制方式等实现对设计要求的准确操作。
D.信号响应是通过事故处理部分和显示部分实现控制部分的要求。
(2)对上述四个部分进行分析,得到如下一些基本的结论:
A.信号接收部分为了能准且采集到气体浓度的变化应选用传感器敏感器件,为使其有效部分的检测房间中气体浓度,必须选用高温一氧化碳传感器。
B.信号处理部分应该根据实际情况选用电荷放大,或比较器等装置,这部分电路将包含在传感器接口电路中。
C.控制部分为了实现精确控制,采用单片机较为合适。
D.信号响应及报警部分,用蜂鸣器和LED灯即可。
根据对上面设计系统的分析,我们得到该设计思想框图如下图2.1所示:
图2.1设计思想框图
(2)方案确定
经过分析采用初始方案设计,即用单个传感器检测一氧化碳气体浓度,将检测到的浓
度结果通过运算放大器放大后送入模/数芯片ADC080肿进行模一数转换,传入单片机中,由AT89C51单片机处理数据,并利用单片机控制报警器进行声音报警。
分析:
此设计十分简单,也十分实用。
虽然对气体浓度的采集不是很精确,但报警方面已经十分符合设计目的。
2.4系统组成
本设计属于单片机应用系统。
单片机在系统检测以及工程控制方面的应用,是典型的嵌入式系统。
通常将满足海量高速数据计算的计算机称为通用计算机系统;而把面向工控领域对象,嵌入到工控系统中,实现嵌入式应用的计算机称之为嵌入式计算机系统,简称嵌入式系统。
嵌入式系统分为四种:
工控机,通用CPU莫块,嵌入式微处理,单片机。
嵌
入式系统具有以下特点:
(1)面对控制对象。
如传感器信号输入、人机交互操作、伺服驱动等。
(2)嵌入到工控应用系统中的结构形态。
(3)能在工业现场环境中可靠运行的品质。
(4)突出控制功能。
如对外部信息的捕捉、对控制对象实时控制和有突出控制功能的指令系统(I/O控制、位操作和转移指令等)。
单片机有唯一的专门为嵌入式应用系统设计的体系结构与指令系统,最能满足嵌入式
应用要求。
单片机是完全按嵌入式系统要求设计的
单芯片形态应用系统,能满足面对控制对象、应用系统的嵌入、现场的可靠运行及非凡的控制品质等要求,是发展最快、品种最多、数量最大的嵌入式系统。
2.5一氧化碳报警器系统的三大部分
单片机应用系统的结构分三个层次。
(1)单片机:
通常指应用系统主处理机,即所选择的单片机器件。
(2)单片机系统:
指按照单片机的技术要求和嵌入对象的资源要求而构成的基本系统,如时钟电路、复位电路和扩展存储器等与单片机构成了单片机系统。
(3)单片机应用系统:
能满足嵌入对象要求的全部电路系统。
在单片机系统的基础上加上面向对象的接口电路,如前向通道、后向通道、人机交互通道(键盘、显示器、打印机等)和串行通行口(RS232以及应用程序等。
(单片机应用系统三个层次的关系如图2.2:
图2.2单片机应用系统三个层次的关系
以此理解,一氧化碳报警器同样具有单片机应用系统的三个层次。
其中以AT89C51单
片机为核心构成单片机系统。
在此系统中,检测信号进入单片机进行运算处理。
为了更好的理清设计思路,将整个系统细分为三部分加以设计说明。
整个报警器由三个部分组成,分为三大模块:
浓度检测模块、主控模块和报警模块。
在本次设计中,使用的核心器件是单片机和一氧化碳传感器。
为了保重整个系统可靠的运行,设计中必须明确三大部分的实际联系:
以单片机为中心,其他各大模块一一展开。
其中,浓度检测及显示模块所实现的功能是将房间中的一氧化碳浓度值转换成为单片机能够处理的数字信号,并且浓度值显示出来:
主控模块以单片机为主,对其他模块的运行进行控制;报警模块是此系统的外部电路,它的功能是实现报警。
系统框图如图2.3所示。
图2.3一氧化碳报警器系统组成框图
下面就对各个模块的功能和实现形式做简单介绍
(1)气体浓度检测模块
一氧化碳报警器主要采用高稳定一氧化碳气体传感器MQ-7检测房间气体浓度,检测
结果通过高精度运算放大器放大后送入模/数转换芯片ADC080肿进行转换
(2)主控模块
系统采用单片机控制,用的是AT89C51单片机,AT89C51单片机是美国Intel公司推出的一种4K字节可编程FLASH存储器,低电压、高性能CM0S8位微处理器。
单片机
的可擦除只读存储器可以反复擦除1000次,数据可保留10年。
它的主要功能既是和
ADC0809芯片一起共同接受检测信号,又可以通过对数字型号的处理来控制外围电路以及显示电路。
模数转换芯片采用ADC0809接收经过运算放大器处理后的一氧化碳传感器的检测值,检测结果通过ADC0809处理后才传给单片机进行数据处理。
处理后的信息将通过单片机控制,以驱动报警。
(3)报警模块
此模块主要有蜂鸣器、LED灯组成,在气体浓度过大,超过安全值时,蜂鸣器工作,提供报警服务。
至此,本系统的三大模块功能和设计思路已经确立,下文将介绍整个系统的详细设计过程。
并且给出设计电路。
第三早硬件电路设计
3.1单片机基础知识简介介绍及主控电路设计
在实际的应用中,基本知识的掌握程度至关重要,他影响到应用的好坏。
硬件知识用来设计硬件电路,软件知识用来设计芯片处理数据的先后顺序,数据的获得途径以及对数据做怎样的处理,还有其他的一些驱动和显示功能等等。
本设计用到的硬件知识主要有:
电子技术、单片机技术。
在电子技术方面分为模拟电子技术和数字电子技术,模拟电子技术主要用来放大传感器检测信号和驱动反光二极管以及显示穿管器检测气体浓度;数字电子技术用来把模拟量转换成数字量,把从刚起检测到的模拟量转换成数字值。
利用单片机实现综合控制。
主控电路中,以单片机为主体,通过分析A/D转换的得到的数字值,控制事故处
理模块运行。
设计采用的是AT89C51型单片机,AT89C51是一种带4K字节闪存可编程可擦除只读存储器的低电压、高性能CMOS8位微处理器,俗称单片机。
单片机的可
擦除只读存储器可以反复擦除1000次。
由于将多功能8位CPU和闪烁存储器组合在
单个芯片中,ATMEL勺AT89C51是一种高效微控制器,AT89C2051是它的一种精简版
本。
AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
外形及
引脚排列如图3.1所示
三种单片机的外形图
图3.1单片机外形及引脚排列图
(1)主要特性:
与MCS-51兼容
4K字节可编程闪烁存储器
寿命:
1000写/擦循环
数据保留时间:
10年
全静态工作:
0Hz-24MHz
三级程序存储器锁定
128X8位内部RAM
32可编程I/O线
两个16位定时器/计数器
5个中断源
可编程串行通道
低功耗的闲置和掉电模式
片内振荡器和时钟电路
(2)管脚说明:
VCC供电电压。
GND接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P0口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它
可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输
出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下
拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1
口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出
4个TTL门电流,当P2口被写“T时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘
故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出
地址的高八位。
在给出地址“T时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验
时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门
电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口,如下表所示:
口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INTO(外部中断0)
P3.3/INT1(外部中断1)
P3.4TO(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时
间。
ALE/PROG当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位
字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率
周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲
或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE
脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVXMOVC旨令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
PSEN外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),
不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET当/EA
端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V
编程电源(VPF)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2来自反向振荡器的输出。
(3)振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输
入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但
必须保证脉冲的高低电平要求的宽度。
(4)芯片擦除:
整个PEROM阵列和三个锁定位的电擦除可通过正确的控制信号组合,并保持ALE
管脚处于低电平10ms来完成。
在芯片擦操作中,代码阵列全被写“T且在任何非空存储字节被重复编程以前,该操作必须被执行。
此外,AT89C51设有稳态逻辑,可以在低到零频率的条件下静态逻辑,支持两种软件可选的掉电模式。
在闲置模式下,CPU亭止工作。
但RAM定时器,计数器,串
口和中断系统仍在工作。
在掉电模式下,保存RAM的内容并且冻结振荡器,禁止所用
其他芯片功能,直到下一个硬件复位为止。
(5)串口通讯:
单片机的结构和特殊寄存器,这是你编写软件的关键。
至于串口通信需要用到那些特殊功能寄存器呢,它们是scontcontmodscof等,各代表什么含义呢?
sbuf数
据缓冲寄存器这是一个可以直接寻址的串行口专用寄存器。
有朋友这样问起过“为何在串行口收发中,都只是使用到同一个寄存器SBUF而不是收发各用一个寄存器。
”实际上
SBUF包含了两个独立的寄存器,一个是发送寄存,另一个是接收寄存器,但它们都共同使用同一个寻址地址—99H,CPU在读SBUF时会指到接收寄存器,在写时会指到发送寄存器,而且接收寄存器是双缓冲寄存器,这样可以避免接收中断没有及时的被响应,数据没有被取走,下一帧数据已到来,而造成的数据重叠问题。
发送器则不需要用到双缓冲,一般情况下我们在写发送程序时也不必用到发送中断去外理发送数据。
操作SBUF寄存器的
方法则很简单,只要把这个99H地址用关键字sfr定义为一个变量就可以对其进行读写操作了,女口sfrSBUF=0x99;当然你也可以用其它的名称。
通常在标准的reg51.h或
at89x51.h等头文件中已对其做了定义,只要用#inelude引用就可以了。
SCON串行口控制寄存器通常在芯片或设备中为了监视或控制接口状态,都会引用到接口控制寄存器。
SCON就是51芯片的串行口控制寄存器。
它的寻址地址是98H,是一个
可以位寻址的寄存器,作用就是监视和控制51芯片串行口的工作状态。
51芯片的串口可以工作在几个不同的工作模式下,其工作模式的设置就是使用SCON寄存器。
它的各个位
的具体定义如下:
SM0SM1SM2RENTB8RB8TIRI
SM0SM1为串行口工作模式设置位,这样两位可以对应进行四种模式的设置。
串行口工作模式设置。
SM0SM1模式功能波特率
000同步移位寄存器fosc/12
0118位UART可变
1029位UARTfosc/32或fosc/64
1139位UART可变
在这里只说明最常用的模式1,其它的模式也就一一略过,有兴趣的朋友可以找相关的硬件资料查看。
表中的fosc代表振荡器的频率,也就是晶振的频率。
UART为(UniversalAsynchronousReceiver)的英文缩写。
SM2在模式2、模式3中为多处理机通信使能位。
在模式0中要求该位为0。
REM
为允许接收位,REM置1时串口允许接收,置0时禁止接收。
REM是由软件置位或清零。
如果在一个电路中接收和发送引脚P3.0,P3.1都和上位机相连,在软件上有串口中断处理程序,当要求在处理某个子程序时不允许串口被上位机来的控制字符产生中断,那么可以在这个子程序的开始处加入REM=0来禁止接收,在子程序结束处加入REM=1再次打开串口接收。
大家也可以用上面的实际源码加入REM=0来进行实验。
TB8发送数据位8,
在模式2和3是要发送的第9位。
该位可以用软件根据需要置位或清除,通常这位在通信协议中做奇偶位,在多处理机通信中这一位则用于表示是地址帧还是数据帧。
RB8接收数据位8,在模式2和3是已接收数据的第9位。
该位可能是奇偶位,地址/数据标识位。
在模式0中,RB8为保留位没有被使用。
在模式1中,当SM2=0RB8是已接收数据的停止位。
TI发送中断标识位。
在模式0,发送完第8位数据时,由硬件置位。
其它模式中则是在发送停止位之初,由硬件置位。
TI置位后,申请中断,CPU响应中断后,发送下一帧数据。
在任何模式下,TI都必须由软件来清除,也就是说在数据写入到SBUF后,硬件
发送数据,中断响应(如中断打开),这时TI=1,表明发送已完成,TI不会由硬件清除,所以这时必须用软件对其清零。
RI接收中断标识位。
在模式0,接收第8位结束时,由硬件置位。
其它模式中则是在接收停止位的半中间,由硬件置位。
RI=1,申请中断,要求CPU取走数据。
但在模式1
中,SM2=1时,当未收到有效的停止位,则不会对RI置位。
同样RI也必须要靠软件清除。
常用的串口模式1是传输10个位的,1位起始位为0,8位数据位,低位在先,1位停止位为1。
它的波特率是可变的,其速率是取决于定时器1或定时器2的定时值(溢出速率)。
AT89C51和AT89C2051等51系列芯片只有两个定时器,定时器0和定时器1,而定时器2是89C52系列芯片才有的。
波特率在使用串口做通讯时,一个很重要的参数就是波特率,只有上下位机的波特率一样时才可以进行正常通讯。
波特率是指串行端口每秒内可以传输的波特位数。
有一些初学的朋友认为波特率是指每秒传输的字节数,如标准9600会被误认为每秒种可以传送
9600个字节,而实际上它是指每秒可以传送9600个二进位,而一个字节要8个二进位,如用串口模式1来传输那么加上起始位和停止位,每个数据字节就要占用10个二进位,
9600波特率用模式1传输时,每秒传输的字节数是9600十10=960字节。
51芯片的串口工作模式0的波特率是固定的,为fosc/12,以一个12M的晶振来计算,那么它的波特率可以达到1M模式2的波特率是固定在fosc/64或fosc/32,具体用那一种就取决于PCON寄存器中的SMO位,如SMO[为0,波特率为focs/64,SMOD为1,波特率为focs/32。
模式1和模式3的波特率是可变的,取决于定时器1或2(52芯片)的溢出速率。
那么我们怎么去计算这两个模
式的波特率设置时相关的寄存器的值呢?
可以用以下的公式去计算。
波特率=(2SMO®32)X定时器1溢出速率
上式中如设置了PCON寄存器中的SMOD位为1时就可以把波特率提升2倍。
通常会使用定时器1工作在定时器工作模式2下,这时定时值中的TL1做为计数,TH1做为自动重装值,这个定时模式下,定时器溢出后,TH1的值会自动装载到TL1,再次开始计数,这样可以不用软件去干预,使得定时更准确。
在这个定时模式2下定时器1溢出速率的
计算公式如下:
溢出速率=(计数速率)/(256—TH1)
上式中的“计数速率”与所使用的晶体振荡器频率有关,在51芯片中定时器启动后
会在每一个机器周期使定时寄存器TH的值增加一,一个机器周期等于十二个振荡周期,
所以可以得知51芯片的计数速率为晶体振荡器频率的1/12,一个12M的晶振用在51芯
片上,那么51的计数速率就为1M通常用11.0592M晶体是为了得到标准的无误差的波特率,那么为何呢?
计算一下就知道了。
如我们要得到9600的波特率,晶振为11.0592M
和12M定时器1为模式2,SMOD设为1,分别看看那所要求的TH1为何值。
代入公式:
11.0592M9600=(2-32)X((11.0592M/12)/(256-TH1))
TH1=25012M
9600=(2-32)X((12M/12)/(256-TH1))TH仁249.49
上面的计算可以看出使用12M晶体的时候计算出来的TH1不为整数,而TH1的值只能取整数,这样它就会有一定的误差存在不能产生精确的9600波特率。
当然一定的误差
是可以在使用中被接受的,就算使用11.0592M的晶体振荡器也会因晶体本身所存在的误
差使波特率产生误差,但晶体本身的误差对波特率的影响是十分之小的,可以忽略不计。
3.2模数转换部分电路设计
模数转换部分采用ADC080芯片。
ADC0809是M美国国家半导体公司生产的CMOSE艺8通道,8位逐次逼近式A/D
转换器。
其内部有一个8通道多路开关,它可以根据地址码锁存译码后的信号,只选
通8路模拟输入信号中的一个进行A/D转换。
是目前国内应用最广泛的8位通用A/D
-H-UL心片。
(1)主要特性:
(1)8路输入通道,8位A/