基于单片机的酒精测试仪设计_第1页
基于单片机的酒精测试仪设计_第2页
基于单片机的酒精测试仪设计_第3页
基于单片机的酒精测试仪设计_第4页
基于单片机的酒精测试仪设计_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

研究内容TGS822对酒精浓度的变化,其阻值产生相应的变化,然后通过取样电阻分压的变化表现出来;人体血液酒精浓度的不同,其呼出的气体中酒精浓度也不同。通过TGS822对呼出气体中酒精浓度的反应以取样电压的形式送入到ADC0809,进行A/D转换后并将转换的数据送入单片机进行分析处理,并判断是否醉酒驾车,再通过液晶板显示出来。DS18B20其自身的温度传感器所产生的温度数字数据存入其自身的存储器,单片机对其控制读出温度数据,然后经过计算处理,将当前环境温度由液晶板输出。第第2章总体设计本课题的设计任务及要求设计任务设计并制作酒精测试仪,具组成如图所示。TGS822对酒精浓度的变化,其阻值产生相应的变化,然后通过取样电阻分压的变化表现出来;人体血液酒精浓度的不同,其呼出的气体中酒精浓度也不同。通过TGS822对呼出气体中酒精浓度的反应以取样电压的形式送入到ADC0809,进彳TA/D转换后并将转换的数据送入单片机进行分析处理, 并判断是否醉酒驾车,再通过液晶板显示出来。DS18B20其自身的温度传感器所产生的温度数字数据存入其自身的存储器,单片机对其控制读出温度数据,然后经过计算处理,将当前环境温度由液晶板输出模拟输出感设计要求器数字输出 单 控制输出图系统设计方框卜「片模拟输出感设计要求器数字输出 单 控制输出图系统设计方框卜「片传感器TGS822X压模拟输出范围为-5V;(2)模数转换芯片ADC0809采样电压范围为0-5V,分辨率为LCD显示输出8位,采样精度为5/256V,达到256个量化级的数字电压,其工作频率为1MHz;(3)单片机AT89C52工作频率为6MHz;(4)LCD显示器用50K的可调电阻调节使其清晰显示,消除“鬼影”系统整机原理图分析如图系统整机原理图,本系统工作原理如下:单片机的晶振为 6MHz,可以直接通过ALE口输出1MHz为ADC0809作为工作时钟而不需要进行分频,然后通过单片机的、分另I」控制ADC0809的ALE和START端口进行模数转换;通过、、分另控制ADDB、ADDC、ADDA端口进行选择模拟数据输入口;通过P0口进行ADC0809数据输出。TGS822的采样电压由ADC0809的IN0口输入,通过转换后由其D0-D7输出到单片机的P0口,然后通过传感器的特性公式计算由P1口将数据通过LCD的DB0-DB7输出。第3章系统硬件设计系统硬件设计原理图分析本硬件由五部分组成:单片机模块,模数转换模块,酒精传感器模块,温度传感模块。具系统硬件设计原理图如图所示,其整机工作原理如下,本系统由单片机 AT89C2控制,其直接控制三个模块:数转换模块将酒精传感器采集到模拟电压信号转换成输送到单片机控制处理,温度传感器DS18B20可以将采集到的温度信号直接以数字信号的形式传到单片机,LCD显示模块可以将经过单片机处理过的酒精气体浓度和温度的具体量化值显示。图系统硬件设计原理图单片机模块单片机的选择AT89S52是低功耗、高性能、采用CMOS工艺的8位单片机,具片内具有8KB的可在线编程的Flash存储器。该单片机采用了ATMEL公司的高密度、非易失性存储器技术,与工业标准型80C51单片机的指令系统和引脚完全兼容;片内的Flash#储器可在线重新编程,或者使用通用的非易失性存储器编程;通用的8位CPU与在线可编程Flashft成在一块芯片上,从而使AT89S52功能更加完善,应用更加灵活;具有较高的性能价格比,使其在嵌入式控制系统中有着广泛的应用前景。MCS单片机都采用40引脚的双列直插封装方式。下图为引脚排列图,40条引脚说明如下:.主电源引脚Vss和VccVss接地Vcc正常操作时为+5伏电源.外接晶振引脚XTAL1和XTAL2XTAL1内部振荡电路反相放大器的输入端,是外接晶体的一个引脚。当采用外部振荡器时,此引脚接地。XTAL2内部振荡电路反相放大器的输出端。是外接晶体的另一端。当采用外部振荡器时,此引脚接外部振荡源.控制或与其它电源复用引脚RST/VPD,ALE/和/VppRST/VPD当振荡器运行时,在此引脚上出现两个机器周期的高电平(由低到高跳变),将使单片机复位在Vcc掉电期间,此引脚可接下图8051引脚排列图上备用电源,由VPD向内部提供备用电源,以保持内部RAM中的数据。ALE/正常操作时为ALE功能(允许地址锁存)提供把地址的低字节锁存到外部锁存器,ALE引脚以不变的频率(振荡器频率的)周期性地发出正脉冲信号。因此,它可用作对外输出的时钟,或用于定时目的。但要注意,每当访问外部数据存储器时,将跳过一个ALE脉冲,ALE端可以驱动(吸收或输出电流)八个LSTTL电路。对于EPROM型单片机,在EPROM编程期间,此引脚接收编程脉冲(功能)。(3)外部程序存储器读选通信号输出端,在从外部程序存储取指令(或数据)期间,在每个机器周期内两次有效, 同样可以驱动八LSTTL输入。(4)/Vpp、/Vpp为内部程序存储器和外部程序存储器选择端。当/Vpp为高电平时,访问内部程序存储器,当/Vpp为低电平时,则访问外部程序存储器。对于EPROM型单片机,在EPROM编程期间,此引脚上加21伏EPROM编程电源(Vpp)。4、输入/输出引脚-,-,-,-。P0口(-)是一个8位漏极开路型双向I/O口,在访问外部存储器时,它是分时传送的低字节地址和数据总线,P0口能以吸收电流的方式驱动八个LSTTL负载。P1口(-)是一个带有内部提升电阻的8位准双向I/O口。能驱动(吸收或输出电流)四个LSTTL负载。P2口(-)是一个带有内部提升电阻的8位准双向I/O口,在访问外部存储器时,它输出高8位地址。P2口可以驱动(吸收或输出电流)四个LSTTL负载。P30(-)是一个带有内部提升电阻的8位准双向I/O口。能驱动(吸收或输出电流)四个LSTTL负载。模数转换器模块ADC0809性能的介绍模数转换电路的功能是将连续变化的模拟量转换为离散的数字量, 是架起模拟系统跟数字系统之间连接的桥梁。对于本系统而言,就是用于快速、高精度地对输入的酒精浓度信号进行采样编码,将其转换成单片机所能够处理的数字量。模数转换电路是本系统的关键部分,其性能的好坏直接影响整个系统的质量。根据A/D转换器的工作原理可将

