测控111 毕业论文最终版 - 图文

更新时间:2023-12-19 23:59:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

分类号:TP932U C D:D10621-408-(2015)-1410-0

密 级:公开 编 号:2011071024

成都信息工程大学

学位论文

基于STM32的便携式酒精浓度检测仪设计与实现

论文作者姓名: 申请学位专业: 申请学位类别: 指导教师姓名(职称): 论文提交日期:

测控技术与仪器

工学学士

2015年06月10日

基于STM32的便携式酒精气体浓度检测仪设计与实现

摘 要

近年来,随着我国经济快速发展,给人们也带来了很多利益。人们的生活和消费水平迅速提高,制造业也在快速地发展。现在,私家车对于很多人来说已经不再是奢侈品了。但是交通事故发生概率也大大增加了,尤其是由于酒后驾车而引起的。如果饮酒过多,会造成体内酒精浓度过高,给饮酒者带来不良的生理反应。例如,麻痹神经、肢体不受控制、大脑反应迟钝等等。所以,过量饮酒者开车是一件非常危险的事情,但是少量饮酒并不会有上述症状。因此,我们需要设计一个能够检测驾驶员体内酒精含量的智能仪器。目前,许多国家采用呼气酒精检测仪来检测驾驶员体内的酒精含量。在本课题中使用MQ-3气体传感器采集数据,经过STM32单片机处理,如果浓度值超过标准,系统将给予声光报警,并液晶显示浓度。

关键词:酒驾;MQ-3气体传感器;STM32单片机;酒精含量;声光报警

Design of Portable Alcohol Concentration Detection Instrument

Based on STM32

Abstract

In recent years, With the rapid development of China's economy , it has brought people a lot of benefits. People's life and consumption level increase rapidly, and manufacturing industry is also developing quickly. Now, the private car for a lot of people have is no longer a luxury. But the traffic accident probability has greatly increased, especially due to drunk driving. If excessive drinking, the alcohol concentration will raise in body, bring the adverse physiological responses to the drinkers. For example, nerve paralysis, body out of control, the slow response of the brain and so on. So, drive after excessive drinking is a very dangerous thing. But a small amount of alcohol does not have these symptoms. At present, in many countries, the breath alcohol detector is used to detect alcohol content in the driver's body. In this paper,the MQ-3 gas sensor is used to collect data, the data is processed through STM32 MCU. If the concentration exceeds the standard, the system will give sound and light alarm, and display concentration through liquid crystal monitor.

Key words: drunk driving; MQ-3 alcohol concentration sensor; STM32 MCU;

alcohol content;sound and light alarm

目 录

论文总页数:31页

1 引言 .............................................................................................................................................. 1

1.1 课题研究背景及意义 ....................................................................................................... 1 1.2 国内外研究现状 ............................................................................................................... 1 1.3 课题研究思路 ................................................................................................................... 2 2 系统方案设计 ............................................................................................................................... 3

2.1 技术指标 ........................................................................................................................... 3 2.2 总体设计方案 ................................................................................................................... 3 3 硬件电路设计 ............................................................................................................................... 4

3.1 元器件选择 ....................................................................................................................... 4

3.1.1 酒精气体传感器 ................................................................................................... 4 3.1.2 单片机介绍 ........................................................................................................... 6 3.1.3 充电芯片 ............................................................................................................. 10 3.1.4 低压差调节器 ..................................................................................................... 12 3.1.5 显示屏 ................................................................................................................. 12 3.2 主要功能模块电路图 ..................................................................................................... 13

3.2.1 充电及稳压电路模块 ......................................................................................... 13 3.2.2 传感器及信号调理电路模块 ............................................................................. 14 3.2.3 声光报警电路模块 ............................................................................................. 14 3.2.4 显示屏模块电路 ................................................................................................. 15 3.3 硬件成品展示 ................................................................................................................. 15 4 软件编程设计 ............................................................................................................................. 16

4.1 软件整体设计 ................................................................................................................. 16

4.1.1 整体设计方案 ..................................................................................................... 16 4.1.2 主程序流程图 ..................................................................................................... 16 4.1.3 主程序设计 ......................................................................................................... 17 4.2 数据采集模块程序设计 ................................................................................................. 18 4.3 液晶显示模块程序设计 ................................................................................................. 19 4.4 报警模块程序设计 ......................................................................................................... 20 4.5 A/D转换模块程序设计 ................................................................................................. 21 5 系统调试..................................................................................................................................... 22

5.1 各模块调试 ..................................................................................................................... 22

5.1.1 传感器测试 ......................................................................................................... 22

5.1.2 充电电路测试 ..................................................................................................... 22 5.1.3 报警电路测试 ..................................................................................................... 23 5.1.4 系统整体调试 ..................................................................................................... 23 5.2 调试结果分析 ................................................................................................................. 23

5.2.1 测试数据 ............................................................................................................. 23 5.2.2 误差分析 ............................................................................................................. 23 5.3 调试中的问题及解决方案 ............................................................................................. 24 6 结论 .......................................................................................................................................... 25 参考文献......................................................................................................................................... 26 致 谢......................................................................................................................................... 27 声 明......................................................................................................................................... 28 附 件......................................................................................................................................... 29

