基于单片机电子称MPX4115课程设计.docx

上传人:b****0 文档编号:25914841 上传时间:2023-06-16 格式:DOCX 页数:21 大小:336.44KB
下载 相关 举报
基于单片机电子称MPX4115课程设计.docx_第1页
第1页 / 共21页
基于单片机电子称MPX4115课程设计.docx_第2页
第2页 / 共21页
基于单片机电子称MPX4115课程设计.docx_第3页
第3页 / 共21页
基于单片机电子称MPX4115课程设计.docx_第4页
第4页 / 共21页
基于单片机电子称MPX4115课程设计.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

基于单片机电子称MPX4115课程设计.docx

《基于单片机电子称MPX4115课程设计.docx》由会员分享,可在线阅读,更多相关《基于单片机电子称MPX4115课程设计.docx(21页珍藏版)》请在冰豆网上搜索。

基于单片机电子称MPX4115课程设计.docx

基于单片机电子称MPX4115课程设计

MPX4115课程

系别:

电子信息工程系

专业名称:

计算机控制技术

指导老师:

刘德春

学号:

20113043

姓名:

翟华

完成时间:

2013/5/12

 

一、设计思路

利用压力传感器采集因压力变化而产生的电压信号,然后经模数转换器转换成数字信号最后把数字信号送入单片机。

单片机经过处理后得出当前气压值,然后在LCD上显示。

主要技术指标为:

15-115kpa,分度值为0.1kpa.

二、系统方案论证与选型

系统由控制器,测量,数模转换和显示4部分组成。

系统设计方框图如图1所示

LCD显示

单片机AT89C51处理

模数转换器

压力传感器

图1

2.1控制器部分

测量部分是利用传感器检测压力信号,得到微弱的电信号(本设计为电压信号),而后经处理电路(如滤波电路,差动放大电路,)处理后,送单片机中的A/D转换器,将模拟量转化为数字量输出,控制器接受来自A/D转换器输出的数字信号,经过复杂的运算,将数宁信号转换为实际的大气压强,并将其送到显示单元中。

本实验选用89C51单片机,该单片机的参数是:

主要包括具有64KB寻址空间,4KB程

序存储单元,RAM(256个字节);2个定时器,2个中断口,1个UARST串口,外部晶振12M,机器周期1M,程序指令周期1个机器周期以上,即1S内程序指令执行调试小于1M,5V供电,IO口除P0需外接电阻外,其它都可直接驱动电平输出,但是电流驱动能力小于10mA,因此驱动10mA以上器件,需外接三极管或者MOS管驱动。

该单片机的特点是:

①优异的性价比

②集成度高,体积小,有很高的可靠性

图2

③控制功能强扩展性能好,非常容易构成各种应用系统。

电路如图2:

2.2数据采集部分

2.2.1.数据采集模块的芯片选择

气压传感器对于系统至关重要,需要综合实际的需求和各类气压传感器的性能参数加以选择。

一般要选用有温度补偿作用的气压传感器,因为温度补偿特性可以克服半导体压力传感器件存在的温度漂移问题。

绝对气压值对应的既是实际的气压值,显然本设计要实现的数字气压计需要能测量绝对气压值的气压传感器。

本设计要实现的数字气压计显示的是绝对气

压值,同时为了简化电路,提高稳定性和抗

干扰能力,要求使用具有温度补偿能力的气

压传感器。

经过综合考虑,本设计选用美国

摩托罗拉公司的集成压力传感器。

MPX4115可以产生与所加气压呈线性

关系高精度模拟输出电压。

2.2.2.数据采集模块的原理图

数据采集模块由气压传感器MPX4115

构成,采集的是大气压值。

其中1脚是

输出信号端,输出的是与气压值相对

应的模拟电压信号。

数据采集模块的

图3

原理如图3所示。

2.2.3气压传感器MPX4115的原理

MPX4115系列压电电阻传感器是一个硅压力传感器。

这个传感器结合了高级的微电机技术,薄膜镀金属。

还能为高水准模拟输出信号提供一个均衡压力。

在0℃-85℃的温度下误差不超过1.5%温度补偿是-40℃-125℃。

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

