数字气压计设计

数字气压计设计
数字气压计设计

目录

引言 (2)

1.1课题背景 (2)

1.2本课题国内外研究现状 (2)

1.3本课题的研究意义 (3)

1.4本课题相关理论综述 (3)

系统总体设计 (5)

2.1设计思路分析 (5)

2.2系统总体结构 (5)

2.3系统各功能模块的设计思想 (6)

2.3.1数据采集模块的芯片选择 (6)

2.3.2 A/D转换模块 (7)

2.3.3单片机控制模块 (8)

2.3.4显示模块 (11)

硬件电路设计 (13)

3.1气压传感电路 (13)

3.2单片机控制电路 (13)

3.3A/D转换模块 (14)

3.4显示模块 (14)

3.5系统总体电路图 (15)

软件设计 (16)

4.1用C语言开发单片机的优势 (16)

4.2程序流程图 (17)

4.3系统程序 (18)

4.3.1 源程序代码 (18)

系统调试与仿真 (23)

5.1K EIL软件介绍 (23)

5.2PROTEUS软件介绍 (23)

5.3单片机调试仿真 (24)

结束语 (26)

参考文献 (27)

1.引言

1.1课题背景

数字气压计是利用压敏元件将待测气压直接变换为容易检测、传输的电流或电压信号,然后再经过后续电路处理并进行实时显示的一种设备。其中的核心元件就是气压传感器,它在监视压力大小、控制压力变化以及物理参量的测量等方面起着重要作用。运用于气压计的气压传感器基本都是依靠不同高度时的气压变化来获取气压值的。相对比于普通的水银气压计,有准确易读,易携带的优点。

气象学研究表明,在垂直方向上气压随高度增加而降低。例如在低层,每上升100m 气压便降低10hPa;在5~6km的高空,高度每增加100m,气压便会降低7hPa;而当高度进一步增加时,即到9~10km的高空之后,高度每增加100m,气压便会降低5hPa;同样,若空气中有下降气流时,气压会增加;若空气中有上升气流时,作用于空气柱底部的气压就会减小。一般把作用于单位面积上空气柱的重量称为大气压力。

数字气压计大量应用在各种工矿企业,野外作业,消费类电子产品等等的地方。需求极为广泛。

1.2 本课题国内外研究现状

常见气压计有液体气压计和盒式气压计。飞机上使用的高度计实际上是用盒式气压计改装成的。常见的液体气压计有水银气压计和酒精气压计2种,这2种都是老式的气压计,体积大,精度低,不方便携带且容易坏,当今社会科技高速发展,各行各业不断出现新技术新材料,气压测量这块也是这样,盒式气压计的出现部分的解决了液体气压计所无法解决的缺点,比如体积、方便携带等等。人类社会进入20世纪90年代以后微电子行业发展极为迅速,各种各样的电子传感器被发明且被运用到各行各业,为人们的生产生活创造了极大的便利。数字气压传感器亦已出现,并大量被运用,甚至现在很多手持设备中都已经加入了气压计功能,比如手机,GPS等,方便了人们的出行旅游。

目前国际国内很多公司都推出了其数字气压传感器,如摩托罗拉公司的MPX4105和Intersema公司的MS5534b另外还有华普微电子的HP03系列数字气压传感器。众多数字气压传感器的出现使得多样化的数字化气压测量装置、用品大量出现,并越来越

普及,精度也越来越高。数字气压计一般不会只有测量气压一种功能,一般都有其他的功能,比如测温度、指南针、码表等等的功能。

微控制器是将微型计算机的主要部分集成在一个芯片上的单芯片微型计算机。微控制器诞生于20世纪70年代中期,经过20多年的发展,其成本越来越低,而性能越来越强大,这使其应用已经无处不在,遍及各个领域。例如电机控制、条码阅读器/扫描器、消费类电子、游戏设备、电话、HVAC、楼宇安全与门禁控制、工业控制与自动化和白色家电(洗衣机、微波炉)等。本次设计也将采用微控制器作为电子气压计的数据采集处理和控制元件。