1 引言

1.1课题研究背景及意义

据统计,2011年我国共生产了白酒约1026万吨,排除重复统计的数据,实际的消费量为800万吨。如果把消费群体定位在15岁以上的成人,当时我国约有11.5亿15岁以上的成人,那么可以计算出当时我国成人人均消费的白酒为6.96升。另外,还有啤酒,洋酒,红酒的消费,当时我国人均消费的啤酒约为36升、洋酒约为1.2升、红酒约为1.24升。如果按照白酒的酒精含量65%、红酒的酒精含量10%、洋酒的酒精含量40%、啤酒的酒精含量4%来计算,那么当时我国人均纯酒精消费量约为6.566升。但是随着我国的经济快速发展,人们的生活、消费水平也逐渐提高,酒精的消费量也再快速的增长,由于饮酒过多而造成的社会安全问题也频频发生。比如由于酒驾引起的交通事故等等。

当酒精在人体血液里达到一定浓度的时候,会导致驾驶者神经麻痹、触觉能力降低、判断能力和操作能力也会降低。并且会使驾驶员视力暂时受损,分辨颜色的能力下降,视像不稳等,这些症状会使驾驶者不能发现或正确领会标志、标线、交通信号灯所要表达的意思,在这种情况下,驾驶员几乎失去了驾驶能力,发生交通事故的概率极限增加。据世界卫生组织调查,由于酒后驾车造成的交通事故的数量非常庞大,大约占所有交通事故的50%—69%,而且由酒驾造成的交通事故后果一般都非常严重,所以酒后驾车已经被认为是车祸致死的主要原因。在中国,每年都有数万起交通事故是由于酒后驾车而造成的,因此交通事故的第一“杀手”被认为是酒后驾车。

1.2国内外研究现状

目前,电化学性质的酒精检测仪在全世界是使用得最多的。酒精检测仪根据显示方式的不同主要分为两种:其中一种是发光管显示。最常见的发光管显示是三段式显示,其中未饮酒区为第一段,饮酒区为第二段,酗酒区为第三段。并且每一段都有一个不同颜色的LED灯,根据测试的结果,来点亮对应那一段的LED指示灯。另一种酒精测试仪是数码管显式,它是以数字的形式来显示检测的结果。而这两年出现了一种新型的半导体酒精检测仪,它就是一种拥有高可靠性、高精度、呼吸式等特点的酒精浓度检测仪ca2000。新型高科技微变氧化物半导体是它的核心部件,可以非常准确的检测气体的酒精含量,而且不会受非酒精类气体的干扰,比如烟味、可乐、咖啡等等。ca2000拥有小巧轻便,操作简单等特点,所以它是便携应用的最佳选择[1,2]。

如果驾驶员喝了酒,那么他呼出的气体中就含有酒精气体,所以为了检查酒驾,便携式的酒精检测仪得到了交警的广泛使用。而目前使用的酒精检测仪检测

第 1 页 共 31页

驾驶员是否饮酒只能够初步的判断,最终还需要通过血检来检测驾驶员体内的酒精含量,来判定驾驶员是不是构成了酒驾。为了检测更方便,一种超级酒精呼吸检测仪诞生了,它是由英国内政部推出的。这种酒精检测仪不仅仅是通过驾驶员体内的酒精含量来判断驾驶员是否酒驾,它还根据驾驶员的体温,呼吸频率等多方面的因素当场判断驾驶者是否酒驾[3]。

受20世纪信息技术快速发展的影响,传感器技术已经发展到了一个非常高的地步了,在各个领域都得到了广泛的使用,扮演着非常重要的角色。因此酒精浓度检测仪应该向着高精度,高可靠性,高稳定性与微型化的方向发展。

到目前为止,检测酒精气体含量的设备主要分为5种类型,它们分别是:燃料电池型(电化学)、气体色谱分析型、比色型、半导体型和红外线型。其中燃料电池和半导体型这两种类型的酒精含量检测仪在价格这方面比起其他类型的较便宜,而且使用起来非常方便。所以这两种类型的酒精含量检测仪使用得比较多。

环保型能源燃料电池可以直接把可燃气体转变为电能,而在整个过程中却不产生污染,所以全世界都在广泛的研究。而酒精传感器只是研究燃料电池的一个小小的分支。因此燃料电池型酒精传感器诞生,它的原理是:使用贵金属铂金作为电极,在燃烧室内燃烧酒精,在燃烧的过程中使用了特种催化剂,使酒精充分燃烧。并且转变成电能,也就是在两个电极上产生了电压,由此转换来的电压与在燃烧室内燃烧的气体的酒精浓度是成正比的,在外部通过接入负载来消耗电能

[4,5]

燃料电池型酒精浓度检测仪与半导体型的相比,它具有以下几个优点 1) 稳定性好 2) 精度高

3) 抗干扰能力强的优点

但是燃料电池型酒精传感器也存在一些致命缺点,比如说在制造过程中对传

