基于单片机的气压检测装置的设计

更新时间:2024-06-11 02:08:01 阅读量: 综合文库 文档下载

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

基于单片机的大气压检测系统的设计

摘要:本系统是以MCS-51单片机为检测中心的大气压检测系统。其总体设计是围绕低成本、模块化、微型化的特点展开的。在硬件选择方面, 选择性价比高的AT89系列单片机、MPX4115压力传感器、ADC0832模数转换器、四位一体共阳七段式数码管显示器;在软件方面, 采用了功能模块化;源程序由C语言编写,经过KeilμVision软件编译,将hex文件烧录到芯片中。为了降低整个系统的成本, 在满足性能要求的前提下, 选择低成本元器件, 简化系统设计。同时,抗干扰能力强、微型化、微功耗等特点。

关键词:大气压检测;MPX4115;ADC0832;C语言程序

引言

近年来,随着微型计算机的不断发展,它的应用在人们的工作和日常生活中越来越普遍。工业过程控制是计算机的一个重要应用领域。其中由单片机构成的嵌入式系统已经越来越受到人们的关注。

随着科学技术的迅猛发展,生产力水平迅速提升,单片机性能不断提高,价格不断降低,技术日趋成熟,单片机广泛的应用于人们生活的多个领域,这些东西都离不开单片机,例如导弹的导航装置,工业自动化过程的实时控制和数据处理,计算机的数据传输以及网络通讯,各种智能IC卡、摄像机、全自动洗衣机的控制,以及电子琴、电子宠物等等,而基于单片机的大气压检测装置也是这类采用了单片机的电子产品。

若使用数字电路完成该设计,那么所设计的电路就会变得十分复杂,大概需要很多片数字集成块,它的功能的实现主要是依赖于数字电路的各个功能模块的组合,价格相对来说比较高,从而成本会提高,并且焊接的过程也比较复杂。在本次设计中之所以采用单片机制作,是因为单片机功能的实现主要是通过软件编程来完成的,同时也使硬件电路简单化,并且其成本也有所降低。

本次设计的压力检测装置是通过压力传感器将检测到的压力信号装换为电信号,送至8位A/D转换器,然后将模拟信号转换成单片机可以识别的数字信号,再通过数码管显示输出。基于单片机的压力检测装置,选择的单片机是基于AT89S52单片机的测量与显示,将压力经过压力传感器变为电信号,然后进入A/D转换器将模拟量装换为数字量,这里所采用的A/D转换器为ADC0832,ADC0832为8位分辨率A/D转换芯片,其最高分辨率可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0-5V之间。芯片转换时间仅为32?s,具有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性强。

1 大气压检测技术简介

1.1 大气压的概念及其研究意义

地球周围包着一层厚厚的空气,它主要是由氮气、氧气、二氧化碳相关试验、水蒸气和氦、氖、氩等气体混合组成的,通常把这层空气的整体称之为大气。它上疏下密地分布在地球的周围,总厚度达1000千米,所有浸在大气里的物体都要受到大气作用于它的压强,就像浸在水中的物体都要受到水的压强一样。

大气压的变化跟压强和压力的变化注意区别。大气压(通常指大气压强和大气压力)是从宏观来论述,压强和压力是从微观来讲。因而在理解上我们要注意区分不要搞混淆。一般来讲:海拔越高,大气压越小;

温度越高,大气压越小;空气越干,大气压越大;纬度越高,大气压越大。

1.2 压力传感器的分类及特点

压力传感器是压力检测系统中的重要组成部分,由各种压力敏感元件将被测压力信号转换成容易测量的电信号作为输出,给显示仪表显示压力值,或供控制和报警使用。科学技术的不断发展极大地丰富了压力测量产品的种类,现在,传感器的敏感原理不仅有电容式、压阻式、金属应变式、霍尔式、振筒式等等但仍以电容式、压阻式和金属应变式传感器最为多见。 (1)电容式压力传感器

电容式压力传感器,是一种可以利用电容敏感的原件把被测量的压力转换成为跟它有一定的关系的电信号输出的精密测量仪器。它一般是使用圆形金属薄膜或镀金属薄膜来做电容器的其中一个电极。在薄膜感受到压力的时候,它就会变形的,此时薄膜跟固定的电极间所产生的电容量就会发生改变。测量电路就可以输出跟电压形成一定的关系的电信号。

电容式压力传感器是极距变化型的电容式传感器,有单电容式和差动电容式之分。

