酒精浓度测试仪的设计.docx
- 文档编号:19135636
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:33
- 大小:1.61MB
酒精浓度测试仪的设计.docx
《酒精浓度测试仪的设计.docx》由会员分享,可在线阅读,更多相关《酒精浓度测试仪的设计.docx(33页珍藏版)》请在冰豆网上搜索。
酒精浓度测试仪的设计
酒精浓度测试仪的设计
[摘要]:
本研究设计的酒精浓度测试仪是一款实用性强、安全可靠的气体乙醇浓度检测工具,采用高精度MQ-3乙醇气体传感器对空气中的乙醇浓度进行检测,利用宏晶公司高性能低成本单片机STC12C5A16AD对检测信号进行A/D转换和处理,最后通过液晶屏显示输出。
本研究设计的酒精浓度测试仪还具有醉酒阈值设定功能,可以根据法律法规或用户需要设定修改醉酒阈值,并进行保存。
[关键词]:
单片机A/D转换和处理醉酒阈值MQ-3乙醇气体传感器
Alcoholconcentrationtestinstrument
Abstract:
Thisstudydesignalcoholtesterisanewpractical,safeandreliablegasethanolconcentrationtestingtool,AdoptinghighprecisionMQ-3ethanolgassensorstodetecttheconcentrationofethanolintheair,theuseofmacrocrystalcompanyhighperformancelowcostSTC12C5A16ADmicrocontrollertodetectionsignalA/Dconversionandprocessing,finallythroughtheLCDscreendisplayoutput.Thisstudydesignalcoholtesteralsohasdrunkthresholdsettingfunction,canaccordingtolawsandregulationsortheuserneedtosetmodifydrunkthreshold,andsave.
Keywords:
ScmA/DconversionandprocessingDrunkthresholdMQ-3ethanolgassensor
第一章绪论
1.1本课题的研究的背景以及现实意义
自《刑法修正案(八)》和修改后的《道路交通安全法》正式实施,“醉酒驾驶”正式入刑。
不仅交警部门,而且很多车主都期盼能够有便携仪器方便地测量气体酒精浓度,为安全驾驶提供保障,有效减少重大交通事故的发生。
2000年以来,随着中国经济的高速发展,人民生活水平的迅速提高,中国逐渐步入“汽车社会”,酒后驾驶行为所造成事故越来越多,对社会的影响也越来越大,酒精正在成为越来越凶残的“马路杀手”。
据有关资料统计,全世界每年因车祸丧生的人数就超过60万人,留下永久性伤残者在400万以上,一般受伤者则不计其数。
在许多国家,车祸已成为第一位意外死亡原因。
此外,由交通事故造成的经济损失也相当惊人。
据事故调查统计,大约50%—60%的车祸与饮酒有关。
中国公安部在2009年8月,在全国各地加强查处酒后驾驶的力度,以减少由酒后驾驶造成的恶性交通事故。
要查处就涉及到检测人体内的酒精含量和使用设备来进行检测的问题。
图1-1毕业设计设计产品
1.2关于本课题的简介
本研究设计的酒精浓度测试仪是一款实用性强、安全可靠的气体乙醇浓度检测工具,采用高精度MQ-3乙醇气体传感器对空气中的乙醇浓度进行检测,利用宏晶公司高性能低成本单片机STC12C5A16AD对检测信号进行A/D转换和处理,最后通过液晶屏显示输出。
本研究设计的酒精浓度测试仪还具有醉酒阈值设定功能,可以根据法律法规或用户需要设定修改醉酒阈值,并进行保存。
酒精浓度测试仪如图1所示,由MQ-3乙醇气体传感器、STC12C5A16AD(或STC12C5A32AD)单片机、EEPROM存储电路、液晶屏和键盘组成。
检测原理:
当具有N型导电性的氧化物暴露在大气中时,会由于氧气的吸附而减少其内部的电子数量而使其电阻增大。
其后如果大气中存在某种特定的还原性气体,它将与吸附的氧气反应,从而使氧化物内的电子数增加,导致氧化物电阻减小。
半导体氧化物传感器就是通过该阻值的变化来分析气体浓度。
从理论上说,要判断是否是酒后驾驶,最简单可行的方法是现场检测驾驶人员呼气中的酒精含量。
大量的统计研究结果表明,如果被测者深吸气后以中等力度呼气达三秒钟以上,这时呼出的气就是从肺部深处出来的气体,呼气中的酒精含量与血液中的酒精含量。
根据国家质量监督检验检疫局发布的《车辆驾驶人员血液、呼气酒精含量阈值与检验》(GB19522—2004)中规定,该规定指出,饮酒驾车是指车辆驾驶人员血液中的酒精含量大于或者等于20mg/100ml,小于80mg/100ml的驾驶行为。
醉酒驾车是指车辆驾驶人员血液中的酒精含量大于或者等于80mg/100ml的驾驶行为。
1.3课题论述总体结构安排
第一章叙述了酒精浓度测试仪背景以及简介
第二章硬件设计。
第三章主要讨论应用Protel硬件开发软件
第四章软件设计
第五章为酒精浓度测试仪安装与调试。
第六章为总结和展望,总结本课题设计的总体思路,产品的功能以及对于产品功能升级等进行情景展望。
第二章硬件设计
2.1设计框图
本研究设计的酒精浓度测试仪框图如图1所示。
MQ-3乙醇气体传感器输出信号经信号调理电路处理,输出随乙醇浓度变化的电压信号,该电压信号送入单片机系统,经AD转换,与设定的醉酒阈值进行比较,并显示或报警。
图1酒精浓度测试仪方框图
2.2乙醇信号检测及调理电路
MQ-3乙醇气体传感器可以应用用于机动车驾驶人员及其他严禁酒后作业人员的现场检测,也用于其他场所乙醇蒸汽的检测。
其技术特点为:
●对乙醇蒸汽有很高的灵敏度和良好的选择性
●快速的响应恢复特性
●长期的寿命和可靠的稳定性
●简单的驱动回路
主要技术指标:
MQ-3乙醇气体传感器灵敏度曲线如图2所示,其传感原理为气敏电阻的输出阻值随乙醇气体等浓度变化而变化。
图2MQ-3乙醇气体传感器灵敏度曲线
Q-3乙醇气体传感器管脚与测试电路如图3所示。
(a)管脚图(b)测试电路
图3MQ-3乙醇气体传感器管脚及测试电路
MQ-3乙醇气体传感器及其调理电路原理如图4所示。
其外形如图5所示。
经过调理,检测信号由电阻值转变成电压值,便于后续电路进行A/D转换和处理。
图4传感器及调理模块原理图
图5MQ-3传感器模块外形图
该传感器模块具有如下特点,方便与单片机系统接口组成检测仪器。
●具有信号输出指示。
●双路信号输出(模拟量输出及TTL电平输出)
●TTL输出有效信号为低电平。
(当输出低电平时信号灯亮,可直接接单片机)
●模拟量输出0~5V电压,浓度越高电压越高。
2.3单片机电路
本设计选用宏晶公司高性能单片机STC12C5A16AD,其管脚如图6所示。
图6STC12C2052AD单片机管脚图
该芯片为52内核8位单片机,内部集成了10位多路A/D转换模块,适用于常用检测电路。
由STC12C5A16AD组成的单片机系统原理图如图7所示。
图中AOUT为MQ-3传感器模块输出的检测电压信号,送入ADC7端口进行处理,DOUT为传感器模块输出的数字电平信号,该信号可以根据乙醇气体浓度直接输出报警信号,报警阈值通过模块上的电位器进行调节。
图7单片机系统原理图
图7中,按键K2和K3为醉酒阈值调整键,其中K2为“增加”,K3为“减小”按键。
L2和L3为报警指示灯,分别可以进行酒后和醉酒两级报警。
2.4显示电路
显示部分采用SMC1602液晶屏进行数据显示,其主要技术参数为:
表1液晶屏技术指标
接口信号说明如表2所示。
与单片机接口电路如图8所示。
其中J2的3脚为背光引脚,R9和R10电阻用于调节背光亮度。
J2的4、5、6引脚分别接液晶的RS、E/W和E控制引脚,J2的7—14引脚为数据引脚。
图8LCD与单片机接口电路
2.5阈值存储
醉酒阈值存储在EEPROM芯片AT24C04中,并可以通过“增加”、“减少”按键调节并保存。
AT24C04是IIC接口的EEPROM芯片,可以用于掉电不易失数据的存储。
其电路如图9所示。
图中A0、A1和A2为芯片的地址引脚,一般接地即可。
SCL和SDA为AT24C04和单片机IIC通信的时钟线和数据线。
图9EEPROM存储电路
2.6供电及程序下载电路
本设计采用USB接口供电,电源电压5V。
同时,USB接口通过内含PL2303芯片的转换电路对单片机进行程序编写。
其电路原理如图10所示。
图10供电及程序下载电路
第三章Protel硬件开发软件
3.1Protel软件组成
Protel软件主要由电路原理图设计模块、印制电路板设计模块(PCB设计模块)、电路信号仿真模块和PLD逻辑器件设计模块等组成,各模块具有强大的功能,可以很好的实现电路设计与分析。
(1)原理图设计模块(Schematic模块)
电路原理图是表示电气产品或电路工作原理的重要技术文件,电路原理图主要由代表各种电子器件的图形符号、线路和结点组成。
图4.1所示为一张电路原理图。
该原理图是由Schematic模块设计完成的。
Schematic模块具有如下功能:
丰富而灵活的编辑功能、在线库编辑及完善的库管理功能、强大的设计自动化功能、支持层次化设计功能等。
(2)印制电路板设计模块(PCB设计模块)
印制电路板(PCB)制板图是由电路原理图到制作电路板的桥梁。
设计了电路原理图后,需要根据原理图生设计成印制电路板的制板图,然后在根据制板图制作具体的电路板。
印制电路板设计模块具有如下主要功能和特点:
可完成复杂印制电路板(PCB)的设计;方便而又灵活的编辑功能;强大的设计自动化功能;在线式库编辑及完善的库管理;完备的输出系统等。
(3)电路信号仿真模块
电路信号仿真模块是一个功能强大的数字/模拟混合信号电路仿真器,能提供连续的模拟信号和离散的数字信号仿真。
它运行在Protel的EDA/Client集成环境下,与ProtelAdvancedSchematic原理图输入程序协同工作,作为AdvancedSchematic的扩展,为用户提供了一个完整的从设计到验证仿真设计环境。
在Protel中进行仿真,只需从仿真用元器件库中放置所需的元器件,连接好原理图,加上激励源,然后单击防真按钮即可自动开始。
3.2PCB板设计
(1)定元件的封装
①打开网络表(可以利用一些编辑器辅助编辑),将所有封装浏览一遍,确保所有元件的封装都正确无误并且元件库中包含所有元件的封装,网络表中所有信息全部大写,一面载入出问题,或PCBBOM不连续。
②标准元件全部采用公司统一元件库中的封装。
③④⑥⑤元件库中不存在的封装,应自己建立元器件库。
(2)建立PCB板框
①根据PCB结构图,或相应的模板建立PCB文件,包括安装孔、禁布区等相关信息。
②尺寸标注。
在钻孔层中应标明PCB的精确结构,且不可以形成封闭尺寸标注。
(3)载入网络表
①载入网表并排除所有载入问题,具体请看《PROTEL技术大全》。
其他软件载入问题有很多相似之处,可以借鉴。
②如果使用PROTEL,网表须载入两次以上(没有任何提示信息)才可以确认载入无误。
(4)布局
①首先要确定参考点。
一般参考点都设置在左边和底边的边框线的交点(或延长线的交点)上或印制板的插件的第一个焊盘。
②一但参考点确定以后,元件布局、布线均以此参考点为准。
布局推荐使用25MIL网格。
③根据要求先将所有有定位要求的元件固定并锁定。
④布局的基本原则
A.遵循先难后易、先大后小的原则。
B.布局可以参考硬件工程师提供的原理图和大致的布局,根据信号流向规律放置主要原器件。
C.总的连线尽可能的短,关键信号线最短。
D.强信号、弱信号、高电压信号和弱电压信号要完全分开。
E.高频元件间隔要充分。
F.模拟信号、数字信号分开。
⑤相同结构电路部分应尽可能采取对称布局。
⑥按照均匀分布、重心平衡、版面美观的标准来优化布局。
(5)PCB设计遵循的规则
①地线回路规则:
图11地线回路规则
环路最小规则,即信号线与其回路构成的环面积要尽可能小,环面积要尽可能小,环面积越小,对外的辐射越少,接收外界的干扰也越小。
针对这一规则,在地平面分割时,要考虑到地平面与重要信号走线的分布,防止由于地平面开槽等带来的问题;在双层板设计中,在为电源留下足够空间的情况下,应该将留下的部分用参考地填充,且增加一些必要的过孔,将双面信号有效连接起来,对一些关键信号尽量采用地线隔离,对一些频率较高的设计,需特别考虑其地平面信号回路问题,建议采用多层板为宜。
②窜扰控制
窜扰(CrossTalk)是指PCB上不同网络之间因较长的平行布线引起的相互干扰,主要是由于平行线间的分布电容和分布电感的作用。
克服窜扰的主要措施是:
A.加大平行布线的间距,遵循3W规则。
B.在平行线间插入接地的隔离线。
C.减少布线层与地平面的距离
③屏蔽保护
图12屏蔽保护
对应地线回路规则,实际上也是为了尽量减小信号的回路面积,多用于一些比较重要的信号,如时钟信号,同步信号;对一些特别重要,频率特别高的信号,应该考虑采用铜轴电缆屏蔽结构设计,即将所布的线上下左右用地线隔离,而且还要考虑好如何有效的让屏蔽地与实际地平面有效结合。
④走线方向控制规则
相邻层的走线方向成正交结构,避免将不同的信号线在相邻层走成同一方向,以减少不必要的层间窜扰;当由于板结构限制(如某些背板)难以避免出现该情况,特别是信号速率较高时,应考虑用地平面隔离各布线层,用地信号线隔离各信号线。
⑤电源与地线层的完整性规则
对于导通孔密集的区域,要注意避免孔在电源和地层的挖空区域相互连接,形成对平面层的分割,从而破坏平面层的完整性,并进而导致信号在地层的回路面积增大。
第四章软件编程
4.1软件流程图
本设计软件主程序流程图如图13所示。
图13主程序流程图
4.2主程序
下面介绍main.c主程序编写,其他程序略
(1)头文件和一些宏定义
#include"STC12c5A.h"
#include"1602.h"
#include"2402.h"
#defineucharunsignedchar
#defineuintunsignedint
(2)常量、变量定义和函数声明
//声明常量
#defineALCH80//醉驾标准80mg/L
//K_MG_MV和K_ZERO为传感器校准系数,要根据每个MQ-3模块校准
#defineK_MG_MV160/60//传感器灵敏度系数,可以自行校准
#defineK_ZERO0//传感器零点漂移
//定义按键
sbitKey_Up=P3^6;
sbitKey_Down=P3^7;
//定义LED报警灯
sbitLed_Warn1=P3^4;
sbitLed_Warn2=P3^5;
//定义乙醇传感器TTL电平输出引脚
sbitDOUT=P1^4;
//定义标识
volatilebitFlagStartAL=0;//开始转换标志
volatilebitFlagKeyPress=0;//有键弹起标志
//全局变量定义
ucharThreshold;//酒精浓度上限报警值
uintALCounter;//酒精转换计时器
intALValue;//酒精测量值
floatALtemp;//计算临时变量
uintkeyvalue,keyUp,keyDown;//键值
char*pSave;//EEPROM存盘用指针
//函数声明
voidData_Init();
voidTimer0_Init();
voidPort_Init();
voidADC_Init();
ucharGetADVal();
voidKeyProcess(uint)
(3)各子程序
//数据初始化
voidData_Init()
{
ALCounter=0;
ALValue=0;
Led_Warn1=1;
Led_Warn2=2;
keyvalue=0;
keyUp=1;
keyDown=1;
}
//定时器0初始化,中断时间约2毫秒
//计算:
晶振11.0592MHz,定时器时钟11059200/12=921600,每毫秒922个脉冲
//16位定时器初值65536-1844=63692=0xf8cc
voidTimer0_Init()
{
ET0=1;//允许定时器0中断
TMOD=1;//定时器工作方式选择
TL0=0xcc;//
TH0=0xf8;//定时器赋予初值,大约为2毫秒中断1次
TR0=1;//启动定时器
}
//定时器0中断
voidTimer0_ISR(void)interrupt1using0
{
TL0=0xcc;
TH0=0xf8;//定时器赋予初值
//每1秒钟启动一次AD转换
ALCounter++;
if(ALCounter>=500)
{
FlagStartAL=1;
ALCounter=0;
}
}
//端口初始化
voidPort_Init()
{
P1M0=0x80;//10000000,P1.7作为AD输入
P1M1=0x80;//
}
//ADC初始化
voidADC_Init()
{
uinti;
P1ASF=0x80;//设P1.7为AD输入
ADC_RES=0;//清先前的结果
ADC_CONTR|=0x80;//POWER=1,打开ADC电源
for(i=5000;i>0;i--);//延时
ADC_CONTR=ADC_CONTR&0xE0;//1110,0000清ADC_FLAG,ADC_START和低3位
ADC_CONTR=ADC_CONTR&0xf8|0x07;//设置当前通道号为P1.7
for(i=2500;i>0;i--);//延时
}
//进行AD转换,得到当前酒精值
ucharGetADVal()
{
uinti;
ADC_CONTR&=0xf7;
for(i=250;i>0;i--);//待输入电压稳定后开始转换
//ADC_RES=0;
ADC_CONTR|=0x08;//ADC_Start=1,启动转换
while((ADC_CONTR&0x10)==0);//等待转换结束ADC_FLAG=1
ADC_CONTR&=0xe7;//清ADC_FLAG和ADC_START位,停止转换
returnADC_RES;
}
//存入设定值
voidSave_Setting()
{
pSave=(char*)&Threshold;//地址低位对应低8位,高位对应高8位
wrteeprom(0,*pSave);//存醉酒阈值低8位
DELAY(300);
pSave++;
wrteeprom(1,*pSave);//存醉酒阈值高8位
DELAY(300);
}
//载入设定值
voidLoad_Setting()
{
pSave=(char*)&Threshold;
*pSave++=rdeeprom(0);
*pSave=rdeeprom
(1);
if((Threshold>=255)||(Threshold<0))Threshold=80;
}
//按键处理程序,参数为键值,1为Up键,2为Down键
voidKeyProcess(uintnum)
{
switch(num)
{
case1:
if(Threshold<255)Threshold++;
break;
case2:
if(Threshold>1)Threshold--;
break;
default:
break;
}
L1602_int(2,9,Threshold);
Save_Setting();
}
voidmain()
{
uinti,j;
EA=0;
Data_Init();//数据初始化
Timer0_Init();//定时器0初始化
Port_Init();//端口初始化
ADC_Init();//ADC初始化
EA=1;
L1602_init();
L1602_string(1,1,"WelcometoALCT!
");
L1602_string(2,1,"DesignedbyAAA");
//延时
for(i=0;i<1000;i++)
for(j=0;j<1000;j++)
{;}
//清屏
L1602_string(1,1,"");
L1602_string(2,1,"");
L1602_string(1,1,"Alcohol:
mg/L");
L1602_string(2,1,"Thresho:
mg/L");
//载入设定值
Load_Setting();
L1602_int(2,9,Threshold);
while
(1)
{
//如果FlagStartAL标志置位,则进行AD转换
if(FlagStartAL==1)
{
//酒精浓度换算,50mg/L=62.5ppm,传感器灵敏度应事先校准
ALValue=500*GetADVal()/256;//8位ADC,首先得到电压值,单位10毫伏
ALValue=ALValue-K_ZERO;//首先减去零点漂移,一般是130mV
if(ALValue<0)ALValue=0;
ALValue=ALValue*K_MG_MV;//将mV转变成mg/L,K_MG_MV系数需要校准
L1602_int(1,9,ALValue);
if(ALValue>Threshold)Led_Warn1=0;//超过阈值,则Led_Warn1灯报警。
elseLed_Warn1=1;
FlagStartAL=0;
}
//查询乙醇传感器TTL电平,该指示灯为传感器模块报警
if(DOUT==0)Led_Warn2=0;
elseLed_Warn2=1;
//键盘查询,在弹起时响应
if((Key_Up)&&(keyUp==0)){FlagKeyPress=1;keyvalue=1;}
elseif((Key_Down)&&(keyDown==0)){FlagKeyPress=1;key
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 酒精 浓度 测试仪 设计