压力传感器实验单片机课设.docx
《压力传感器实验单片机课设.docx》由会员分享,可在线阅读,更多相关《压力传感器实验单片机课设.docx(30页珍藏版)》请在冰豆网上搜索。
压力传感器实验单片机课设
第1章摘要…………………………………………………………………2
第2章引言…………………………………………………………………2
第3章总体设计……………………………………………………………3
3.1理论分析………………………………………………………………3
3.2过程分析………………………………………………………………3
第4章硬件电路设计………………………………………………………4
4.1传感器电路模块………………………………………………………4
4.2传感器电路分解………………………………………………………5
4.3A/D变换电路模块………………………………………………………6
4.4AT89C51芯片介绍………………………………………………………10
4.5LCD1602液晶显示………………………………………………………11
第5章机器人脚底力传感器实验数据采集、显示及程序………………16
5.1数据采集…………………………………………………………………16
5.2程序设计………………………………………………………………17
参考文献……………………………………………………………………25
小组心得体会………………………………………………………………25
第1章摘要
1.传感器的相关背景及应用简介:
近年来,随着微型计算机的发展,传感器在人们的工作和日常生活中应用越来越普遍。
压力是工业生产过程中的重要参数之一。
压力的检测或控制是保证生产和设备安全运行必不可少的条件。
实现智能化压力检测系统对工业过程的控制具有非常重要的意义。
压力传感器是工业实践、仪器仪表控制中最为常用的一种传感器,并广泛应用于各种工业自控环境,涉及水利水电、铁路交通、生产自控、航空航天、军工、石化、油井、电力、船舶、机床、管道等众多行业。
压力测量对实时监测和安全生产具有重要的意义。
在工业生产中,为了高效、安全生产,必须有效控制生产过程中的诸如压力、流量、温度等主要参数。
由于压力控制在生产过程中起着决定性的安全作用,因此有必要准确测量压力。
本文介绍一种以AT89C51单片机为核心,用ADC0808实现压力模拟信号的AD转换,完成压力传感器实验。
简要介绍了压力传感器电路的工作原理和弱信号传感器电路以及A/D变换电路的工作原理,并详细介绍了该传感器的参数设计和制作过程,论证了其可行性,完成了整个实验对于压力的采样和显示。
与其它类型传感器相比,电阻应变式传感器有以下特点:
测量范围广,精度高,输出特性的线性好,工作性能稳定、可靠,能在恶劣的化境条件下工作。
由于应变式传感器具有以上优点,所以它在测试技术中获得十分广泛的应用。
第2章引言
电阻应变式传感器按其用途不同,可分为应变测力传感器、应变压力传感器、应变式加速度传感器等。
我们主要研究压力传感器,这种传感器主要用于对气体、液体的动态和静态的压力的测量。
如对内燃机管道和动力设备管道进出、出气孔流液的压力、发动机喷口的压力等的测量。
这种传感器主要采用膜片、薄板、筒式等组成的弹性元件。
传感器所用的应变片电阻值国内标准有:
60、120、350、和600
等各种阻值,其中以120
为最常用。
利用全桥测量原理,通过对电路输出电压和标准压强的线性关系,建立具体的数学模型,将电压量的变化改为压力的变化,即可以测出一定范围内的压力值。
其中测量电路中最主要的元器件就是电阻应变式传感器。
本设计采用全桥测量电路,使系统产生的误差更小,输出的数据更精确。
而运算放大电路的作用就是把传感器输出的微弱的模拟信号进行一定倍数的放大,以满足A/D转换器对输入信号电平的进行各种转换处理的要求。
ADC0808的A/D转换作用是把模拟信号转变成数字信号,进行模数转换,然后把数字信号输送到显示电路中去,用LCD1602液晶显示出测量结果。
第3章总体设计
3.1理论分析
该压力传感器实验,采用筒式压力传感器,输出信号通过AD转换器实现模拟到数字的转换,再经过8051芯片,在LED数码管显示所要的结果。
总的电路构建框图如下。
图3.1基于AT89C51单片机为核心压力传感器实验构建框图
3.2过程分析
该压力传感器实验,首先采用筒式压力传感器,满足由电阻变化引起的电压变化与压强变化成线性关系,当材料选定后,材料的面积成为定值,则与压力成线性关系。
输出信号经过差动放大电路,放大滤波电路,将微弱的噪声信号经过一定倍数的放大和滤波,满足ADC0809A/D转换器的要求,然后将模拟信号转化成所需的数字信号由单片机采集数字信号存储到单片机地址单元40H(ADResult),采集数据经8051单片机工程量代换处理,将结果存储到50H(整数部分)和51H(小数部分),调用LCD液晶显示程序显示采样测量值,然后再通过对结果的观察验证实验的正确性。
第4章硬件电路设计
4.1传感器电路模块
压力传感器的工作原理,本质上是惠斯通电桥,这里采用的是最常见的电阻应变片式的压力传感器。
它得到广泛应用的原因是温度特性好,减小温度变化带来的误差。
膜片上的压力使得电桥不平衡,从而产生一个差动的输出信号,这种结构的基本特性之一是它的差动输出电压U与偏置电压
U成正比关系,这种关系隐含压力测量精度直接决定偏置电源的容限值,当四个桥臂电阻达到相应的关系时,电桥输出为零,或则就有电压输出同时,它也能提供一种温度补偿最通用的方法。
本实验研究压力传感器电路如图一所示,为压力传感器的电路,其由三部分组成:
(1)电桥电路部分(含电源);
(2)差动放大电路;
(3)放大电路部分(含滤波)。
图一Proteus设计的压力传感器电路
4.2传感器电路分解:
图二应变片全桥电路
如图二示,R4、R5、R6、R7为应变片,组成应变片全桥,R2、R3分别与R4、R5并联构成温度补偿电路,RV1为电桥的的调节变阻器,保持初始状态的零输出。
图三差动放大电路
发达倍数:
图四放大滤波电路
LM324-2
(1):
LM324-2
(2):
LM324-2(3):
为延时电路
其中C1、C2、C3作用是滤波
最终放大倍数:
130倍左右
4.3A/D变换电路模块
ADC芯片型号很多,在精度、速度和价格方面千差万别、,较为常见的ADC主要有逐次逼近型、双积分型和电压—频率变换型三种。
这里我们选用逐次逼近型,即ADC0808。
它由单一+5V电源供电,片内带有锁存功能的8路模拟多路开关,可对0V—5V的输入模拟电压信号分分时进行转换,完成一次转换约需100
。
片内具有多路开关的地址译码器和锁存电路、高阻抗斩波器、稳定的比较器,256R电阻T型网络和树状电子开关以及逐次逼近寄存器。
输出具有TTL三态锁存缓冲器,可直接接到单片机数据总线上。
通过适当的外接电路,ADC0808可对0—5V的双极性模拟信号进行转换。
ADC0808是28脚双列直插式封装,引脚图如图4.2.1所示。
各引脚功能说明如下:
:
8位数字量输出引脚,由最低引脚到最高引脚。
IN0—IN7:
8路模拟量输入引脚。
:
+5V工作电压。
GND:
地。
REF(+):
参考电压正端。
REF(—):
参考电压负端。
START:
A/D转换启动信号输入端。
ALE:
地址锁存允许信号输入端。
以上两个信号用于启动A/D转换。
EOC:
转换结束信号输出引脚。
开始转换时为低电平,转换结束时为高电平。
OE:
输出允许控制端。
用以打开三态数据输出锁存器。
CLK:
时钟信号输入端。
ADDA、ADDB、ADDC:
地址输入线。
经译码后可选通IN0—IN78通道的一个通道进行转换。
图4.2.1ADC0808引脚图
实验电路及接线如下图示:
连线
连接孔1
连接孔2
1
IN0
压力传感器输出
2
AD_CS
CS2
图4.2.2接线框图
图4.2.3实验电路连线图
A/D转换器的结构及连线图如上图所示,AD0809的工作过程如下:
首先用指令选择0809的一个模拟输入通道,当执行MOVX@DPTR,A时,产生一个启动信号给START引脚送入脉冲,开始对选中通道转换。
当转换结束后发出结束信号,置EOC引脚信号为高电平,该信号可以作为中断申请信号,当读允许信号到,OE端有高电平,则可以读出转换的数字量,利用MOVXA,@DPTR把该通道转换结果读到累加器A中。
转换电压为0—5V,调节桥路中的电位器,使其输出电压为0—5V,可以在较小范围内波动,当满量程输出时对应八个1的输出,由于前边计算的电压变化和电阻变化成正比关系,而且电阻变化和应变成正比,进而得出的压力和电压是成正比的。
传感器桥路输出的电压经过比例变换后转换成二进制码的形式送入P0口。
其程序框图如下:
图五主程序流程图图六中断子程序
4.48051芯片介绍
本实验采用8051单片机,其管脚图如下:
图4.4.18051管脚图
其管脚功能如下:
1.电源
(1)VCC-芯片电源,接+5V;
(2)VSS-接地端;
2.时钟
XTAL1、XTAL2-晶体振荡电路反相输入端和输出端。
3.控制线(4根)
(1)ALE/PROG:
地址锁存允许/片内EPROM编程脉冲。
①ALE功能:
用来锁存P0口送出的低8位地址。
②PROG功能:
片内有EPROM的芯片,在EPROM编程期间,此引脚输入编程脉冲。
(2)PSEN:
外ROM读选通信号。
(3)RST/VPD:
复位/备用电源。
①RST(Reset)功能:
复位信号输入端。
②VPD功能:
在Vcc掉电情况下,接备用电源。
(4)EA/Vpp:
内外ROM选择/片内EPROM编程电源。
①EA功能:
内外ROM选择端。
②Vpp功能:
片内有EPROM的芯片,在EPROM编程期间,施加编程电源Vpp。
4.I/O线
80C51共有4个8位并行I/O端口:
P0、P1、P2、P3口,共32个引脚。
P3口还有第二功能,用于特殊信号输入输出和控制信号(属控制总线)。
4.5LCD1602液晶显示
字符型液晶显示模块是一种专门用于显示字母、数字、符号等点阵式LCD,目前常用16*1,16*2,20*2和40*2行等的模块。
1602LCD分为带背光和不带背光两种,基控制器大部分为HD44780,带背光的比不带背光的厚,是否带背光在应用中并无差别
引脚功能说明
1602LCD采用标准的14脚(无背光)或16脚(带背光)接口,各引脚接口说明如表1所示:
编号
符号
引脚说明
编号
符号
引脚说明
1
VSS
电源地
9
D2
数据
2
VDD
电源正极
10
D3
数据
3
VL
液晶显示偏压
11
D4
数据
4
RS
数据/命令选择
12
D5
数据
5
R/W
读/写选择
13
D6
数据
6
E
使能信号
14
D7
数据
7
D0
数据
15
BLA
背光源正极
8
D1
数据
16
BLK
背光源负极
表1:
引脚接口说明表
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
当RS和R/W共同为低电平时可以写入指令或者显示地址,当RS为低电平R/W为高电平时可以读忙信号,当RS为高电平R/W为低电平时可以写入数据。
第6脚:
E端为使能端,当E端由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7为8位双向数据线。
1602LCD的指令说明及时序
1602液晶模块内部的控制器共有11条控制指令,如表2所示:
序号
指令
RS
R/W
D7
D6
D5
D4
D3
D2
D1
D0
1
清显示
0
0
0
0
0
0
0
0
0
1
2
光标返回
0
0
0
0
0
0
0
0
1
*
3
置输入模式
0
0
0
0
0
0
0
1
I/D
S
4
显示开/关控制
0
0
0
0
0
0
1
D
C
B
5
光标或字符移位
0
0
0
0
0
1
S/C
R/L
*
*
6
置功能
0
0
0
0
1
DL
N
F
*
*
7
置字符发生存贮器地址
0
0
0
1
字符发生存贮器地址
8
置数据存贮器地址
0
0
1
显示数据存贮器地址
9
读忙标志或地址
0
1
BF
计数器地址
10
写数到CGRAM或DDRAM)
1
0
要写的数据内容
11
从CGRAM或DDRAM读数
1
1
读出的数据内容
1602液晶模块的读写操作、屏幕和光标的操作都是通过指令编程来实现的。
(说明:
1为高电平、0为低电平)
指令1:
清显示,指令码01H,光标复位到地址00H位置。
指令2:
光标复位,光标返回到地址00H。
指令3:
光标和显示模式设置I/D:
光标移动方向,高电平右移,低电平左移S:
屏幕上所有文字是否左移或者右移。
高电平表示有效,低电平则无效。
指令4:
显示开关控制。
D:
控制整体显示的开与关,高电平表示开显示,低电平表示关显示C:
控制光标的开与关,高电平表示有光标,低电平表示无光标B:
控制光标是否闪烁,高电平闪烁,低电平不闪烁。
指令5:
光标或显示移位S/C:
高电平时移动显示的文字,低电平时移动光标。
指令6:
功能设置命令DL:
高电平时为4位总线,低电平时为8位总线N:
低电平时为单行显示,高电平时双行显示F:
低电平时显示5x7的点阵字符,高电平时显示5x10的点阵字符。
指令7:
字符发生器RAM地址设置。
指令8:
DDRAM地址设置。
指令9:
读忙信号和光标地址BF:
为忙标志位,高电平表示忙,此时模块不能接收命令或者数据,如果为低电平表示不忙。
指令10:
写数据。
指令11:
读数据。
与HD44780相兼容的芯片时序表如下:
读状态
输入
RS=L,R/W=H,E=H
输出
D0—D7=状态字
写指令
输入
RS=L,R/W=L,D0—D7=指令码,E=高脉冲
输出
无
读数据
输入
RS=H,R/W=H,E=H
输出
D0—D7=数据
写数据
输入
RS=H,R/W=L,D0—D7=数据,E=高脉冲
输出
无
表3:
基本操作时序表
读写操作时序如图图七和图八所示:
图六读操作时序
图七写操作时序
1602LCD的RAM地址映射及标准字库表
液晶显示模块是一个慢显示器件,所以在执行每条指令之前一定要确认模块的忙标志为低电平,表示不忙,否则此指令失效。
要显示字符时要先输入显示字符地址,也就是告诉模块在哪里显示字符,图八是1602的内部显示地址。
图八1602LCD内部显示地址
例如第二行第一个字符的地址是40H,那么是否直接写入40H就可以将光标定位在第二行第一个字符的位置呢?
这样不行,因为写入显示地址时要求最高位D7恒定为高电平1所以实际写入的数据应该是01000000B(40H)+10000000B(80H)=11000000B(C0H)。
在对液晶模块的初始化中要先设置其显示模式,在液晶模块显示字符时光标是自动右移的,无需人工干预。
每次输入指令前都要判断液晶模块是否处于忙的状态。
1602液晶模块内部的字符发生存储器(CGROM)已经存储了160个不同的点阵字符图形,这些字符有:
阿拉伯数字、英文字母的大小写、常用的符号、和日文假名等,每一个字符都有一个固定的代码,比如大写的英文字母“A”的代码是01000001B(41H),显示时模块把地址41H中的点阵字符图形显示出来,我们就能看到字母“A”
1602LCD的一般初始化(复位)过程
延时15mS
写指令38H(不检测忙信号)
延时5mS
写指令38H(不检测忙信号)
延时5mS
写指令38H(不检测忙信号)
以后每次写指令、读/写数据操作均需要检测忙信号
写指令38H:
显示模式设置
写指令08H:
显示关闭
写指令01H:
显示清屏
写指令06H:
显示光标移动设置
写指令0CH:
显示开及光标设置
4.6AD0809接口电路及LCD接口电路
第5章压力传感器实验数据采集、显示及程序
5.1数据采集及显示
数据处理子程序是整个程序的核心。
主要用来调整输入值系数,使输出满足量程要求。
另外完成A/D的采样结果从十六进制数向十进制数形式转化。
系数转换在IN0输入的数最大为5V,要求压力200pa对应的是5V,将系数进行一定倍数的变换,并用小数点位置的变化体现这一过程。
数制之间的转换:
在二进制数制中,每向左移一位表示数增加两倍。
要求压力80N对应的是5V,而压力与电压的变换是线性关系,对应AD转换器的输出为八个1,当有一定的压力值输入时,对应这个关系转化成相应的二进制代码送入P0口。
然后再反过来应用这个变化关系,经最终得到的数值进行二进制到BCD码转化,然后逐位在LED数码管上显示。
数据采集用A/D0808芯片来完成,主要分为启动、读取数据、延时等待转换结束、读出转换结果、存入指定内存单元、继续转换(退出)几个步骤。
ADC0809初始化后,就具有了将某一通道输入的0~5模拟信号转换成对应的数字量00H—FFH,然后再存入存储器的指定单元中。
在控制方面有所区别。
可以采用程序查询方式,延时等待方式和中断方式。
显示子程序是字符显示,首先调用事先编好数码管显示子程序。
初始化命令,然后输出显示命令。
在显示过程中一定要调用延时子程序。
当输入通道采集了一个新的过程参数,当有压力信号输入时,调用显示子程序在数码管上显示。
5.2程序设计
课设题目:
机器人脚底力采集课程设计
ADResultEQU40H
RSBITP2.0;定义LCM的接脚RS、R/W、Enable为P2.0、P2.1、P2.2
R_WBITP2.1
ENABLEBITP2.2
DB0_DB7DATAP1;DB0-DB7的接脚为P1来控制,以方便程式的撰写与维护
ORG0000H;通知编译器下面的程式由程式记忆体
;地址1000H开始存放
AJMPSTART;跳到标记start处执行程式
ORG000BH;跳到中断服务程式
AJMPINSERS
ORG0013H
AJMPINT
ORG30H;通知编译器下面的程式由程式记忆体地址0030H开始存入。
START:
NOP
MOVTMOD,#0;初始化TO
MOVTL0,#0
MOVTH0,#0
SETBEA
SETBET0
SETBTR0
SETBEX1
SETBIT1
MOVR5,#50;设定延时次数。
MOVSP,#60H;设定MCS-51从内容资料记忆体地址61H开始存放堆栈资料。
CALLInitial;调用启动LCM的子程式
CALLCLS;调用清除显示器的子程式
MOVA,#10000000B;将二进制10000000的值放入累加器内,代表设定DDRAM的地址为00H,
;即将光标移到第一行第一个列的位置上。
CALLWrite_instruction; 调用写指令码子程式MOVDPTR,#LINE3;将第一行字串在程式记忆体中的起始地址存入DPTR
CALLSTRING;调用STRING子程式,将字串显示到LCM
MOVA,#11000010B;将二进制11000000的值放入累加器内,代表设定DDRAM的地址为40H,
;即将光标移到第二行第三个列的位置上
CALLWrite_instruction;调用写指令码子程式
MOVDPTR,#LINE4;将第二行字串在程式记忆体中的起始
:
地址存DPTR。
CALLSTRING
CALLDELAY0
CALLCLS;调用清除显示器的子程式
MOVA,#10000000B;将二进制10000000的值放入累加器内,代表设定DDRAM的地址为00H,
;即将光标移到第一行第一个列的位置上。
CALLWrite_instruction;调用写指令码子程式。
MOVDPTR,#LINE1;将第一行字串在程式记忆体中的起始地址存入DPTR
CALLSTRING;调用STRING子程式,将字串显示到LCM
MOVA,#11000010B;将二进制11000000的值放入累加器内,代表设定DDRAM的地址为40H,
;即将光标移到第二行第三个列的位置上
CALLWrite_instruction;调用写指令码子程式。
CALL AD0809Read;启动AD0809;
LOOP:
SJMPLOOP
SJMPLOOP;JNBIE1,LOOP;查询等待
;CLRIE1
;SJMPINT
LINE1:
DB"Pressure:
",00H;在LCM第一行显示字串"LCDTesting___"
LINE2:
DB"0123456789.",00H;在LCM第二行显示压力数据,保留三位小数
LINE3:
DB"WelcomeTo",00H
LINE4:
DB"LiRenCollege!
",00H;ADC0809启动程序
AD0809Read:
MOVDPTR,#8000H
MOVA,#00
MOVX@DPTR,A;起动A/D
MOVA,#40h
DJNZACC,$;延时>100us;
;工程量代换:
B存高八位,A存低八位
;程序中除以256相当于右移八位,即高八位变为整数位,低八位变为小数位
;最后结果为:
B存整数部分,A存小数部分;
DAIHUAN:
MOVB,#200
MOVA,ADResult
MULAB
MOV51H,A;小数部分
MOV50H,B;整数部分
RET
;INT1查询服务子程式
INT:
MOVDPTR,#8000H
MOVXA,@DPTR;读入结果
CALLCLS
MOVA,#10000000B;将二进制10000000的值放入累加器内,代表设定DDRAM的地址为00H,
;即将光标移到第一行第一个列的位置上。
CALLWrite_instruction;调用写指令码子程式。
MOVDPTR,#LINE1;将第一行字串在程式记忆体中的起始地址存入DPTR
CALLSTRING;调用STR