基于51单片机控制的数字气压计设计与实现

发布者:AdventureSeeker最新更新时间:2011-11-05 关键字:51单片机  数字气压计 手机看文章 扫描二维码
随时随地手机看文章

    1 引言

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

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

    2 气压计的结构

本文研究的气压计结构如图1所示。其中气压传感器用来将被测气压转换为电压信号;用V/F转换器则可把气压传感器输出的电压信号转换成具有一定频率的脉冲信号;以便用单片机接收该脉冲信号,并根据单位时间内得到的脉冲数,依据电压与频率的线性关系式计算出所对应的气压值,最后在单片机控制下由LED显示出来。

本气压计能够在气压传感器的线性范围内准确测量相应气压值。需要说明的是,其测量值是绝对气压值。本文研究的气压计的技术指标如下:

●测量范围:300hPa~1050hPa;

●测量精度:0.1%FS(20℃);

●显示精度:0.1%,由4个8段LED显示实现;

●工作温度范围:0~85℃;

●电源电压:9V。

    3 系统实现

在系统构建过程中,需要考虑稳定性、复杂程度、造价和调试的难易程度等因素。图1所示框图中的每一部分就是一个单元电路,可完成各自的功能。模块之间没有复杂的信号传输,且干扰很少,因而系统整体比较稳定。

3.1 气压传感器

气压传感器在气压计中占据核心位置。设计时可根据测量精度、测量范围、温度补偿、测量绝对气压值等几个性能指标来选取气压传感器。

由于该气压计显示的是绝对气压值,因而需要选取测量绝对气压值的气压传感器。同时为了简化电路,提高稳定性和抗干扰能力,要求该气压传感器应带有温度补偿。

为此,笔者选用Motorola的MAX4100A气压传感器来测量绝对气压值。该传感器的温度补偿范围为-40~+125℃;压力范围为20kPa~1050kPa;输出电压信号(Vs=5.0V)范围为0.3~4.65V;测量精度为0.1%VFSS,同时在20kPa~1050kPa时具有良好的线性,具体输出关系如下:

Vout=Vs(0.01059 P-0.1528)±Error

式中,Vs是工作电压, P是大气压值,Vout为输出电压。

3.2 V/F变换

V/F器件的作用是将输入电压的幅值转换成频率与输入电压幅值成正比的脉冲串。虽然V/F本身还不能算做量化器,但加上定时器与计数器以后也可以实现A/D转换。它的突出特点就是把模拟电压转换成抗干扰能力强,可远距离传送并能直接输入计算机的脉冲串,从而通过测量V/F的输出频率来实现A/D转换功能。

考虑到外围电路实现的难易程度和相应的性能指标,笔者选用了LM331电压/频率转换芯片。该器件使用了温度补偿能隙基准电路,因而具有极佳的温度稳定性,最大温漂为50ppm/℃,同时该器件的脉冲输出可与任何逻辑形式兼容;LM331可单、双电源供电,电压范围为5~40V;满量程范围1Hz~100kHz;最大非线性误差为0.01%。图2所示是该系统中LM331的外围电路。在该电路中,基于LM331的压频转换关系为:

fo=K Vi

其中,K=Rs/(2.09 Rt Ct RL)?, Rs=Rs1+Rs2

实际上,电路中的Rs主要用于调节电路的转换增益?Rt, Ct,RL的典型值分别为6.8kΩ、0.01pF和100kΩ,K值则可由设计者自己决定。该设计中,取K=2000,Rs=28.424 kΩ?主要是考虑到单片机部分使用测频率法来测fo能够保证频率信号的测量精度。由于Rs、RL、Rt和电容Ct会直接影响fo的转换结果。因此,对这些元件的参数有一定的要求,设计时应根据转换精度适当选择。电容CL对转换结果虽然没有直接影响,但是应选择漏电流小的电容器。用电阻R1, 电容C1组成低通滤波器,可减少输入电压中的干扰脉冲,提高转换精度。[page]

3.3 单片机

本气压计实现方案需使用单片机的P1口和P3口的一部分以及一个中断源、一个定时器和一个计数器。因此,笔者选用了ATMEL的AT89C2051单片机,该器件与89C51兼容,具有2kB的可重复编程闪存,2.7V~6V的工作电压范围,128Byte的内部RAM以及两个I/O口(P1,P3)、2个16位的计数器/定时器和6个中断源,并可直接驱动LED输出,同时带有可编程的串行通讯口。另外,该单片机还具有体积小,价格低等特点。

3.4 LED显示