微控制器可从不同方面进行分类:根据数据总线宽度可分为8位、16位和32位机;根据存储器结构可分为Harvard结构和Von Neumann结构;根据内嵌程序存储器的类别可分为OTP、掩膜、EPROM/EEPROM和闪存Flash;根据指令结构又可分为CISC(Complex Instruction Set Computer)和RISC(Reduced Instruction Set Computer)微控制器。

气压传感器和微电子控制器的结合,可以创造出很多应用,可以说只要能有好的想法,一般都可以实现,气压计已经由以前的只有专业场合专业人士才能使用的测量器具变成今天的随处可见,方便使用的电子产品,并集成到众多的电子产品中,都归功于电子行业技术发展和很多有创新精神开发者。

1.3本课题的研究意义

本课题是要设计一个利用微控制和数字化气压传感器为核心元件组成的电子气压计系统。微控制和数字化气压传感器的结合可以使得气压计的设计更具灵活性,测量精度相对于液体气压计也有了显著提高。测量结果的显示也更直观,并可灵活的加入超压、低压报警等特殊功能,以满足某些特定需要。

通过本次设计也较好的锻炼了本人的动手能力,为将来的工作打下了一定的基础,同时可以充分利用课堂所学知识进行本课题的设计,在运用这些知识的过程中,加深了对这些知识的理解。

1.4 本课题相关理论综述

在设计电子气压计之前首先要搞清楚气压的定义。气压是作用在单位面积上的大气压力,即等于单位面积上向上延伸到大气上界的垂直空气柱的重量。气压以百帕

(hPa)为单位,取一位小数。国际制单位:帕斯卡,简称帕,符号是Pa。常用单位:标准大气压。表示气压的单位,习惯上常用水银柱高度。例如,一个标准大气压等于760毫米高的水银柱的重量,它相当于一平方厘米面积上承受1.0336公斤重的大气压力。由于各国所用的重量和长度单位不同,因而气压单位也不统一,这不便于对全球的气压进行比较分析。因此,国际上统一规定用"百帕"作为气压单位。经过换算:一个标准大气压=1013百帕(毫巴)

1毫米水银(汞柱)柱高=4/3百帕(毫巴)

1个标准大气压=760mm水银(汞柱)柱高。

气压产生的原因:从分子动理论可知,气体的压强是大量分子频繁地碰撞容器壁而产生的。单个分子对容器壁的碰撞时间极短,作用是不连续的,但大量分子频繁的碰撞器壁,对器壁的作用力是持续的、均匀的,这个压力与器壁面积的比值就是压强大小。

影响压强的因素:气压的大小与海拔高度、大气温度、大气密度等有关,一般随高度升高按指数律递减。气压有日变化和年变化。一年之中,冬季比夏季气压高。一天中,气压有一个最高值、一个最低值,分别出现在9~10时和15~16时,还有一个次高值和一个次低值,分别出现在21~22时和3~4时。气压日变化幅度较小,一般为0.1~0.4千帕,并随纬度增高而减小。气压变化与风、天气的好坏等关系密切,因而是重要气象因子。通常所用的气压单位有帕(Pa)、毫米水银柱高(mm·Hg)、毫巴(mb)。它们之间的换算关系为:100帕=1毫巴≈3/4毫米水银柱高。气象观测中常用的测量气压的仪器有水银气压表、空盒气压表、气压计。温度为0℃时760毫米垂直水银柱高的压力,标准大气压最先由意大利科学家托里拆利测出。

2.系统总体设计

2.1设计思路分析

基于MPX4115的数字气压计包括软硬件的设计与调试。软件部分通过对C语言的学习和对单片机知识的了解,根据系统的特点编写出单片机程序。硬件部分分为四大块,包括非电信号数据的采集、转换、处理以及显示:。通过对设计的了解,选择适合的器件,画出原理图。

