传感器课程设计.docx

上传人:b****6 文档编号:6005600 上传时间:2023-01-02 格式:DOCX 页数:19 大小:295.62KB
下载 相关 举报
传感器课程设计.docx_第1页
第1页 / 共19页
传感器课程设计.docx_第2页
第2页 / 共19页
传感器课程设计.docx_第3页
第3页 / 共19页
传感器课程设计.docx_第4页
第4页 / 共19页
传感器课程设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

传感器课程设计.docx

《传感器课程设计.docx》由会员分享,可在线阅读,更多相关《传感器课程设计.docx(19页珍藏版)》请在冰豆网上搜索。

传感器课程设计.docx

传感器课程设计

酒后驾车测试仪的设计

摘要:

本设计在分析了几种不同的酒精测试原理最终确定了用MQK2系列的酒精浓度传感器,并对该传感器的检测酒精浓度做了深入的探讨。

本系统分为酒精浓度检测模块、A/D转换模块、系统控制模块、显示及报警模块,并对各个模块进行了分析,最终确定了设计方案。

在硬件电路中,详细的阐述了应用单片机实现检测的原理,分析了以AT89S52单片机为主控单元的系统硬件和软件设计,并对该系统进行误差分析,使我们对于系统的各种性能有了进一步认识。

关键词:

传感器A/D转换单片机

目录

1概述3

2酒精浓度监测仪的整体结构3

2.1硬件设计及功能方案框图3

3系统的硬件电路设计5

3.1气敏传感器及其电路设计6

3.2A/D转换电路8

3.3单片机主控系统电路9

3.4显示及报警电路10

4酒精测试仪软件的设计13

4.1软件总体流程图设计13

4.2系统软件实现原理13

4.3系统程序流程13

4.4C语言程序15

5总结与展望20

附录Ⅰ:

22

附录Ⅱ:

23

参考文献:

24

1概述

在经济快速发展的今天,越来越多的人有了私家车,但车多了也带来一些社会问题,而酒后驾驶造成的交通事故也频频发生。

为了遏制酒驾,政府出台了一系列法律,对入刑标准的酒精浓度的检测越来越严格。

为此,需要设计一智能仪器能够检测驾驶员体内酒精含量。

该酒精监测仪是以气敏传感器和单片机为核心,能够监测空气酒精浓度,并具有声音报警功能及LCD显示功能。

其可测试出被测者酒精浓度值,并根据实测值与的阈值进行比较,对超过的阈值进行声音报警来提示。

采用C语言来实现其软件功能。

酒精监测仪可实现对空气中酒精浓度0~0.72mg/L范围的监测,根据相关推导可定性计算出被测者血液中酒精浓度,LCD显示器能够对实测值实时显示,并能够实现声光报警功能。

该装置硬件电路设计简单、软件功能完善、灵敏度高、工作性好、并具有尺寸小、低功耗、低成本的优点可以使其吸引更多的市场关注。

2酒精浓度监测仪的整体结构

2.1硬件设计及功能方案框图

酒精传感器测试仪常用的是单片机、A/D转换芯片TLC2543、酒精传感器等主要硬件构成硬件电路,软件多采用汇编程序来实现。

由于汇编编写起来需要把个寄存器地址分配搞得很清楚,除了自己外别人读起来很不方便。

交流和修改不如C语言方便,给以后的维护带来不便,所以这里采用C语言实现其软件的设计。

本文设计的酒精浓度检测仪主要是以酒精传感器和单片机为平台设计而成的,这里给出了两个可选择方案:

方案一:

该方案用气敏传感器检测酒精的浓度,输出的电压信号经过放大后来驱动led灯的亮或灭,从而检测酒精浓度是否超标,其原理图如图2-1所示:

此方案简单易行,为纯电路但不能精确的显示出所测气体的具体浓度。

不便于为执法者提供必要的数据记录。

图2-1原理图

方案二:

该方案的酒精监测仪是以气敏传感器和单片机为核心,能够监测空气酒精浓度,并具有报警功能及LCD显示功能。

其可检测出被测者呼出气体中酒精浓度值,并可设定酒驾标准的阈值,对超过阈值的进行报警来提示。

本系统采用以AT89S52单片机为核心开发的酒精浓度监测仪。

其系统硬件框图如图2-2:

图2-2系统硬件框图

综合以上的分析,方案二更精确,能够显示具体的气体浓度。