感器的结构要求非常精密,制造难度非常大等。所以目前能够生产燃料电池型酒精传感器的只有少数几个国家,比如美国、英国和德国等,再加上制造成本高,所以成品的价格较贵,与半导体型酒精传感器比起来贵几十倍。所以在日常生活中用得最多的还是半导体型酒精传感器[6]。

1.3课题研究思路

伴随着单片机(MCU)技术的快速发展和日益完善,单片机在我们的日常生活中已经是屡见不鲜了,我们将它应用于各个领域。从智能控制到监测方面,与其他技术相比,单片机的优越性是非常的明显。本课题研究的是一种以酒精浓度传感器和STM32单片机为主,对空气中的酒精浓度值进行检测,并且将浓度

第 2 页 共 31页

值通过LED显示屏显示出来,最终对超过阀值的浓度值进行声光报警。其可检测出人体呼出的气体和空气环境中的酒精浓度,只要浓度值大于阈值就进行声光报警,这个阈值是根据要求和环境的不同来设定的。

在本课题设计中使用MQ-3酒精传感器采集数据,它将采集到的信号转换为电信号,电信号经过处理后传给STM32单片机,STM32单片机内嵌有A/D转换器,它将电信号转换成数字信号,然后STM32单片机再对数字信号进行分析处理,转换为酒精浓度值,最后通过显示屏将浓度值显示出来。在程序编写的过程中设置了一个阀值,当被检测空气中的酒精浓度值大于阀值时,单片机会控制LED灯亮和蜂鸣器响来实现报警的功能。

综上所述,本课题研究的主要思路是:以空气中酒精浓度为感知量,设计酒精气体传感电路,传感器负责采集信号,然后将采集的模拟信号经过A/D转换器,转换成数字信号后,再由单片机分析处理转换成浓度值以完成空气中酒精浓度的测量。如果浓度值大于了阀值,就进行声光报警。

2 系统方案设计

2.1 技术指标

中国大陆地区血液中酒精浓度(BAC)与呼气酒精浓度(BrAC)的比值采用2200,即两种单位之间的换算关系为BAC=BrAC*2200。判断是否酒驾以及醉驾的标准如表2-1所示:

表2-1 是否构成酒驾或醉驾参考标准

行为类别 饮酒驾车 醉酒驾车 报警浓度 血液酒精含量(BAC) 0.2g/L-0.8g/L >0.8g/L 0.5g/L 呼气酒精含量(BrAC) 0.0909mg/L-0.3636mg/L >0.3636mg/L 0.24mg/L 根据酒精气体浓度检测仪的测量结果,来看结果是落在哪个区域,从而判断驾驶员是否酒驾。同时判断是否报警。

2.2 总体设计方案

总体设计方案如图2-1所示,由MQ-3酒精气体传感器负责采集数据,采集的信号通过调理电路处理后,再输入给单片机,单片机内嵌的A/D转换模块对其进行转换,转换后变成数字信号,然后单片机再对数字信号进行分析处理转换成酒精浓度值,再通过显示屏将浓度值显示出来。同时将酒精浓度值与阀值进行比较,对于超过阀值的进行声光报警。

第 3 页 共 31页

酒 精气 体传 感器 声光报警模块 信号调理模块单片机 液晶显示模块

图2-1总体设计方案框架图 3 硬件电路设计

3.1 元器件选择

3.1.1 酒精气体传感器 1)MQ-3传感器工作原理

MQ-3酒精气体传感器中使用了气敏材料二氧化锡,该传感器是半导体气敏元件。它的电导率会根据空气中酒精气体浓度的不同而不同,酒精气体的浓度越大,电导率也就越大。那么它输出的电压值就会随着酒精浓度的增加而增大?在外部使用简单的电路就可以通过电压值的变化将电导率的变化表现出来,并且该电压值是与酒精气体浓度值相对应的,最后将该信号与预先设定的阀值进行比较,如果大于阀值就进行报警[7]。

2)传感器的管脚分布及外形

MQ-3酒精气体传感器由以下几部分组成: (1)SnO2敏感层 (2)微型AL2O3陶瓷管 (3)加热器

(4)测量电极构成的敏感元件

它被固定在不锈钢或塑料制成的腔体内,由于传感器工作前必须要预热,所以它的内部有一个加热器专门用来加热传感器。封装好的MQ-3酒精气体传感器有6只针状管脚,读取信号的引脚有4个,另外2个引脚专门提供电流来加热传感器。MQ-3的管脚分布如图3-1所示,A脚和B脚是用来读取信号的;提供加热电流的是2个f引脚,电阻丝的阻值为30Ω,当电流经过电阻丝时,电阻丝会被加热。MQ-3的引脚分布如图3-2所示。

第 4 页 共 31页

图3-1MQ-3的引脚

图3-2MQ-3传感器实物图

3)MQ-3气体传感器的特点 (1)灵敏度高

(2)快速响应恢复特性 (3)使用寿命长 (4)稳定性可靠 (5)驱动回路简单

(6)可以抵抗其他气体的干扰 (7)具有信号输出指示

(8)双路信号输出,并具有信号输出指示 (9)TTL输出有效信号为低电平 (10)输出电压范围为0-5V

4)MQ-3气体传感器对酒精气体浓度的标定

第 5 页 共 31页