2.2系统总体结构

硬件部分由四部分构成,它们分别是:信息采集模块,数据转换模块,信息处理模块和数据显示模块。采用单片机主控,通过压力传感器、A/D转换采集数据信息,经过含有单片机的检测系统检测,将结果传送到单片机控制的主控器,数据通过显示器显示。原理框图如图2-1所示。

图2-1 系统结构框图

设计51单片机数字气压计系统时,需要考虑下面4个方面的内容。

·选择合适的气压传感器芯片,这要根据实际需要以及各种气压传感器的性能参数来决定。

·选择合适的A/D转换器件,它的作用是将气压传感器输出的模拟电流或电压信号转换为数字信号。

·设计单片机和A/D转换器件的接口电路。

·实现气压信息采集并输出的软件设计。

2.3系统各功能模块的设计思想

2.3.1数据采集模块的芯片选择

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

本设计要实现的数字气压计显示的是绝对气压值,同时为了简化电路,提高稳定性和抗干扰能力,要求使用具有温度补偿能力的压力传感器。经过综合考虑,本设计选用美国摩托罗拉公司的集成压力传感器。MPX4115可以产生高精度模拟输出电压。MPX4115系列压电电阻传感器是一个硅压力传感器。这个传感器结合了高级的微电机技术,薄膜镀金属。还能为高水准模拟输出信号提供一个均衡压力。在0℃-85℃的温度下误差不超过1.5%,温度补偿是-40℃-125℃。数据采集模块由压力传感器MPX4115构成。其中1脚是输出信号端,输出的是与气压值相对应的模拟电压信号。MPX4115的实物图如图2-2所示。

图2-2 MPX4115的实物图

2.3.2 A/D转换模块

ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。由于它体积小,兼容性强,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。学习并使用ADC0832可是使我们了解A/D转换器的原理,有助于我们单片机技术水平的提高。

ADC0832具有以下特点:

● 8位分辨率;

● 双通道A/D转换;

● 输入输出电平与TTL/CMOS相兼容;

● 5V电源供电时输入电压在0~5V之间;

● 工作频率为250KHZ,转换时间为32μS;

● 一般功耗仅为15mW;

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

● 商用级芯片温宽为0°C to +70°C?,工业级芯片温宽为40℃ to +85℃

ADC0832 为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过DI 数据输入端,可以轻易的实现通道功能的选择。正常情况下ADC0832 与单片机的接口应为4条数据线,分别是CS、CLK、DO、DI。但由于DO端与DI端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将DO和DI 并联在一根数据线上使用。当ADC0832未工作时其CS输入端应为高电平,此时芯片禁用,CLK 和DO/DI 的电平可任意。当要进行A/D转换时,须先将CS使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI端则使用DI端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前DI端必须是高电平,表示启始信号。在第2、3个脉冲下沉之前DI端应输入2 位数据用于选择通道功能,其功能项见官方资料。

如资料所示,当此2 位数据为“1”、“0”时,只对CH0 进行单通道转换。当2位数据为“1”、“1”时,只对CH1进行单通道转换。当2 位数据为“0”、“0”

时,将CH0作为正输入端IN+,CH1作为负输入端IN-进行输入。当2 位数据为“0”、“1”时,将CH0作为负输入端IN-,CH1 作为正输入端IN+进行输入。到第3 个脉冲的下沉之后DI端的输入电平就失去输入作用,此后DO/DI端则开始利用数据输出DO 进行转换数据的读取。从第4个脉冲下沉开始由DO端输出转换数据最高位DATA7,随后每一个脉冲下沉DO端输出下一位数据。直到第11个脉冲时发出最低位数据DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第11个字节的下沉输出DATA0。随后输出8位数据,到第19 个脉冲时数据输出完成,也标志着一次A/D转换的结束。最后将CS置高电平禁用芯片,直接将转换后的数据进行处理就可以了,如图2-3为ADC0832实物图。

