正文酒精报警器Word下载.docx
《正文酒精报警器Word下载.docx》由会员分享,可在线阅读,更多相关《正文酒精报警器Word下载.docx(20页珍藏版)》请在冰豆网上搜索。
8k字节Flash,256字节RAM,32位I/O口线,看门狗定时器,2个数据指针,三个16位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。
另外,AT89S52可降至0Hz静态逻辑操作,支持2种软件可选择节电模式。
空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。
掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。
其引脚电路如图3-1所示,AT89S52主要性能有以下几点:
(1)与MCS-51单片机产品兼容
(2)8K字节在系统可编程Flash存储器
(3)1000次擦写周期
(4)全静态操作:
0Hz~33Hz
(5)三级加密程序存储器
(6)32个可编程I/O口线
(7)三个16位定时器/计数器
(8)八个中断源全双工UART串行通道
(9)低功耗空闲和掉电模式
(10)掉电后中断可唤醒
(11)看门狗定时器
(12)双数据指针
(13)掉电标识符
图3-1AT89S52引脚图
可燃性气体报警控制器的电路设计
前置放大电路
传感器输出信号一般比较微弱,需要经过前置电路对其进行放大、滤波、电平调整,满足单片机对输入信号的要求[9]。
本次设计中采用的是低功耗双运算放大器LM258芯片,LM258内部包括有两个独立的、高增益、内部频率补偿的双运算放大器,适合于电源电压范围很宽的单电源使用,也适用于双电源工作模式,在推荐的工作条件下,电源电流与电源电压无关。
它的使用范围包括传感放大器、直流增益模块和其他所有可用单电源供电的使用运算放大器的场合。
LM258的封装形式有塑封8引线双列直插式和贴片式。
其主要特性有:
内部频率补偿;
直流电压增益高(约100dB);
单位增益频带宽(约1MHz);
电源电压范围宽:
单电源(3~30V);
双电源(±
1.5~±
15V);
低功耗电流,适合于电池供电;
低输入偏流;
低输入失调电压和失调电流;
共模输入电压范围宽,包括接地;
差模输入电压范围宽,等于电源电压范围;
输出电压摆幅大(0V~1.5V)。
当气体浓度变化时,传感器的气敏电阻随之发生变化,使运放LM258反相端的电压值也随之改变。
采样时,把相应的模拟电压信号从U2端送进LM258模数转换器进行放大处理后从U1端输出送入A/D转换电路,其引脚图如图3-2所示。
LM258引脚图(前置放大电路)
A/D转换电路
经气敏传感器所检测的电压信号为模拟信号,无法直接被单片机所识别,所以在经过放大电路后对信号进行A/D装换,将模拟信号转化为数字信号输入单片机。
目前市场上的A/D转换器都是集成化的芯片,使用时,只要按要求加上电源,从输入端连接模拟信号,控制端外加一个启动信号,即可启动A/D转换。
转换结束后,芯片通过一个输出引脚给出转化结束信号,通知芯片可以读取数据,芯片从A/D转换器的数字量输出引脚读取转换后的数字信号,然后进行相应处理。
本次设计中采用的是美国德州仪器公司生产的具有串行控制、连续逐次逼近型的TCL1549模数转换器,它采用两个差分基准电压高阻输入和一个三态输出构成三线接口,其中三态输出分别为片选(CS低电平有效),输入/输出时钟(I/OCLOCK),数据输出(DATAOUT)。
TLC1549引脚排列如图3-6所示。
TLC1549能以串行方式送给单片机,其功能结构如图3-7所示。
由于TLC1549采用CMOS工艺。
内部具有自动采样保持、可按比例量程校准转换范围、抗噪声干扰功能,而且开关电容设计使在满刻度时总误差最大仅为±
1LSB(4.8mV),因此可广泛应用于模拟量和数字量的转换电路。
在本次设计中需将模拟电压转换为数字量,经过单片机处理后,进行比较和判断。
经过放大处理的模拟信号U2送入IN端,再利用P1.2作为片选端,P1.1作为数据输出端,P1.0作为时钟端。
利用A/D串行输出设计不但提高了模数转换的精度,具有抗干扰性,而且节省了大量元件和印刷电路板的空间。
图3-4A/D转换电路
图3-3TLC1594引脚排列
AT89S52单片机接口电路
AT89S52采用PQFP贴片式的封装形式,有40个管脚。
根据单片机制作的原理以及报警器实现的功能,其接口电路主要分为五个部分。
AT89S52单片机接口电路如图3-3所示。
图3-5AT89S52单片机接口电路
(1)复位模块
复位操作可以使单片机初始化,也可以使死机状态下的单片机重新启动,因此非常重要。
为可靠起见,电源上电稳定后还要经一定的延时,才能撤销复位信号,以防电源开关或电源插头分一合过程中引起的抖动而影响复位。
在本设计中,采用的是阻容RC上电复位电路,通过电容加到RST端上一个高电平复位信号,高电平持续时间取决于RC电路参数。
为了保证系统能可靠地复位,RST端上高电平信号必须有足够长的时间。
(2)系统时钟模块
时钟电路产生单片机的工作时序脉冲,是单片机正常工作的关键。
本次设计中采用外部独立时钟震荡器所产生的时钟信号。
在AT89S52的18脚(XTAL1)和19脚(XTAL2)外接12M的晶体,同时并连2个33pF的电容,产生系统时钟。
(3)显示模块
由AT89S52的32~39脚以及21~26脚构成浓度显示输出信号。
采用2片6位驱动器74LS07和3片75452为LED提供一定的驱动电流。
本次设计中采用的是并行接口动态显示的方法进行浓度显示。
(4)声音报警模块
由AT89S5242的11脚(TXD)实现声音报警控制。
当可燃性气体浓度超过限定值时,扬声器发出鸣叫报警,同时启动54继电器,闭合排气扇电路,从而达到自动排气控制的效果。
(5)键盘按键模块
由AT89S52的13~16脚构成4个按键,分别为复位,+键,-键,确定。
AT89S52以外部中断方式实现按键功能。
每个输入脚都外接5.1KΩ的上拉电阻,提高外部中断的可靠性。
声音报警电路
当可燃性气体浓度超过限定值时,扬声器发出鸣叫报警。
图3-6声音报警控制电路
声音报警电路如图3-4所示,它是由三极管,继电器,扬声器以及排气电路构成。
当实际检测浓度低于设定浓度时,三极管不导通,扬声器以及继电器均不工作,排气电路处于断开状态;
当实际检测浓度等于或超过设定浓度时,通过P2.0和P2.1与单片机的连接从而引起电平的变化,P2.0和P2.1都为低电平,三极管导通,在扬声器发出报警声音的同时,继电器也进行工作,而使排气电路形成闭合回路,达到自动进行排气控制的效果。
显示电路
在该报警电路中,需要显示气体浓度以及设定浓度的数值。
电路如图3-5所示,本次设计采用的是4位并行接口动态显示电路。
用AT89S52的P0口输出显示码,P2口用来输出位选码,利用软件译码的方法求出待显示的数对应的显示码,然后由P0口输出。
到底哪一位数码管显示,主要取决于位选码。
在本次设计中采用的数码管为共阴极接打,被选中的位应输出一高电平,经驱动器后,仍为高电平,应此该位被选中。
将各位从左至右依次进行显示,每个数码管连续显示1ms,显示完最后一位数后,再重复上述过程,看到的就好像4位数“同时”显示一样。
图3-5中的74LS07为6位驱动器,它为LED提供一定的驱动电流。
由于一片74LS07只有6个驱动器,所以设计中的8段数码管需要2片驱动器进行驱动。
P2口经75452缓冲器/驱动器反向后,作为位控信号。
75452内部包括两个缓冲器/驱动器,它们各有两个输入端。
所以,实际上是两个双输入与非门电路,因此需要2片75452。
四位动态显示电路
在这种扫描电路中,由于每个LED数码管的发光时间缩短到原来的1/N,所以每个管子的发光亮度必须为单独工作时的N倍,其通过的电流也要增加N倍,因此,必须使用驱动器。
中断电路
本次设计利用按键来实现人机对话功能,共有4个按键,分别为复位,+键,-键,确定。
其电路如图3-8所示。
图3-8中断电路
本章阐述了可燃性气体报警控制器的硬件设计。
首先介绍了AT89S52系列单片机系统的结构特点、技术性能特点。
从设计要求及对AT89S52系列单片机性能指标、价格上考虑,选用AT89S52单片机作为该报警系统的核心控制器。
然后,介绍了可燃性气体报警控制器的工作原理。
最后,详细地阐述了可燃性气体报警控制器电路设计,分为前置放大电路、A/D转换电路、AT89S52单片机接口电路、声音报警电路、显示电路、中断电路等6个部分。
下面结合以上硬件电路进行相应的软件设计。
可燃性气体报警器的软件设计
AT89S52单片机调试及开发工具
嵌入式系统的开发往往借助于开发系统工具,而各种开发系统一般都比待开发调试的嵌入式系统要复杂得多。
AT89S52系列单片机的调试、开发工具由硬件和软件两部分组成,硬件只需一台PC机、目标板和一个称为FET(FlashEmulationTool)的JTAG控制器。
AT89S52FET仿真工具的功能主要是将由PC机打印机接口来的8位并行数据与来自JTAG接口的串行数据进行相互转换,以实现PC机与AT89S52芯片中的JTAG接口的通讯。
具体包括:
(1)程序下载
当用户将源程序(汇编语言)经keil软件语法检查无误并生成代码时,就可以将程序代码在如图的环境中下载到]Flash芯片中,而用户的系统可以是在线状态。
(2)设置断点
用户可以通过调试环境软件的人机对话界面。
在程序中设置断点。
在AT89S52中,可以同时设置4个硬件断点,它是经过JTAG接口的传输,由芯片中的几组断点条件寄存器实现的。
(3)现场观察与修改
用户可以通过调试环境软件的人机对话界面,检查或修改Flash芯片内的
各种存储器、寄存器的数据。
在调试过程中,根据需要可以进行软件模拟仿真和硬件仿真。
可燃性气体报警控制器软件流程及设计
本设计中,软件要解决的主要问题是检测传感器送来的可燃性气体浓度信号,进行线性化处理,用LED显示浓度,若浓度值超出限定值,报警器发出声音报警,同时启动排气装置,因此分为主程序、T0中断子程序、线性化处理子程序、十六进制转化十进制子程序,浓度显示子程序、键扫描子程序六个部分。
在程序的编写过程中,加入了详细的文字注释,以便于后期的改进与维护。
主程序流程图及设计
主程序流程图如图4-1所示,由于TGS-81型气体传感器在不通电状态下存放一段时间后,再通电时,器件并不能立即投入正常工作,需要一定的时间预热,所以采用延时程序对传感器预热。
本设计对传感器预热一段时间,预热的同时,设定所要检测可燃性气体浓度的上限值。
主程序还包括显示子程序,T0中断子程序等,以完善报警器的功能,给检测人员带来方便。
主程序流程图
T0中断子程序
程序初始化后,系统进入采样状态。
对采集的气体次数每3次进行一次处理。
经A/D转换、滤波、线性化处理、进制转化后,由LED显示其浓度值。
同时将浓度值与上限报警设定值相比较,以判断是否需要报警控制处理。
流程图如图4-2所示。
图4-2T0中断子程序流程图
线性化处理子程序设计
在单片机测控系统中,使用之前必须进行静态标定(校准),以得到输出信号与被测信号的关系-输出曲线,用来作为使用过程中的计量依据。
但是标定时输出曲线往往不是一条理想的直线,所以要对标定曲线进行线性化处理,用一条拟合直线近似代替输出曲线,线性化是智能仪表的典型功能之一。
由于电压值与气体浓度之间是非线性的关系,为了实时显示气体浓度,需要对其进行线性化处理。
在误差许可范围内,根据标定曲线形状,以及单片机处理能力,把曲线分成8段,对每小段分别线性化。
浓度0%LEL-99%LEL分成8段如下:
0%LEL~10%LEL10%LEL~20%LEL
20%LEL~28%LEL28%LEL~36%LEL
36%LEL~45%LEL45%LEL~61%LEL
61%LEL~78%LEL78%LEL~99%LEL
单片机经过滤波后,得到3个采样值的一个真值,把这个真值通过查表比较,确定其所在区间的上下限电压值和上下限浓度值,根据公式(4-1),计算出该电压值对应的浓度值。
分段点的电压值和浓度值分别存储在两个表格中,线性化处理子程序如图4-3所示。
(4-1)
式中Y上---区间上限浓度值
Y下---区间下限浓度值
Y滤---实际气体测试浓度值
X上---区间上限浓度对应电压值
X下---区间下限浓度对应电压值
X滤---实际气体测试浓度对应电压值
图4-3线性化处理子程序流程图
十六进制转化十进制子程序设计
经过线性化处理后的浓度是十六进制的,而LED显示的浓度是十进制的,所以要进行十六进制转化十进制子程序处理,再送入显示子程序。
流程图如图4-4所示。
图4-4十六进制转化十进制子程序流程图
显示子程序设计
本次设计采用的是四位并行接口动态显示电路,由2片74LS07和2片75452进行驱动,用AT89S52的P0口输出显示码,P2口用来输出位选码,利用软件译码的方法求出待显示的数对应的显示码,然后由P0口输出。
将各位从左至右依次进行显示。
其子程序设计流程图如图4-5所示。
显示子程序流程图
键扫描子程序设计
系统设计四个按键,分别为复位,+键,-键,确定。
复位键使单片机进入监控状态,+键和-键分别对上限值进行设置,确定键是对设定值进行保存。
其流程图如图4-6所示:
4-6键扫描子程序流程图
本章阐述了可燃性气体报警器的软件设计。
首先介绍了软件编程的开发环境以及仿真工具。
然后对主程序和各部分的子程序分别进行分析和流程图的绘制,包括T0中断子程序,线性化处理子程序,十六进行转化十进制子程序,显示子程序以及键扫描子程序,各部分的具体程序参考附录部分。
硬件电路总图
程序清单
主程序:
ORG0H
SJMPSTART
ORGOBH
SJMPINT
START:
;
初始化
MOVSP,#70H
SETBP1.0
SETBP1.1
SETBP1.2
SETBP1.3
MOVTOMD,#01H
MOVTL0,#00H
SETBTR0
SETBET0
SETBEA
MOVR2,#0FFH
MOV3AH,#03H
MOVR3,#06H
IN:
MOV@R0,A
CLRP1.3
ACALLDELAY
ONCEMORE:
CLRP1.4
ACALLDELAY
SETBP3.4
DJNZR3,GETPW
CLPP3.1
THERE:
AJMPTHERE
动态显示子程序:
DISPLY:
MOVR0,#30H;
显示缓冲区首地址→R0
MOVR2,#20H;
位选码指向P0口
DISPLY1:
MOVA,@R0;
取出要显示的数
MOVDPTR,#SEGTBL;
指向换码表首址
MOVCA,@A+DPTR;
取出显示码
MOVDPTR,#0FD01H
MOVX@DPTR,A
MOVA,R2;
位选码→A
INCDPTR
MOVX@DPTR,A
ACALLD1MS;
延时1ms
MOVA,R2
NBACC.0,DISPY2;
4位全显示完了吗?
未完,则继续显示
RET
DISPLY2:
INCR0;
求下一位要显示数的地址
MOVA,R2;
求下一个位选码
RRA
MOVR2,A
AJMPDISPLY1
DIMS:
MOVR3,#7DH
DL1:
NOP
NOP
DNJZR3,DL1
RET
SEGTBL:
DB3FH;
:
对应于字符0
DB06H;
对应于字符1
DB5BH;
对应于字符2
DB4FH;
对应于字符3
DB6BH;
对应于字符4
DB6DH;
对应于字符5
DB7DH;
对应于字符6
DB07H;
对应于字符7
DB7FH;
对应于字符8
DB67H;
对应于字符9
DB77H;
对应于字符A
DB7CH;
对应于字符B
DB39H;
对应于字符C
DB5EH;
对应于字符D
DB79H;
对应于字符E
DB71H;
对应于字符F
A/D转换子程序:
ADCSBITP1.7;
A/D转换数据片选
ADDATABITP1.6;
A/D转换数据输出
ADCLKBITP1.5;
A/D转换时钟
ADTEMPEQU00H;
A/D转换的数字量暂时存单元
ADDELAY:
MOVR2,#20;
延时子程序
ADDELAY1:
DNZR2,ADDELAY1;
延时24个振荡周期
RET
AD:
MOVR0,#00
MOVR1,#00
SETBADCS
ACALLADDELAY;
ADCS处于高电平时,延时
CLRADCS
ACALLASSELAY;
ADCS处于低电平时,延时
MOVR0,#10
RR0:
SETBADCLK
NOP
CLRADCLK
DJNZR0.RR0;
产生10个ADCLK周期ACALLADDELAY;
模拟量转换为数字量过程
MOVADTEMP,R0;
数字量传输过程
ACALLCLR;
数字量的保存子程序
MOVR0,ADTEMP
SETBADCLK
NOP
MOVADTEMP,R0
ACALLCLR
MOVR0,#8;
RR2:
SETBADCLK
MOVADTEMP,R1
ACALLCIR
MOVR1,ADTEMP
DJNZR0,RR2
CIR:
CLRC;
将变换的数字量高位存入C中
MOVC,ADDATA
MOVA,ADTEMP
RLCA;
将变换的数字量高位向左转移
MOVADTEMP,A
十六进制转化十进制子程序:
MOVA,24H
SUBBA,#64H
JNC
ADDA,#64H
SUBBA,#0AH
JNC
ADDA,#OAH
MOV27H,A
DISPLY3:
INC25H
LJMPDISPLY1
DISPLY4:
INC26H
LJMPDISPLY2