(最新整理)基于STC12C5A16AD酒精浓度测试仪制作_第1页
(最新整理)基于STC12C5A16AD酒精浓度测试仪制作_第2页
(最新整理)基于STC12C5A16AD酒精浓度测试仪制作_第3页
(最新整理)基于STC12C5A16AD酒精浓度测试仪制作_第4页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、(完整)基于stc12c5a16ad酒精浓度测试仪制作(完整)基于stc12c5a16ad酒精浓度测试仪制作 编辑整理:尊敬的读者朋友们:这里是精品文档编辑中心,本文档内容是由我和我的同事精心编辑整理后发布的,发布之前我们对文中内容进行仔细校对,但是难免会有疏漏的地方,但是任然希望((完整)基于stc12c5a16ad酒精浓度测试仪制作)的内容能够给您的工作和学习带来便利。同时也真诚的希望收到您的建议和反馈,这将是我们进步的源泉,前进的动力。本文可编辑可修改,如果觉得对您有帮助请收藏以便随时查阅,最后祝您生活愉快 业绩进步,以下为(完整)基于stc12c5a16ad酒精浓度测试仪制作的全部内容

2、。技师核心技术专题研修设 计 说 明 书课题名称 基于stc12c5a16ad酒精浓度测试仪制作 专业班级 07技师1班 学生姓名 李 江 学 号 091304 指导教师 毛宏光 宁波技师学院电气技术系二零零 年 月摘 要自刑法修正案(八)和修改后的道路交通安全法正式实施,“醉酒驾驶”正式入刑。不仅交警部门,而且很多车主都期盼能够有便携仪器方便地测量气体酒精浓度,为安全驾驶提供保障,有效减少重大交通事故的发生.本研究设计的酒精浓度测试仪是一款实用性强、安全可靠的气体乙醇浓度检测工具,采用高精度mq3乙醇气体传感器对空气中的乙醇浓度进行检测,利用宏晶公司高性能低成本单片机stc12c5a16ad

3、对检测信号进行a/d转换和处理,最后通过液晶屏显示输出。本研究设计的酒精浓度测试仪还具有醉酒阈值设定功能,可以根据法律法规或用户需要设定修改醉酒阈值,并进行保存.关键词:a/d转换;mq3;stc12c5a16ad;酒精浓度目 录1引 言42总体设计52.1 设计前的准备工作52。2 设计的要求52.3 设计构思52。4硬件电路pcb设计62。5软件程序的设计63硬件设计73.1微处理器系统73。1.1阈值存储电路73.1.2复位电路73。1。3超限报警电路73。2键盘和显示模块83。3供电及程序下载电路93.3.1 单片机最小系统硬件电路设计93.3.2mq_3传感器硬件电路设计104软件设

4、计114.1总体程序流程图114。2at24c04初始化程序114.2.1lcd1602初始化程序145制作和调试185。1仿真调试中的问题185。2硬件电路的问题186结论19致谢20参考文献21附录1系统实物图22附录2 实验原理图23附录3 电路pcb24附录4 源程序251引 言本设计基于stc12c5a16ad单片机设计的酒精气体浓度探测仪,可用来检测酒精气体浓度,酒精气体浓度测试仪在生产生活中有重要的应用,比如,在一些环境要求严格的生产车间,用这种酒精浓度探测仪,可随时检测车间内的酒精气体浓度,当酒精气体浓度高于允许限定值时,发出警报,提醒人们及时通风换气,做到安全生产,此酒精测试

5、仪经过再一步的改进可以使用到酒后驾驶测试上面去,利用该测试仪来告诫驾驶员请勿酒后驾驶。在这次的设计中,利用了mq-3型酒精的传感器通过对空气中的酒精浓度测试转换成05v的模拟量电压进行输出,把这个05v的电压传送到stc12c5a16ad内部自带的a/d转换模块中去,通过模拟量模块的转换输出一个8位0255的数据给单片机的p1口,再通过单片机进行一些软件程序的处理显示在lcd的液晶上面。2总体设计2.1 设计前的准备工作 本次设计中主要测试的对象就是几种不同浓度的酒精溶液,主要的控制对象就是基于stc12c5a16ad单片机控制处理部分,那么在设计首先需要研究的就是该系统的硬件结构,通过几天的

6、资料查询,确定下来以mq-3为测试的传感器,有了传感器之后就利用了proteus数字电路仿真软件进行了硬件的电路的设计,有了硬件电路之后就需要设计软件了,那么也是通过各种渠道进行资料的收集,大概出来一个初步的设计构思,最后一个就是要对mq-3的酒精传感器进行一个特性的研究分析,在查询各种资料后得出了,为了尽量减少设计的气体传感器的测量误差,在测量酒精溶液样品时要考虑并解决3个主要问题。一是外界环境流动空气对传感器的影响和对气体样品的稀释,二是样品的稳定性对测量带来的误差,三是水蒸气对测量的影响。知道了这三点信息之后就进行前期的测试和验证,通过98的工业乙醇和水混合得到几种浓度的酒精溶液进行测试