2.3数据转换模块

2.3.1模数转换芯片选择图4

气压传感器MPX4115输出的是模拟电压,因此,必须进行模拟到数字的转换才能交由单片处理。

关于A/D转换,本实验采用一种电压频率转换电路来实现模拟电压数字化的处理。

针对电路的实际需求,并考虑到外围电路实现的难易程度和相应的性能指标,选用芯片LTC1297来实现A/D转换。

2.3.2数据转换电路部分原理图

LTC1297是一款高精度电压频率转换芯片,是一款集成有一个12位,带有开关电容的逐次逼近式的A/D转换器;一个在(+)输入端具有“采样-保持”功能的差分输入端口;以及一个串行I/O端口。

LTC1297在每次转换工作之间都会自动掉电处于休眠状态,以将所消耗的电流减少到5uA(标准情况下)。

LTC1297能够将所进行数字化转换后的信号以60KHz的速率输出。

并且因其优秀的交流特性,它也能作为DSP来使用。

内部的串行口可以在不借助任何外围硬件的情况下同大多数MPU串口和所有MPU并口进行通信,这样的通信通过三线形式来实现。

因为他们的高精度,便捷的小巧尺寸,该款元件能很好地适应各类数模转换环境,尤其对于要求使用最少的互连数量以及最小的功耗的情况。

数据转换模块原理图如图5所示

LTC1297各引脚说明:

图5

引脚1为片选输入:

该引脚上的逻辑低电平将使能LTC芯片,该引脚上的高电平将使芯片处于掉电状态。

引脚2,3模拟输入端:

输入必须是无噪音的(相对于GND)。

引脚4GND模拟地:

GND必须直接连接到模拟地。

引脚5参考电压输入端:

参考输入定义了A/D的跨度,并且它必须相对于GND而言没有噪音干扰。

引脚6数字信号输出端:

A/D转换结果通过该引脚输出。

引脚7转换时钟:

该时钟同步与串行数据传输。

引脚8反向供电端:

该电源必须没有噪声和纹波,这一点通过直接连接旁路电容到模拟地来实现。

2.4数据处理模块

2.4.1数据处理芯片的选择

对于LTC1297输出的频率信号要经过单片机的数

据处理,通过频率与气压之间的关系计算出气压值。

AT89C51单片机最为核心的部分是中央处理器CPU,

它由运算器和控制逻辑构成,其中包括若干特殊功能

寄存器。

AT89C51是一款低电压,高性能CMOS8位单片

机,片内含4kbytes的可反复擦写的只读程序存储器

(PEROM)和128byte的随机存取数据存储器(RAM),

器件用ATMEL公司的高密度、非易失性存储技术生产,

兼容标准MCS-51指令系统,片内置通用8位中央处理

器(CPU)和Flash存储单元,功能强大AT89C51单

片机可为您提供许多高性价比的应用场合,可灵活

应用于各种控制领域。

本课题中选用AT89C51单片

机来实现.

2.4.2AT89C51引脚及功能

图6

AT89C51引脚如图5

P0口:

P0口是一组8位漏极开路型双向

I/O口,也即地址/数据总线复用口。

作为输出口用时,每位能驱动8TTL逻辑门电路,对端口写“1”可作为高阻抗输入端用。

在访问外部数据存储器或程序存器时,这组口线分时转换地址(低8位)和数据总线复用,在访问期间激活内部上拉电阻。

在Flash编程时,P0口接收指令字节,而在程序校验时,输出指令字节,校验时,要求外接上拉电阻。

P1口:

P1是一个带内部上拉电阻的8位双向I/O口,P1的输出缓冲级可驱动4个TTL逻辑门电路。

对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口。

作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流(TTL)。

Flash编程和程序校验期间,P1接收低8位地址。

P2口:

P2是一个带有内部上拉电阻的8位双向I/O口,P2的输出缓冲级可驱动4个TTL逻辑门电路。

对端口写“1”,通过内部的上拉电阻把端口拉到高电平,此时可作输入口,作输入口使用时,因为内部存在上拉电阻,某个引脚被外部信号拉低时会输出一个电流。

在访问外部程序存储器或16位地址的外部数据存储器(例如执行MOVX@DPTR指令)时P2口送出高8位地址数据。

在访问8位地址的外部数据存储器(如执行MOVX@RI指令)时,P2口线上的内容(也即特殊功能寄存器区R2寄存器的内容),在整个访问期间不改变。

Flash编程或校验时,P2亦接收高位地址和其它控制信号。

P3口:

P3口是一组带有内部上拉电阻的8位双向I/O口。

P3口输出缓冲级可驱动4TTL

逻辑门电路。

对P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。

作输入端时,被外部拉低的P3口将用上拉电阻输出电流。

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

表2P3口的第二功能

2.5显示模块及芯片

选择LCD12232作为显示器。

LCD12232的参数是:

VDD:

逻辑电源正

GND(VSS):

逻辑电源地

VO(VEE):

LCD驱动电源

RESET:

复位端,对于68系列MPU:

上升沿(L-H)复位,且复位后电平须保持为高电(H);

对于80系列MPU:

下降沿(H-L)复位,且复位后电平须保持为低电平(L)。

E1:

读写使能。

对于68系列MPU,连接使能信号引脚,高电平有效;

对于80系列MPU,连接/RD引脚,低电平有效。

E2:

同E1引脚。

R/W:

读写选择,对于68系列MPU,高电平时读数据,低电平时写数据;

对于80系列MPU,低电平时允许数据传输,上升沿时锁定数据。

A0:

数据/指令选择高电平:

数据D0-D7将送入显示RAM;

低电平:

数据D0-D7将送入指令执行器执行。

D0-D7:

数据输入输出引脚。

BL+/BL-:

LED背光电源。

三、硬件设计

3.1总体规划

该系统采用压力传感器进行测量,得出模拟信号;送入LTC模数转换器中进行处理,然后送入单片机进行数据处理,最后由LCD显示出来。

由控制器部分、测量部分、数据显示部分和模数转换部分组成。

3.2主控制器电路

选择89C51单片机作为主控制器。

连接如图6,

P0端口接LCD显示器的D0-D7脚,P2.0接LCD

的A0口,P2.1接LCD的E1端口,P2.2接

LCD的E2口,P1.0接LTC的片选信号口,P1.1

接LTC的时钟信号口,P1.2接LTC的输出口。

3.3模数转换器

LTC1297的参数:

输入电压VCC-GND:

12v

电压模拟及参考输入:

-0.3v到VCC+0.3v

数字输入:

-0.3v到12v

数字输出:

-0.3v到VCC+0.3v

芯片保存温度:

-65℃到150℃

图7

引脚焊接温度(10秒焊接时间):

300℃

对于LTC1297,在

变位低后,8051代码中需要

加入四个空指令,这么做是为了能让LTC1297从掉电状态中醒来。

LTC1297的取数据程序:

uintReadADC()

{

uinti,dat=0;

ADC_CS=0;

ADC_CLK=0;_nop_();_nop_();_nop_();_nop_();

ADC_CLK=1;_nop_();_nop_();

ADC_CLK=0;_nop_();_nop_();

for(i=0;i<12;i++)

{

ADC_CLK=1;_nop_();_nop_();

ADC_CLK=0;_nop_();_nop_();

dat=(dat<<1)|ADC_DIO;

}

ADC_CS=1;

returndat;

}

3.4数据处理

因为1.电压为0时,对应模数转换后为0;2.电压为5v时,对应模数转换为2

=4096.

所以1.当气压传感器的值为15Kpa时,输出电压为0.267445v,此时对应模数转换为218.7264;2.当气压传感器的值为115Kpa时,输出电压为4.7646v,此时对应的模数转换为3903.16032.

综上所述:

要使LCD上显示的和气压传感器测出来的值相同,则必须把经过模数转换后的数进行处理,得到公式:

A=(ReadADC()-404)/3.68+200;

四、软件设计

4.1系统应用程序组成

本设计采用C语言编程,编译环境为keilUV4。

软件主要两个方面:

一是初始化系统;二是数据采集、数据处理并进行显示。

这两个方面的操作分别在主程序中来进行。

程序采用模块化的结构,这样程序结构清楚,易编程和易读性好,也便于调试和修改。

