基于单片机的酒精浓度测试仪设计报告.docx
- 文档编号:5739689
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:18
- 大小:401.61KB
基于单片机的酒精浓度测试仪设计报告.docx
《基于单片机的酒精浓度测试仪设计报告.docx》由会员分享,可在线阅读,更多相关《基于单片机的酒精浓度测试仪设计报告.docx(18页珍藏版)》请在冰豆网上搜索。
基于单片机的酒精浓度测试仪设计报告
基于单片机的酒精浓度测试仪
设计报告
一、设计意义
自《刑法修正案(八)》和修改后的《道路交通安全法》正式实施,“醉酒驾驶”正式入刑。
不仅交警部门,而且很多车主都期盼能够有便携仪器方便地测量气体酒精浓度,为安全驾驶提供保障,有效减少重大交通事故的发生。
本研究设计的酒精浓度测试仪是一款实用性强、安全可靠的气体乙醇浓度检测工具,采用高精度MQ-3乙醇气体传感器对空气中的乙醇浓度进行检测,利用宏晶公司高性能低成本单片机STC12C5A16A对检测信号进行A/D转换和处理,最后通过液晶屏显示输出。
本研究设计的酒精浓度测试仪还具有醉酒阈值设定功能,可以根据法律法规或用户需要设定修改醉酒阈值,并进行保存。
二、硬件设计
1、设计框图
本研究设计的酒精浓度测试仪框图如图1所示。
MQ-3乙醇气体传感器输出信号经信号调理电路处理,输出随乙醇浓度变化的电压信号,该电压信号送入单片机系统,经AD转换,与设定的醉酒阈值进行比较,并显示或报警。
图1酒精浓度测试仪方框图
2、乙醇信号检测及调理电路
MQ-3乙醇气体传感器可以应用用于机动车驾驶人员及其他严禁酒后作业人员的现场检测,也用于其他场所乙醇蒸汽的检测。
其技术特点为:
对乙醇蒸汽有很高的灵敏度和良好的选择性
快速的响应恢复特性
长期的寿命和可靠的稳定性
简单的驱动回路
MQ-3乙醇气体传感器灵敏度曲线如图2所示,其传感原理为气敏电阻的输出阻值随乙醇气体等浓度变化而变化。
图2MQ-3乙醇气体传感器灵敏度曲线
MQ-3乙醇气体传感器管脚与测试电路如图3所示。
(a)管脚图(b)测试电路
图3MQ-3乙醇气体传感器管脚及测试电路
MQ-3乙醇气体传感器及其调理电路原理如图4所示。
其外形如图5所示。
经过调理,检测信号由电阻值转变成电压值,便于后续电路进行A/D转换和处理
图4传感器及调理模块原理图
r?
nijii■
JR1R2匚IR3
二:
£圖二二&
£pi
iwvyi
粋r*_eo
1I
Z1531
•
TTL输出灵敏度淵节
he—接訂电源正极
*TTL高陆电乎暮阳端
“—接电源员极
图5MQ-3传感器模块外形图
该传感器模块具有如下特点,方便与单片机系统接口组成检测仪器。
具有信号输出指示。
双路信号输出(模拟量输出及TTL电平输出)TTL输出有效信号为低电平。
(当输出低电平时信号灯亮,可直接接单片机)模拟量输出0~5V电压,浓度越高电压越高。
3、单片机电路
本设计选用宏晶公司高性能单片机STC12C5A16AD其管脚如图6所示
CLKOUTIADCTP1.0匚
T7-
ZZIVct
1
40
ADC1刃1匚
39
―P0)
RjED2.-ECIADCi?
1_2匚二
3
据
—WA
TiD2CPP&ADCM»L3匚
4
37
二|P0丄
SSCPP1.ADC4PUB
V4OSTADT5?
150
j
36
_]HJJ
二P0』
6
35
MTStXADCiTl.frO
7r
34
二P0Y
iCLX^DCT?
L7二
&
33
—F0.5
P47RSI[
XTRiD?
3.0U
9
32
IPO./
10
ai
□EXLVD'PiSTISTI
Js2?
31匚
11
J0
Z^ALE'P4.i
二 ? S2[—阿I? 33[~1 12 : 9 二私珂4 B 28 —F2JA15 二1IQ砸皿 CLKOUTOINT.TWP14匚 14 17 clkouti/NTti? J.5u 15 曲 二irs占%: 3 VR.臥匚愆旳? L 1« 17 PDI P40; STC12C5A16AD XTA12二 lfi 22 二1担丄叱0 VTAI1二 19 21 二IP2一⑷ Gwd匚 20 n 二IF23U 图6STC12C2052AD单片机管脚图 该芯片为52内核8位单片机,内部集成了10位多路A/D转换模块,适用于常用检测电路。 由STC12C5A16A组成的单片机系统原理图如图7所示。 图中AOUT为MQ-3传感器模块输出的检测电压信号,送入ADC7端口进行处理,DOU为传感器模块输出的数字电平信号,该信号可以根据乙醇气体浓度直接输出报警信号,报警阈值通过模块上的电位器进行调节。 +5VJ U1 SIG12①久厲蛊D 图7单片机系统原理图 图7中,按键K2和K3为醉酒阈值调整键,其中K2为“增加”,K3为“减小”按键。 L2和L3为报警指示灯,分别可以进行酒后和醉酒两级报警。 4、显示电路 显示部分采用SMC1602液晶屏进行数据显示,其主要技术参数为: 表1液晶屏技术指标 显示容量: 15X2字符 芯片工作电压: 4,5-5.6V 工作电流: Z0mA(50V) 模块最佳工作电压; 5.0V 宇符尺寸: 2.95X435(WXH)nwn 接口信号说明如表2所示。 表2液晶屏接口信号说明 编号 特号 引脚说明 编号 祎号 引肆说明 1 VSS 9 D2 DataI/O 2 V&D 电源正檢 10 D3 DatiI/O 3 VI 港晶显示険压馆号 11 卫 D&taI/O 4 RE 數摇,僧令选择站(H/L1 DS DataI/O 5 读/写选择輪(IVL) n 恥 I/O G E 便能伯号 H D? DataI/O 7 00 I/O 15 BLA 背光源正啾 B 01 DataI/O 16 SIK 背光源曲瓏 与单片机接口电路如图8所示。 其中J2的3脚为背光引脚,R9和R10电阻用于调节背光亮度。 J2的4、5、6引脚分别接液晶的RSE/W和E控制引脚,J2的7—14引脚为数据引脚。 图8LCD与单片机接口电路 5、阈值存储 醉酒阈值存储在EEPRO芯片AT24C04中,并可以通过“增加”、“减少”按键调节并保存。 AT24C04是IIC接口的EEPRO®片,可以用于掉电不易失数据的存储。 其电路如图9所示。 图中A0、A1和A2为芯片的地址引脚,一般接地即可。 SCL和SDA为AT24C04和单片机IIC通信的时钟线和数据线。 图9EEPROM存储电路 6、供电及程序下载电路 本设计采用USB接口供电,电源电压5V。 同时,USB接口通过内含PL2303芯片的转换电路对单片机进行程序编写。 其电路原理如图10所示。 u汨电源及下戦口 J] MU +5^ rx5d TY1 4— USB fowe^J^T R1Ik DI ^tlN4]4S 图10供电及程序下载电路 三、软件编程 1、软件流程图 本设计软件主程序流程图如图11所示 数据初始化 图11主程序流程图 2、主程序 下面介绍main.c主程序编写,其他程序略 (1)头文件和一些宏定义 #include"STC12c5A.h" #inelude"1602.h" #inelude"24O2.h" #defineucharunsignedchar #defineuintunsignedint (2)常量、变量定义和函数声明 〃声明常量 #defineALCH80//醉驾标准80mg/L MQ-3模块校准 可以自行校准 〃K_MG_MV和K_ZERO为传感器校准系数,要根据每个 #defineK_MG_MV160/60〃传感器灵敏度系数, #defineK_ZERO0〃传感器零点漂移 //定义按键 sbitKey_Up=P3A6; sbitKey_Down=卩3人7; 〃定义LED报警灯 sbitLed_Warn1=卩3人4; sbitLed_Warn2=卩3人5; //定义乙醇传感器TTL电平输出引脚 sbitDOUT=P1A4; //定义标识 volatilebitFlagStartAL=C );〃开始转换标志 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; 922个脉冲 keyvalue=0;keyUp=1;keyDown=1; 〃定时器0初始化,中断时间约2毫秒 〃计算: 晶振11.0592MHz,定时器时钟11059200/12=921600,每毫 //16位定时器初值65536-1844=63692=0xf8cc voidTimer0_lnit() {I ET0=1; //允许定时器0中断 TMOD=1; //定时器工作方式选择 TL0=0xcc; // TH0=0xf8; //定时器赋予初值,大约为2毫秒中断1次 TR0=1; //启动定时器 }I 〃定时器0中断 voidTimer0_ISR(void)interrupt1using0{ TL0=0xcc; TH0=0xf8; //定时器赋予初值 〃每1秒钟启动一次AD转换 ALCounter++; if(ALCounter>=500) 〃端口初始化 voidPort_Init() { P1M0=0x80;//10000000,P1.7作为AD输入 P1M1=0x80;// }//ADC初始化voidADC_Init(){ uinti; P1ASF=0x80; II设P1.7为AD输入 ADC_RES=0; //清先前的结果 ADC_CONTR|=0x80;〃P0WER=1,打开ADC电源 for(i=5000;i>0;i--);//延时 ADC_CONTR=ADC_CONTR&OxEO;〃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--); II待输入电压稳定后开始转换 IIADC_RES=0; ADC_CONTR|=0x08; IIADC_Start=1,启动转换 while((ADC_CONTR&0x10)= =0);II等待转换结束ADC_FLAG=1 ADC_CONTR&=0xe7;//清ADC_FLAG和ADC_START位,停止转换 returnADC_RES; } //存入设定值 voidSave_Setting() { pSave=(char)&Threshold;〃地址低位对应低8位,高位对应高8位 wrteeprom(0,*pSave); II存醉酒阈值低 8位 DELAY(300); pSave++; wrteeprom(1,*pSave); II存醉酒阈值高 8位 DELAY(300); } //载入设定值 switch(num) { case1: if(Threshold<255)Threshold++;break; case2: if(Threshold>1)Threshold--;break; default: break; } L1602」nt(2,9,Threshold); Save_Setting(); }voidmain() { uinti,j; EA=0; Data_Init(); //数据初始化 TimerO」nit(); //定时器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=O;j<1OOO;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;keyvalue=2;}if(FlagKeyPress==1) { KeyProcess(keyvalue);FlagKeyPress=0; } if(! Key_Up)keyUp=0; elsekeyUp=1; if(! Key_Down)keyDown=0; elsekeyDown=1; } } 四、下载与调试 当程序在uVision环境下编写完成,并编译生成.hex文件后,就可以下载并进行调试了。 1、USB转串口驱动安装 打开USB驱动文件夹下的PL2303_Prolific_Driverlnstaller_v130.exe安装文件,按提示安装USB转串口驱动程序。 安装完成后,插入USB下载线后,在[开始卜[控制面板]-[打印机和其他硬件]-[设备管理器],在“端口”分支下有(ProlificUSB-to-SerialCommPort(COMX)。 X表示串口号,如果没有说明USB转串口驱动没有安装,须重新安装。 记住括号里的COM口号。 图12成功安装USB转串口驱动示意图 2、下载程序 打开STC单片机下载软件文件夹,点击运行STC_ISP_V481.exe程序,出现如下界面。 COT: [匸L帕.」 诰童诫14胡刨坷竺戒楚左昌谟林率 图13下载软件 正确选择MCU类型,COM口(与刚才安装的COM号一致),最高波特率和最低波特率都选2400bps或者1200bps(下载线内PL2303芯片所限,没办法! ),并打开正确的.hex数据文件。 点击“Download/下载”按纽,窗口出现提示: Chinese: 正在尝试与MCU/单片机握手连接… Connectionisfailure.Youcantry: 1.GiveyourMCUPowerOnReset. 2.Stopoperation,thenre-selectCOMPort. 3.BecausePLCC-DIP/PQFP-DIPSockettracetooIong.~| 4.UpdatetheSTCISP.exeversion. 5.Ifstillerror,yourMCUFirmwareiserror ornull. Chinese: 连接失败,请尝试以下操作: 1.在单片机停电状态下,点下载按钮,再给单片机上电 2.停止下载,重新选择RS-232串口,接好电缆 3.可能需要先将P1.0/P1.1短接到地 4.可能外部时钟未接 5.因PLCC、PQFP转换座引线过长而引起时钟不振荡,请 调整参数 6.可能要升级电脑端的STCISP.exe软件 7.若仍然不成功,可能MCU/单片机内无ISP系统引导码,或需退回升级,或MCU已损坏 8.若使用USB转RS-232串口线下载,可能会遇到不兼容 的问题,可以让我们帮助购买兼容的USB转RS-232 串口线 仍在连接中,请给MCU上电... 按下电路板上的电源按纽,保证其有个失电至上电的过程,则窗口显示开始烧录芯片。 芯片烧录成功后,程序开始运行,酒精浓度测试仪正常工作。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 单片机 酒精 浓度 测试仪 设计 报告