7、,根据自己的测试和各种查询的资料得出了一点酒精传感器相关特性的资料。2。2 设计的要求在这次设计当中,设计的要求有通过酒精传感器要对几种不同浓度的酒精溶液进行浓度测试,通过前期的资料查询和各种分析最终确定下来测试浓度范围在030度,误差率在515%之间,由于酒精传感器的特性关系测量的浓度越高误差率就越大了,在模拟量转换过程中使用到单片机自带的a/d功能,需要在液晶屏上对酒精浓度的显示并且超过预设值后进行蜂鸣器报警,除此之外还需要通过串口与上位机进行通讯并且能够简单的传送一些数据等。2.3 设计构思在这次设计中采用了stc12c5a16ad单片机,使用这款单片机的主要原因有目前市场比较常见的,另

8、外内存比51单片机大4倍,最主要的是这款单片机集成了8位高速a/d转换器,而且在烧写程序的时候比较方便,然后程序的结构完全跟其他51一样,所以采用了这个单片机.在设计该测试仪时首先查看了stc12c5a16ad单片机的数据手册,了解到了一些基本使用,就是a/d转换的过程,根据这个思路进行设计,在软件方面设计可以根据其他参考的例程进行程序的编写,这个测试仪主要用来试验,所以被测的酒精也是自己根据剂量配比的。在设计之初初步的想法就是通过传感器对各种浓度的酒精进行测试,然后将测试的结果通过单片机进行转换,然后显示到led的数码管上面,测试仪还具有超限报警,传感器故障显示,按钮复位,串口与上位机通讯等

9、功能.2。4硬件电路pcb设计在这次的设计中,省去了ad0809芯片所以硬件设计并不复杂,由于单片机的管脚可以由自己定义,所以制版的时候相对于也比较的简单,但是由于线比较多,所以在设计中还是需要合理的放置才不会出错.具体的硬件部件见附图。2.5软件程序的设计在这个测试仪的设计中最主要的部分就是软件的设计,单片机的程序设计是最主要的一部分,如果没有一个很好的程序就无法使测试仪正常的工作起来,在这次程序的设计中采用c语言的编程,因为这个程序中需要牵涉到数据的计算,由于c语言对数据的处理比较的方便和简单,而且整个编程的过程c语言相对于汇编语言简单。这次整个程序分为了几个部分,第一部分就是对整个程序中

10、所需要用到的一些数据进行定义,那么我这次的程序中需要用到浮点数、整数等,所以就在程序的开始进行一个全局的定义,第二部分就是主程序,主程序中包括了那些中断的初始,以及p0。0的数据的采集控制,单片机的一些io口的初始,串口通讯的初始等。第三部分就是对ad采集进来的数据进行转换,根据传感器的特性做了一些转换公式,通过各个区间的比较满足条件进行转换,转换出来的数据送到指定的数据寄存器里面。第四部分显示部分,在前进的数据处理之后对所需要的数据进行显示,第五部分就是一些子程序,有中断的子程序和延时的子程序。整个程序的结果就是有这些部分组成。3硬件设计本系统硬件主要有三大模块组成:微处理器系统、键盘和显示

11、模块和串口模块。3。1微处理器系统本系统的微处理器采用stc12c5a16ad单片机,是stc系列单片机的其中一款自带a/d转换功能,经过设计前的准备和收集的资料设计出可靠的硬件电路。3。1.1阈值存储电路如图3-1是较为常用的单片机外围存储电路,本存储器采用了eeprom,是atmel公司生产的一款。醉酒阈值存储在eeprom芯片at24c04中,并可以通过 “增加、“减少”按键调节并保存。at24c04是iic接口的eeprom芯片,可以用于掉电不易失数据的存储。其电路如图3-1所示.图中a0、a1和a2为芯片的地址引脚,一般接地即可.scl和sda为at24c04和单片机iic通信的时钟

12、线和数据线图31 单片机外围时钟电路3。1。2复位电路如图3-2是系统中的复位电路硬件设计,此复位设计采用高电平复位。图32 单片机复位电路3。1.3超限报警电路如图3-3所示为超限报警电路,电路采用有源蜂鸣器报警提示。图33 超限 报警电路3.2键盘和显示模块如图3-4是系统需要的按键电路设计,在电路中共用到了3个按键分别为,加、减计数和复位按键.如图3-5所示,为液晶显示接口硬件设计,采用接插件设计,方便、易插拔. 图3-4 单片机按键电路图3-5 单片机显示接口电路3。3供电及程序下载电路如图36为电源电路设计,电路中得供电方式采用usb供电,目的是为了方便插接,接口标准化。如图3-7为