单个LED是由7段发光二极管构成的显示单元。有10个引脚,对应于7个段、一个小数点和两个公共端。在显示电路中,这些发光二极管有两种接法:共阳极接法和共阴极接法。本设计中需要用4个LED组成显示单元,并采用动态显示方式。由于使用4个单个LED进行显示的连线比较复杂,同时单片机的端口驱动能力也难以保证,而需要加入专门的驱动芯片。所以,笔者采用了4个LED连体的、内部已将其相应段接好的共阳极LED,它具有12个引脚,含7个段和4个公共端,为提高数码管的亮度,可在位选线上加入一个三极管驱动电路。

由AT89C2051控制的显示电路如图3所示。该显示电路需要选取合适的电阻R和Ra,才能保证LED的亮度,过大或者过小都无法让LED正常显示。设计时取R为4.7kΩ?Ra为510Ω比较理想。若考虑印制板布线的方便,可以采用贴片电阻和排阻来节省空间。另外,也可以用74LS244和74LS06构成驱动显示电路,但这样同样要加限流电阻。因为74LS06是开漏器件,需要在输出处加上拉电阻。

4 软件实现

通过以上设计,便可通过fo来计算P的大小以得到实时的气压值。硬件电路设计完成之后,可使用AEDK5196PH仿真器的仿真环境进行仿真,并可用C51语言来编写处理程序。其基本程序流程如图4所示。

程序设定:T0为定时器,基本的定时时基为50ms。T1为计数器,运用内部中断0可保证T0定时满500 ms后就读取此时计数器的值,以计算气压值。如使T1、T0均工作于方式1,并在P1口送字型码,同时可用P3.0~P3.3做位选线,那么,其相应的函数如下:

(1)定时器T0中断函数:

void timer0(void) interrupt 1 using 1

