基于MPX4115的数字压力测量仪器设计_第1页
基于MPX4115的数字压力测量仪器设计_第2页
基于MPX4115的数字压力测量仪器设计_第3页
基于MPX4115的数字压力测量仪器设计_第4页
基于MPX4115的数字压力测量仪器设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南京林业大学PAGEPAGE150803071大作业说明书基于MPX4115的数字压力测量仪器设计学生姓名:xxx学生学号:08372专业:测控技术与仪器指导教师:程xx(一)系统总体设计1:设计整体思想基于MPX4115的数字气压计包括软硬件的设计与调试。软件部分通过对C语言的学习和对单片机知识的了解,根据系统的特点编写出单片机程序。硬件部分分为四大块,包括非电信号数据的采集、转换、处理以及显示:。通过对设计的了解,选择适合的器件,画出原理图。2:系统总体框图硬件部分由四部分构成,它们分别是:信息采集模块,数据转换模块,信息处理模块和数据显示模块。压力压力传感器A/D转换器电源模块单片机LED显示器(二)硬件电路设计及描述1:数字压力测量仪设计意义压力测量仪被广泛应用于国防领域、工业领域、医疗领域以及我们日常家庭生活中。其中的核心元件就是压力传感器,它在监视压力大小、控制压力变化以及物理参量的测量等方面起着重要作用。本系统设计的数字压力测量仪采用单片机控制,具有使用方便、精度高、显示简单和灵活性等优点,而且可以大幅提高被控气压的技术指标,从而能够大大提高产品的质量2:数据采集模块的芯片选择压力传感器对于系统至关重要,需要综合实际的需求和各类压力传感器的性能参数加以选择。一般要选用有温度补偿作用的压力传感器,因为温度补偿特性可以克服半导体压力传感器件存在的温度漂移问题。本设计要实现的数字气压计显示的是绝对气压值,同时为了简化电路,提高稳定性和抗干扰能力,要求使用具有温度补偿能力的压力传感器。经过综合考虑,本设计选用美国摩托罗拉公司的集成压力传感器。MPX4115可以产生高精度模拟输出电压。数据采集模块由压力传感器MPX4115构成。其中1脚是输出信号端,输出的是与气压值相对应的模拟电压信号。数据采集模块的原理如图、数据采集模块原理图MPX4115的实物图气压传感器MPX4115的原理MPX4115系列压电电阻传感器是一个硅压力传感器。这个传感器结合了高级的微电机技术,薄膜镀金属。还能为高水准模拟输出信号提供一个均衡压力。在0℃-85℃的温度下误差不超过1.5%,温度补偿3:单片机控制模块由AT89C51单片机、时钟电路、复位电路组成AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。AT89C2051是一种带2K字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除100次。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,AT89C2051是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。4:A/D转换模块ADC0832是美国国家半导体公司生产的一种8位分辨率、双通道A/D转换芯片。由于它体积小,兼容性,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。学习并使用ADC0832可是使我们了解A/D转换器的原理,有助于我们单片机技术水平的提高。8位分辨率双通道A/D转换输入输出电平与TTL/CMOS相兼容5V电源供电时输入电压在0~5V之间工作频率为250KHZ,转换时间为32μSADC0832为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置高电平禁用芯片,直接将转换后的数据进行处理就可以了。作为单通道模拟信号输入时ADC0832的输入电压是0~5V且8位分辨率时的电压精度为19.53mV。如果作为由IN+与IN-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。但值得注意的是,在进行IN+与IN-的输入时,如果IN-的电压大于IN+的电压则转换后的数据结果始终为00H。5:显示模块采用LED动态扫描显示原理如下:

(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)以此顺序循环,把它做成子程序,在主循环中调用。

现已DS8为个位来讨论,十、百、千为分别为DS7、DS6、DS5。

1、首先要了解的是此数码管为共阴极数码管,即三极管Q16、Q15、Q14、Q13导通时数码管才能点亮,亦即相应的单片机P23、P22、P21、P20为低电平。

2、动态扫描显示原理如下:

(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)以此顺序循环,把它做成子程序,在主循环中调用6:系统总体电路图(三)软件设计流程图开始系统初始化开始系统初始化数据采集处理读到的数据送LED显示结束开始初始化函数A/D转换器进行A/D转换将转换后的电压转换为压力返回系统总流程图A/D转换程序流程图开始系统初始化开始系统初始化调用压力子程序调用显示子程序调用扫描按键程序开始将压力数据写入到LED读取压力值显示压力值返回显示流程图主函数流程图主程序voidmain(void){while(1){ unsignedinttemp;floatpress; getdata=Adc0832(0); if(14<getdata<243) //当压力值介于15kpa到115kpa之间时,遵循线性变换 { intvary=getdata; //y=(115-15)/(243-13)*X+15kpa press=((10.0/23.0)*vary)+9.3; //测试时补偿值为9.3 temp=(int)(press*10); //放大10倍,便于后面的计算 dispbuf[3]=temp/1000; //取压力值百位 dispbuf[2]=(temp%1000)/100; //取压力值十位 dispbuf[1]=((temp%1000)%100)/10; //取压力值个位 dispbuf[0]=((temp%1000)%100)%10; //取压力值十分位 display(); } LED显示程序#defineuintunsignedint#defineucharunsignedchar//ADC0832的引脚sbitADCS=P2^0;//ADC0832chipseclectsbitADDI=P3^7;//ADC0832kinsbitADDO=P3^7;//ADC0832koutsbitADCLK=P3^6;//ADC0832clocksignalunsignedchardispbitcode[8]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7f};//位扫描unsignedchardispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0803072080x82,0xF8,0x80,0x90,0xff};//共阳数码管字段码unsignedchardispbuf[4];uinttemp;uchargetdata;//获取ADC转换回来的值voiddelay_1ms(void)//12mhzdelay1.01ms{unsignedcharx,y;x=3;while(x--){y=40;while(y--);}}voiddisplay(void)//数码管显示函数{chark;for(k=0;k<4;k++){P1=dispbitcode[k];P0=dispcode[dispbuf[k]];if(k==1) //加上数码管的dp小数点 P0&=0x7f;delay_1ms(); }}A/D转换程序unsignedintAdc0832(unsignedcharchannel)//AD转换,返回结果{uchari=0;ucharj;uintdat=0;ucharndat=0;if(channel==0)channel=2;if(channel==1)channel=3;ADDI=1;_nop_();_nop_();ADCS=0;//拉低CS端_nop_();_nop_();ADCLK=1;//拉高CLK端_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿1_nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=channel&0x1;_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿2_nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=(channel>>1)&0x1;_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿3ADDI=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_();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);//returnad5.源程序代码:压力测试仪系统描述;输入15--115kPA压力信号输出00h--ffh数字信号(adc0832)080307208在LED上显示实际的压力值,如果超限则报警#include<reg51.H>#include"intrins.h"#defineuintunsignedint#defineucharunsignedchar//ADC0832的引脚sbitADCS=P2^0;//ADC0832chipseclectsbitADDI=P3^7;//ADC0832kinsbitADDO=P3^7;//ADC0832koutsbitADCLK=P3^6;//ADC0832clocksignal080307208unsignedchardispbitcode[8]={0xf7,0xfb,0xfd,0xfe,0xef,0xdf,0xbf,0x7f};//位扫描unsignedchardispcode[11]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xff};//共阳数码管字段码unsignedchardispbuf[4];uinttemp;uchargetdata;//获取ADC转换回来的值voiddelay_1ms(void)//12mhzdelay1.01ms{unsignedcharx,y;x=3;while(x--){y=40;while(y--);}}voiddisplay(void)//数码管显示函数{chark;for(k=0;k<4;k++){P1=dispbitcode[k];P0=dispcode[dispbuf[k]];if(k==1) //加上数码管的dp小数点 P0&=0x7f;delay_1ms(); }}/************读ADC0832函数************///采集并返回unsignedintAdc0832(unsignedcharchannel)//AD转换,返回结果{uchari=0;ucharj;uintdat=0;ucharndat=0;if(channel==0)channel=2;if(channel==1)channel=3;ADDI=1;_nop_();_nop_();ADCS=0;//拉低CS端_nop_();_nop_();ADCLK=1;//拉高CLK端_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿1_nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=channel&0x1;_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿2_nop_();_nop_();ADCLK=1;//拉高CLK端ADDI=(channel>>1)&0x1;_nop_();_nop_();ADCLK=0;//拉低CLK端,形成下降沿3ADDI=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_(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论