13、程序下载及单片机通讯电路,程序下载电路采用stc_isp下载方式下载,利用max3232设计硬件下载电路,这样的设计也是经过深思熟虑的,其一是下载程序方便,其二是单片机通讯电路容易设计。图36 单片机电源供电电路图37 单片机电源供电电路3。3.1 单片机最小系统硬件电路设计如38所示为单片机最小系统核心硬件电路设计,电路中都是单片机工作缺一不可的一些器件,例如:晶振、电容、复位电路、电源等。图38 单片机系统核心电路3.3.2 mq_3传感器硬件电路设计mq3乙醇气体传感器及其调理电路原理如图3-9所示。其外形如图5所示。经过调理,检测信号由电阻值转变成电压值,便于后续电路进行a/d转换和处

14、理图3-9 mq-3传感器原理图设计该传感器模块具有如下特点,方便与单片机系统接口组成检测仪器。l 具有信号输出指示.l 双路信号输出(模拟量输出及ttl电平输出)l ttl输出有效信号为低电平. l 模拟量输出05v电压,浓度越高电压越高4软件设计4。1总体程序流程图如图41所示为总体程序流程图。当检测到酒精气味时,气体传感器mq-3两个电极端ab间电阻将变小,对应与气体传感器负载电阻的分压将变大,输出电压也将变大。图4-1 总体程序流程图4。2at24c04初始化程序include 2402.h”void delay(unsigned int t)while(t!=0)t-;/* iic

15、drive*/void iicstart(void) scl=0; delay(1); sda=1; scl=1; delay(1); sda=0; delay(1); scl=0; void iicstop(void) sda=0;scl=1; delay(1); sda=1; delay(1); scl=0; void send0(void)sda=0;scl=1;delay(1);scl=0;void send1(void)sda=1;delay(1);scl=1;delay(1);scl=0;bit check_ack(void) unsigned char errtime=250;

16、delay(1); scl=1; delay(1); cy=sda; while(cy) errtime-; cy=sda; if (!errtime) iicstop(); return 1; delay(1); scl=0; return 0;void write_byte(unsigned char dat) unsigned char i;for(i=0;i8;i+)if(dati)&0x80)send1();elsesend0();unsigned char read_byte(void)unsigned char i,temp=0; for(i=0;i8;i+) sda=1; sc

17、l=1; delay(1); if(sda=1)temp=temp1;temp=temp|0x01;elsetemp=temp1; scl=0; return temp;/* eeprom drive addr:from 0x00-*/unsigned char rdeeprom(unsigned char addr) unsigned char temp=0;bit flag=0;iicstart();write_byte(0xa0); check_ack();write_byte(addr);check_ack();iicstart();write_byte(0xa1);check_ack