A/D转换器分成两大类:一类是直接型A/D转换器;另一类是间接型A/D转换器。在直接型A/D转换器中,输入的模拟电压被直接转换成数字代码,不经任何中间变量。在问接型A/D转换器中,首先把输入的模拟电压转换成某种中间变量(时间、频率、脉冲宽度等等),然后再把这个中间变量转换为数字代码输出。.主要特性(1)8路8位A/D转换器,即分辨率8位。(2)具有转换起停控制端。(3)转换时间为1002。(4)单个+5V电源供电。(5)模拟输入电压范围0〜+5V,不需零点和满刻度校准。(6)工作温度范围为-40〜+85摄氏度。(7)低功耗,约15mW。.内部结构ADC0809由4部分逻辑结构构成,如图所示。ADC0809是CMOS单片型逐次逼近式A/D转换器,它由8路模拟开关、地址锁存与译码器、比较器、8位开关树型D/A转换器、逐次逼近寄存器、三态输出锁存器等其它一些电路组成。因此,ADC0809可处理8路模拟量输入,且有三态输出能力,既可与各种微处理器相连,也可单独工作。输入输出与TTL兼容。.外部特性(引脚功能)ADC0809芯片有28条引脚,采用双列直插式封装,如图所示。下面说明各引脚功能。IN0~IN7:8路模拟量输入端。2-1~2-8:8位数字量输出端。ADDA、ADDB、ADDC:3位地址输入线,用于选通8路模拟输入中的一路。ALE:地址锁存允许信号,输入,高电平有效。START:A/D转换启动信号,输入,高电平有效。EOC:A/D转换结束信号,输出,当A/D转换结束时,此端输出一个高电平(转换期间一直为低电平)。OE:数据输出允许信号,输入,高电平有效。当A/D转换结束时,此端输入一个高电平,才能打开输出三态门,输出数字量。CLK:时钟脉冲输入端。要求时钟频率不高于CLK:时钟脉冲输入端。要求时钟频率不高于640KHZREF(+)、REF(-):基准电压。Vcc:电源,单~+5V。GND:地。4.ADC0809的工作原理ADC0809的工作过程是:首先输入3位地址,并使ALE=1,将地址存入地址锁存器中。此地址经译码选通8路模拟输入之一到比较器。START上升沿将逐次逼近寄存器复位。下降沿启动A/D转换,之后EOC输出信号变低,指示转换正在进行。直到A/D转换完成,EOC变为高电平,指示A/D转换结束,结果数据已存入锁存器,这个信号可用作中断申请。当OE输入高电平时,输出三态门打开,转换结果的数字量输出到数据总线上。图ADC0809系统内部结构框图和外部引脚图酒精传感器模块性能分析TGS822气体传感器的敏感材料是金属氧化物,最具代表性的是SnO2o金属氧化物品体如SnO2在空气中被加热到一定高的温度时,氧被吸附在的带一个负电荷的晶体表面。然后,晶体表面的供与电子被转移到吸附的氧上,结果在一个空间电荷层留下正电荷。这样,表面势能形成一个势垒,从而阻碍电子流动。在传感器的内部,电流流过SnO2微晶的结合部位(晶粒边界)。在晶粒边界,吸附的氧形成一个势垒阻止载流子自由移动,传感器的电阻即缘于这种势垒。还原性气体出现时,带有负电荷的氧的表面浓度降低,导致晶粒边界的势垒降低。降低了的势垒使传感器的阻值减小了。传感器阻值和还原性气体浓度之间的关系可由下面的一定范围气体浓度方程表示:Rs=A[C]-a这里:Rsh专感器电阻A=常数[。=气体浓度a=Rs曲线的斜率费加罗气体传感器的气敏素子,使用在清洁空气中电导率低的 SnO2o当存在检知对象气体时,传感器的电导率随空气中气体浓度增加而增大。使用简单的电路即可将电导率的变化,转换为与该气体浓度相对应的输出信号。 TGS822传感器对酒精、有机溶剂灵敏度高,在酒精检测器等方面得到广泛使用。相同特性的 TGS823,采用了陶瓷底座,可以在200c的高温气氛中使用。

表TGS822性能参数一览表型号素子类型TGS8228系歹标准封装对象气体塑料、SUS双重金属网酒精、有机溶剂检测范围50—5000Ppm标准回路条件标准试验条件下的电学特性加热器电压VH+DC/AC回路电压VCMAX24VPs<15mw负裁电压加热器电压RLRH可父Ps<15mw38+ ( 室温)加热器功率PH660+50mwVH=传感器电阻RS300Ppm乙醇中1-10k灵敏度(Rs的变化率)+Rs(EtOH:300ppm)Rs(EtOH:50ppm)标准试验条件试验气体条件回路条件20+2C,65+5%RHVC=+DC/ACVH=+DC/AC预热条件七天以上感器电阻比(Rs/Ro)表示,这里的Rs,Ro定义如下:Rs=含300Ppm乙醇、各种温/湿度下的电阻值Ro=含300Ppm乙醇、20c65%.下的电阻值表血液与呼气酒精含量换算一览表序号呼出气体中酒精浓度mg/L呼出气体中酒精浓度10-6血液中酒精浓度mg/100mL15210315420525

6307358409451050115512601365147015751680178518901995201002115022200车辆驾驶人员血液中的酒精含量大于或等于 80mg/100ml的驾驶行为行为类别对象临界值(mg/100ml)饮酒驾驶车辆驾驶人员20醉酒驾驶车辆驾驶人员80LCD显示模块1602字符型LCD通常有14条引脚线或16条引脚线的LCD,多出来的2条线是背光电源线VCC(15脚)和地线GND(16脚),其控制原理与14脚的LCD完全一样,其中:引脚符号功能说明VSS一般接地VDD接电源(+5V)

3V0液晶显示器对比度调整端,接正电源时对比度最弱,接地电源时对比度最高(对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度)。4RSRS为寄存器选择,高电平1时选择数据寄存器、低电平0时选择指令寄存器。5R/WR/W为读写信号线,高电平(1)时进行读操作,低电平(0)时进行写操作6EE(或EN)端为使能(enable圃,下降沿使能。7DB07DB0底4位三态、双向数据总线0位(最低位)8DB1底4位三态、双向数据总线1位9DB2底4位三态、双向数据总线2位10DB310DB3底4位三态、11DB4高4位三态、12DB5高4位三态、双向数据总线3位双向数据总线4位双向数据总线5位13DB6高4位三态、双向数据总线6位14DB7高4位三态、14DB7高4位三态、15BLA背光电源正极16BLK背光电源负极寄存器选择控制表即为ASCII码表RSR/W操作说明00写入指令寄存器(清除屏等)01都busyflag(DB7),以及读取位址计数器(DB0~DB6)值0写入数据寄存器(显示各字型等)1从数据寄存器读取数据1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“ A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”。因为1602识别的是ASCII码,试验可以用ASCII码直接赋值,在单片机编程中还可以用字符型常量或变量赋值,如‘A'图LCD1602外部引脚图

第4章系统软件是单片机对ADC进行初始化,使其能进入正常工作状态,通过判断ADC转换判断标志EOC,看其是否转换完毕,如果没有,则继续判断,如若完成则将ADC转换的数据由单片机读取并计算,然后进入下一环节。LCD程序流程图是开始 是否单片机对LCD进行初四化,使工能进入,常工作状态,然后乎U断LCD是否处于忙碌状态,如果是则继续判断,如和希超购CDADC转换后计算出来的结果通过输出指令输出,并判断计算出的结果处/哪种状态|.并输出。少个%KU试仪程序#include<> 判断LCD#include<> 是否忙碌sbitrs=P2A4;//LCD液晶讪七/p0接DB0_DB7sbitrw=P2A7;sbitep=P2A6; X sbitale=P2A0;//ADC0809弓WW®sbitstart=P3A7;TOC\o"1-5"\h\zsbitoe=P3A5; 什sbiteoc=P3A6; - -sbitadda=P2A5; 判断饮酒状态sbitaddb=P2A2;sbitadc=P2A3;sbitlight=P3A0;,//报警输出 .sbitDQ=P3A3;伽獐§20输入脚定义 醉酒驾驶sbitDE=P3A1;unsignedchartempL=0;unsignedchartempH=0;floattemperature;unsignedcharcodedis1[]={"WORKSTART"}; //状态显示unsignedcharcodedis2[]={"ALCOHOLTEST"};unsignedcharcodedis3[]={"mg/100ml”};unsignedcharcodedis4[]={"SAFEDRIVING"};unsignedcharcodedis5[]={"DRINK-DRIVING"};unsignedcharcodedis6[]={"DRUNKDRIVING"};voiddelay(unsignedcharms)〃延时1{unsignedchari,j;while(ms--){for(i=0;i<250;i++)for(j=0;j<50;j++){_nop_();_nop_();}}}voiddelay2(unsignedinttime)//延日92{unsignedintn;n=0;while(n<time){n++;}return;}bitlcd_bz()//LCD判忙{bitresult;rs=0;rw=1;ep=1;_nop_();_nop_();result=(bit)(P0&0x80);ep=0;returnresult;}lcd_wcmd(unsignedcharcmd)//写指令数据到LCD{while(lcd_bz())rs=0;rw=0;ep=0;_nop_();_nop_();P0=cmd;_nop_();_nop_();ep=1;_nop_();_nop_();ep=0;}lcd_pos(unsignedcharpos)〃设定显示位置{lcd_wcmd(pos|0x80);}lcd_wdat(unsignedchardat)//写入显示数据到LCD{while(lcd_bz());rs=1;rw=0;ep=0;}}}}P0=dat;_nop_();_nop_();ep=1;_nop_();_nop_();ep=0;}lcd_init()//LCD初始化{lcd_wcmd(0x38);delay(1);lcd_wcmd(0x0c);delay(1);lcd_wcmd(0x06);delay(1);lcd_wcmd(0x01);delay(1);}Init_DS18B20(void)//DS18B20初始化{unsignedcharx=0;DQ=1;delay2(8);DQ=0;delay2(85);DQ=1;delay2(14);delay2(20);ReadOneChar(void)//向DS18B20读一字节数据{unsignedchari=0;unsignedchardat=0;for(i=8;i>0;i--){DQ=1;delay2(1);DQ=0;dat>>=1;DQ=1;if(DQ)dat|=0x80;delay2(4);}return(dat);}WriteOneChar(unsignedchardat)//向DS18B20写一字节数据{unsignedchari=0;for(i=8;i>0;i--){DQ=0;DQ=dat&0X01;delay2(5);DQ=1;dat>>=1;}delay2(4);ReadTemperature(void)//向DS18B20读温度值{Init_DS18B20();WriteOneChar(Oxcc);WriteOneChar(0x44);delay2(125);Init_DS18B20();WriteOneChar(Oxcc);WriteOneChar(0xbe);tempL=ReadOneChar();tempH=ReadOneChar();temperature=((tempH*256)+tempL)*;delay2(200);return(temperature);}main(){floatx,y,k;unsignedintda,n,temp1,temp2,i,gw,sw,bw,kw,xw;light=0; //数据初始化lcd_init();delay(3);lcd_pos(0);i=0;while(dis1[i]!='\0') 〃显示开始工作{lcd_wdat(dis1[i]);i++;}lcd_pos(0x41);i=0;while(dis2[i]!='\0') //显示开始测试{lcd_wdat(dis2[i]);i++;}delay(32);while(1)//无限循环测试{lcd_init();//初始化LCDale=0;//初始化ADC0809start=0;adda=0; //定义TGS822信号输入引脚号addb=0;adc=0;_nop_();ale=1;//启动ADC0809start=1;_nop_();start=0;_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();while(eoc==0);//判断ADC0809是否转换完毕oe=1;//打开ADC0809数据锁存_nop_();da=P1;//读取转换后数据oe=0;y二(2550/da-10)/; //代入传感器性质公式进行计算if(y>x=if(y>x=if(y>x=if(y>x=*y;elseif(y>2)x=if(y>x=if(y>x=*y;elseif(y>x=if(y>x=if(y>x= //取出所得数据个、十、百、千每位上的数,并转换对应的ASCII表中数据便于输出temp1=n/10;sw=temp1%10+0x30;temp2=temp1/10;bw=temp2%10+0x30;kw=temp2/10+0x30;lcd_pos(0x84);//设定小数点在LCD显示位置lcd_wdat(0x2e);//输入小数点if(n>=1000)〃判断数据大小,按位输出{lcd_pos(0x85);lcd_wdat(gw);lcd_pos(0x83);lcd_wdat(sw);lcd_pos(0x82);{{lcd_wdat(bw);lcd_pos(0x81);lcd_wdat(kw);}elseif(n>=100){lcd_pos(0x85);lcd_wdat(gw);lcd_pos(0x83);lcd_wdat(sw);lcd_pos(0x82);lcd_wdat(bw);}else{lcd_pos(0x85);lcd_wdat(g

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论