传感器内部的气敏电阻的输出阻值与酒精气体浓度有关,它随着酒精浓度的变化而变化。如图3-3所示,其中: Rs是MQ-3酒精气体传感器的输出阻值,它在不同气体以及不同浓度下是不同的;R0是MQ-3酒精气体传感器在洁净空气中的电阻值。从图中可以看出Rs/R0的值与酒精浓度成某种关系,而Vs与Rs、V0与R0也都成正比,所以Vs/V0=Rs/R0,所以Vs/V0与酒精浓度也成同样的关系。通过查看手册,找出了这种关系。如公式3-1所示:

alcometer = (V0/Vs-1.12)/(-0.101)-1.1(3-1)

在环境不变的情况下V0是一个定值,所以只需要算出MQ-3气体传感器在酒精气体环境下的输出电压值,就可以算出酒精气体的浓度。Vs是根据公式3-2算出的。

Vs= Adc_avg * 3.34 / 4096(3-2)

式中的Adc_avg是A/D转换器输出的平均值,Vs是传感器在有酒精气体环境中的输出电压。

图3-3中的Rs/R0与酒精浓度的关系是建立在如下环境中的: 温度:20°C 相对湿度:65%

图3-3 MQ-3的灵敏度特性曲线

3.1.2 单片机介绍

在本课题中选用的单片机型号是STM32F103VCT6,它的管脚分布如图3-4所示。STM32 F103xxx系列单片机的功能以及外部设备配置如表3-1所示。

第 6 页 共 31页

图3-4STM32F103VCT6单片机管脚分布 表3-1STM32F103xx系列单片机功能及外部设备配置 外设 闪存(K字节) SRAM(K字节) 定时器 通信接口 通用 高级控制 SPI IC USART 2STM32F103Tx 64 20 STM32F103Cx 64 20 128 STM32F103Rx 64 20 128 STM32F103Vx 64 20 128 3个(TIM2、TIM3、TIM4) 1个(TIM1) 1个(SPI1) 1个(IC1) 2个 (USART1、USART2) 22个(SPI1、SPI2) 2个(IC1、IC2) 2个 (USART1、USART2、USART3) 1个(USB2.0全速) 1个(2.0B主动) 22USB CAN GPIO端口 12位ADC模块 (通道数) CPU频率 工作电压 26 2(10) 37 2(10) 51 2(16) 80 2(16) 72MHz 2.0-3.6V 工作温度 封装

环境温度:-40℃-+80℃ VFQFPN36 LQFP48 第 7 页 共 31页

LQFP64 LQFP100 1)STM32F103VCT6的主要特点 (1)核心处理器是ARM Cortex M3 (2)缩减的引脚数目 (3)系统功耗低 (4)计算性能优越 (5)高级的中断系统响应 (6)程序存储器256KB (7)数据随机存储器48KB (8)工作电压:2.5V或3.3V (9)工作温度:-40°C- +85°C

(10)内嵌2个12bit的A/D转换器,可用A/D通道16个,转换范围为0V-3.3V (11)一共有100个引脚,其中80个为I/O端口。绝大部分端口都可以接受5V信号

(12)拥有7个定时器 2)低功耗模式

(1)睡眠模式:在睡眠模式时,只有CPU停止,其他的外部设备都处于工作状态,可以通过中断或事件来唤醒CPU。

(2)待机模式:在待机模式下会关闭内部的电压调压器,电能消耗达到最低。并且此时内部所有由1.8V供电的部分将被断开;并且RC振荡器也都会被关闭;在待机模式下,待机电路仍然在工作,但是,寄存器和SRAM的内容将会消失,后备寄存器的内容仍会保留。只需要满足NRST上的外部复位信号或者是WKUP管脚上的一个上升边沿这两个中的任意一个条件,就可以从待机模式中退出。

(3)停机模式:在停机模式下,内部由1.8V供电的部分将不能工作,并且RC振荡器也都会被关闭,可以把调压器设置成低功耗和普通模式这两种模式。把CPU从停机模式中唤醒的前提条件是配置一个EXTI的信号,这个信号的来源有很多方式,比如说可以由16个外部I/O端口中的任意产生,也可以是PVD的输出,也可以是RTC闹钟和USB的唤醒信号[8,9]。

3)I2C总线

有多达2个I2C总线接口,它们的特点如下 (1)支持标准和快速模式 (2)支持7位或10位寻址 (3)可以使用DMA操作 (4)支持SMBus和PMBus总线 4)定时器

第 8 页 共 31页

STM32F103VCT6中包含7个定时器,它们分别如下: (1)高级控制定时器1个,特点如下 ①可以被当成是完整的通用定时器 ②可以被当成是三相PWM发生器 ③具有带死区插入互补PWM输出

④拥有四个独立通道,它们都可以用于单脉冲输出、输入捕获、输出比较以及产生PWM

⑤计数器可以被冻结,用于调试 (2)通用定时器(TIMx)

有3个可以同步运行的标准定时器,特点如下

①拥有一个16位自动加载递加计数器,也可以用作递减计数器 ②拥有一个16位预分频器

③拥有4个独立的通道,可以用于单脉冲模式输出、输入捕获以及输出比较 (3)独立看门狗定时器1个