为执法者提供数据依据,故本设计采用方案二。

硬件设计部分和软件设计部分。

硬件部分为利用MQK2气敏传感器测量空气中酒精浓度,并转换为电压信号经A/D转换后传给单片机系统,由单片机及其外围电路进行信号的处理,显示浓度值以及超阈值声光报警。

软件部分用C语言进行编程,程序采用模块化设计思想。

各个子程序的功能相对独立,便于调试和修改。

而硬件电路又大体可分为单片机小系统电路、A/D转换电路、报警电路、LCD显示电路,各部分电路的设计及原理将会在硬件电路设计部分详细介绍。

3系统的硬件电路设计

本系统由四大部分组成:

(1)气敏传感器对气体浓度的采集;

(2)A/D转换电路(3)单片机主控电路(4)显示酒精浓度及报警电路。

以下对这几个模块分别予以详细的介绍。

3.1气敏传感器及其电路设计

气体传感器是气体检测系统的核心,通常安装在探测头内。

从本质上讲,气体传感器是一种将某种气体体积分数转化成对应电信号的转换器。

探测头通过气体传感器对气体样品进行调理,通常包括滤除杂质和干扰气体、干燥或制冷处理、样品抽吸,甚至对样品进行化学处理,以便化学传感器进行更快速地测量。

目前普遍使用的气敏传感器有燃料电池型(电化学型)和半导体型两种。

他们能够制造便携型呼气酒精浓度测试器,适合于现场使用。

与半导体传感器相比,燃料电池酒精传感器具有稳定性好、精度高、抗干扰性好等优点。

由于燃料电池酒精传感器的结构要求很精密,制造难度大,目前世界上只有美国、德国、英国等少数几个国家能够生产。

本测试器采用MQK2酒精浓度传感器,检测人体呼出气体中酒精浓度并且输出电压信号。

MQK2酒精浓度传感器主要由气敏元件和电阻丝组成,MQK2传感器外接+5V电压时,能将电阻丝加热到270℃~300℃。

,电路将MQK2传感器的阻值变化转化成输出电压的变化,从而可以通过A/D转换成数字量供单片机处理。

根据分析,乙醇浓度增加时元件电阻R减小反之异亦反,所以呼出气体中的气态乙醇逐渐扩散后元件电阻R敏感的变化。

MQK2酒精浓度传感器的特性参数:

l、回路电压:

(Vc)5-24V

2、取样电阻:

(RL)0.5-20KΩ

3、加热电压:

(VH)5±0.1V

4、加热功率:

(P)约750mW

5、灵敏度:

R0(air)/RS(100ppmC2H5OH)>5

6、响应时间:

Tres<10秒

7、恢复时间:

Trec<30秒

注意事项:

气敏元件开始工作时,需预热3-5分钟后方可正常使用。

不要在蚀性气体环境下工作。

工作环境:

温度-10-+50℃、相对湿度0-90%RH。

传感器输出电压与酒精浓度关系,通过测量MQK2输出信号同酒精浓度为近似的线性关系,如图3-1所示。

图3-1酒精浓度与输出电压关系

MQK2酒精浓度传感器以其灵敏度高、电路简单、使用方便、所需费用低,稳定性、好寿命长传感器等优点,可以把气体信号转换为电压信号输出得到广泛应用。

本电路在酒精浓度为0时,其输出电压为3v。

由于其输出电压超出了AT89S52的电压范围,所以在本设计中加入了一个调整电路使其输出的电压满足AT89S52的输入要求。

其原理图如图2-1,采用LM336~2.5,作为一个2.5V的基准电压,采用差动输入使得Vout=V测-2.5V从而传感器信号的输出符合AT89S51的范围。

传感器及其外围电路如图3-2所示:

图3-2气敏传感器及其原理图

3.2A/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-4AT89S52主控电路原理图

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-61602尺寸图示

此电路中液晶的数据端口与单片机的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(inmg/L)=BrAC(inmg/L)x2200(4-1)

其中,BAC代表血液酒精浓度,BrAC表示呼气酒精浓度,inmg/L表示以每升中多少毫克为单位。

也就是说,以毫克/升为单位的血液酒精浓度在数值上相当于以毫克/升为单位的呼气酒精浓度乘上系数2200(由于各国的情况不同,在美国此系数采用2000,而欧洲很多国家采用2100)。