单电容式压力传感器它是由圆形的薄膜和固定的电极组成的。当受到压力作用的时候,薄膜就会发生变形,这样就会改变电容器的容量。它的灵敏度大概是跟薄膜与固定的电极之间的距离和薄膜的张力成反比关系的;而跟压力和薄膜的面积成正比关系的。有另外的一种型式,它是跟固定电极取凹形球面状的,而膜片是周围边缘的固定的张紧的平面,膜片能够使用塑料接着镀上金属层的这个方法制造而成的。这一种型式比较适合于测量低压这个工作条件的,它有比较高的过载能力。当然,要测量高压工作条件的话,可使用带有活塞动极膜片制造而成的单电容式压力传感器。这一种型式的传感器可以把膜片的直接的受压面积变小,这样就方便使用比较薄的膜片以致来提高它的灵敏度。把它与各种的保护和补偿部还有放大电路的整体整合在一起,就会提高抗干扰能力。

差动电容式压力传感器其受压膜片电极是处于两个固定的电极之间的,可以形成两个电容器。当受到压力的作用的时候,其中一个电容器的容量就会变大,而另一个电容器的容量就会相应地变小,而测量的结果是由差动式的电路输出的。此传感器的固定的电极是由在凹而曲的玻璃的表层上面镀上金属层而制造出来的。当过载的时候,膜片就会受到凹面的保护,所以,它是不会破裂的。相对于单电容式压力传感器来说,它的线性度较好,灵敏度也较高,但是在加工方面就比较困难了,并且它不可以完成对被测的液体或者是气体的隔离,所以,它不适合使用在有杂质的或者是有腐蚀性的流体之中。 (2)金属应变片式压力传感器

电阻应变片是由金属应变丝或者应变箔、基体材料、引出线以及绝缘保护片等部分组成。电阻应变片的阻值根据不同的用途可按需设计,但是电阻的取值范围应该需要注意:如果阻值太小,所需要的驱动电流就会太大,并且应变片会发热导致自身的温度过高,应变片的阻值会因使用环境不同而变化很大,调零电路过于复杂,会有很明显的输出零点漂移。但是如果电阻太大,阻抗太高,那么它在抗外界的电磁干扰的能力方面就会显得比较差。

金属电阻应变片的工作原理是吸附在基体材料上应变电阻随机械形变而产生阻值变化的现象,通常称

为电阻应变效应。金属导体的电阻值可以用下面的式子进行表示:R??式中:?——金属导体的电阻率(?.cm2m) L——导体的长度(m) S——导体的截面积(cm)

2L S例如金属丝应变电阻,当金属丝受到外力作用的时候,它的截面积和长度都会发生一些变化,从上述公式中能够看出,它的电阻值就会发生相应的改变,或金属丝受到外力作用而发生压缩时,其长度就会减小而截面积就会增加,那么电阻值从而会相应减小。或金属丝受到外力作用而使其伸长时,它的长度就会增加而截面积就会减少,那么电阻值就会增大。若要获得应变金属丝的应变情况那么只要测出加在电阻的变化,通常是测量电阻两端的电压。 (3)压阻式压力传感器

压阻式压力传感器通常采用集成电路工艺技术制作,在硅片上制造出四个等值的薄膜电阻并组成电桥电路,当没有受到压力作用的时候,电桥就会处于平衡状态,没有电压输出;当受到压力作用的时候,单晶硅就会产生应变,使直接扩散在上面的应变电阻产生与被测压力成比例的变化,再由桥式电路获得相应的电压输出信号。并且电桥就会失去平衡从而输出电压,且输出的电压与压力成比例。

压阻式压力传感器具有以下特点:

①压阻式压力传感器的灵敏系数要比金属应变式压力传感器的灵敏度系数要大很多,一般是50-100倍。有的时候压阻式压力传感器的输出不需要放大器就可以直接进行测量。本设计就是应用了此类型的压力传感器。

②压力分辨率高,它可以检测出像血压那么小的微压。

③由于它是采用集成电路工艺加工,因而结构尺寸小,重量轻、结构简单。

④它的频率响应非常好,它可以测量几十千赫兹的脉动压力。

⑤传感器的力敏元件及检测元件制在同一块硅片上,所以它工作可靠,综合精度高,且使用寿命长。 ⑥由于采用半导体材料硅制作,传感器对温度比较敏感,如不采用温度补偿,其温度误差较大。

[1]

[1]

1.3 发展趋势

现代信息技术的三大基础是信息采集(即传感器技术)、信息传输(通信技术)和信息处理(计算机

技术)。传感器属于信息技术的前沿尖端产品,随着硅、微机械加工技术、超大集成电路技术和材料制备与特性研究工作的进展,使得压力传感器在光纤传感器的批量生产、高温硅压阻及压电结传感器的应用成为可能,在生物医学、微型机械等领域,压力传感器有着广泛的应用前景。

[2]

2 基于单片机的大气压检测系统的硬件设计

2.1 大气压检测系统的原理