图2-3 ADC0832实物图

2.3.3单片机控制模块

AT89C51是一个低电压,高性能CMOS8位单片机带有4K字节的可反复擦写的程序存储器(PENROM)。和128字节的存取数据存储器(RAM),这种器件采用ATMEL公司的高密度、不容易丢失存储技术生产,并且能够与MCS-51系列的单片机兼容。片内含有8位中央处理器和闪烁存储单元,有较强的功能的AT89C51单片机能够被应用到控制领域中。如图2-4为AT89C51单片机实物图。

图2-4

引脚描述

VCC:电源电压

GND:地

P0口:

P0口是一组8位漏极开路双向I/O口,即地址/数据总线复用口。作为输出口时,每一个管脚都能够驱动8个TTL电路。当“1”被写入P0口时,每个管脚都能够作为高阻抗输入端。P0口还能够在访问外部数据存储器或程序存储器时,转换地址和数据总线复用,并在这时激活内部的上拉电阻。P0口在闪烁编程时,P0口接收指令,在程序校验时,输出指令,需要接电阻。

P1口:

P1口一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动4个TTL电路。对端口写“1”,通过内部的电阻把端口拉到高电平,此时可作为输入口。因为内部有电阻,某个引脚被外部信号拉低时输出一个电流。闪烁编程时和程序校验时,P1口接收低8位地址。

P2口:

P2口是一个内部带有上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动4个TTL 电路。对端口写“1”,通过内部的电阻把端口拉到高电平,此时,可作为输入口。因为内部有电阻,某个引脚被外部信号拉低时会输出一个电流。在访问外部程序存储器或16位地址的外部数据存储器时,P2口送出高8位地址数据。在访问8位地址的外部数

据存储器时,P2口线上的内容在整个运行期间不变。闪烁编程或校验时,P2口接收高位地址和其它控制信号。

P3口:

P3口是一组带有内部电阻的8位双向I/O口,P3口输出缓冲故可驱动4个TTL电路。对P3口写如“1”时,它们被内部电阻拉到高电平并可作为输入端时,被外部拉低的P3口将用电阻输出电流。

P3口除了作为一般的I/O口外,更重要的用途是它的第二功能,如下表所示。

P3口还接收一些用于闪烁存储器编程和程序校验的控制信号。

RST:

复位输入。当震荡器工作时,RET引脚出现两个机器周期以上的高电平将使单片机复位。

ALE/:

当访问外部程序存储器或数据存储器时,ALE输出脉冲用于锁存地址的低8位字节。即使不访问外部存储器,ALE以时钟震荡频率的1/16输出固定的正脉冲信号,因此它可对输出时钟或用于定时目的。要注意的是:每当访问外部数据存储器时将跳过一个ALE脉冲时,闪烁存储器编程时,这个引脚还用于输入编程脉冲。如果必要,可对特殊寄存器区中的8EH单元的D0位置禁止ALE操作。这个位置后只有一条MOVX和

MOVC指令ALE才会被应用。此外,这个引脚会微弱拉高,单片机执行外部程序时,应设置ALE无效。

PSEN:

程序储存允许输出是外部程序存储器的读选通信号,当AT89C51由外部程序存储器读取指令时,每个机器周期两次PSEN 有效,即输出两个脉冲。在此期间,当访问外部数据存储器时,这两次有效的PSEN 信号不出现。

EA/VPP:

外部访问允许。欲使中央处理器仅访问外部程序存储器,EA端必须保持低电平。需要注意的是:如果加密位LBI被编程,复位时内部会锁存EA端状态。如EA端为高电平,CPU则执行内部程序存储器中的指令。闪烁存储器编程时,该引脚加上+12V的编程允许电压VPP,当然这必须是该器件是使用12V编程电压VPP。

XTAL1:震荡器反相放大器及内部时钟发生器的输入端。

XTAL2:震荡器反相放大器的输出端。