由于BrAC受到环境温度、湿度以及被测试者个体差异等多方面影响,其测试结果不如直接检测BAC准确,但是该结果仍可作为判断饮酒程度的重要参考。

我国对酒后驾驶的判定界限为10~30g/100L(血液中的酒精浓度)。

4.4C语言程序

/*AD_TLC2543SPI方式通信0通道的ad采样转换*/

#include

#include

#defineucharunsignedchar

#defineuintunsignedint

uchard0,d1,d2,d3,d4;//存放四位要显示的数据

ucharkh=0,kl=0,flag=0;//读出的数据

uintkk,uu=0;//kk为读出的数据,未处理

floatzz;

ucharcodetable[]="0123456789";

ucharcodetable1[]=".mg/100mL";

ucharcodetable2[]="alcoholthicknes";

sbitlcdrs=P2^5;

sbitlcdrw=P2^6;

sbitlcden=P2^7;//液晶使能端口

sbitk1=P1^6;

sbitk2=P1^7;//按键

sbitsp=P2^0;

sbitdata_out=P1^0;//AD端口

sbitdata_input=P1^1;

sbitcs=P1^2;

sbitclk=P1^3;

ucharnum;

voiddelay(uintz)

{

uintx,y;

for(x=z;x>0;x--)

for(y=110;y>0;y--);//1ms

}

voidwrite_com(ucharcom)//写指令

{

lcdrw=0;

lcdrs=0;

P0=com;

delay(5);

lcden=0;

delay(5);

lcden=1;

}

voidwrite_data(uchardat)//写数据

{lcdrs=1;

lcdrw=0;

P0=dat;

delay(5);

lcden=0;

delay(5);

lcden=1;

}

voidwrit_com_data(ucharcomm,uchardatt)

{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;

}

voidinit()//初始化lcd

{lcden=0;

write_com(0x01);//清屏并光标复位

write_com(0x38);//5x7的点阵字符

write_com(0x0c);//开显示,光标不闪烁

write_com(0x02);//光标回车

write_com(0x06);//光标右移

}

voidlcd2(uchara,ucharb)//显示通道数

{

write_com(a);//数据地址

write_data(table[b]);

}

voidlcd1(uintxx)//液晶显示数据

{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,table[d4]);

writ_com_data(0xc3,table[d3]);

writ_com_data(0xc4,table1[0]);

writ_com_data(0xc5,table[d2]);

writ_com_data(0xc6,table[d1]);

writ_com_data(0xc7,table[d0]);

writ_com_data(0xc8,table1[1]);

writ_com_data(0xc9,table1[2]);

writ_com_data(0xca,table1[3]);

writ_com_data(0xcb,table1[4]);

writ_com_data(0xcc,table1[5]);

writ_com_data(0xcd,table1[6]);

writ_com_data(0xce,table1[7]);

writ_com_data(0xcf,table1[8]);

}

voidlcd()//液晶显示固定字符

{uinti;

write_com(0x80);

for(i=0;i<16;i++)

{write_data(table2[i]);}

}

ucharad_read(charcom)//采集数据12位

{uchartemp,i;//com为写入的指令

cs=0;

for(i=0;i<8;i++)

{temp=com;//指令的写入

temp&=0x80;

if(temp==0x80)

data_input=1;

elsedata_input=0;

kh<<=1;

if(data_out)//数据的读出

kh|=0x01;//上升沿读出数据

clk=1;

com<<=1;

clk=0;//下降沿写入数据

}

for(i=0;i<4;i++)

{kl<<=1;

if(data_out)

kl|=0x01;

clk=1;

clk=0;

}

kk=kh;

kk<<=4;

kk+=kl;

cs=1;

return(kk);

}

ucharread_average()//采集数据10次并求平均值

{uchari;

kk=0;

uu=0;

for(i=0;i<4;i++)

{ad_read(0x08);

uu=kk;

uu/=10;

delay(10);

uu+=uu;}

uu>>=2;

returnuu;

}

voidshujuchuli(uintyy)//数据处理

{//floatzz;//单精度,double为双精度

zz=((yy/4096.0)*0.72)*1000*2200;//BAC(inmg/L)=BrAC(inmg/L)x2200

}

voidmain()

{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实现数据采集系统[J]

[6]卢丽君.基于TLC2543的单片机多路采样监测系统的设计[J].

器仪表与分析监测

[7]何希才.传感器技术与应用[M].北京航空航天大学出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1