本次设计是以AT89S52单片机组成的气压测量,系统中必须有前向通道作为电信号的输入通道,用来采集输入信息。气压的测量,需要传感器,利用传感器将压力转换成电信号后,再经A/D转换为数字量后才能由计算机进行有效处理。然后用LED进行显示,设置气压上下限,超过其压力值就报警。使用三极管,电阻和蜂鸣器组成的报警电路。其原理图如图1所示:

气压传感器

A/D转换器 AT89S52单片机 报警电路

图1 压力检测系统的原理图

数码管显示 复位电路 2.2 主电路的设计

(1)主电路

本气压检测系统装置微处理器采用AT89S52单片机,压力传感器为MPX4115,ADC0832模数转换器进行数据转换,采用单片机直接驱动四位一体共阳七段式数码管进行压力数据的显示。并且系统气压范围为15kpa--110kpa,如果超过气压设置的上下限,系统就会报警。硬件电路原理图如图2所示:

图2 硬件电路原理图

(2)MPX4115管脚连接电路

图3 MPX4115管脚连接图

MPX4115气压传感器的1脚接ADC0832的CH0端,2脚接地,3脚接电源。另接一个电压表,作为参考。

(3)LED数码管显示电路

图4 LED数码管显示电路

(4)报警电路

系统中的报警电路是由三极管、蜂鸣器、和限流电阻组成,并与单片机P1.4相连,其电路图如下:

图5 报警电路

(5)复位电路

RST

图6 复位电路

2.3 压力传感器

(1)压力传感器的选择

压力传感器对于系统至关重要,需要综合实际的需求和各类压力传感器的性能参数加以选择。一般要选用有温度补偿作用的压力传感器,因为温度补偿特性可以克服半导体压力传感器件存在的温度漂移问题。

本设计要实现的数字压力显示的是绝对压力值,同时为了简化电路,提高稳定性和抗干扰能力,要求使用具有温度补偿能力的压力传感器。经过综合考虑,本设计选用美国摩托罗拉公司的集成压力传感器,MPX4115压力传感器可以产生高精度模拟输出电压,并且内部含有放大电路,不需要另外加放大电路。 (2)压力传感器MPX4115的原理

MPX4115系列是压电电阻传感器是一个硅压力传感器。这个传感器结合了高级的微电子技术,薄膜镀金属。还能为高水准模拟输出信号提供一个均衡压力。在0℃-85℃的温度下误差不超过1.5%,温度补偿是-40℃-125℃。小的外形和片上集成的高可靠性,使得它很受欢迎。它的实物如下图所示:

[3]

[3]

图7 MPX4115的实物图

①压力压传感器MPX4115的管脚说明如表1所示:

表1 压力传感器MPX4115的管脚说明

1 VOUT 2 GND 3 VS 4 N/S 5 N/S 6 N/S

②压力传感器MPX4114的特性参数如表2所示:

表2 压力传感器MPX4115的特性参数

参数 压力范围 供电电压 供电电流 最大压力偏置 (0℃~85℃) @Vs=5.0V 满量程输出 (0℃~85℃) @Vs=5.0V 满量程比例 (0℃~85℃) @Vs=5.0V 精 度 (0℃~85℃) 灵敏度 响应时间(10%~90%) 上升报警时间 偏置稳定性

符号 Pop Vs Io Vpss 最小 15 4.85 - 0.135 典型 - 5.1 7.0 0.204 最大 115 5.35 10 0.273 单位 KPa Vdc mAdc Vdc Voff 4.725 4.794 4.863 Vdc VFSS 4.521 4.590 4.695 Vdc - V/P tR - - - - - - - - 45.9 1.0 20 ±0.5 ±1.5 - - - - %Vfss mV/KPa ms ms %VFSS 2.4 A/D转换器

模拟量输入通道的任务是将模拟量转换成数字量。能够完成这一任务的器件称为模数转换器,简称A/D转换器。

(1)A/D转换器的选择

目前单片机在电子产品中已经得到广泛应用,许多类型的单片机内部已带有A/D转换电路,但此类单片机会比无A/D转换功能的单片机在价格上高出很多,我们采用一个普通的单片机加上一个A/D转换器,实现A/D转换功能,可以选择ADC0832、ADC0809等;串行和并行接口模式是A/D转换器诸多分类中得一种,但是却是应用中器件选择的一个重要指标。对A/D转换器的选择我们通过比较ADC0809和ADC0832来决定。这两个转换器都是常见的A/D转换器,其中ADC0809是并行接口A/D转换器,ADC0832是串行接口A/D转换器。本设计选择的是ADC0832,A/D转换在单片机接口中应用广泛,串行A/D转换器具有功耗低、性价比较高、芯片引脚少等特点。 (2)ADC0832的简介 ①ADC0832引脚功能

ADC0832 是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。因为它有体积小,兼容性好,性价比高等特点而得到单片机爱好者的亲赖,其目前的普及率非常高。ADC0832 为8位分辨率