{uint x, y;

uint count_ pluse;

ET0=0; //关闭T/C0中断

Tcount++; //中断次数

if?Tcount == 10){

TR1=0; //停止计数器计数

Tcount=0;

x=TH1;

y=TL1;

count_pulse=(x*256+y)*2;

ph=(uint)(10 * ((float)(count pulse+1520)/105.9? ?? //计算气压值

TH1 = 0x00;  //重设计数初值

TL1=0x00;

}

TH0 = -50000/256; //重设50ms初值

TL0 = -50000%256;

if(TL0!= 0) TH0--;

ET0=1;

TR1=1;

return;

}

[page]

该中断函数主要用于完成脉冲的读取和气压值的计算。ph是个全局变量,可用来保存气压值。

(2)在显示函数里,将气压值先按位进行分离并保存到数组,然后送段码和相应位选就可以显示出相应的气压值了。具体程序如下:

void display(uint ph_in)

{ uchar i=0;

uchar j=0;

uchar select_bit=0; //位选

do {

cur_buf[i]=ph_in%10;

i++;

j=i;

}while(ph_in=ph_in/10);? //当高位为零时?结束循环

i=0;

select_bit=0xfe;

do

{ P1=tab[*p];

P3=select_bit;

dl_ms();?

select_bit=(select bit<<1)+1;

//从最右边一位开始显示,循环左移

p++;

i++;

}while(i<j);

p=cur_buf; //指针归位

return;}

这样,在主程序中,只要在程序第一次运行时进行初始化,然后再循环调用显示函数即可实现实时显示功能。

5 结束语

笔者曾用纯硬件电路设计过气压计。实践表明,由于受温度的影响及硬件参数的限制,实时显示时稳定性较差,并且精确度不高。而改用V/F变换信号及编程的方法实现该测量则完全克服了上述缺点。结果表明:该方法具有精度高、稳定性好、功能易于扩展等优点,可为仪器及电子产品设计提供一种新的思路。

 

 

关键字:51单片机  数字气压计 引用地址:基于51单片机控制的数字气压计设计与实现

上一篇:51单片机与ARINC429航空总线接口设计
下一篇:用C51单片机设计物体分级设备的测量光幕

推荐阅读最新更新时间:2024-03-16 12:45

51单片机教程:单片机的特殊功能寄存器
我们已知单片机的内部有ROM、有RAM、有并行I/O口,那么,除了这些东西之外,单片机内部究竟还有些什么,这些个零碎的东西怎么连在一起的,让我们来对单片机内部的寄存器作一个完整的功能分析吧! 下图中我们能看出,在51单片机内部有一个CPU用来运算、控制,有四个并行I/O口,分别是P0、P1、P2、P3,有ROM,用来存放程序,有RAM,用来存放中间结果,此外还有定时/计数器,串行I/O口,中断系统,以及一个内部的时钟电路。在一个51单片机的内部包含了这么多的东西。 单片机内部结构图 对上面的图进行进一步的分析,我们已知,对并行I/O口的读写只要将数据送入到对应I/O口的锁存器就能了,那么对于定时/计数器,串行I/O口等怎么用
[单片机]
<font color='red'>51单片机</font>教程:单片机的特殊功能寄存器
51单片机(AT89C52)D/A转换
#include reg52.h #define uchar unsigned char #define uint unsigned int sbit cs=P3^0; sbit wr=P3^1; void delayms(uint x) { uint y,z; for(y=x;y 0;y--) for(z=110;z 0;z--); } void main() { uchar temp; cs=0; wr=0; while(1) { P2=temp; delayms(25); temp++; } }
[单片机]
<font color='red'>51单片机</font>(AT89C52)D/A转换
8051单片机模块化编程技巧
  程序设计就是用计算机所能接受的语言把解决问题的步骤描述出来,也就是把计算机指令或语句组成一个有序的集合。一个好的应用程序不仅是执行效率高,而且还要结构清晰、便于调试。所以人们都采用结构化程序设计方法来编制应用程序。对于每一个初学者来说更应该养成习惯,从简单的程序编制开始就采用这种模块化结构。   目前在8051 单片机应用开发中主要有两种编程语言:汇编语言和C51 语言。C51 语言是一种结构化的编程语言,采用C51 编写的应用程序结构清晰、模块化程度高、可读性强、并容易移植。但C51 语言也有缺点,就是编译后生成的目标代码空间要比汇编的大。   而且目前单片机的教材还是侧重于汇编语言。因此学习用单片机汇编语言程序进行结构化
[单片机]
80<font color='red'>51单片机</font>模块化编程技巧
51单片机学习笔记【五】——1602液晶屏
一.1602液晶屏基础 1.LCD1602简介 1602液晶也叫1602字符型液晶,它是一种专门用来显示字母、数字、符号的点阵型液晶模块。它是由若干个5x7或者5x11的点阵字符位组成,每个点阵字符位都可以用显示一个字符,每位之间有一个点距的间隔,每行之间也有间隔,起到了字符间距和行间距的作用,正因为如此,所以它不能很好的显示图片。本次使用型号为SMC1602A LCM的液晶屏。 2.LCD1602接口信号说明 3.控制接口说明 4.指令说明 初始化过程 第一步:写指令38H,显示模式设置; 第二步:写指令08H,显示关闭; 第三步;写指令01H,显示清屏; 第四步:写指令06H,显示光标移动设置
[单片机]
<font color='red'>51单片机</font>学习笔记【五】——1602液晶屏
51单片机学习:矩阵按键实验
实验名称:矩阵按键实验 接线说明: 实验现象:下载程序后,按下“矩阵按键”模块中S1-S16键,对应数码管最左边显示0-F 注意事项: ***************************************************************************************/ #include reg52.h typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; #define KEY_MATRIX_PORT P1 //使用宏定义矩阵按键控制口 #define SMG_A_DP_PORT P0 //使用宏定义数
[单片机]
LCD12864驱动程序-51单片机
/*************************************************************/ /* */ /* Copyright (c) 2012, pcwebmaster */ /* All rights reserved. */ /* */ /* Email:pcwebmaste@163.com */ /*
[单片机]
51单片机数字钟温度计的编程实例
#include "reg51.h" char disp ={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x40}; char disp_dot ={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef,0xc0}; sbit DQ = P1^3; //定义通信端口 //晶振12MHz void delay_18B20(unsigned int i) { while(i--); } //初始化函数 Init_DS18B20(void) { unsigned char x=0; DQ = 1; //DQ复
[模拟电子]
<font color='red'>51单片机</font><font color='red'>数字</font>钟温度计的编程实例
基于51单片机的调光控制器设计
1 调光控制器设计 在日常生活中,我们常常需要对灯光的亮度进行调节。本调光控制器通过单片机控制双向可控硅的导通来实现白炽灯(纯阻负载)亮度的调整。双向可控硅的特点是导通后即使触发信号去掉,它仍将保持导通;当负载电流为零(交流电压过零点)时,它会自动关断。所以需要在交流电的每个半波期间都要送出触发信号,触发信号的送出时间就决定了灯泡的亮度。 调光的实现方式就是在过零点后一段时间才触发双向可控硅开关导通,这段时间越长,可控硅导通的时间越短,灯的亮度就越低;反之,灯就越亮。 这就要求要提取出交流电压的过零点,并以此为基础,确定触发信号的送出时间,达到调光的目的。 1.1 硬件部分 本调光控制器的框图如下: 控
[单片机]
基于<font color='red'>51单片机</font>的调光控制器设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved