1、南京林业大学0803071 1大作业说明书基于 MPX4115 的数字压力测量仪器设计学生姓名:xxx学生学号:08372专业:测控技术与仪器指导教师:程 xx南京林业大学0803071 2(一)系统总体设计1:设计整体思想基于 MPX4115 的数字气压计包括软硬件的设计与调试。软件部分通过对C 语言的学习和对单片机知识的了解,根据系统的特点编写出单片机程序。硬件部分分为四大块,包括非电信号数据的采集、转换、处理以及显示 :。通过对设计的了解,选择适合的器件,画出原理图。2:系统总体框图硬件部分由四部分构成,它们分别是:信息采集模块,数据转换模块,信息处理模块和数据显示模块。(二)硬件电路设
2、计及描述1:数字压力测量仪设计意义压力测量仪被广泛应用于国防领域、工业领域、医疗领域以及我们日常家庭生活中。其中的核心元件就是压力传感器,它在监视压力大小、控制压力变化以及物理参量的测量等方面起着重要作用。本系统设计的数字压力测量仪采用单压力传感器A/D 转换器电源模块单片机LED 显示器南京林业大学0803071 3片机控制,具有使用方便、精度高、显示简单和灵活性等优点,而且可以大幅提高被控气压的技术指标,从而能够大大提高产品的质量2:数据采集模块的芯片选择压力传感器对于系统至关重要,需要综合实际的需求和各类压力传感器的性能参数加以选择。一般要选用有温度补偿作用的压力传感器,因为温度补偿特性
3、可以克服半导体压力传感器件存在的温度漂移问题。本设计要实现的数字气压计显示的是绝对气压值,同时为了简化电路,提高稳定性和抗干扰能力,要求使用具有温度补偿能力的压力传感器。经过综合考虑,本设计选用美国摩托罗拉公司的集成压力传感器。MPX4115 可以产生高精度模拟输出电压。数据采集模块由压力传感器 MPX4115 构成。其中 1 脚是输出信号端,输出的是与气压值相对应的模拟电压信号。数据采集模块的原理如图、数据采集模块原理图 MPX4115 的实物图气压传感器 MPX4115 的原理MPX4115 系列压电电阻传感器是一个硅压力传感器。这个传感器结合了高级的微电机技术,薄膜镀金属。还能为高水准模
4、拟输出信号提供一个均衡压力。在 0-85 的温度下误差不超过 1.5%,温度补偿是-40-125。南京林业大学0803071 43:单片机控制模块 由 AT89C51 单片机、时钟电路、复位电路组成 AT89C51 是一种带 4K 字节闪烁可编程可擦除只读存储器(FPEROMFalsh Programmable and Erasable Read Only Memory)的低电压,高性能 CMOS8位微处理器,俗称单片机。AT89C2051 是一种带 2K 字节闪烁可编程可擦除只读存储器的单片机。单片机的可擦除只读存储器可以反复擦除 100 次。该器件采用ATMEL 高密度非易失存储器制造技术
5、制造,与工业标准的 MCS-51 指令集和输出管脚相兼容。由于将多功能 8 位 CPU 和闪烁存储器组合在单个芯片中,ATMEL 的AT89C51 是一种高效微控制器,AT89C2051 是它的一种精简版本。AT89C单片机为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。4:A/D 转换模块ADC0832 是美国国家半导体公司生产的一种 8 位分辨率、双通道 A/D 转换芯片。由于它体积小,兼容性,性价比高而深受单片机爱好者及企业欢迎,其目前已经有很高的普及率。学习并使用 ADC0832 可是使我们了解 A/D 转换器的原理,有助于我们单片机技术水平的提高。8 位分辨率双通道 A/D 转换
6、输入输出电平与 TTL/CMOS 相兼容 5V 电源供电时输入电压在 05V 之间工作频率为250KHZ,转换时间为 32SADC0832 为 8 位分辨率 A/D 转换芯片,其最高分辨可达 256 级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在 05V 之间。芯片转换时间仅为 32S,据有双数据输出可作为数据校验,以减少数据误差,转换速度快且稳定性能强。独立的芯片使能输入,使多器件挂接和处理器控制变的更加方便。通过 DI 数据输入端,可以轻易的实现通道功能的选择。正常情况下 ADC0832 与单片机的接口应为 4 条数据线,分别是CS、CLK、DO
7、、DI。但由于 DO 端与 DI 端在通信时并未同时有效并与单片机的接口是双向的,所以电路设计时可以将 DO 和 DI 并联在一根数据线上使用。当ADC0832 未工作时其 CS 输入端应为高电平,此时芯片禁用,CLK 和 DO/DI 的电平可任意。当要进行 A/D 转换时,须先将 CS 使能端置于低电平并且保持低电平直到转换完全结束。此时芯片开始转换工作,同时由处理器向芯片时钟输入端CLK 输入时钟脉冲,DO/DI 端则使用 DI 端输入通道功能选择的数据信号。在第1 个时钟脉冲的下沉之前 DI 端必须是高电平,表示启始信号。在第 2、3 个脉冲下沉之前 DI 端应输入 2 位数据用于选择通
8、道功能,其功能项见官方资料。 如资料 所示,当此 2 位数据为“1” 、 “0”时,只对 CH0 进行单通道转换。南京林业大学0803071 5当 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 端输出转
9、换数据最高位 DATA7,随后每一个脉冲下沉 DO 端输出下一位数据。直到第 11 个脉冲时发出最低位数据 DATA0,一个字节的数据输出完成。也正是从此位开始输出下一个相反字节的数据,即从第 11 个字节的下沉输出DATA0。随后输出 8 位数据,到第 19 个脉冲时数据输出完成,也标志着一次A/D 转换的结束。最后将 CS 置高电平禁用芯片,直接将转换后的数据进行处理就可以了。 作为单通道模拟信号输入时 ADC0832 的输入电压是 05V 且 8 位分辨率时的电压精度为 19.53mV。如果作为由 IN+与 IN-输入的输入时,可是将电压值设定在某一个较大范围之内,从而提高转换的宽度。但
10、值得注意的是,在进行 IN+与 IN-的输入时,如果 IN-的电压大于 IN+的电压则转换后的数据结果始终为00H。5:显示模块采用 LED 动态扫描显示原理如下: (1)P23、P22、P21、P20 输出高电平,关闭所有数码管; (2)显示个位把要显示的数据送到 P10P17,P23 送低电平,延时 5 豪秒(时间不能太长,否则数码管会闪烁) ,P23 送高电平; (3)显示十位把要显示的数据送到 P10P17,P22 送低电平,延时 5 豪秒(时间不能太长,否则数码管会闪烁) ,P22 送高电平; (4)显示百位把要显示的数据送到 P10P17,P21 送低电平,延时 5 豪秒(时间不能
11、太长,否则数码管会闪烁) ,P21 送高电平; (5)显示千位把要显示的数据送到 P10P17,P20 送低电平,延时 5 豪秒(时间不能太长,否则数码管会闪烁) ,P20 送高电平。 (6)以此顺序循环,把它做成子程序,在主循环中调用。 现已 DS8 为个位来讨论,十、百、千为分别为 DS7、DS6、DS5。 1、首先要了解的是此数码管为共阴极数码管,即三极管 Q16、Q15、Q14、Q13导通时数码管才能点亮,亦即相应的单片机 P23、P22、P21、P20 为低电平。 2、动态扫描显示原理如下: (1)P23、P22、P21、P20 输出高电平,关闭所有数码管; (2)显示个位把要显示的
12、数据送到 P10P17,P23 送低电平,延时 5 豪秒(时间不能太长,否则数码管会闪烁) ,P23 送高电平; (3)显示十位把要显示的数据送到 P10P17,P22 送低电平,延时 5 豪秒(时间不能太长,否则数码管会闪烁) ,P22 送高电平; (4)显示百位把要显示的数据送到 P10P17,P21 送低电平,延时 5 豪秒(时间不能太长,否则数码管会闪烁) ,P21 送高电平; (5)显示千位把要显示的数据送到 P10P17,P20 送低电平,延时 5 豪秒(时间不能太长,否则数码管会闪烁) ,P20 送高电平。 (6)以此顺序循环,把它做成子程序,在主循环中调用南京林业大学08030
13、71 66:系统总体电路图(三)软件设计流程图开始系统初始化数据采集处理读到的数据送 LED 显示结束开始初始化函数A/D 转换器进行 A/D 转换将转换后的电压转换为压力返回系统总流程图 A/D 转换程序流程图南京林业大学0803071 7开始系统初始化调用压力子程序调用显示子程序调用扫描按键程序开始将压力数据写入到 LED读取压力值显示压力值返回显示流程图 主函数流程图主程序void main(void) while(1) unsigned int temp;float press; getdata=Adc0832(0);if(141)_nop_();_nop_();ADCLK=0;/拉低 CLK 端,形成下降沿 3ADDI=1;/控制命令结束 _nop_();_nop_();dat=0;for(i=0;i=1;ADCS=1;/拉低 CS 端ADCLK=0;/拉低 CLK 端ADDO=1;/拉高数据端,回到初始状态dat #include “intrins.h“#define uint unsigned int#define uchar unsigned char