18、();temp=read_byte();send1();iicstop(); return temp; void wrteeprom(unsigned char addr,unsigned char dat) iicstart();write_byte(0xa0);check_ack();write_byte(addr);check_ack();write_byte(dat);check_ack();iicstop(); 4.2。1lcd1602初始化程序/* 文件名 : 液晶1602显示。c* 描述 : 该程序实现了对液晶1602的控制。*#include ”1602.h”#include

19、math。hvoid delay()int i,j;for(i=0; i=10; i+)for(j=0; j=2; j+);uchar convert(uchar in_date)/ uchar i, out_date = 0, temp = 0; for(i=0; i i) & 0x01; out_date |= (temp =100) if (sign = 1) /负数 l1602_char(hang, lie, -); l1602_char(hang, lie+1, baiwei+48); l1602_char(hang, lie+2, shiwei+48); l1602_char(ha

20、ng, lie+3, gewei+48); else if (num=10) if (sign = 1) l1602_char(hang, lie+1, -); l1602_char(hang, lie+2, shiwei+48); l1602_char(hang, lie+3, gewei+48); else if (sign = 1) l1602_char(hang, lie+2, -); l1602_char(hang, lie+3, gewei+48); 5制作和调试5.1仿真调试中的问题在整个设计中的第一步就是仿真的调试,在仿真的调试存在的问题有,仿真时候电路设计的问题,第一个问题就

21、是刚开始的时候设计的电路始终都不会来,原因就是在仿真中lcd1602显示是比较方便的,但是在初始化过程中出错那就麻烦了,因为在程序中的清屏写得有问题,所以一开始就显示不正常反复的跳转.第二问题就是在仿真调试的时候经常会遇到的问题就是有些器件无法正常的使用,比如mq3就没有仿真器件,只能是用别的模拟量器件代替.5。2硬件电路的问题在硬件电路调试中碰到的问题也不少,第一个问题就是蜂鸣器报警电路有点小问题,把原因是把蜂鸣器和发光二极管接到了一io口中,导致发光二极管不会亮蜂鸣器报警也不正常。第二问题就是lcd显示的时候在检测到模拟量的时候反应有点迟钝这个就是程序效率的问题了,造成了整个电路调试的时候

22、有不正常了.第三个问题就是,在刚开始设计电路的时候没有很好的验证,导致了那些下拉电阻和上拉电阻都没有什么用处,所以需要在焊接上去的电路中把这些问题的给解决。 6结论此次酒精测试仪的设计参考了一些网上搜集来得资料,主要是软件方面,在硬件设计上还是花费了一些时间,尤其是对eeprom的操作上,自上单片机课程以来对于外部访问,尤其是地址操作很不习惯也不熟悉,所以在操作上存在一定的困难。在硬件上对于单片机选型也是一门学问,这次课题设计中必须要用到的两样东西是adc和串口,那么atmel公司的at89c51系列的单片机不具备自带adc功能,必须外接adc0809如此一来在硬件的设计上又增加了新的难度,为

23、了简化电路,提高成功率我选择了stc系列单片机具体型号为stc12c5a16ad,此型号单片机自带8位高速adc经过软甲你编程设计即可派上用场,这样大大减轻了设计压力。在做好pcb后在调试方面还是存在一定的问题,例如串口在调试的时候第一次就没有成功,原因是在设计原理图的时候网络标号标错了,导致txd和rxd接反了,所以找到故障排除后串口调试就成功了,其次是lcd的显示问题,在显示的时候被测值在屏幕上显示总是慢半拍,程序效率低了点,在程序中我采用了1s a/d转换一次,其实感觉上还是有点慢的,主板调试成功后就是mq-3传感器调试了,这次的传感器没有选择模块式的,原因是价格太贵,还有就是自己想弄明

24、白它的工作原理,为了这两个理由也是吃了不少苦头,总的来说还是有一定收获的。经过这次单片机的课程设计才让我真正了解到我们还有许多的知识都需要学习,在某个方面还是比较欠缺的,希望自己在以后的学习中更加的努力去学习,尽可能的自己去多写一些自己的程序,参考、参照只是辅助的一部分,重心总在自己身上。致谢本人在课题设计过程中得到了毛宏光老师的细心指导,以及同学的帮助,在此我由衷的感学老师和同学,整个过程中还是比较曲折的,在我不懈努力的情况下完成了此次设计。参考文献1 张立红 单片微型计算机原理与应用m 中国劳动和社会保障出版社2 周坚 单片机c语言轻松入门m 北京航空航天大学出版社2 赵建领 零基础单片机

25、c语言程序设计m 机械工业出版社附录1系统实物图电气专业技师核心技术专题研修设计说明书页码 附录2 实验原理图附录3 电路pcb主板pcbmq-3传感器pcb附录4 源程序#include stc12c5a.h”include 1602.h#include 2402。hdefine uchar unsigned chardefine uint unsigned int/声明常量define alch 80 /醉驾标准80mg/l/k_mg_mv和k_zero为传感器校准系数,要根据每个mq-3模块校准define k_mg_mv 160/66 /传感器灵敏度系数,每毫克/l对应的10毫伏数de

26、fine k_zero 0 /传感器零点漂移,约130mv/定义按键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; /酒精转换计时器uint a

27、lvalue; /酒精测量值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 );/数据初始化void data_init() alcounter = 0; alvalue = 0; led_warn1 = 1; led_warn2 = 2; keyvalue =

28、 0; keyup = 1; keydown = 1;/定时器0初始化,中断时间约2毫秒/计算:晶振11。0592mhz,定时器时钟11059200/12=921600,每毫秒922个脉冲/ 16位定时器初值655361844=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

29、;th0 = 0xf8; /定时器赋予初值/每1秒钟启动一次ad转换 alcounter +; if (alcounter = 500) flagstartal = 1; alcounter = 0; void port_init() /设定ad启动; p1m0 = 0x80; /10000000,p1.7作为ad输入; p1m1 = 0x80; /void adc_init() uint i; p1asf = 0x80; /设p1.7为ad输入 adc_res = 0; /清先前的结果 adc_contr=0x80; /power=1,打开adc电源 for(i=5000;i0;i) ; /

30、延时 adc_contr = adc_contr0xe0; /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_contr0x10)=0);

31、/等待转换结束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; psa

32、ve+ = rdeeprom(0); *psave = rdeeprom(1); if (threshold=255)(threshold0)) threshold = 80;/按键处理程序,参数为键值,1为up键,2为down键void keyprocess(uint num) switch (num) case 1: if (threshold255) threshold+; break; case 2: if (threshold1) threshold; break; default: break; l1602_int(2,9,threshold); save_setting();void main() uint i,j; ea = 0; data_init(); /数据初始化 timer

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论