A/D转换芯片,其最高分辨可达256级,可以满足一般的模拟量的转换要求。其参考电压的复用与内部电源输入,使得芯片的模拟电压输入在0~5V之间。芯片转换时间很短,仅为32μS,可以通过双数据输出作为数据校验以减少数据误差,其转换速度快且稳定性能比较强。通过DI 数据输入端,可以轻易的实现通道功能的选择。其引脚图如图8所示:

[4]

图8 ADC0832引脚图

cs 片选端口,低电平时芯片工作;

CH0 是模拟输入通道0,或者可作为IN+/-使用; CH1 是模拟输入通道1,或者可作为IN+/-使用; GND 芯片参考0 电位(地); DI 是数据信号输入,选择通道控制; DO 是数据信号输出,转换数据输出; CLK 是芯片时钟信号输入;

Vcc/REF 是电源输入及参考电压输入(复用); ②ADC0832的特点: 8位分辨率; 双通道A/D转换;

输入输出电平与CMOS/TTL相兼容; 5V电源供电的时候输入电压的范围为0~5V; 转换时间为32μS,工作频率为250KHZ; 一般的功耗仅仅为15mW;

8P、14P—DIP(双列直插)、PICC 多种封装;

商用级芯片温宽为0°C ~+70°C,工业级芯片温宽为?40°C ~+85°C;

③配置位说明:

ADC0832工作时,输入时序的配置位决定了模拟通道的选择及单端输入和差分输入的选择,如果是差分输入的时候,就需要分配输入通道的正负极性,两个输入通道的任何一个通道都可作为正极或着负极。ADC0832的配置位的逻辑表见表3所示:

[5]

__

表3 ADC0832的配置位逻辑表

输入格式 配置位 CH0 CH1 L H L H 选择通道号 CH0 + - + CH1 - + + 差分 L L 单端 H H

表中“+”则说明输入通道的端点是正极性;“-”则说明输入端点是负极性,H表示高电平且L表示低电平。输入配置位时,低位(CH1)在后,高位(CH0)在前。 (3)ADC0832的工作时序图

由图可知,若当CS从高电平变为低电平的时候,那么就选择ADC0832。在时钟信号的上升沿时DI端的数据就会移入到ADC0832内部的多路地址移位寄存器。在第一个时钟信号期间,DI为高,则说明启动位,紧接着就会输入两位配置位。当输入启动位和配置位后,选通输入模拟通道,转换开始。转换开始后,经过一个时钟周期延接着在第一个时钟周期延迟,以使选定的通道稳定。ADC0832紧接着在第4个时钟下降沿输出转换数据。数据输出时先输出最高位(D7~D0),两次发送的最低位共用。当片选CS为高时,内部所有寄存器清0,输出变为高阻态。如果再进行一次模拟转换,片选必须再次从高向低跳变,后面再输入启动位和配置位。

[4]

图9 ADC0832的工作时序图

(4)单片机对ADC0832 的控制原理 ADC0832与单片机的接口电路如图10所示:

图10 ADC0832与单片机的接口电路图

一般情况下,ADC0832 与单片机的接口应为CS、CLK、DI、DO这4条数据线。在电路设计的时候可以把DI和DO并联在一根数据线上进行使用,这是因为DI端与DO端在通信的时候并没有同时有效的而且它们与单片机的接口是双向的。如果当ADC0832芯片的CS输入端为高电平时表示ADC0832停止使用,若CS输入端为低电平时,表示此芯片工作。CLK 和DO/DI 的电平可以任意。当要进行A/D转换时,CS输入端必须要置于低电平并且保持低电平直到转换完全结束为止。与此同时芯片开始转换工作,并且同时由处理器向该芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则会利用DI端输入通道功能选择的数据信号。在第一个时钟脉冲的下降之前DI端一定要是高电平,用来表示启始信号。在第2个脉冲和3个脉冲下降之前DI端需要输入2位数据作为选择通道功能。其功能项如表4、表5所示:

表4 功能项表(1)

MUX Address SGL/DIF 1 1 ODD/SIGN 0 1 0 + Channel 1 + 表5 功能项表(2)

MUX Address SGL/DIF 0 0 ODD/SIGN 0 1 0 + - Channel 1 - + 如表,若当这2位数据都为“1”、“1”时,表示只对CH1进行单通道转换,若当此2位数据为“1”、“0”时,表示只对CH0进行单通道转换。若当这2位数据为“0”、“1”时,表示将CH0作为负输入端IN-,CH1 作为正输入端IN+进行输入。若当这2位数据都为“0”、“0”时,表示将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当到第3个脉冲的下降之后DI端的输入电平就会失去输入作用,此后DI/DO端便会开始读取转换数据,这是利用数据输出DO端来进行的,从第4个脉冲下降开始由DO端输出转换数据最高位