程序结构如图7所示

初始化

延时程序

开始

主程序

图7

Lcd清屏

写指令

写数据

A/D转换模块

数据处理模块

显示模块

初始化模块

数据处理

A/D转换

Lcd初始化

显示

4.2主程序流程图如图8为:

图8

附录1

unsignedchari;

LCDcmd(0xB8|Page);//设置主控制器页地址

LCDcmd(0x00);//设置主控制器列地址

for(i=0;i<61;i++){

LCDdata(0,0x00);

}

for(i=0;i<61;i++){

LCDdata(1,0x00);

}

}

/*LCD初始化*/

voidlcdini(){

LCDcmd(0xE2);//复位

LCDcmd(0xAE);//关显示

LCDcmd(0xA4);//正常驱动模式

LCDcmd(0xA9);//占空比为1/32(即32行液晶显示驱动)

LCDcmd(0xA1);//设定列驱动与液晶列数据口连接方式

LCDcmd(0xEE);//正常读写模式

clrscr(0);//擦除0页

clrscr

(1);//擦除1页

clrscr

(2);//擦除2页

clrscr(3);//擦除3页

}

/*写LCD字符串*/

uintReadADC()

{

uinti,dat=0;

ADC_CS=0;

ADC_CLK=0;_nop_();_nop_();_nop_();_nop_();

ADC_CLK=1;_nop_();_nop_();

ADC_CLK=0;_nop_();_nop_();

for(i=0;i<12;i++)

{

ADC_CLK=1;_nop_();_nop_();

ADC_CLK=0;_nop_();_nop_();

dat=(dat<<1)|ADC_DIO;

}

#include//调用头文件

#include

#include"font.h";//调用字库文件

sfrDATAport=0x80;//定义LCD12232数据口

sbitA0=P2^0;//写(数据/指令)(1/0)选择

sbitE1=P2^1;//LCD左边使能

sbitE2=P2^2;//LCD右边使能

sbitRW=P2^3;//(读/写)(1/0)状态选择

sbitADC_CS=P1^0;

sbitADC_CLK=P1^1;

sbitADC_DIO=P1^2;

voiddelay(ucharx){

unsignedchari;

while(x--)

for(i=65530;i>0;i--);

}

/*写指令*/

voidLCDcmd(uchartemp){

delay

(2);

E1=0;//禁止控制器

E2=0;

A0=0;//写指令模式

RW=0;//写使能

E1=1;//控制器使能

E2=1;

DATAport=temp;//写指令

E1=0;//写完后,禁止控制器

E2=0;

}

/*写数据*/

voidLCDdata(bitlcde,uchartemp){

delay

(2);

E1=0;//禁止控制器

E2=0;

LCDcmd(0xAF);//开显示

A0=1;//写数据模式

RW=0;//写使能

E1=~lcde;//(lcde=0/1)(左/右)控制器使能

E2=lcde;

DATAport=temp;//写数据

E1=0;//写完后,禁止主控制器

E2=0;

}

/*LCD清屏*/

voidclrscr(ucharPage){

for(i=0;i<8;i++)LCDdata(0,tab1[a%10][i*2+j%2]);

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

LCDdata(0,tab1[11][i*2+j%2]);//k

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

LCDdata(0,tab1[12][i*2+j%2]);//p

for(i=0;i<6;i++)

LCDdata(0,tab1[13][i*2+j%2]);//a

for(i=6;i<8;i++)

LCDdata(1,tab1[13][i*2+j%2]);//a

}

}

voidmain(){

uintA=0;

delay

(1);//LCD复位前适当延时,保证LCD复位成功

lcdini();//LCD复位

while

(1){

Lcdshow1();

A=(ReadADC()-404)/3.68+200;

Lcdshow2(A);

}

}

ADC_CS=1;

returndat;

}

voidLcdshow1(){//气压

uchari,j;

for(j=0;j<2;j++){

LCDcmd(0xB8|j);//第j页显示

LCDcmd(0x00);//设置列开始地址

for(i=0;i<40;i++)//写上半部分

LCDdata(0,tab2[0][i*2+j%2]);

}

}

