单片机将采集到的电压信号转换为对应的血液酒精浓度信息,并与临界值比较。当酒精浓度在[20,80)mg/mL中时为饮酒驾车,单片机发出预警,点亮第一个LED灯,代表对饮酒驾车行为的提醒;当酒精浓度大于80mg/mL时为醉酒驾车,第一个灯熄灭,第二个灯亮,模拟为锁止发动机,并由蜂鸣器发出警报。程序流程图如下图3-9所示:
开始 置酒驾临界值 YES YES >=20且<80 LED1亮 NO YES >=80 LED1灭,LED2亮 NO 蜂鸣器报警 结束
3.3.3 上、下位机进行串口通信的程序设计
上、下位机进行串口通信时,由单片通过串口将采集到的酒精浓度信息送至SBUF寄存器,SBUF发送寄存器按照指定的串口异步通信格式将数据一位一位发送至PC机的串口中,上位机再将数据读取保存;上位机向单片机发送的的数据由单片机的SBUF接收寄存器接收。因此上、下位机的通信格式必须保持一致,主要包括:一位起始位,8位数据位,移位停止位,无校验位,波特率由定时器1的溢出率决定,本文设置溢出率为9600bps。串口收发数据默认情况下收发的是数据的ASCII码值,所以需根据需要进行数据转换处理。以C语言为基础,本文应用Keil软件编制的串口收发数据程序段如下所示:
第四章 酒精检测系统程序设计
4.1 系统软件平台LabVIEW介绍
4.1.1 LabVIEW概述 虚拟仪器(Virtual Instrument)是二十世纪90年代发展起来的一项新技术。它将计算机与功能化硬件模块结合,用户可以通过的图形界面操作计算机。在虚拟仪器中,图像和数据采集、分析、控制、结果输出和用户界面等功能都是由软件完成,硬件仅仅是为了解决信号的输入输出,因为软件是整个仪器系统的核心,即体现了“软件即仪器”的思想。
虚拟仪器以计算机硬件为平台,由传感器、模块化硬件接口卡以及测量软件
库构成虚实并存的测量系统。它是计算机硬件资源、仪器测控硬件和用于数据分析、过程通讯及图形用户界面软件之间的有效结合,具有传统仪器所没有的信号采集、分析和输出功能。其基本结构包括计算机、虚拟仪器软件、硬件接口和测控仪器。
虚拟仪器系统概念是对传统仪器概念的重大突破,是计算机系统与仪器系统技术相结合的产物。它利用计算机系统的强大功能,结合相应的硬件,大大突破传统仪器在数据处理、显示、传送、处理等方面的限制,使用户可以方便地对其进行维护、扩展、升级等。虚拟仪器系统可以广泛地应用在通讯、自动化、半导体、航空、电子、电力、生化制药、和工业生产等各种领域。
4.1.2 LabVIEW编程特点
LabView(Laboratory Virtual Instrument Engineering Workbench)是一种用图标代替文本行创建应用程序的图形化编程语言。由美国国家仪器(NI)公司研制开发的,类似于C和BASIC开发环境,但是LabVIEW与其他计算机语言的显著区别是:其他计算机语言都是采用基于文本的语言产生代码,而LabView使用的是图形化编辑语言G编写程序,产生的程序是框图的形式。其主要应用于测试,测量和控制领域。
LabView的图形化编程方式,极大的简化了测量和控制系统的开发过程,缩短了系统开发和调试周期,使用LabView编写程序,简单的工作很容易完成,特别是和其他的文本编程语言比较更是如此。LabView不但功能强大、灵活方便,而且还具有良好的可读性、可写性、可维护性、可重用性和可理解性等。主要特点有:
1.尽可能采用了通用的硬件,各种仪器的差异主要是软件。
2.可充分发挥计算机的能力,有强大的数据处理功能,可以创造出功能更强的仪器。
3.可以根据自己的需要定义和制造各种仪器。 4.1.3 LabVIEW程序的组成
一个完整的LabVIEW开发环境包括基本模块和扩展模块两部分,引擎部分是整个图形化开发环境的核心,包括编辑模块、运行模块和调试模块。LabVIEW环境下开发的程序称为虚拟仪器VI。
程序VI由一个前面板,程序流程图和一个接口板组成。接口板用于上层的VI调用该VI。
4.2 NI—VISE简介
LabVIEW提供了功能强大的VISA库。VISA(Virtual Instrument Software
Architecture—虚拟仪器软件构架),是用于仪器编程的标准I/O函数库及其相关规范的总称。VISA库驻留于计算机系统中,完成计算机与仪器之间的连接,用以实现对仪器的程序控制,其实质是用于虚拟仪器系统的标准的API。VISA本身不具备编程能力,它是一个高层API,通过调用底层驱动程序来实现对仪器的编程,其层次如图4.1(a)所示,VISA是采用VPP标准的I/O接口软件,其软件结构应包含三部分,如图4.1(b)所示
4.1(a)VISE内部机制 4.1(b)VISE 结构
4.1VISE内部机制与结构
本文用到的主要串口通讯函数有: (1)VISE串口配置,如图4.2所示:
该节点主要用于将VISA资源名称指定的串口按特定设置初始化。使用哪一个多态实例将由连接至VISA资源名称输入端的VISA类决定。主要参数意义如下: VISA资源名称:指定要打开的资源。该控件也可指定会话句柄和类。 波特率:波特率是传输速率。默认值为9600。
数据比特:数据比特是输入数据的位数。数据比特的值介于5和8之间。默认值 为8。
奇偶:奇偶是指定要传输或接收的每一帧所使用的奇偶校验。奇偶校验位,默认值为无校验、偶校验等。
停止位:停止位是指定用于表示帧结束的停止位的数量。设置停止位,可以为 1、1.5、2。
(2)VISE读取,如图4.3所示:
该节点为串口读子VI,为本文中的主要节点,将串口中的数据读出,然后利用LabVIEW的强大数据处理功能对其进行分析处理。主要参数意义如下: VISA资源名称:设置串口号,指定要打开的资源。该控件也可指定会话句柄和类。
字节总数:字节总数是要读取的字节数量。该节点用于设置读取字节数。 VISA资源名称输出:VISA资源名称输出是由VISA函数返回的VISA 资源名称的副本。
读取缓冲区:读取缓冲区是指从设备读取的数据。
由于LabVIEW的串行通讯子VI只允许对字符串的读写,
因此本文中在进行数据处理时,必须要实现字符串与数字之间的正确转换。此外,若要读入当前串口中的所有字符,则要先执行“组串”子VI,用以确定将要读入的确切的字节数,然后将其输出作为VISA读取节点的输入即可。 (3)VISE写入节点,如图4.4所示:
该模块用于将写入缓冲区的数据写入VISA资源名称指定的设备或接口中。 VISA资源名称:VISA资源名称用于指定要打开的资源。该控件也可指定会话句柄和类。
写入缓冲区:写入缓冲区用于设置要写入设备的数据。 返回数:用于输入实际写入的字节数。 (4)VISE串口关闭,该模块用于对串行端口进行关闭任务操作,如图4.5所示:
4.3 系统程序设计
本文设计的系统程序主要包括以下4方面: 1. 串口数据传输,主要使用了NI—VISE模块; 2. 数据处理,主要应用了数值处理函数模块;
3. 结果显示,使用了布尔型LED灯显示及强大的图表显示模块; 4. 数据存储,应用了文件I/O模块的部分控件。
4.3.1 串口数据传输模块
串口数据传输模块包括串口写入和串口读取,串口写入用到了VISE Write函数,用于上位机对下位机酒精浓度阀值的控制,串口读取用到了VISE Read函数,作用是采集下位机通过RS-232-C串口通信传上来的数据。要进行串口操作,首先需要对串口进行初始化配置,配置好之后无需反复更改,因此放在While结构的外面,在VISE Read函数进行串口数据读取之前首先判断是否需要用VISE Write向下位机设置酒精浓度阀值,不需要则直接读取数据,需要则先写入数据,在读取串口数据。串口数据传输模块程序流程图如图4.6所示:
开始 YES 是否设置上限 NO 写入数据 读取数据 串口关闭 结束 具体程序编写如下图4.7所示:
4.3.2 数据处理模块
数据处理模块主要实现声光报警功能和对串口通信中字符串与数值之间的转化。上位机控制下位机阀值的同时将阀值送给上位机,上位机采集到浓度信息后与与阀值作比较,大于等于上限值则蜂鸣器报警且红灯亮,大于等于20mg/mL小于阀值,则黄灯亮。程序编写如下图4.8所示:
4.3.3 数据存储模块
数据存储模块使用了文件I/O中的部分函数,实时存储当前酒精浓度信息,方便调差取用,其程序编写如下图4.9所示: 4.3.4 上位机总程序设计
设计好了系统程序的每一个模块,对其按照一定的逻辑顺序进行连接,就可以得到本次设计的系统程序。系统程序的前面板如下图4.10所示,X-Y用于实时形象的显示酒精浓度随时间的变化曲线,串口程序读取显示当前酒精浓度值,两个布尔型的LED灯用于指示当前是否是酒后驾车行为,布尔型设置按钮用于控制是否需要设置阀值,数值写入控件用于写入要设置的阀值,当需要设置阀值时点击设置按钮即可,有关于配置串口的控件必须与下位机串口通信的设置一致,否则会出现错误,用户一般无需改动,使用默认值即可。前面板相当于人机交互界面,具体如图4.10所示:
与之对应的后面板显示了各函数及控件之间的连接逻辑以及本次系统程序设计的总体结构,如下图4.11所示:
第五章 系统仿真与调试
5.1 下位机硬件调试
利用Keil软件编写本次的下位机程序,编译好之后下载到STC89C52单片机中,用电位器模拟当前的酒精浓度,调试过程中主要出现了以下几个问题:
1、当蜂鸣器响时,数码管和LED灯都不正常显示; 2、调节电位器,数码管上的数值无变化。 问题的解决:
问题一、经过不断的调试发现,当不对蜂鸣器做发声频率控制时,则数码管和LED灯是正常工作的,于是我们改用定时器0做中断控制,控制的发生频率