DATA7,之后每一个脉冲下降DO端就会输出下一位数据。直到第11个脉冲时发出最低位数据即是DATA0,这样一个字节的数据输出就完成了。同时也正是从此位开始输出下一个相反字节的数据,也就是说从第11个字节的下降输出DATD0。之后输出8位数据,直到第19个脉冲时数据输出完成,这也标志着一次A/D转换

的结束。最后把CS输入端置高电平表示禁用ADC0832芯片,之后直接将转换后的数据进行处理就可以了。

作为单通道模拟信号输入时ADC0832的输入电压的范围是0~5V并且8位分辨率时的电压精度为19.53mV。如果作为由IN-与IN+输入时,为了提高转换的宽度,可以把电压值设定在某一个较大范围之内。但是值得注意的是,在进行IN+与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。

[4]

2.5 单片机

随着电子技术的发展。单片机的功能将更加完善,因而单片机的应用将更加普及。它们将在智能化仪器、家电产品、工业过程控制等方面得到更广泛的应用。单片机将是智能化仪器和中、小型控制系统中应用最多的有种微型计算机。 (1)AT89S52单片机简介

AT89S52为 ATMEL 所生产的一种低功耗、高性能CMOS8位微控制器,具有8K在系统可编程Flash存储器。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。其引脚图如图11所示:

[4]

图11 AT89S52引脚分布图

(2)AT89S52主要功能

①拥有灵巧的8位CPU和在系统可编程Flash

②晶片内部具时钟振荡器(传统最高工作频率可至 12MHz) ③内部程序存储器(ROM)为 8KB ④内部数据存储器(RAM)为 256字节

[6]

⑤32 个可编程I/O 口线 ⑥8 个中断向量源

⑦三个 16 位定时器/计数器 ⑧三级加密程序存储器 ⑨全双工UART串行通道 (3)AT89S52各引脚功能

VCC:AT89S52电源正端输入,接+5V。 VSS:电源地端。

XTAL1:单芯片系统时钟的反相放大器输入端。

XTAL2:系统时钟的反相放大器输出端,一般在设计上只要在 XTAL1 和 XTAL2 上接上一只石英振荡晶体系统就可以动作了,与此同时还可以在两引脚与地之间加入20PF 的小电容,这样可以让系统更稳定,避免因为噪声干扰而出现死机情况。

RESET:它是AT89S52的重置引脚,高电平有效,当要对芯片重置时,让AT89S52完成系统重置的各项动作,则只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,可以把内部特殊功能寄存器的内容都被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。

EA/Vpp:EA:存取外部程序代码,低电平有效,这表示当这个引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。因此在8032和8031中,因为其内部无程序存储器空间,EA引脚必须要接低电平。如果使用的是8751 内部程序空间时,此EA引脚必须要接成高电平。

ALE/PROG:地址锁存器启用信号。因为AT89S52是以多工的方式送出地址及数据的,所以AT89S52可以利用ALE引脚来触发外部的8位锁存器(如74LS373),将端口0的地址总线(A0~A7)锁进锁存器中。之所以可以利用ALE来驱动其他周边晶片的时基输入,是因为程序执行的时候ALE引脚的输出频率约是系统工作频率的1/6。

PSEN:此为“Program Store Enable”的缩写,它表示的意思是程序储存启用,将8051设成为读取外部程序代码工作模式时(EA=0),就会送出此信号从而取得程序代码,一般情况下这支引脚是接到EPROM的OE脚上。AT89S52也可以利用RD及PSEN引脚分别进行启用存在外部的EPROM与RAM,这样可以让程序存储器与数据存储器合并在一起而共同使用64K的定址范围。 PORT0(P0.0~P0.7):

端口0是一个8位宽的开路汲极(Open Drain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当做I/O用时可以推动8个LS的TTL负载。如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0~A7)及数据总线(D0~D7)。设计者必须外加一锁存器将端口0送出的地址栓锁住成为A0~A7,再配合端口2所送出的A8~A15合成一完整的16位地址总线,而定址到64K的外部存储器空间。 PORT2(P2.0~P2.7):

端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。P2除了当做一般I/O端口使用外,若是在AT89S52扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8~A15,这个时候P2便不能当做I/O来使用了。

PORT1(P1.0~P1.7):

端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LS TTL负载,同样地若将端口1的输出设为高电平,便是由此端口来输入数据。如果是使用8052或是8032的话,P1.0又当做

[8]

[7]

[6]

定时器2的外部脉冲输入脚,而P1.1可以有T2EX功能,可以做外部中断输入的触发脚位。 PORT3(P3.0~P3.7):

端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括外部中断控制、串行通信、计时计数控制及外部数据存储器内容的读取或写入控制等功能。 其引脚分配如下:

