资源描述
郑州轻工业学院传感器及应用系统课程设计说明书郑州轻工业学院课程设计说明书题目: 酒后驾车测试仪的设计 姓 名: 张 文 辉 院 (系): 电气信息工程学院 专业班级:电子信息工程08级2班 学 号: 200801030251 指导教师: 梁威 郭淑婷 成 绩: 时间: 2011 年 6 月 20日至 2011年 6 月 24日酒后驾车测试仪的设计电子信息工程 08 级 2 班 指导老师: 梁 威 郭淑婷摘要:本设计在分析了几种不同的酒精测试原理最终确定了用MQK2系列的酒精浓度传感器,并对该传感器的检测酒精浓度做了深入的探讨。本系统分为酒精浓度检测模块、A/D转换模块、系统控制模块、显示及报警模块,并对各个模块进行了分析,最终确定了设计方案。在硬件电路中,详细的阐述了应用单片机实现检测的原理,分析了以AT89S52单片机为主控单元的系统硬件和软件设计,并对该系统进行误差分析,使我们对于系统的各种性能有了进一步认识。关键词:传感器 A/D转换 单片机 目录1 概述32 酒精浓度监测仪的整体结构32.1 硬件设计及功能方案框图33 系统的硬件电路设计53.1 气敏传感器及其电路设计63.2 A/D转换电路83.3 单片机主控系统电路93.4 显示及报警电路104 酒精测试仪软件的设计134.1 软件总体流程图设计134.2 系统软件实现原理134.3 系统程序流程134.4 C语言程序155 总结与展望20附录:22附录:23参考文献:241 概述在经济快速发展的今天,越来越多的人有了私家车,但车多了也带来一些社会问题,而酒后驾驶造成的交通事故也频频发生。为了遏制酒驾,政府出台了一系列法律,对入刑标准的酒精浓度的检测越来越严格。为此,需要设计一智能仪器能够检测驾驶员体内酒精含量。该酒精监测仪是以气敏传感器和单片机为核心,能够监测空气酒精浓度,并具有声音报警功能及LCD显示功能。其可测试出被测者酒精浓度值,并根据实测值与的阈值进行比较,对超过的阈值进行声音报警来提示。采用C语言来实现其软件功能。酒精监测仪可实现对空气中酒精浓度00.72mg/L范围的监测,根据相关推导可定性计算出被测者血液中酒精浓度,LCD显示器能够对实测值实时显示,并能够实现声光报警功能。该装置硬件电路设计简单、软件功能完善、灵敏度高、工作性好、并具有尺寸小、低功耗、低成本的优点可以使其吸引更多的市场关注。2 酒精浓度监测仪的整体结构2.1 硬件设计及功能方案框图酒精传感器测试仪常用的是单片机、A/D转换芯片TLC2543、酒精传感器等主要硬件构成硬件电路,软件多采用汇编程序来实现。由于汇编编写起来需要把个寄存器地址分配搞得很清楚,除了自己外别人读起来很不方便。交流和修改不如C语言方便,给以后的维护带来不便,所以这里采用C语言实现其软件的设计。本文设计的酒精浓度检测仪主要是以酒精传感器和单片机为平台设计而成的,这里给出了两个可选择方案:方案一: 该方案用气敏传感器检测酒精的浓度,输出的电压信号经过放大后来驱动led灯的亮或灭,从而检测酒精浓度是否超标,其原理图如图2-1所示:此方案简单易行,为纯电路但不能精确的显示出所测气体的具体浓度。不便于为执法者提供必要的数据记录。 图2-1 原理图方案二:该方案的酒精监测仪是以气敏传感器和单片机为核心,能够监测空气酒精浓度,并具有报警功能及LCD显示功能。其可检测出被测者呼出气体中酒精浓度值,并可设定酒驾标准的阈值,对超过阈值的进行报警来提示。本系统采用以AT89S52单片机为核心开发的酒精浓度监测仪。其系统硬件框图如图2-2:气敏传感器A/D转换电路单片机报警电路LED显示键盘 图2-2 系统硬件框图综合以上的分析,方案二更精确,能够显示具体的气体浓度。为执法者提供数据依据,故本设计采用方案二。硬件设计部分和软件设计部分。硬件部分为利用MQK2气敏传感器测量空气中酒精浓度,并转换为电压信号经A/D转换后传给单片机系统,由单片机及其外围电路进行信号的处理,显示浓度值以及超阈值声光报警。软件部分用C语言进行编程,程序采用模块化设计思想。各个子程序的功能相对独立,便于调试和修改。而硬件电路又大体可分为单片机小系统电路、A/D转换电路、报警电路、LCD显示电路,各部分电路的设计及原理将会在硬件电路设计部分详细介绍。3 系统的硬件电路设计本系统由四大部分组成:(1)气敏传感器对气体浓度的采集;(2)A/D转换电路(3)单片机主控电路(4)显示酒精浓度及报警电路。以下对这几个模块分别予以详细的介绍。3.1 气敏传感器及其电路设计 气体传感器是气体检测系统的核心,通常安装在探测头内。从本质上讲,气体传感器是一种将某种气体体积分数转化成对应电信号的转换器。探测头通过气体传感器对气体样品进行调理,通常包括滤除杂质和干扰气体、干燥或制冷处理、样品抽吸,甚至对样品进行化学处理,以便化学传感器进行更快速地测量。目前普遍使用的气敏传感器有燃料电池型(电化学型)和半导体型两种。他们能够制造便携型呼气酒精浓度测试器,适合于现场使用。与半导体传感器相比,燃料电池酒精传感器具有稳定性好、精度高、抗干扰性好等优点。由于燃料电池酒精传感器的结构要求很精密,制造难度大,目前世界上只有美国、德国、英国等少数几个国家能够生产。本测试器采用MQK2酒精浓度传感器,检测人体呼出气体中酒精浓度并且输出电压信号。MQK2酒精浓度传感器主要由气敏元件和电阻丝组成, MQK2传感器外接+5V电压时,能将电阻丝加热到270300。,电路将MQK2传感器的阻值变化转化成输出电压的变化,从而可以通过A/D转换成数字量供单片机处理。根据分析,乙醇浓度增加时元件电阻R减小反之异亦反,所以呼出气体中的气态乙醇逐渐扩散后元件电阻R敏感的变化。MQK2酒精浓度传感器的特性参数:l、回路电压:(Vc) 5-24V2、取样电阻:(RL) 0.5-20K3、加热电压:(VH)50.1V4、加热功率:(P)约750mW5、灵敏度:R0(air)/RS (100ppmC2H5OH)56、响应时间:Tres10秒7、恢复时间:Trec30秒注意事项: 气敏元件开始工作时,需预热3-5分钟后方可正常使用。不要在蚀性气体环境下工作。工作环境:温度-10-+50、相对湿度0-90RH。传感器输出电压与酒精浓度关系,通过测量MQK2输出信号同酒精浓度为近似的线性关系,如图3-1所示。图3-1 酒精浓度与输出电压关系MQK2酒精浓度传感器以其灵敏度高、电路简单、使用方便、所需费用低,稳定性、好寿命长传感器等优点,可以把气体信号转换为电压信号输出得到广泛应用。本电路在酒精浓度为0时,其输出电压为3v。由于其输出电压超出了AT89S52的电压范围,所以在本设计中加入了一个调整电路使其输出的电压满足AT89S52的输入要求。其原理图如图2-1,采用LM3362.5,作为一个2.5V的基准电压,采用差动输入使得Vout=V测-2.5V从而传感器信号的输出 符合AT89S51的范围。传感器及其外围电路如图3-2所示:图3-2 气敏传感器及其原理图3.2 A/D转换电路此模块的A/D转换芯片用TLC2543,是一种12位开关电容逐次逼近式模数转换器,带有SPI接口。它消除了以往许多 A/D芯片并行输出、 连线复杂的缺点,并在转换结果串行输出的同时,可以串行输入下次 AD转换位的控制字。TLC2543的控制字位长为 8位, 其中D0控制位用来表示转换结果的二进制数据格式,当D0置0时,转换结果为单极性(无符号二进制)数据,当D0置1时,转换结果为双极性(有符号二进制)数据;D1位用于选择转换后的数据是先输出 MSB, 还是先输出LSB,当D1置 0时,先输出MSB,而当D1置1时,先输出LSB;D3、D2用于选择数据长度,可以选择8位、12位、16位。其电路原理图如图3-3所示:图3-3. A/D转换原理图3.3 单片机主控系统电路AT89S52是一种低功耗、高性能CMOS8位微控制器,具有8K 在系统可编程Flash 存储器。使用Atmel 公司高密度非易失性存储器技术制造,与工业80C51 产品指令和引脚完全兼容。片上Flash允许程序存储器在系统可编程,亦适于常规编程器。在单芯片上,拥有灵巧的8 位CPU 和在系统可编程Flash,使得AT89S52为众多嵌入式控制应用系统提供高灵活、超有效的解决方案。AT89S52具有以下标准功能:8k字节Flash,256字节RAM,32 位I/O 口线,看门狗定时器,2 个数据指针,三个16 位定时器/计数器,一个6向量2级中断结构,全双工串行口,片内晶振及时钟电路。另外,AT89S52 可降至0Hz 静态逻辑操作,支持2种软件可选择节电模式。空闲模式下,CPU停止工作,允许RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。本系统的控制系统由AT89S52单片机及其外围电路组成,是整个酒后驾车测试系统的控制核心。AT89S52单片机在高温环境中稳定性好,可以模拟SPI与AD转换芯片TLC2543进行通信,AT89S52单片机各个引脚分布如图所示;P18和P19为单片机自身的11.0592MHZ晶振;P9是复位信号:P21引脚输出报警信号;P;P00-P07引脚对应液晶显示屏的DBO-DB7,控制液晶屏的写入字符,P1.2、P1.3、P1.4为液晶的控制端接口;其原理图如图3-4所示:图3-4 AT89S52主控电路原理图3.4 显示及报警电路 在日常生活中,我们对液晶显示器并不陌生。液晶显示模块已作为很多电子产品的通过器件,如在计算器、万用表、电子表及很多家用电子产品中都可以看到,显示的主要是数字、专用符号和图形。在单片机的人机交流界面中,一般的输出方式有以下几种:发光管、LED数码管、液晶显示器。发光管和LED数码管比较常用,软硬件都比较简单,在单片机系统设计中应用液晶显示器作为输出器件有以下几个优点:1、显示质量高 由于液晶显示器每一个点在收到信号后就一直保持那种色彩和亮度,恒定发光,而不像阴极射线管显示器(CRT)那样需要不断刷新新亮点。因此,液晶显示器画质高且不会闪烁。2、数字式接口 液晶显示器都是数字式的,和单片机系统的接口更加简单可靠,操作更加方便。3、体积小、重量轻 液晶显示器通过显示屏上的电极控制液晶分子状态来达到显示的目的,在重量上比相同显示面积的传统显示器要轻得多。4、功耗低 相对而言,液晶显示器的功耗主要消耗在其内部的电极和驱动IC上,因而耗电量比其它显示器要少得多。字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。本设计中选用1602字符型液晶显示器,一般1602字符型液晶显示器实物如图3-5所示。 图3-5 液晶1602实物图1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别,两者尺寸差别如下图3-6所示:图3-6 1602尺寸图示此电路中液晶的数据端口与单片机的P0口相连,P1.2、P1.3、P1.4为液晶的控制端接口,通过软件来实现具体的显示功能。报警电路如图3-7所示。报警电路由P2.0口输出接电阻R5,三极管,蜂鸣器组成。当实测值大于设定值时候,端口P2.0输出低电平使三极管导通蜂鸣器发出警报。图3-7 报警电路原理图4 酒精测试仪软件的设计4.1 软件总体流程图设计软件设计采用C语言编程,运用模块化得程序设计思路对不同功能模块的程序进行分别编程,以便移植或调用,这样使软件层次结构清晰,有利于软件的调试修改。4.2 系统软件实现原理本系统的测试原理,测试者打开按键K1,被测试者向气体传感器呼出一口气即可。采集的数据经过A/D采样数字化转换后,输出给单片机,主控系统进行数据处理转换为酒精的相对浓度,并与设定值进行比较如果大于设定值则,蜂鸣器报警,并由液晶显示其浓度值,直观便于参考。4.3 系统程序流程本设计程序运用C语言编程易于模块化设计,其流程如图4-1所示。先制定主程序流程图,然后可分为各个子模块区分别实现其功能。最终完成检测并送液晶显示,可以看到被测试的酒精浓度与设定值之间相差范围,并及时采取相关措施,与设定阀值相比较,如果大于阀值,则通过扬声器发出报警。另外AT89S52有按键K2,每一次检测之后按K2可复位,等待下次测试,操作非常简单,实用性好。先判键K1是否按下,按下则开始检测,接着调用读取AD转换数值子程序,之后进行设定值与检测值得比较并显示浓度值,如果实测值大于设定直,报警。小于设定值,不报警只用来显示。由于运用子模块非常清楚,使软件的设计思路 图4-1 主程序流程图很清晰,更容易实现,C语言逻辑上很清晰,调理性好,方便易懂,错误容易检查,给以后的维护和改动带来很大方便。大量的统计研究结果表明,如果被测者深吸气后以中等力度呼气达三秒钟上,这时呼出的气就是从肺部深处出来的气体。呼气中的酒精含量与血液中的酒精含量有如下关系:BAC(in mgL)=BrAC(in mgL)x 2200 (4-1)其中,BAC代表血液酒精浓度,BrAC表示呼气酒精浓度,in mgL表示以每升中多少毫克为单位。也就是说,以毫克升为单位的血液酒精浓度在数值上相当于以毫克升为单位的呼气酒精浓度乘上系数2200(由于各国的情况不同,在美国此系数采用2000,而欧洲很多国家采用2100)。由于BrAC受到环境温度、湿度以及被测试者个体差异等多方面影响,其测试结果不如直接检测BAC准确,但是该结果仍可作为判断饮酒程度的重要参考。我国对酒后驾驶的判定界限为1030 g/100 L (血液中的酒精浓度)。4.4 C语言程序 /*AD_TLC2543 SPI方式通信 0通道的ad采样转换*/#include#include#define uchar unsigned char#define uint unsigned intuchar d0,d1,d2,d3,d4; /存放四位要显示的数据uchar kh=0,kl=0,flag=0; /读出的数据uint kk,uu=0; /kk为读出的数据,未处理float zz;uchar code table=0123456789;uchar code table1= .mg/100mL;uchar code table2=alcohol thicknes;sbit lcdrs=P25;sbit lcdrw=P26;sbit lcden=P27; /液晶使能端口sbit k1=P16;sbit k2=P17;/按键sbit sp=P20;sbit data_out=P10;/AD端口sbit data_input=P11;sbit cs=P12;sbit clk=P13;uchar num;void delay(uint z)uint x,y;for(x=z;x0;x-)for(y=110;y0;y-); /1msvoid write_com(uchar com) /写指令 lcdrw=0;lcdrs=0;P0=com;delay(5);lcden=0;delay(5);lcden=1;void write_data(uchar dat) /写数据lcdrs=1;lcdrw=0;P0=dat;delay(5);lcden=0;delay(5);lcden=1;void writ_com_data(uchar comm,uchar datt)lcdrw=0;lcdrs=0;P0=comm;delay(5);lcden=0;delay(5);lcden=1;lcdrs=1;lcdrw=0;P0=datt;delay(5);lcden=0;delay(5);lcden=1;void init() /初始化lcdlcden=0;write_com(0x01); /清屏并光标复位write_com(0x38); /5x7的点阵字符write_com(0x0c); /开显示,光标不闪烁write_com(0x02); /光标回车write_com(0x06); /光标右移void lcd2(uchar a,uchar b)/显示通道数write_com(a); /数据地址write_data(tableb);void lcd1(uint xx)/液晶显示数据 d4=xx/10000;d3=(xx%10000)/1000;d2=(xx%10000)%1000/100;d1=(xx%10000)%1000%100/10;d0=(xx%10000)%1000%100%10;writ_com_data(0xc2,tabled4);writ_com_data(0xc3,tabled3);writ_com_data(0xc4,table10);writ_com_data(0xc5,tabled2);writ_com_data(0xc6,tabled1);writ_com_data(0xc7,tabled0);writ_com_data(0xc8,table11);writ_com_data(0xc9,table12);writ_com_data(0xca,table13);writ_com_data(0xcb,table14);writ_com_data(0xcc,table15);writ_com_data(0xcd,table16);writ_com_data(0xce,table17);writ_com_data(0xcf,table18);void lcd()/液晶显示固定字符 uint i; write_com(0x80); for(i=0;i16;i+) write_data(table2i); uchar ad_read(char com) /采集数据12位 uchar temp,i; /com为写入的指令 cs=0; for(i=0;i8;i+)temp=com; /指令的写入temp &=0x80;if(temp=0x80)data_input=1;else data_input=0;kh=1;if(data_out) /数据的读出kh |=0x01; /上升沿读出数据clk=1;com=1;clk=0; /下降沿写入数据for(i=0;i4;i+)kl=1;if(data_out)kl |=0x01;clk=1;clk=0;kk=kh;kk=4;kk+=kl;cs=1;return(kk);uchar read_average() /采集数据10次并求平均值 uchar i; kk=0; uu=0; for(i=0;i=2; return uu; void shujuchuli(uint yy) /数据处理/float zz; /单精度,double为双精度zz=(yy/4096.0)*0.72)*1000*2200; /BAC(in mgL)=BrAC(in mgL)x 2200void main() sp=0; init(); /初始化lcd lcd();while(1)if(k1=0) delay(15); if(k1=0) if(!k1) flag=1; while(flag) ad_read(0x08);/第一通道采样,12位 shujuchuli(kk); read_average(); lcd1(uu); /lcd显示数据 if(zz=20000) sp=1; if(k2=0) delay(15); if(k2=0) if(!k2) sp=0; flag=0; 5 总结与展望酒后驾驶测试仪系统是针对当今有车人,在驾驶车辆时不注意社会的公共安全,无视法律而图一时方便而酒驾,造成众多的交通事故的发生,为遏制这一现象而开发的酒精测试仪。方便易用,也为执法者判定是否为酒驾提供了依据。为交通环境提供了安全的保障,也为保卫人民群众的生命财产安全奠定了基础。本文设计应用中,主要进行了以下几方面的工作: (1) 本文在前半部分详细系统比较了两中酒精测试方法的优缺点及为何选用本设计的方案,这使我们更加了解本设计的设计目的及要求。 (2) 在了解测试气体浓度实现原理和气敏传感器工作原理的基础上研究和分析了系统设计方案;(3) 完成酒后驾驶测试仪系统的硬件选型和电路设计;(4) 完成酒后驾驶测试仪系统的软件流程图设计及软件编程;本文通过对酒后驾驶测试仪系统的设计过程得出如下结论:酒后驾驶测试仪系统对酒精浓度的测试,具有较高的精度和灵敏度,实现了测试的要求并对确定酒后驾驶进行报警,其主要技术指标达到了系统设计要求。本文关于酒后驾驶测试仪系统的设计,虽然可以满足广大普通客户的需求,也做了一些尝试性的探索工作,但是还存在很多不完善的地方,仍有许多方面有待进一步深入研究。(1) 本文在系统的精度方面研究非常局限,并没有做到非常精确,这就要求以后在这方面还需更进一步研究。(2) 就本课题而言,本设计只能对判定是否酒后驾驶进行辅助的初步测试,若要精确测定酒精含量还需用血液检测等其他方法。附录:附录:参考文献1 张毅刚.单片机原理及应用 M.高等教育出版社2 黄惠媛.单片机原理与接口技术 M.海洋出版社3 徐新民.单片机原理与应用 M.浙江大学出版社4 何道清.传感器与传感器技术 M.科学出版社5 郑义,陈俊.用AT89C52 和TLC2543 实现数据采集系统J6 卢丽君.基于TLC2543 的单片机多路采样监测系统的设计J.器仪表与分析监测 7 何希才.传感器技术与应用M.北京航空航天大学出版社24
展开阅读全文