它的时钟是由一个内部独立的40KHz的RC振荡器来提供的,并且这个RC振荡器独立于主时钟,所以它可以在待机模式和停机模式之间切换。它的特点如下:

①可以复位整个系统

②可以为应用程序提供超时管理 ③可以通过硬件或者软件启动 ④有一个12位的递减计数器 ⑤有一个8位的预分频器

(4)窗口看门狗定时器1个,特点如下 ①有一个7位的递减计数器 ②可以被配置为自由运行 ③可以复位整个系统 ④有早期预警中断的功能 (5)系统时基定时器1个

它既可以用于实时操作系统,也可以用作是一个标准的递减计数器。它具有以下四个特点:

①24位的递减计数器 ②可编程时钟源

③当计数器为0时能够产生一个可屏蔽系统的中断 ④自动重加载功能

第 9 页 共 31页

5)通用输入输出接口(GPIO)

每一个GPIO引脚都能够通过软件来配置,可以将它们设置成输入、输出或复用端口。除了那些具有模拟输入功能的端口,其余的GPIO引脚都能够通过大电流。如果想要将I/O引脚的外设功能锁定,那么只需要进行一个特定的操作就可以了,这样就可以防止意外写入I/O寄存器。

6)ADC

STM32F103VCT6单片机内部嵌有2个12位的模拟/数字转换器,这两个转换器有以下几个特点:

(1)每一个ADC都拥用16个外部通道 (2)可以实现单次或扫描转换

(3)在扫描模式下,可以自动切换为选定的模拟输入中的任何一个 ADC接口上其它的逻辑功能还包括 (1)交叉采样和保持 (2)同步采样和保持 (3)单次采样 3.1.3 充电芯片 1)工作原理

整个设计使用锂电池来供电,当锂电池电能用完时,就要对它进行充电。在本设计中选择了TP4054这块充电芯片,它是一款采用恒定电压/电流的单节锂电池线性充电器,它能够提供800mA的充电电流,它采用的是SOT-25封装,并且外部元件数目较少,因此TP4054是便携式应用的最佳选择,它可以通过USB电源和适配器电源对锂电池进行充电,并且它的内部有防倒充电路,所以没有必要在外部单独设计检测电路和隔离二极管。它的输出电压稳定于4.2V,而且充电电流是可以进行设置的,只需要在外部设计一个电阻器就可以了。让一个充电循环开始的条件有3个,它们分别是

(1)Vcc引脚的电压大于UVLO门限电压 (2)5引脚与地之间连接一个设定电阻器 (3)3引脚连接一块电池 2)工作模式 (1)涓流充电模式

TP4054进入涓流充电模式的条件是3引脚的电压小于2.9V。在该模式下,TP4054提供的电流只有设定充电电流的1/10,当电流电压大于安全的电平时,就可以达到满电流进行充电。

(2)恒定电流模式

第 10 页 共 31页

图3-10 硬件成品正面图

4 软件编程设计

4.1软件整体设计

4.1.1整体设计方案

主程序要实现的功能是结合系统的硬件完成对酒精气体浓度检测的各项任务。主要的程序有以下几个模块:数据的采集模块;A/D转换模块;数据处理模块;数据显示模块;报警模块。

主程序模块:系统上电后,首先进入初始化模块,进入酒精浓度检测界面测量酒精浓度,首先等待读数归零,然后再进行测量。系统测出酒精浓度值后一方面在显示屏上显示,另一方面判断浓度值是否超过阀值,如超过阀值进行报警。

4.1.2主程序流程图

如图4-1所示,是整个系统的主程序流程图

第 16 页 共 31页

4.1.3主程序设计

开始 初始化 触发A/D转换 换算酒精浓度 酒精浓度显示 是否大于阀值 N Y 报警灯亮 结束 图4-1 主程序流程图 本课题软件设计主要采用分模块设计的思想,这样便于修改和调试。主要程序模块包括:数据采集子程序、ADC转换及数据处理子程序、报警子程序、OLED显示子程序。下面的程序展示如何调用这些子程序。

#include \#include \#include \#include \#include \#include \

第 17 页 共 31页

#include \#include \#include \#include \int main(void) { }

Warning_init(); while(1);