P3.0:RXD,串行通信输入。

P3.1:TXD,串行通信输出。 P3.2:INT0,外部中断0输入。 P3.3:INT1,外部中断1输入。 P3.4:T0,计时计数器0输入。 P3.5:T1,计时计数器1输入。 P3.6:WR:外部数据存储器的写入信号。 P3.7:RD,外部数据存储器的读取信号。 RST:复位输入。

/PSEN:外部程序存储器的选通信号。在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。

/EA/VPP:当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。

[9]

2.6 LED显示接口

本次设计是利用AT89S52单片机与四位一体数码管相连,这种设计方法具有硬件结构简单、软件编程容易和价格低廉等点。 (1)LED数码管

数码管由8个发光二极管构成,通过不同的组合可用来显示数字0~9、字符A ~ F、H、L、P、U及小数点“.”。数码管显示器根据公共端的连接方式,可分为共阴极数码管(将所有发光二极管的阴极连在一起)和共阳极数码管(所有发光二极管的阳极连在一起)。以共阳极数码管为例,8个发光二极管的阳极连接在一起,其共阳极接高电平(+5V),其它引脚接段驱动电路输出端。当某一段为低电平的时候,该端所连接的字段导通并点亮,根据发光段的不同组合显示数字或字符

[11]

共阳数码管的七个段笔画是用低电平(“0”)点亮的,要求驱动功率很小;而共阴数码管七个段笔画是用高电平(“1”)点亮的,要求驱动功率较大。并且每个段笔画要串一个数百欧姆的降压电阻。所以本设计中在共阳数码管的段笔画上串了一个上拉排阻。

图12 LED数码管

要使数码管显示出相应的数字或字符,必须使段数据口输出相应的字形编码。共阴极和共阳极数码管的字形编码各不相同,见表6所示:

表6 LED的16进制ASCII码表

显示字符 0 1 2 3 4 5 6 7 8 9 共阳极字符 COH F9H A4H BOH 99H 92H 82H F8H 80H 90H 共阴极字符 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 6FH

显示字符 A B C D E F P H L “灭” 共阳极字符 88H 83H C6H A1H 86H 8EH 8CH 89H C7H FFH 共阴极字符 77H 7CH 39H 5EH 79H 71H 73H 76H 38H 00H (2)四位一体共阳数码管

数码管内部有4个单个数码管共用a~dp这8根数据线,为人们的使用提供了方便,因为里面有4个数码管,所以它有4个公共端,加上a~dp,共有12个引脚。数码管的外部引脚与位选、段选对应如下: A—11;B—7;C—4;D—2;E—1;F—10;G—5;BIT1—6;BIT2—8;BIT3—9;BIT4—12;DP—3;如下图所示:

图13 四位一体数码管

数码管的驱动是指每个数码管的每一个段码即七段都是由一个单片机的I/O端口进行驱动,也可以使用译码器译码进行驱动如BCD码二—十进制。它的优点是编程简单,显示的亮度高,它的缺点是占用的I/O端口多,如果要驱动6个数码管静态显示则需要6×8=48根I/O端口来驱动,因为一个51单片机可用的I/O端口只有32个,在实际应用中必须要增加译码驱动器进行驱动,这样做增加了硬件电路的复杂性。

3 压力检测系统的软件设计

3.1系统主程序设计

主程序的主要功能是负责实时检测、读出并处理MPX4115的测量的气压值,实时显示压力。其流程图如图14所示,主程序见附录Ⅱ。

数据采集 开始 系统初始化 处理读到的数据 不报警 否 若气压值大于95kpa或小于20kpa 是 报警 送LED数码管显示

3.2 A/D转换器的软件设计

结束 图14 系统主程序流程图

单片机控制系统中通常要用到AD转换,根据输出格式,常用的AD转换方式可分为串行AD和并行AD。串行方式所用到的芯片引脚比较少,而且封装小,但是所需要的数据必须通过软件处理才能得到。并行方式一般在转换后可直接接收,但是芯片的引脚相对来说就会比较多。而单片机I/O引脚本来就不是很多,使用串行器件可以节省I/O资源。所以本设计使用串行方式。

ADC0832是一个8位逐次逼近型模数转换器,可支持两个单端输入通道和一个差分输入通道。与它有相同功能的器件还有ADC0834、ADC0838、ADC0831。所不同的是它们的输入通道数量不同,通道选择和配置都是通过软件设置的。其流程图如下:

初始化函数 开 始

A/D转换 将转换后的电压转换成压力 返回

3.3 LED数码管显示程序设计

图15 A/D转换子程序流程图

在本次设计中用的是7SEG-MPX4-CA(4位共阳极7段式数码显示管)亦即相应的单片机P1.0、P1.1、P1.2、P1.3为高电平,数码管才能点亮。 (1)动态扫描显示原理

