计算机控制技术课程设计(13页).doc
-计算机控制技术课程设计-第 13 页目录1 前言随着城市煤气、天然气事业及化学工业的迅速发展,易燃、易爆的气体种类和应用范围在不断增加,这些易燃易爆气体在生产和使用过程中,一旦发生泄漏将会引起中毒、火灾、爆炸等重大事故,人们在对安全生产的重视程度日益增加的同时,对生产技术手段也进行不断的提高, 研制一种新型、性能稳定、准确监测可燃性气体报警控制器势在必行。 而传统的模拟型可燃性气体报警控制器,对于气体传感器的特性补偿、修正,采用匹配补偿传感器的硬件调整方式;这种调整方式虽然具有现场调整方便的优点,但补偿拟合的范围窄,匹配传感器的部件选择困难,而难以获得较好的补偿、修正效果。因此,本次设计采用了“探测器+单片机控制电路”设计思路。 本次设计采用以STC89C52芯片为核心,用半导体陶瓷式气体传感器MQ-2来检测外部气体浓度,结合外部硬件电路实现对可燃性气体进行报警控制装置。STC89C52芯片具有功能强大,性价比高等一系列优点,适合产品大规模生产。同时,设计出的可燃性气体报警控制器具有操作简单,实用性强,价格便宜,安全性高等特点,所以非常适合贮气仓库,以及家庭等场所使用,具有很高的实用价值。 正是由于可燃性气体报警控制器对于安全生产的重要性,国内外有众多厂家研制、生产这一产品。从运用所学知识和实际意义出发,研制一种固定式可燃性气体报警控制器,它主要对以烷类气体为主的多种可燃性气体进行检测控制。2 总体方案设计2.1 主控芯片选择方案一:STC89C52系列单片机,此系列单片机比较常用、价格便宜、操作简单、独立的I/O口数量较多,方便购买。但属于8位单片机,计算能力一般,功耗高,加密性能弱,体积大。方案二:DSP430系列单片机电压低,功耗低,3.3V供电,16位,运行速度快,内置硬件乘法器,乘除法运算都为单周期指令,片内集成资源丰富,有两组普通IO口具有中断功能。但是相对STC89C52系列单片机成本较高,耐压值低,容易被烧毁。方案三:ARM32位系列单片机以及处理器,与传统的8位微处理器相比速度更快,性能更强,资源丰富,比如中断、AD、LCD控制器、DMA、存储系统等等。ARM开发一般重点是操作系统和应用程序。缺点就是在低端应用时ARM性价比较低,开发难度也更大,新手入门较困难。确定方案:考虑到实际开发中,STC89C52系列单片机性能已经完全足够,同时基于成本考虑,主控芯片采用STC89C52。2.2 显示模块选择 方案一: LCD1602液晶也叫LCD1602字符型液晶,它是一种专门用来显示字母、数字、符号等的点阵型液晶模块。它由若干个5X7或者5X11等点阵字符位组成,每个点阵字符位都可以显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此所以它不能很好地显示图形。1602LCD是指显示的内容为16X2,即可以显示两行,每行16个字符液晶模块(显示字符和数字)。方案二:LCD12864液晶,能显示汉字,字符,数字等,但是体积较为庞大,所占空间较大。方案三:诺基亚5110液晶,该模块具有以下特点: 84x48 的点阵LCD,可以显示4 行汉字,采用串行接口与主处理器进行通信,接口信号线数量大幅度减少,包括电源和地在内的信号线仅有9 条。支持多种串行通信协议(如AVR 单片机的I、MCU51的串口模式等),传输速率高达4Mbps,可全速写入显示数据,无等待时间。方案四:数码管,显示较为稳定,抗干扰较强,但是显示能力单一,显示内容会受到一定限制。确定方案:实际开发中,不需要功能相对强大的液晶显示屏,显示可燃气体浓度用数码管显示简洁明了,同时功耗和成本都较低,确定显示模块采用数码管。2.3 可燃气体信号采集传感器选择方案一:MQ-2,广泛的探测范围、高灵敏度、快速响应恢复、优异稳定性、寿命长、简单的驱动电路MQ-2应用: 可用于家庭和工厂的气体泄漏监测装置,适宜于液化气、丁烷、丙烷、甲烷、酒精、氢气、烟雾等的探测。方案二:TGS813,后期电路简单; 长寿命,低功耗; 对甲烷、乙烷、丙烷等可燃气体的高敏感度,但价格相对MQ-2要高一些。方案确定:MQ-2的高灵敏度和优异的稳定性以及较低的价格适合本项目的开发,决定采用MQ-2作为可燃气体信号采集传感器。2.4 A/D转换部分方案一:AD7888,微功耗8通道12位AD转换器,是高速、低功耗的12位AD转换器,单电源工作,电压范围为2.7V5.25V,转换速率高达125ksps ,输入跟踪-保持信号宽度最小为500ns,单端采样方式。AD7888包含有8个单端模拟输入通道。方案二:ADC0804是一个早期的A/D转换器,因其价格低廉而在要求不高的场合得到广泛应用。ADC0804是一个8位、单通道、低价格A/D转换器,主要特点是:摸数转换时间大约100us;方便的TTL或CMOS标准接口;可以满足差分电压输入;具有参考电压输入端;内含时钟发生器;单电源工作电压为0-5V。方案确定:ADC0804开发简单,资料齐全,适合项目开发,通过分析对比采用ADC0804作为AD转换器。2.5 电源的选择方案一:采用两节五号的干电池作为主控芯片的供电电源。此方案简单易行,但是此系统是处于长期工作状态对电量的消耗比较大。方案二:采用汽车自带的汽车电瓶12V电源降压后供电。此方案较好的利用汽车自身能源,避免单独电源给防撞系统供电,可使系统长期安全不掉电工作。方案确定:选择方案一,五号干电池易于得到,便于开发。 3 理论分析与计算3.1 MQ-2可燃气体信号采集传感器特点及参数MQ-2/MQ-2S气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。MQ-2/MQ-2S气体传感器对液化气、丙烷、氢气的灵敏度高,对天然气和其它可燃蒸汽的检测也很理想。这种传感器可检测多种可燃性气体,是一款适合多种应用的低成本传感器。MQ-2/MQ-2S气敏元件的结构和外形如图2-3-1所示(结构 A 或 B), 由微型Al2O3陶瓷管、SnO2 敏感层,测量电极和加热器构成的敏感元件固定在塑料或不锈钢制成的腔体内,加热器为气敏元件提供了必要的工作条件。封装好的气敏元件有只针状管脚,其中个用于信号取出,个用于提供加热电流。基本电路图3.1 结构和外形3.2 相关理论值计算 MQ-2灵敏度特性: 图3.2 MQ-2灵敏度特性曲线MQ-2 温/湿度的影响: 图3.3 MQ-2温/湿度曲线图3.4是传感器的基本测试电路。该传感器需要施加2 个电压:加热器电压(VH)和测试电压(VC)。其中VH用于为传感器提供特定的工作温度。VC 则是用于测定与传感器串联的负载电阻(RL)上的电压(VRL)。这种传感器具有轻微的极性,VC 需用直流电源。在满足传感器电性能要求的前提下,VC 和VH 可以共用同一个电源电路。为更好利用传感器的性能,需要选择恰当的RL值。传感器电阻(Rs),可用计算公式: Rs=(Vc/VRL-1)×RL求得。图3.4 传感器基本测试回路4 单元模块电路设计4.1 可燃气体信号采集部分在本设计中,采用MQ-2传感器作为信号采集器件,器件的1、3、4脚连接电源的正极(+5V),2、5、6脚连接地。采集到的信号通过1k欧姆电阻后送到ADC0804的模拟输入端,R2用来调节输出信号的大小。具体电路连接如图4.1所示:图4.1 信号采集部分4.2 显示部分显示模块采用共阳极数码管显示。单片机P0口控制 LED数码管显示,其中P0接4.7k欧姆的上拉电阻后8个管脚接1k欧姆的限流电阻后分别于控制数码管的a,b,c,d,e,f,d连接。LED显示0-9的段码为0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90。具体电路连接如图4.2所示:图4.2 数码管显示部分4.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进行通信。具体电路连接方式如图4-3-1所示:图4.3 A/D转换部分4.4 报警显示部分采集到的数字信号经过单片机计算后如果可燃气体浓度达到报警器设置的临界点时,单片机将控制蜂鸣器报警,同时LED闪烁。LED的正极接电源正极(+5V),负极接1K欧姆电阻后接单片机P2.0端。蜂鸣器采用NPN3041三极管来驱动,三极管集电极接电源正极(+5V),基极接5.1k欧姆电阻后接P2.1端,射极接蜂鸣器,通过蜂鸣器后接地。具体电路连接方式如图3-4-1所示:图4.4 报警部分4.5 最小系统及按键单片机接+5V电源;晶体振荡器频率为12MHz,晶振的两个引脚分别连接在单片机的XTAL1和XTAL2端,晶振的两端再分别连接一个22pF电容后接地;复位电路经电源正极(+5V)接10uF电容后接1k欧姆电阻接地,单片机复位端RST接在电容和电阻之间。在单片机启动0.1S后,电容C两端的电压持续充电为5V,这是时候10K电阻两端的电压接近于0V,RST处于低电平所以系统正常工作。当按键按下的时候,开关导通,这个时候电容两端形成了一个回路,电容被短路,所以在按键按下的这个过程中,电容开始释放之前充的电量。随着时间的推移,电容的电压在0.1S内,从5V释放到变为了1.5V,甚至更小。根据串联电路电压为各处之和,这个时候10K电阻两端的电压为3.5V,甚至更大,所以RST引脚又接收到高电平,单片机系统自动复位。本次设计电路中加入两个按键,用于人为报警。考虑到实际开发中,如果已经人为已经发现有危险后,但是系统由于各种意外并没有报警时,可以手动的按下S1按键报警。同理,当报警解除时,有可能系统的报警声还一直处于报警状态,所以设计按键S2用于手动解除。单片机P3.6和P3.7端分别连接一个按键后接地。当按下S1时蜂鸣器报警,LED闪烁;S2用来取消报警。具体电路连接方式如图4.5所示:图4.5 最小系统及按键5 软件设计5.1 程序结构图5.2 程序代码见附录二。6 系统调试6.1 系统硬件调试6.1.1 排除逻辑故障这类故障往往由于设计和加工制板过程中工艺性错误所造成的。主要包括错线、开路、短路。排除的方法是首先将加工的印制板认真对照原理图,看两者是否一致。应特别注意电源系统检查,以防止电源短路和极性错误,并重点检查系统总线(地址总线、数据总线和控制总线)是否存在相互之间短路或与其它信号线路短路。必要时利用数字万用表的短路测试功能,可以缩短排错时间。6.1.2 排除元件故障造成这类错误的原因有两个:一个是元器件买来时就已坏了;另一个是由于安装错误,造成器件烧坏。可以采取检查元器件与设计要求的型号、规格和安装是否一致。在保证安装无误后,用替换方法排除错误。6.2 系统软件调试软件调试主要采用keil软件调试编译单片机程序。由于由于STC89C52可以擦写上千次,所以在这个调试过程中,并没有用仿真器来实践,而是直接将程序烧写进单片机来操作。将通过KEIL软件编译通过的单片机程序生成的“.hex”文件用烧录软件通过下载线烧写进单片机中。 7 设计总结本次设计对可燃性气体报警控制器进行了深入的研究,在参考国内外一些资料的基础上,比较合理地选择了系统的设计方案,采用了“探测器+单片机控制电路”设计思路,由于具有操作简单,实用性强,价格便宜,安全性高等特点,所以非常适合贮气仓库,以及家庭等场所使用,具有很高的实用价值。 本次设计的可燃性气体报警器由探测器与单片机控制电路两大部分构成。根据设计要求、使用环境、成本等因素,选用MQ-2气体传感器。该传感器是对以烷类气体为主的多种可燃性气体有良好敏感特性的广谱型半导体敏感器件。它的灵敏度适中,响应与恢复特性好,长期工作稳定性、重现性、抗环境气氛影响及抗温湿度影响等性能均优。该仪器采用了高性能STC89C52单片机作为核心电路,充分利用了STC89C52的高速数据处理能力和丰富的片内设置,实现了仪器的小型化和智能化,使仪表具有结构简单、性能稳定、成本低等优点。应用程序用C语言编写,充分利用芯片资源,提高了测量精度和代码执行效率,减小代码容量。对可燃性气体采用滤波、线性化处理等,不但最大限度地排除现场噪声干扰,降低可燃性气体报警器误报概率,而且易于在单片机中实现。此电路具有结构简单,调试方便,线性度好,温漂小等优点。 本次设计也存在着一些需要完善的地方,譬如让检测进行网络连接,实行多点同时检测、如何更加智能化的进行报警工作,如何能更好的减少检测误差等问题值得去进一步的研究和探讨。 本次设计的可燃性气体报警控制警器灵敏度高,在测量范围内具有较理想的特性,适用于低流速的可燃性气体测量。本课题的工作为便携式仪器的研制和实用化提供了较好的实现方案,为今后该领域的研究提供了很好的参考依据。8参考文献1 杨天怡主编,微型计算机控制技术,重庆:重庆大学出版社; 2 涂时亮编,单片微机控制技术,上海:复旦大学出版社;3 黄胜军编,微机控制应用实验与实例,北京:清华大学出版社; 4 陈理壁步进电机及其应用M,上海: 上海科学技术出版社; 5 刘国荣单片微型计算机技术,北京:机械工业出版社;6 王福瑞编,单片微机测控系统设计大全,北京:北京航空航天大学出版社; 7 潘新民编,单片微型计算机实用系统设计,北京: 人民邮电出版社; 8 李伯成编,IBM - PC 微机应用系统设计,西安:西安电子科技大学; 9 微机控制技术及其应用方面的教材、期刊、杂志。附录一:系统总图附录二:相关程序#include<reg52.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int#define ulong unsigned longuint num,aa,bb,adval;/定义全局变量uint table10=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/数组用于数码管显示0-9 sbit wr=P30; /位定义 AD wr脚sbit rd=P31; /位定义 AD rd脚sbit csad=P32; /位定义 AD cs脚sbit led=P20; /位定义 LED sbit beep=P21; /位定义 蜂鸣器sbit key0=P37; /位定义按键0sbit key1=P36; /位定义按键1void init(); /子函数声明void start();/子函数声明void read();/子函数声明void delay(uint z)/延时子函数z msuint t1,y;/定义局部变量t1,yfor(t1=z;t1>0;t1-)for(y=110;y>0;y-);void main()/主函数init(); /定时器 AD初始化while(1)/while循环start();/启动ADdelay(200);/延时200ms用于AD处理read();/读取AD数据num=adval/12; /数据处理if(num>9) num=9;P0=tablenum; /数码管显示数据 if(num>2)|(num=2) /检测数据大于或等于3 开定时器0 报警TR0=1;if(num<2)/如果数据小于3 关定时器0 取消报警TR0=0; /关定时器0beep=0;/关蜂鸣器led=1;/关LEDif(key0=0)/报警按键 delay(20); /消抖if(key0=0)TR2=1;while(!key0);/按键松手检测if(key1=0)/报警取消 delay(20); /消抖if(key1=0)TR2=0; /关定时器2beep=0; /蜂鸣器报警led=1; /LED闪烁while(!key1); /按键松手检测void init()/CS脚置0,定时器0初始化子函数csad=0; /CS脚置0P2=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)/延时300msaa=0;led=led;/LED值取反beep=beep;/蜂鸣器值取反