Adc_Init(); 调用ADC转换子程序 delay_init(); 调用延时子程序 NVIC_Configuration(); Warning_init();调用报警子程序 OLED_Init();调用LED显示子程序 OLED_P8x16Str(20, 0,\OLED_P6x8Str(0, 2,\while(1) { }

Voltage_Deal();

4.2数据采集模块程序设计

数据采集模块程序为:首先进入初始化,界面归零,然后开始测量浓度值,A/D设置成连续扫描模式,一次采集12个数,去掉最大值和最小值,然后算出平均值并显示。程序流程图如图4-2所示。

第 18 页 共 31页

开始 初始化 连续采集12个值 去掉最大值、最小值,算出平均值 显示屏显示,声光报警 结束 图4-2 数据采集模块程序流程图

4.3液晶显示模块程序设计

要让液晶显示屏正常工作,首先写入命令控制字,然后在写入需要显示的数据。写入命令控制字之前,必须用指令来查看液晶是否正在工作。如果正在工作,那就必须等待,直到液晶发出工作完成的信号时,才能够写入控制字和数据。液晶显示模块程序流程图如图4-3 设计如图所示。

第 19 页 共 31页

开始 OLED液晶初始化 延时 显示器是否忙 N Y 写指令,设置第一行显示位置 写显示的数据 写指令,设置第二行显示位置 写显示的数据 结束 图4-3 液晶显示模块程序设计流程图

4.4报警模块程序设计

传感器采集的数据经过A/D转换成数字信号后,与阀值进行比较,超过阀值进行声光报警。如图4-4所示,是报警模块程序流程图。

第 20 页 共 31页

开始 初始化 读取数据

4.5 A/D转换模块程序设计

是否大于阀值 N Y 声光报警 延时 结束 图4-4 报警模块程序流程图

由于STM32单片机自带ADC转换器,所以减少了很多外部硬件电路,但是编程这一块也是非常重要的。在本次编程设计中采用的是DMA模式,只要ADC转换一次,DMA就搬运一次,达到指定的次数后完成一次传输。在本程序中采用的是使能扫描模式并且连续转换,由软件触发ADC转换。采样速率设置为50MHz,选择1通道传输数据。转换后的数据储存在指定的地址。最后对转换后的数据进行处理,找出其最大值和最小值,除去最大值和最小值后计算出平均值。再根据公式算出实际电压值并与阀值进行比较,判断是否报警。AD转换流程如图4-5所示。

第 21 页 共 31页

开始 触发器复位 启动转换 转换是否结束 N Y 触发器复位 读取A/D转换后的数据 结束 图4-5 A/D转换模块流程图

5 系统调试

5.1 各模块调试

5.1.1 传感器测试

根据MQ-3酒精气体传感器的特性,接好电源后,分别测出传感器在洁净空气中和有酒精气体的空气中的输出信号,发现输出信号有变化,并且当传感器与酒精气体源的距离发生变化时,输出信号也会发生变化,由此可以判断传感器是完好的。

5.1.2充电电路测试

TP4054接入5V电源时,通过3引脚给锂电池充电,当测得3引脚电压大于

第 22 页 共 31页

2.9V时,此时的充电电流比较稳定。测得锂电池的输出电压为3.7V,通过KV5033低压差调节器后,输出电压为3.3V。此电压完全能使整个系统正常工作。

5.1.3报警电路测试

首先,检查连线是否正确,排除断路、短路等情况,然后通过编程设置蜂鸣器和LED灯与单片机相连的脚为高或低电平,然后观察蜂鸣器和LED灯的变化。

5.1.4系统整体调试

在对系统整体进行调试时,系统上电后,要先等待大约1分钟左右,目的是要给传感器预热,这样测试的准确度才会更高。当系统上电后,显示屏上会显示Alcometer的字样,以及初始浓度0.000mg/L。并且此时黄色指示灯亮。大约一分钟过后就可以开始测试了,在测试的时候,找了一瓶45度的白酒,将系统的传感器靠近瓶口,此时显示屏上的浓度值会发生变化,大约10秒钟后显示出最终的测量结果,当浓度值大于阀值时,就会进行声光报警。此时蜂鸣器响、红色指示灯亮,黄色指示灯灭。

5.2 调试结果分析

5.2.1测试数据

给整个系统上电后,等待大约一分钟左右,然后找了一瓶45度的白酒,打开瓶盖,然后把系统上的酒精传感器对准瓶口,开始测试数据。表5-1是对45度的白酒进行测试的一组酒精浓度数据,单位是mg/L。

表5-1 检测仪测量的数据

0.544 0.528 0.496 0.507 0.560 0.523 0.517 0.565 0.512 0.523 0.517 0.512 根据表中的数据去掉最大值和最小值算出平均值为0.524 mg/L。

从市面上买了一个精确度为±0.1%F.S的酒精气体传感器,由它测量的浓度值为1.5g/L,这个浓度是指血液中的酒精浓度(BAC),它与呼气酒精浓度(BrAC)的关系为:BAC=BrAC×2200。所以由标准仪器测量的呼气酒精浓度为BrAC=0.682mg/L。

因此可以算出整个设计的相对误差为:g=(0.682-0.524)/0.682=0.2

由于整个设计设定的阀值酒精浓度为0.24mg/L,转化为电压为1.41V,所以只要传感器的输出电压大于1.41V,即所测的酒精浓度超过0.24mg/L时,蜂鸣器就会报警。

5.2.2误差分析

以上测试数据是对45度白酒测量12次的结果,测量结果精度较高,精度达到0.001mg/L。该酒精浓度检测仪存在一些误差,该误差主要由以下几方面造成。

1) 传感器在工作时会受到温度、湿度的影响,若在恶劣的环境中工作,传

第 23 页 共 31页

感器所占的误差比例会更大。

2) 在测量的过程中,传感器与酒精源的距离也会给测量结果带来误差,距离酒精源越近,酒精的浓度越大。

3)酒精检测仪在运行过程中,单片机会受到软件的控制,从而产生软件延时误差。

