酒精浓度测试仪设计.doc
《酒精浓度测试仪设计.doc》由会员分享,可在线阅读,更多相关《酒精浓度测试仪设计.doc(15页珍藏版)》请在装配图网上搜索。
酒精浓度测试仪设计报告一、 设计意义自刑法修正案(八)和修改后的道路交通安全法正式实施,“醉酒驾驶”正式入刑。不仅交警部门,而且很多车主都期盼能够有便携仪器方便地测量气体酒精浓度,为安全驾驶提供保障,有效减少重大交通事故的发生。本研究设计的酒精浓度测试仪是一款实用性强、安全可靠的气体乙醇浓度检测工具,采用高精度MQ-3乙醇气体传感器对空气中的乙醇浓度进行检测,利用宏晶公司高性能低成本单片机STC12C5A16AD对检测信号进行A/D转换和处理,最后通过液晶屏显示输出。本研究设计的酒精浓度测试仪还具有醉酒阈值设定功能,可以根据法律法规或用户需要设定修改醉酒阈值,并进行保存。二、 硬件设计1、设计框图本研究设计的酒精浓度测试仪框图如图1所示。MQ-3乙醇气体传感器输出信号经信号调理电路处理,输出随乙醇浓度变化的电压信号,该电压信号送入单片机系统,经AD转换,与设定的醉酒阈值进行比较,并显示或报警。图1 酒精浓度测试仪方框图2、乙醇信号检测及调理电路MQ-3乙醇气体传感器可以应用用于机动车驾驶人员及其他严禁酒后作业人员的现场检测,也用于其他场所乙醇蒸汽的检测。其技术特点为:l 对乙醇蒸汽有很高的灵敏度和良好的选择性l 快速的响应恢复特性l 长期的寿命和可靠的稳定性l 简单的驱动回路MQ-3乙醇气体传感器灵敏度曲线如图2所示,其传感原理为气敏电阻的输出阻值随乙醇气体等浓度变化而变化。图2 MQ-3乙醇气体传感器灵敏度曲线MQ-3乙醇气体传感器管脚与测试电路如图3所示。 (a) 管脚图 (b) 测试电路图3 MQ-3乙醇气体传感器管脚及测试电路 MQ-3乙醇气体传感器及其调理电路原理如图4所示。其外形如图5所示。经过调理,检测信号由电阻值转变成电压值,便于后续电路进行A/D转换和处理。图4 传感器及调理模块原理图图5 MQ-3传感器模块外形图该传感器模块具有如下特点,方便与单片机系统接口组成检测仪器。l 具有信号输出指示。l 双路信号输出(模拟量输出及TTL电平输出)l TTL输出有效信号为低电平。(当输出低电平时信号灯亮,可直接接单片机) l 模拟量输出05V电压,浓度越高电压越高。3、单片机电路本设计选用宏晶公司高性能单片机STC12C5A16AD,其管脚如图6所示。图6 STC12C2052AD单片机管脚图该芯片为52内核8位单片机,内部集成了10位多路A/D转换模块,适用于常用检测电路。由STC12C5A16AD组成的单片机系统原理图如图7所示。图中AOUT为MQ-3传感器模块输出的检测电压信号,送入ADC7端口进行处理,DOUT为传感器模块输出的数字电平信号,该信号可以根据乙醇气体浓度直接输出报警信号,报警阈值通过模块上的电位器进行调节。图7 单片机系统原理图 图7中,按键K2和K3为醉酒阈值调整键,其中K2为“增加”,K3为“减小”按键。L2和L3为报警指示灯,分别可以进行酒后和醉酒两级报警。4、显示电路显示部分采用SMC 1602液晶屏进行数据显示,其主要技术参数为:表1 液晶屏技术指标接口信号说明如表2所示。表2 液晶屏接口信号说明与单片机接口电路如图8所示。其中J2的3脚为背光引脚,R9和R10电阻用于调节背光亮度。J2的4、5、6引脚分别接液晶的RS、E/W和E控制引脚,J2的714引脚为数据引脚。图8 LCD与单片机接口电路5、阈值存储醉酒阈值存储在EEPROM芯片AT24C04中,并可以通过 “增加”、“减少”按键调节并保存。AT24C04是IIC接口的EEPROM芯片,可以用于掉电不易失数据的存储。其电路如图9所示。图中A0、A1和A2为芯片的地址引脚,一般接地即可。SCL和SDA为AT24C04和单片机IIC通信的时钟线和数据线。图9 EEPROM存储电路6、供电及程序下载电路本设计采用USB接口供电,电源电压5V。同时,USB接口通过内含PL2303芯片的转换电路对单片机进行程序编写。其电路原理如图10所示。图10 供电及程序下载电路三、 软件编程1、软件流程图本设计软件主程序流程图如图11所示。图11 主程序流程图2、主程序 下面介绍main.c主程序编写,其他程序略。(1) 头文件和一些宏定义#include STC12c5A.h#include 1602.h#include 2402.h#define uchar unsigned char#define uint unsigned int(2) 常量、变量定义和函数声明/声明常量#define ALCH 80 /醉驾标准80mg/L/K_MG_MV和K_ZERO为传感器校准系数,要根据每个MQ-3模块校准#define K_MG_MV 160/60 /传感器灵敏度系数,可以自行校准#define K_ZERO 0 /传感器零点漂移/定义按键sbit Key_Up = P36;sbit Key_Down = P37;/定义LED报警灯sbit Led_Warn1 = P34;sbit Led_Warn2 = P35;/定义乙醇传感器TTL电平输出引脚sbit DOUT = P14;/定义标识volatile bit FlagStartAL = 0; /开始转换标志volatile bit FlagKeyPress = 0; /有键弹起标志/全局变量定义uchar Threshold; /酒精浓度上限报警值uint ALCounter; /酒精转换计时器int ALValue; /酒精测量值float ALtemp; /计算临时变量uint keyvalue, keyUp, keyDown; /键值char * pSave; /EEPROM存盘用指针/函数声明void Data_Init();void Timer0_Init();void Port_Init();void ADC_Init();uchar GetADVal();void KeyProcess(uint );(3) 各子程序/数据初始化void Data_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=0xf8ccvoid Timer0_Init()ET0 = 1; /允许定时器0中断TMOD = 1; /定时器工作方式选择TL0 = 0xcc; /TH0 = 0xf8; /定时器赋予初值,大约为2毫秒中断1次TR0 = 1; /启动定时器/定时器0中断void Timer0_ISR (void) interrupt 1 using 0TL0 = 0xcc;TH0 = 0xf8; /定时器赋予初值/每1秒钟启动一次AD转换 ALCounter +; if (ALCounter = 500) FlagStartAL = 1; ALCounter = 0; /端口初始化void Port_Init() P1M0 = 0x80; /10000000,P1.7作为AD输入 P1M1 = 0x80; /ADC初始化void ADC_Init() uint i; P1ASF = 0x80; /设P1.7为AD输入 ADC_RES = 0; /清先前的结果 ADC_CONTR|=0x80; /POWER=1,打开ADC电源 for(i=5000;i0;i-) ; /延时 ADC_CONTR = ADC_CONTR&0xE0; /1110,0000 清ADC_FLAG,ADC_START和低3位 ADC_CONTR = ADC_CONTR&0xf8|0x07; /设置当前通道号为P1.7 for(i=2500;i0;i-) ; /延时/进行AD转换,得到当前酒精值uchar GetADVal() uint i; ADC_CONTR&=0xf7; for(i=250;i0;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位,停止转换 return ADC_RES;/存入设定值void Save_Setting() pSave = (char *)&Threshold; /地址低位对应低8位,高位对应高8位 wrteeprom(0, *pSave); /存醉酒阈值低8位 DELAY(300); pSave +; wrteeprom(1, *pSave); /存醉酒阈值高8位 DELAY(300);/载入设定值void Load_Setting() pSave = (char *)&Threshold; *pSave+ = rdeeprom(0); *pSave = rdeeprom(1); if (Threshold=255)|(Threshold0) Threshold = 80;/按键处理程序,参数为键值,1为Up键,2为Down键void KeyProcess(uint num) switch (num) case 1: if (Threshold1) Threshold-; break; default: break; L1602_int(2,9,Threshold); Save_Setting();void main() uint i,j; EA = 0; Data_Init(); /数据初始化 Timer0_Init(); /定时器0初始化 Port_Init(); /端口初始化 ADC_Init(); /ADC初始化 EA = 1; L1602_init(); L1602_string(1,1,Welcome to ALCT! ); L1602_string(2,1,Designed by AAA ); /延时 for (i=0;i1000;i+) for (j=0;j1000;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 Threshold) Led_Warn1 = 0; /超过阈值,则 Led_Warn1灯报警。 else Led_Warn1 = 1; FlagStartAL = 0; /查询乙醇传感器TTL电平,该指示灯为传感器模块报警 if (DOUT = 0) Led_Warn2 = 0; else Led_Warn2 = 1; /键盘查询,在弹起时响应 if (Key_Up)&(keyUp=0) FlagKeyPress = 1; keyvalue = 1; else if (Key_Down)&(keyDown=0) FlagKeyPress = 1; keyvalue = 2; if (FlagKeyPress = 1) KeyProcess(keyvalue); FlagKeyPress = 0; if (!Key_Up) keyUp = 0; else keyUp = 1; if (!Key_Down) keyDown = 0; else keyDown = 1; 四、 下载与调试当程序在uVision环境下编写完成,并编译生成.hex文件后,就可以下载并进行调试了。1、 USB转串口驱动安装打开USB驱动文件夹下的PL2303_Prolific_DriverInstaller_v130.exe安装文件,按提示安装USB转串口驱动程序。安装完成后,插入USB下载线后,在开始-控制面板-打印机和其他硬件-设备管理器,在“端口”分支下有(Prolific USB-to-Serial Comm Port(COMX)。X表示串口号,如果没有说明USB转串口驱动没有安装,须重新安装。记住括号里的COM口号。图12 成功安装USB转串口驱动示意图2、 下载程序打开STC单片机下载软件文件夹,点击运行STC_ISP_V481.exe程序,出现如下界面。图13 下载软件正确选择MCU 类型,COM口(与刚才安装的COM号一致),最高波特率和最低波特率都选2400bps或者1200bps (下载线内PL2303芯片所限,没办法!),并打开正确的.hex数据文件。点击“Download/下载”按纽,窗口出现提示:Chinese:正在尝试与 MCU/单片机 握手连接 . Connection is failure. You can try: 1.Give your MCU Power On Reset. 2.Stop operation, then re-select COM Port. 3.Because PLCC-DIP/PQFP-DIP Socket trace too long. 4.Update the STC ISP.exe version. 5.If still error, your MCU Firmware is error or null.Chinese:连接失败,请尝试以下操作: 1.在单片机停电状态下,点下载按钮,再给单片机上电 2.停止下载,重新选择 RS-232 串口, 接好电缆 3.可能需要先将 P1.0/P1.1 短接到地 4.可能外部时钟未接 5.因 PLCC、PQFP 转换座引线过长而引起时钟不振荡,请 调整参数 6.可能要升级电脑端的 STC ISP.exe 软件 7.若仍然不成功,可能 MCU/单片机内无 ISP 系统引导码, 或需退回升级,或 MCU 已损坏 8.若使用 USB 转 RS-232 串口线下载,可能会遇到不兼容 的问题,可以让我们帮助购买兼容的 USB 转 RS-232 串口线 仍在连接中, 请给 MCU 上电.按下电路板上的电源按纽,保证其有个失电至上电的过程,则窗口显示开始烧录芯片。芯片烧录成功后,程序开始运行,酒精浓度测试仪正常工作。- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 酒精 浓度 测试仪 设计
装配图网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文