①P1.3、P1.2、P1.1、P1.0输出低电平,关闭所有数码管;

②显示个位——把要显示的数据送到P0.0~P0.7,P1.3送高电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P1.3送低电平;

③显示十位——把要显示的数据送到P0.0~P0.7,P1.2送高电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P1.2送低电平;

④显示百位——把要显示的数据送到P0.0~P0.7,P1.1送高电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P1.1送低电平;

⑤显示千位——把要显示的数据送到P0.0~P0.7,P1.0送高电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P1.0送低电平。

⑥以此顺序循环,把它做成子程序,在主循环中调用。

(2)LED显示流程图

调用显示子程序

开始 系统初始化 调用压力子程序

图16 LED显示流程图

4 创建Hex程序与系统仿真分析

4.1 Keil C51 Windows集成开发环境

Keil C51是目前世界上最优秀、最强大的51单片机开发应用平台之一。它集编辑、编译、仿真于一体,支持汇编、PL/M语言和C语言的程序设计,界面友好,易学易用

创建Hex程序步骤:

(1) 创建一个工程项目文件;

(2) 为工程选择目标器件;

(3) 为工程项目设置软硬件调试环境; (4) 创建源程序文件并输入程序代码; (5) 保存创建的源程序项目文件; (6) 把源程序文件添加到项目中; (7) 编译生成hex程序文件;

[11]

4.2 系统仿真分析

在proteus里画出电路原理图,然后再把HEX程序文件导入单片机里即实现了结果仿真,调节压力传感器的上下箭头数码管就会显示不同的值,若压力值大于110kpa或者小于15kpa,则蜂鸣器会报警。

当调节气压传感器的值为103.2时,那么数码管就会显示相应的压力值,并且蜂鸣器会发出声音进行报警。如图17所示:

图17 系统仿真图

当调节气压传感器的值为94.5时,送至ADC0832模数转换器,再经数码管就会显示相应的压力值。如图18所示:

图18 系统仿真图

5 小结

传感器与压力检测技术已经融入进我们生活、学习和工作的各个方面。随着工农业生产和国防、科研事业的不断发展以及人民物质文化生活水平的日益提高,必定会对压力检测技术提出进一步扩大应用范围和应用深度的要求。近年来,在压力检测技术领域,多种新的检测原理与传感器的开发应用,已取得了具有实用性的巨大进展。因此,学习和研究压力检测技术有着深远的意义。

参考文献

[1] 应变片压力传感器原理应用.http://wenku.http://www.wodefanwen.com//view/b2d31b70a417866fb94a8e06.html.2012年5月2号

[2] 龚运新,胡长胜.单片机实用技术教程 [M]北京:师范大学出版社.2005:24-35.

[3]FreescaleSemiconductorDocumentNumber:MPX4115.http://wenku.http://www.wodefanwen.com//view/0db58033f111f18583d05a15.html.2012年5月2号

[4] 刘雪雪.串行数据芯片的编程检测方法 [J].现代电子技术.2010.

[5] ADC0832中文资料.http://www.docin.com/p-978508.html.2012年5月3号

[6] AT89S52单片机简介.http://wenku.http://www.wodefanwen.com//view/bd829ac55fbfc77da269b16a.html.2012年5月2日访问

[7] 黄仁欣,张琴.单片机原理与应用技术 [M]北京:清华大学出版社.2010.1:21-25

[8] The description and pin description of the AT89S52.http://www2.atmel.com/,2011年5月25日访问

[9] 何曦光.改进型室内安防系统的研究 [D].武汉理工大学.2008.

[10] 王晓君,张英.MCS196系列单片机分类与选型指南 [J].单片机与嵌入式系统应用.2001(4):21-24. [11] 万志平.基于DDS技术的信号发生器设计 [D].复旦大学.2006.

[12] 伍冯洁,谢陈跃,谢斌.Proteus与keil在单片机开放性试验中的应用 [J].电子测量技术.2008.31(6):100-103.

[13] 赵建飞.基于Simulink与AVR单片机的多接口音频系统的仿真与构建 [D].青海师范大学.2010. [14] 张齐,朱宁西.单片机应用系统设计技术—基于C51的Proteus仿真 [M].电子工业出版社. 2009.1 [15] 周杏鹏,仇国富,王寿英等.现代检测技术 [M]高等教育出版社.2004.1

[16] 张萌,和湘,姜斌.单片机应用系统开发总综合实例 [M]清华大学出版社.2007.7:426-436 [17] Zhang Hai-feng,Zhao Ai-ling,HOU Jun .Design of Fumigation Temperature Control System Based on Single-Chip Microcontroller [J]Procedia Engineering.2011.15:246