4) 在使用的过程中,若锂电池的供电电压不稳定,会直接影响传感器的输出,从而产生误差。

5.3 调试中的问题及解决方案

1)整个硬件模块不能正常供电

最初选择的低压差调节器的型号是AMS1117,它是一款正电压输出低压差的三端线性稳压芯片,主要是利用它将锂电池的输出电压降至3.3V来给整个系统供电。虽然在一些资料上看到它可以将输出电压调节为3.3V,但是在实际调试过程中发现ASM1117的输出电压比我们想要的3.3V要小得多,所以整个系统不能正常工作。于是就把低压差调节器换成了KV5033芯片,KV5033的输出电压刚好能达到我们想要的3.3V电压。而且它能够稳定的输出3.3V电压来给整个系统供电。换成KV5033低压差调节器后系统就能正常供电了。

2)传感器输出信号不正常

调试传感器模块时,在最初调试的过程中,我是在系统刚一开始供电就开始调试,结果发现传感器的输出信号变化不正常,与预期的结果不一样,但是过几分钟后调试就正常了,刚开始一直以为是电路哪里有问题,但是找了很久都没有找到问题所在,后来再去查看MQ-3传感器的使用手册的时候发现,MQ-3传感器在使用之前要先预热5分钟,才能使它的精度达到最高,误差最小。

3)蜂鸣器不报警

调试声光报警模块的时候,当整个系统正常运行时,发现酒精浓度值超过阀值时只有指示灯亮,蜂鸣器不响,就去检查电路,觉得电路没问题,就以为是程序报警模块写错了,又去检查程序,检查过后还是没有发现问题所在。我在这一部分浪费了不少时间,还是没结果。后来找同学帮忙看一看才发现是一个非常小的问题,由于自己的粗心把与蜂鸣器相连的三极管接反了。

4)LED指示灯指示不正确

在最后的调试中,感觉程序和硬件都做好了,但是就是有一个指示灯该亮的时候不亮,后来才发现是程序中的输出引脚与硬件中的对不上,更改过来后运行就正常了。

5)传感器的输出结果与电位器的分压比较结果指示不正常

为了方便后期软件编程过程中的调试,在最初的硬件设计过程中,本来是想

第 24 页 共 31页

将传感器的输出信号与电位器的分压(设置成阀值)作比较,通过一个LED指示灯来指示比较结果。传感器输出信号接入比较器的正向端,电位器的分压接入比较器的负向端,预期的结果是当传感器的输出信号大于电位器分压(即正向端电压大于负向端电压)时,比较器输出为低电平,LED指示灯亮,否则LED指示灯不亮。但是在调试过程中发现比较器的输出端很难达到一个能让LED指示灯亮的低电平,即使LED指示灯亮了,肉眼也很难分辨出来。调试了很久也没找出问题在哪里,后来考虑到这个模块对硬件的整体设计和功能没有什么影响,于是决定把这个模块取消了,现在在产品成品上还遗留着那个电位器。

6)酒精浓度换算误差较大

根据图2-4气敏元件灵敏度特性曲线来查找酒精传感器的输出电压与酒精浓度的关系,最初为了计算方便,就把酒精传感器在纯净空气中的电压与在酒精气体中输出电压的比值与酒精浓度看成是成正比的关系,根据这种关系来换算酒精浓度值,后来发现误差太大。就去查找原因,通过查找MQ-3酒精传感器的使用手册发现,并不是根据上述的关系来换算的,酒精传感器在纯净空气中的电压值与在酒精气体中输出的值电压的比值与酒精浓度并不是成正比的。而是如式5-1这样的一种关系:

alcometer = (V0/Vs-1.12)/(-0.101)-1.1 (5-1)

根据这种关系换算出来的酒精浓度值与实际值更接近。但是受环境温度和湿度的影响,还是存在一些误差。

6结论

综上所述,基于STM32的便携式酒精气体浓度检测仪的设计与实现,软、硬件的设计和调试都已完成,所有性能及功能基本已达到了设计指标的要求。硬件电路的设计结构简单,准确度较高,声光报警模块均工作正常。软件的编程设计过程中,采用的是分模块设计,各个子程序之间互不影响,大大的简化了整个编程过程,这样还有益于后期的调试和升级。该酒精浓度检测系统不仅可以用于检测空气中的酒精含量,对人身安全起保护作用,而且也可以用于其他需要进行酒精浓度检测的环境中。

第 25 页 共 31页

参考文献

[1] 李建荣,薛亚平,钱松. 基于单片机的酒精浓度检测仪的设计[A]. 南通纺织职业技术学院学报, 2013,13(4):1-4

[2] 王彩红,王学梅. 酒精检测仪的研制[J]. 科技信息, 2008,29:1-3 [3] 田哥. 国外酒后驾车检测仪科技新动向[J]. 道路交通与安全,2009,5 [4]潘祖军,朱文胜,岳睿. 汽车用酒精传感器的分析[A]. 学术论坛, 2007:39-40

[5] 杨金瑞. 基于法布里—珀罗干涉效应的多孔硅乙醇传感器[J]. 重庆大学出版,2009:19-20 [6] 韩瑞芳. 酒后驾车涉及问题的综合探讨[M]. 西安文理学院学报(自然科学报), 2007,4(10):126-130