2.3.4显示模块

本设计采用四位一体共阴二极管显示器74SE-MPX4-CC显示,1234为共阴端,其实物图如图2-5所示。

图2-5 74SE-MPX4-CC实物图

(6)本设计采用L ED动态扫描显示,原理如下:

(1)P23、P22、P21、P20输出高电平,关闭所有数码管;

(2)显示个位——把要显示的数据送到P10~P17,P23送低电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P23送高电平;

(3)显示十位——把要显示的数据送到P10~P17,P22送低电平,延时5豪秒(时间

不能太长,否则数码管会闪烁),P22送高电平;

(4)显示百位——把要显示的数据送到P10~P17,P21送低电平,延时5豪秒(时间不能太长,否则数码管会闪烁),P21送高电平;

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

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

3.硬件电路设计

3.1 气压传感电路

数据采集模块由压力传感器MPX4115构成,电路原理图如图3-1所示。

图3-1 MPX4115原理图

3.2单片机控制电路

单片机控制模块采用AT89C51单片机,控制原理图如图3-2所示。

图3-2 单片机控制原理图

3.3 A/D转换模块

A/D转换模块采用A/D转换芯片ADC0832,原理图如图3-3所示。

图3-3 ADC0832原理图

3.4显示模块

本设计采用四位一体共阴二极管显示器74SE-MPX4-CC显示,原理图如图3-4所示。

图3-4 74SE-MPX4-CC原理图

3.5系统总体电路图

本系统对应的总体电路原理图如图3-5所示。

图3-5 系统总体原理图

4.软件设计

4.1用C语言开发单片机的优势

C语言是一种编译型的结构化程序设计语言,具有简单的语法结构和强大的处理功能,具有运行速度快、编译效率高,移植性好和可读性强等多种优点,可以实现对系统便件的直接操作。用C语言来编写目标系统软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而开发出大规模、高性能的应用系统[11]。其优势如下:

(1)可以大幅度加快开发进度,程序量越大,用C语言就越有优势。

(2)无需精通单片机指令集和具体的硬件,也能够编出符合硬件实际专业水平的程序。(3)可以实现软件的结构化编程,使得软件的逻辑结构变得清晰、有条理、便于开发小组计划任务、分工合作。源程序的可读性和可维护性都很好。

(4)省去了人工分配单片机资源的工作,在汇编语言中要为每一个子程序分配单片机的资源。在使用C语言后,只要在代码中申明一下变量的类型,编译器就会自动分配相关资源,根本不需要人工干预,从而有效地避免了人工分配单片机资源的差错。(5)汇编语言的可移植性很差,而C语言只要将一些与硬件相关的代码作适当的修改,就可以方便地移植到其它种类的单片机上。

(6)C语言提供auto、static、flash等存储类型,针对单片机的程序存储空间、数据存储空间及EEPROM空间自动为变量合理地分配空间,而且C语言提供复杂的数据类型,极大地增强了程序处理能力和灵活性。C编译器能够自动实现中断服务程序的现场保护和恢复,并且提供常用的标准函数库,供用户使用。并且C编译器能自动生成一些硬件的初始化代码。

(7)对于一些复杂系统的开发,可以通过移植(或C编译器提供)的实时操作系统来实现。

正由于C语言在系统开发中的优势,这次设计的所有程序设计都将采用C语言编写。

4.2程序流程图

系统总流程图

A/D转换程序流程图

显示流程图主函数流程图

4.3 系统程序

4.3.1 源程序代码

#include

#include "intrins.h"

#define uint unsigned int

#define uchar unsigned char

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 signal080307208

unsigned char

dispbitcode[8]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7 f};

unsigned char

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

uint temp;

uchar getdata;

void delay_1ms(void)

{

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();

}

}

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_();

_nop_();

ADCLK=1;

ADDI=channel&0x1;

_nop_();

_nop_();

ADCLK=0;

_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; }

相关文档
最新文档