[18] 吴仲成.传感器的发展方向——网络化智能传感器 [J].电子技术应用.2001(2):22-25. [19] 基于MPX4115的数字压力测量仪器.

http://wenku.http://www.wodefanwen.com//view/a1a3068cd0d233d4b14e6939.html?from=rec&pos=1&weight=21&lastweight=13&count=5.2012年5月2号

[20] Morriss,Brian.C Progrgrammable Logic Controllers [J]Upper Saddle River,NY:Prentice Hall,2000:52-55.

[21] 贾伯年,俞朴主编.传感器技术 [M]南京:东南大学出版社,2000.

[22] 张福学.传感器应用及其电路精选 [M].北京:电子工业出版社.1992.3:56-68.

[23] M Kandler;Y Manoli;W Mokwa;E Spiegel;H Vogt.A miniature single-chip pressure and temperature sensor [J].Journal of Micromechanics and Microengineering.1992.2(3):146 [24] 谭浩强.C程序设计(第三版) [M].清华大学出版社.2005年.

[25] M Q Cai.MCS-51 series single-chip microcomputer system and its application [M].Beijing: Higher Education Press, 1992.8.

附录

附录Ⅰ 硬件电路原理图

附录Ⅱ 系统程序

/********************************************************/ #include #include \

#define uint unsigned int #define uchar unsigned char

//ADC0832的引脚

sbit ADCS =P2^0; //ADC0832 chip seclect sbit ADDI =P3^7; //ADC0832 k in sbit ADDO =P3^7; //ADC0832 k out sbit ADCLK =P3^6; //ADC0832 clock signal

sbit speaker =P1^4;

unsigned char dispbitcode[8]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7f}; //位扫描

unsigned char dispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff}; 段码

unsigned char dispbuf[4]; uint temp;

uchar getdata; //获取ADC转换回来的值

void delay_1ms(void) //12mhz delay 1.01ms {

unsigned char x,y; x=3; while(x--) {

y=40; while(y--); } }

void display(void) //数码管显示函数

//共阳数码管字

{ char k;

for(k=0;k<4;k++) {

P1 = dispbitcode[k]; P0 = dispcode[dispbuf[k]]; if(k==1)

P0&=0x7f; delay_1ms();

} }

/************ 读ADC0832函数 ************/ //采集并返回

unsigned int Adc0832(unsigned char channel) {

uchar i=0; uchar j; uint dat=0; uchar ndat=0;

if(channel==0)channel=2; if(channel==1)channel=3; ADDI=1; _nop_(); _nop_();

ADCS=0; _nop_(); _nop_();

ADCLK=1; _nop_(); _nop_();

ADCLK=0; _nop_();

//加上数码管的dp小数点

//AD转换,返回结果 //拉低CS端 //拉高CLK端 //拉低CLK端,形成下降沿1

_nop_();

ADCLK=1; //拉高CLK端 ADDI=channel&0x1; _nop_(); _nop_();

ADCLK=0; //拉低CLK端,形成下降沿2 _nop_(); _nop_();

ADCLK=1; ADDI=(channel>>1)&0x1; _nop_(); _nop_();

ADCLK=0; ADDI=1; _nop_(); _nop_(); dat=0; for(i=0;i<8;i++) {

dat|=ADDO; ADCLK=1; _nop_(); _nop_();

ADCLK=0; _nop_(); _nop_(); dat<<=1;

if(i==7)dat|=ADDO; }

for(i=0;i<8;i++) { j=0;

j=j|ADDO; ADCLK=1; _nop_(); _nop_();

//拉高CLK端 //拉低CLK端,形成下降沿3 //控制命令结束 //收数据 //形成一次时钟脉冲 //收数据

ADCLK=0; //形成一次时钟脉冲 _nop_(); _nop_(); j=j<<7; ndat=ndat|j; if(i<7)ndat>>=1; }

ADCS=1; //拉低CS端 ADCLK=0; //拉低CLK端

ADDO=1; //拉高数据端,回到初始状态 dat<<=8; dat|=ndat;

return(dat); //return ad k }

void main(void) { while(1)

{ unsigned int temp; float press; } }

getdata=Adc0832(0); if(14

{

//y=(115-15)/(243-13)*X+15kpa //测试时补偿值为9.3

//当压力值介于15kpa到115kpa之间时,遵循线性变换

int vary=getdata;

press=((10.0/23.0)*vary)+9.3;

temp=(int)(press*10); //放大10倍,便于后面的计算 dispbuf[3]=temp/1000;

//取压力值十位

//取压力值个位 //取压力值十分位 //取压力值百分位

dispbuf[2]=(temp00)/100;

dispbuf[1]=((temp00)0)/10; dispbuf[0]=((temp00)0); display();

}

if(getdata<15||getdata>232) speaker=0;

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

Top