voidLcdshow2(a){//

uchari,j;

for(j=2;j<4;j++){

LCDcmd(0xB8|j);//第j页显示

LCDcmd(0x00);//设置列开始地址

for(i=0;i<8;i++)//写上半部分

LCDdata(0,tab1[a/1000][i*2+j%2]);

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

LCDdata(0,tab1[(a/100)%10][i*2+j%2]);

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

LCDdata(0,tab1[(a/10)%10][i*2+j%2]);

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

LCDdata(0,tab1[10][i*2+j%2]);

附录2

#defineuintunsignedint

#defineucharunsignedchar

uintcodetab1[][16]={

{0x00,0x00,0xE0,0x0F,0x10,0x10,0x08,0x20,0x08,0x20,0x10,0x10,0xE0,0x0F,0x00,0x00},/*"0",0*/

{0x00,0x00,0x10,0x20,0x10,0x20,0xF8,0x3F,0x00,0x20,0x00,0x20,0x00,0x00,0x00,0x00},/*"1",1*/

{0x00,0x00,0x70,0x30,0x08,0x28,0x08,0x24,0x08,0x22,0x88,0x21,0x70,0x30,0x00,0x00},/*"2",2*/

{0x00,0x00,0x30,0x18,0x08,0x20,0x88,0x20,0x88,0x20,0x48,0x11,0x30,0x0E,0x00,0x00},/*"3",3*/

{0x00,0x00,0x00,0x07,0xC0,0x04,0x20,0x24,0x10,0x24,0xF8,0x3F,0x00,0x24,0x00,0x00},/*"4",4*/

{0x00,0x00,0xF8,0x19,0x08,0x21,0x88,0x20,0x88,0x20,0x08,0x11,0x08,0x0E,0x00,0x00},/*"5",5*/

{0x00,0x00,0xE0,0x0F,0x10,0x11,0x88,0x20,0x88,0x20,0x18,0x11,0x00,0x0E,0x00,0x00},/*"6",6*/

{0x00,0x00,0x38,0x00,0x08,0x00,0x08,0x3F,0xC8,0x00,0x38,0x00,0x08,0x00,0x00,0x00},/*"7",7*/

{0x00,0x00,0x70,0x1C,0x88,0x22,0x08,0x21,0x08,0x21,0x88,0x22,0x70,0x1C,0x00,0x00},/*"8",8*/

{0x00,0x00,0xE0,0x00,0x10,0x31,0x08,0x22,0x08,0x22,0x10,0x11,0xE0,0x0F,0x00,0x00},/*"9",9*/

{0x00,0x00,0x00,0x30,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},/*".",10*/

{0x08,0x20,0xF8,0x3F,0x00,0x24,0x00,0x02,0x80,0x2D,0x80,0x30,0x80,0x20,0x00,0x00},/*"k",11*/

{0x80,0x80,0x80,0xFF,0x00,0xA1,0x80,0x20,0x80,0x20,0x00,0x11,0x00,0x0E,0x00,0x00},/*"p",12*/

{0x00,0x00,0x00,0x19,0x80,0x24,0x80,0x22,0x80,0x22,0x80,0x22,0x00,0x3F,0x00,0x20},/*"a",13*/

};

uintcodetab2[][16]={

{0x20,0x00,0x10,0x00,0x4C,0x00,0x47,0x00,0x54,0x00,0x54,0x00,0x54,0x00,0x54,0x00},

{0x54,0x00,0x54,0x00,0x54,0x00,0xD4,0x0F,0x04,0x30,0x04,0x40,0x00,0xF0,0x00,0x00},/*"气",0*/

{0x00,0x80,0x00,0x60,0xFE,0x1F,0x02,0x40,0x82,0x40,0x82,0x40,0x82,0x40,0x82,0x40},

{0xFA,0x7F,0x82,0x40,0x82,0x40,0x82,0x44,0x82,0x58,0x82,0x40,0x02,0x40,0x00,0x00},/*"压",1*/

{0x00,0x00,0x00,0x00,0x00,0x00,0xC0,0x30,0xC0,0x30,0x00,0x00,0x00,0x00,0x00,0x00},/*":

",2*/

}

附录3

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1