[7] 龙光利. 一种驾驶员酒精超标测控电路的设计[J]. 陕西理工学院报(自然科学报), 2012,6 [8] 陈海生. 基于STM32的TransFlash卡读写技术研究[J].哈尔滨工业大学,2009:18-19 [9] 刘婧. 电梯及扶梯GSM无线远程报警系统设计与应用[M].上海交通大学出版, 2011:21-28

第 26 页 共 31页

致 谢

本文是在赵丽娜老师的指导下,以及实验室同学的帮助下完成的,在这里向指导和帮助我的老师和同学表示衷心的感谢并致以崇高的敬意!在硬件设计及调试过程中遇到了许多问题,在导师和同学的帮助下都迎刃而解了,在撰写论文的过程中也遇到了许多这样那样的问题,有的是专业上的问题,有的是论文格式上的问题,在赵丽娜老师的细心、耐心指导下,最终又快又好的完成了我的论文。在此,再一次向他们表示衷心的感谢。 作者简介 姓名:性别:男 出生年月:民族:汉 E-mail:328390202@qq.com

第 27 页 共 31页

声 明

本论文的工作是2014年12月至2015年6月在成都信息工程大学控制工程学院完成的。文中除了特别加以标注地方外,不包含他人已经发表或撰写过的研究成果,也不包含为获得成都信息工程大学或其他教学机构的学位或证书而使用过的材料。

关于学位论文使用权和研究成果知识产权的说明:

本人完全了解成都信息工程大学有关保管使用学位论文的规定,其中包括: (1)学校有权保管并向有关部门递交学位论文的原件与复印件。 (2)学校可以采用影印、缩印或其他复制方式保存学位论文。 (3)学校可以学术交流为目的复制、赠送和交换学位论文。 (4)学校可允许学位论文被查阅或借阅。

(5)学校可以公布学位论文的全部或部分内容(保密学位论文在解密后遵守此规定)。

除非另有科研合同和其他法律文书的制约,本论文的科研成果属于成都信息工程大学。

特此声明!

作者签名:

年 月 日

第 28 页 共 31页

附 件

AD转换主要程序 void Adc_Init(void) { }

void Get_Adc_Average(void) {

RCC_Configuration_ADC(); GPIO_Configuration_ADC(); DMA_Configuration_ADC(); ADC1_Configuration_DMA();

static u8 t = 0; static u32 adc_cnt;

static u16 adc_max = 0, adc_min = 0; if (t < 12 && Adc_avg_flag == 0) {

adc_cnt += ADC_ConvertedValue[0]; // 求和 } if (t == 12) {

Adc_avg_flag = 1; t = 0;

Adc_avg = (adc_cnt - adc_max - adc_min) / 10; adc_cnt = 0;

第 29 页 共 31页

delay_ms(100);

if(ADC_ConvertedValue[0] > adc_max) //求最大和最小

adc_max = ADC_ConvertedValue[0]; adc_min = ADC_ConvertedValue[0]; if(ADC_ConvertedValue[0] < adc_min)

t++;

}

}

adc_max = 0;

adc_min = 0xffff;

#define Air_cv 1.394

void Voltage_Deal(void) { }

报警主要程序 void Warning_init(void) {

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD |

RCC_APB2Periph_GPIOA,ENABLE);

GPIO_InitTypeDef GPIO_InitStructure; Get_Adc_Average(); if(Adc_avg_flag == 1) { }

Adc_avg_flag = 0;

voltage_cv = Adc_avg * 3.34 / 4096;

alcometer = (Air_cv/voltage_cv-1.12)/(-0.101)-1.1; if(alcometer<0.1) alcometer = 0; sprintf(str,\OLED_P8x16Str(10, 4,str); Warning(alcometer); float voltage_cv; float alcometer = 0; u8 str[11] = \

第 30 页 共 31页

}

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOD, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOA, &GPIO_InitStructure);

Warning_BEEP = 0; Warning_LED0 = 1; Warning_LED1 = 1;

#define Warning_voltage_red 0.24

void Warning(float alcometer) { }

if(alcometer > Warning_alcometer_red){ } else{ }

Warning_LED0 = 0; Warning_LED1 = 1;

Warning_LED1 = 0; Warning_LED0 = 1; Warning_BEEP = 1; delay_ms(300); Warning_BEEP = 0;

第 31 页 共 31页

}

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOD, &GPIO_InitStructure);

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_7 | GPIO_Pin_8; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD; GPIO_Init(GPIOA, &GPIO_InitStructure);

Warning_BEEP = 0; Warning_LED0 = 1; Warning_LED1 = 1;

#define Warning_voltage_red 0.24

void Warning(float alcometer) { }

if(alcometer > Warning_alcometer_red){ } else{ }

Warning_LED0 = 0; Warning_LED1 = 1;

Warning_LED1 = 0; Warning_LED0 = 1; Warning_BEEP = 1; delay_ms(300); Warning_BEEP = 0;

第 31 页 共 31页

本文来源:https://www.bwwdw.com/article/m5o5.html

Top