扩散硅压阻式压力传感器的压力测量讲解.docx
《扩散硅压阻式压力传感器的压力测量讲解.docx》由会员分享,可在线阅读,更多相关《扩散硅压阻式压力传感器的压力测量讲解.docx(22页珍藏版)》请在冰豆网上搜索。
扩散硅压阻式压力传感器的压力测量讲解
传感器课程设计报告
题目:
扩散硅压阻式压力传感器的差压测量
任务分配
仿真模型设计
软件设计
传感器原理
硬件设计
学号
101001010321
101001010322
101001010324
101001010325
姓名
马腾君
桑海波
沈长鑫
沈卿
专业班级:
BG1003
姓 名:
桑海波
时间:
2013.06.17~2013.06.21
指导教师:
胥飞
2013年6月21日
摘要
本文介绍一种以AT89S52单片机为核心,包括ADC0809类型转换器的扩散硅压阻式压力传感器的差压测量系统。
简要介绍了扩散硅压阻式压力传感器电路的工作原理以及A/D变换电路的工作原理,完成了整个实验对于压力的采样和显示。
与其它类型传感器相比,扩散硅压阻式电阻应变式传感器有以下特点:
测量范围广,精度高,输出特性的线性好,工作性能稳定、可靠,能在恶劣的化境条件下工作。
由于扩散硅压阻式压力传感器具有以上优点,所以它在测试技术中获得十分广泛的应用。
关键字:
扩散硅压阻式压力传感器,AT89S52单片机,ADC0809,数码管
1.引言1
1.1课题开发的背景和现状1
1.2课题开发的目的和意义1
2.设计方案2
2.1设计要求2
2.2设计思路2
3.硬件设计3
3.1电路总框图3
3.2传感器电路模块3
3.3A/D变换电路模块4
3.4八段数码管显示8
3.5AT89S52单片机9
3.6硬件实物12
4.实验数据采集及仿真13
4.1数据采集及显示13
4.2实验数据分析13
5.程序设计16
5.1编程软件调试16
5.2软件流程图17
5.3程序段18
6.结果分析19
7.参考文献20
1.引言
1.1课题开发的背景和现状
传感器是一种能够感受规定的被测量的信息,并按照一定规律转换成可用输出信号的的器件或装置,通常由敏感元件、转换元件、测量电路三部分组成。
传感器技术是现代信息技术的三大支柱之一,其应用的数量和质量已被国际社会作为为衡量一个国家智能化、数字化、网络化的重要标志。
近年来,随着国家资金投入大的增加,我国压阻式传感器有了较快的发展,某些传感器如矩形双岛膜结构的6KPa微压传感器的性能甚至优于国外,其非线性滞后、重复性均小于5×10-4FS,分辨率优于20Pa,具有较高的过压保护范围以及可靠性。
但是就总体而言,我国压阻式传感器的研究,在产量和批量封装等方面还存在不足,精度、可靠性、重复性尚待提高,离市场需求级国际水平还有较大差距。
1.2课题开发的目的和意义
日常生活和生产中,我们常常想了解温度、流量、压力、位移、角度等一系列参数,压力传感器技术在诸多领域中相对而言最为成熟。
根据工作原理的不同,压力传感器通常可以分为机械膜片、硅膜片电容性、压电性、应变性、光纤、霍尔效应、压阻式压力传感器等。
压阻式传感器又包括扩散硅型和应变片型传感器,扩散硅压阻式传感器由于具有结构简单、可微型化、输出信号大、精度高、分辨率高、频响高、低功耗、体积小、工作可靠等突出特点而在压阻式压力传感器市场中占据更大的份额。
2.设计方案
2.1设计要求
1.了解扩散硅压阻式压力传感器的工作原理;
2.掌握扩散硅压阻式压力传感器调理电路和AD转换;
3.了解非线性特性和其校正方式;
4.使用单片机读取转换值并显示。
2.2设计思路
利用全桥测量原理,通过对电路输出电压和标准压强的线性关系,建立具体的数学模型,将电压量的变化改为压力的变化,即可以测出一定范围内的压力值。
其中测量电路中最主要的元器件就是扩散硅压阻式压力传感器。
本设计采用全桥测量电路,使系统产生的误差更小,输出的数据更精确。
而运算放大电路的作用就是把传感器输出的微弱的模拟信号进行一定倍数的放大,以满足A/D转换器对输入信号电平的进行各种转换处理的要求。
ADC0809的A/D转换作用是把模拟信号转变成数字信号,进行模数转换,然后把数字信号输送到显示电路中去,由六位八段数码管显示出测量结果。
3.硬件设计
3.1电路总框图
该扩散硅压阻式压力传感器实验,采用筒式压力传感器,输出信号通过AD转换器实现模拟到数字的转换,再经过89C51芯片,在LED数码管显示所要的结果。
总的电路构建框图如下。
图3.1基于MCS-51单片机为核心压力传感器实验构建框图
表3-1元器件清单
名称
型号
数量
单片机
AT89S52
1
交流、全桥、测量、
差动、放大实验模块
1
扩散硅压阻式压力
传感器实验模块
2
模数转换
ADC0809
1
导线
若干
3.2传感器电路模块
扩散硅压阻式压力传感器在单晶硅的基片上扩散出P型或N型电阻条,接成电桥。
在压力作用下根据半导体的压阻效应,基片产生应力,电阻条的电阻率产生很大变化,引起电阻的变化,我们把这一变化引入测量电路,输出电压的变化即反映了其所受到的压力变化。
图3.2扩散硅压阻式压力传感器
扩散硅压力传感器工作原理:
被测介质的压力直接作用于传感器的膜片上(不锈钢或陶瓷),使膜片产生与介质压力成正比的微位移,使传感器的电阻值发生变化,和用电子线路检测这一变化,并转换输出一个对应于这一压力的标准测量信号。
扩散硅压力传感器内部结构简图如下:
1-低压腔2-高压腔3-硅杯4-引线5-硅膜片
图3.3结构简图
3.3A/D变换电路模块
ADC芯片型号很多,在精度、速度和价格方面千差万别、,较为常见的ADC主要有逐次逼近型、双积分型和电压—频率变换型三种。
这里我们选用逐次逼近型,即ADC0809。
它由±5V电源供电,片内带有锁存功能的8路模拟多路开关,片内具有多路开关的地址译码器和锁存电路、高阻抗斩波器、稳定的比较器,256Ω电阻T型网络和树状电子开关以及逐次逼近寄存器。
输出具有TTL三态锁存缓冲器,可直接接到单片机数据总线上。
通过适当的外接电路,ADC0809可对0V~5V的双极性模拟信号进行转换。
ADC0809是28脚双列直插式封装,引脚图如图3-3所示。
各引脚功能说明如下:
2-1~2-8:
8位数字量输出引脚,由最低引脚到最高引脚。
IN0—IN7:
8路模拟量输入引脚。
:
+5V工作电压。
GND:
地。
REF(+):
参考电压正端。
REF(—):
参考电压负端。
START:
A/D转换启动信号输入端。
ALE:
地址锁存允许信号输入端。
以上两个信号用于启动A/D转换。
EOC:
转换结束信号输出引脚。
开始转换时为低电平,转换结束时为高电平。
OE:
输出允许控制端。
用以打开三态数据输出锁存器。
CLK:
时钟信号输入端。
ADDA、ADDB、ADDC:
地址输入线。
经译码后可选通IN0—IN78个通道的一个通道进行转换。
图3.4ADC0809引脚图
ADC0809的内部逻辑结构图如下图所示:
图3.5ADC0809的内部逻辑结构图
图中多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用一个A/D转换器进行转换,这是一种经济的多路数据采集方法地址锁存与译码电路完成对ABC3个地址位进行锁存和译码,其译码输出用于通道选择,其转换结果通过三态输出锁存器存放输出,因此可以直接与系统数据总线相连,
传感器桥路输出的电压经过比例变换后转换成二进制码的形式送入P0口。
其程序框图如下:
图3.6A/D转换电路程序框图
3.4八段数码管显示
图3.7显示电路图
经过单片机P0输出的八位二进制码,变换成BCD码,在数码管上显示。
经过段选信号和位选信号的控制,最后在相应数码管上显示出相应的压力值。
程序框图如下:
3.5AT89S52单片机
本实验采用AT89S52单片机,其管脚图如下:
图3.9AT89S52管脚图
其管脚功能如下:
VCC:
AT89S52电源正端输入,接+5V。
VSS:
电源地端。
XTAL1:
单芯片系统时钟的反相放大器输入端。
XTAL2:
系统时钟的反相放大器输出端,一般在设计上只要在XTAL1和XTAL2上接上一只石英振荡晶体系统就可以动作了,此外可以在两引脚与地之间加入一20PF的小电容,可以使系统更稳定,避免噪声干扰而死机。
RESET:
AT89S52的重置引脚,高电平动作,当要对晶片重置时,只要对此引脚电平提升至高电平并保持两个机器周期以上的时间,AT89S51便能完成系统重置的各项动作,使得内部特殊功能寄存器之内容均被设成已知状态,并且至地址0000H处开始读入程序代码而执行程序。
EA/Vpp:
"EA"为英文"ExternalAccess"的缩写,表示存取外部程序代码之意,低电平动作,也就是说当此引脚接低电平后,系统会取用外部的程序代码(存于外部EPROM中)来执行程序。
因此在8031及8032中,EA引脚必须接低电平,因为其内部无程序存储器空间。
如果是使用8751内部程序空间时,此引脚要接成高电平。
此外,在将程序代码烧录至8751内部EPROM时,可以利用此引脚来输入21V的烧录高压(Vpp)。
ALE/PROG:
ALE是英文"AddressLatchEnable"的缩写,表示地址锁存器启用信号。
AT89S52可以利用这支引脚来触发外部的8位锁存器(如74LS373),将端口0的地址总线(A0~A7)锁进锁存器中,因为AT89S52是以多工的方式送出地址及数据。
平时在程序执行时ALE引脚的输出频率约是系统工作频率的1/6,因此可以用来驱动其他周边晶片的时基输入。
此外在烧录8751程序代码时,此引脚会被当成程序规划的特殊功能来使用。
PSEN:
此为"ProgramStoreEnable"的缩写,其意为程序储存启用,当8051被设成为读取外部程序代码工作模式时(EA=0),会送出此信号以便取得程序代码,通常这支脚是接到EPROM的OE脚。
AT89S52可以利用PSEN及RD引脚分别启用存在外部的RAM与EPROM,使得数据存储器与程序存储器可以合并在一起而共用64K的定址范围。
PORT0(P0.0~P0.7):
端口0是一个8位宽的开路汲极(OpenDrain)双向输出入端口,共有8个位,P0.0表示位0,P0.1表示位1,依此类推。
其他三个I/O端口(P1、P2、P3)则不具有此电路组态,而是内部有一提升电路,P0在当做I/O用时可以推动8个LS的TTL负载。
如果当EA引脚为低电平时(即取用外部程序代码或数据存储器),P0就以多工方式提供地址总线(A0~A7)及数据总线(D0~D7)。
设计者必须外加一锁存器将端口0送出的地址栓锁住成为A0~A7,再配合端口2所送出的A8~A15合成一完整的16位地址总线,而定址到64K的外部存储器空间。
PORT2(P2.0~P2.7):
端口2是具有内部提升电路的双向I/O端口,每一个引脚可以推动4个LS的TTL负载,若将端口2的输出设为高电平时,此端口便能当成输入端口来使用。
P2除了当做一般I/O端口使用外,若是在AT89S52扩充外接程序存储器或数据存储器时,也提供地址总线的高字节A8~A15,这个时候P2便不能当做I/O来使用了。
PORT1(P1.0~P1.7):
端口1也是具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个LSTTL负载,同样地若将端口1的输出设为高电平,便是由此端口来输入数据。
如果是使用8052或是8032的话,P1.0又当做定时器2的外部脉冲输入脚,而P1.1可以有T2EX功能,可以做外部中断输入的触发脚位。
PORT3(P3.0~P3.7):
端口3也具有内部提升电路的双向I/O端口,其输出缓冲器可以推动4个TTL负载,同时还多工具有其他的额外特殊功能,包括串行通信、外部中断控制、计时计数控制及外部数据存储器内容的读取或写入控制等功能。
其引脚分配如下:
P3.0:
RXD,串行通信输入。
P3.1:
TXD,串行通信输出。
P3.2:
INT0,外部中断0输入。
P3.3:
INT1,外部中断1输入。
P3.4:
T0,计时计数器0输入。
P3.5:
T1,计时计数器1输入。
P3.6:
WR:
外部数据存储器的写入信号。
P3.7:
RD,外部数据存储器的读取信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE/PROG:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA/VPP:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.6硬件实物
图3.10
图3.10是整个系统的测量部分,在此模块中有传感器和压力计组成,传感器有四个端口,分别是电源端和输出电压端VO+和VO-端。
图3.11
图3-11所示是整个系统的信号处理部分,将传感器送来的信号进行处理,利用差动放大器,把信号进行放大处理,之后信号进行调零处理,之后输出。
4.实验数据采集及仿真
4.1数据采集及显示
数据处理子程序是整个程序的核心。
主要用来调整输入值系数,使输出满足量程要求。
另外完成A/D的采样结果从十六进制数向十进制数形式转化。
系数转换在IN0输入的数最大为5V,要求压力80N对应的是5V,为十六进制向十进制转换方便,将系数进行一定倍数的变换,并用小数点位置的变化体现这一过程。
数制之间的转换:
在二进制数制中,每向左移一位表示数增加两倍。
要求压力80N对应的是5V,而压力与电压的变换是线性关系,对应AD转换器的输出为八个1,当有一定的压力值输入时,对应这个关系转化成相应的二进制代码送入P0口。
然后再反过来应用这个变化关系,经最终得到的数值进行二进制到BCD码转化,然后逐位在LED数码管上显示。
数据采集用A/D0809芯片来完成,主要分为启动、读取数据、延时等待转换结束、读出转换结果、存入指定内存单元、继续转换(退出)几个步骤。
ADC0809初始化后,就具有了将某一通道输入的0~5模拟信号转换成对应的数字量00H—FFH,然后再存入存储器的指定单元中。
在控制方面有所区别。
可以采用程序查询方式,延时等待方式和中断方式。
显示子程序是字符显示,首先调用事先编好数码管显示子程序。
初始化命令,然后输出显示命令。
在显示过程中一定要调用延时子程序。
当输入通道采集了一个新的过程参数,当有压力信号输入时,调用显示子程序在数码管上显示。
4.2实验数据分析
4.2.1数据统计
把2号模块VS端连接+5V电压。
V0+、V0-输出连到14号模块仪器输入端的VIN+、VIN-,接通电源。
b、将2号模块的P1、P2加压旋钮旋出,使压力表均指示为O。
c、放大器输出VO2和GND分别接到实验台直流电压表表的IN、COM孔。
将电压表量程选择开关拨到20V档,调节W5、W6使数显表显示为零(若调不到零请旋W3、W4改变放大倍数)。
d、旋P1旋钮加压,记下输出电压值,反之旋出P1使压力表为0,旋P2旋钮加压,记下输出电压值。
e、将实验测得数据填入表4.2.1(实际压力上限根据压力模块)。
并有matlab仿真得到的图如4.1
表4.1压力传感器输出电压与输入压力值
P(Kpa)
0
2
4
6
8
10
12
14
16
VO2(mV)
0
1.5
1.85
2.6
3.4
3.7
4.2
4.8
5.0
数码管显示
0
2
4
6
8
10
12
14
16
4.2.2数据matlab仿真分析
图4.1压力传感器电压和压力的关系
从而扩散硅压阻式压力传感器电压和压力的关系式如下:
U=0.2297K+0.3122
附:
matlab仿真时的操作
x=[0246810121416];
y=[01.51.852.63.43.74.24.85];
xmean=mean(x);ymean=mean(y);
sumx2=(x-xmean)*(x-xmean)';
sumxy=(y-ymean)*(x-xmean)';
a=sumxy/sumx2;%解出直线斜率a
b=ymean-a*xmean;%解出直线截距b
m=((a*(x(1,9))+b-(y(1,9)))/(y(1,9)));%“9”是自变量的个数,z为非线性误差(即线性度)
figure%用红色绘制拟合出的直线
px=linspace(0,16,150);%(linspace语法(从横坐标负轴起点0画到横坐标正轴终点16,150等分精度))
py=a*px+b;
plot(px,py,'r');
holdon
plot(x,y,'b*')
%holdon
%plot(x,y,'k-')
title('扩散硅压阻式压力传感器数据分析')
xlabel('压力(Kpa)');
ylabel('电压(V)');
a
b
a=
0.2297
b=
0.3122
5.程序设计
5.1编程软件调试
打开软件后:
(1)建立一个新工程 单击Project菜单,在弹出的下拉菜单中选中NewProject选项。
(2)然后选择你要保存的路径,输入工程文件的名字,比如保存到C51目录里,工程文件的名字为C51。
(3)这时会弹出一个对话框,要求你选择单片机的型号,你可以根据你使用的单片机来选择,keilc51几乎支持所有的51核的单片机,一般选用Atmel的89C51。
选择89C51之后,右边栏是对这个单片机的基本的说明,然后点击确定.
(4)单击“File”菜单,再在下拉菜单中单击“New”选项单击菜单上的“File”,在下拉菜单中选中“SaveAs”选项单击,在“文件名”栏右侧的编辑框中,键入欲使用的文件名,同时,必须键入正确的扩展名。
注意,如果用C语言编写程序,则扩展名为(.c);如果用汇编语言编写程序,则扩展名必须为(.asm)。
然后,单击“保存”按钮
(5)回到编辑界面后,单击“Target1”前面的“+”号,然后在“SourceGroup1”上单击右键,然后单击“AddFiletoGroup‘SourceGroup1’”,选中Test.c,然后单击“Add?
”
(6)开始编程
(7)单击“Project”菜单,再在下拉菜单中单击“BuiltTarget”选项(或者使用快捷键F7),编译成功后,再单击“Project”菜单,在下拉菜单中单击“Start/StopDebugSession”
(8)调试程序:
单击“Debug”菜单,在下拉菜单中单击“Go”选项,(或者使用快捷键F5),然后再单击“Debug”菜单,在下拉菜单中单击“StopRunning”选项(或者使用快捷键Esc);再单击“View”菜单,再在下拉菜单中单击“SerialWindows#1”选项,就可以看到程序运行后的结果,
(9)单击“Project”菜单,再在下拉菜单中单击“”在下图中,单击“Output”中单击“CreateHEXFile”选项,使程序编译后产生HEX代码,供下载器软件使用。
把程序下载到AT89S52单片机中。
5.2软件流程图
图5.1流程图
5.3程序段
#include
#include
#include
#defineucharunsignedchar
#definecom8155XBYTE[0xff20]/*8155控制字*/
#definepa8155XBYTE[0xff21]/*数码管字位口*/
#definepb8155XBYTE[0xff22]/*数码管字形口*/
#definead0809XBYTE[0x9000]
voiddelay(unsignedinti)/*延时子程序*/
{
unsignedintj,k;
for(k=0;k
for(j=0;j<100;j++);
}
voidmain(void)
{ucharidatadisbuf[6]={0,8,0,9,5,5};/*定义数码管字形码数组*/
ucharcodetable[20]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0x88,0x83,0xC6,0xA1,0x86,0x8E,0xFF,0x0C,0x89,0xDE};/*七段LED数码管段选码*/
com8155=0x43;/*8155控制字设置*/
while
(1)
{ucharx=6,y=0x20,m,n,t=0x0f;/*X:
表示6个数码管,Y:
送LED数码管字位值*/
y=~y;/*取反命令*/
ad0809=0x00;/*0809的0通道采样*/
delay
(1);
m=ad0809;/*取出采样值*/
n=0.2297*m+0.3122;/*将采样取出的16进制数拆分送LED数码管显示*/
m=m&t;/*取出采样值低4位*/
disbuf[5]=m;
n=n>>4;/*取出采样值高4位*/
disbuf[4]=n;
for(x=0;x<8;x++)/*六位数码管动态循环显示*/
{pb8155=table[disbuf[x]];/*将显示数值转化成LED段选码送数码管字形口*/
pa8155=y;/*将字位值送数码管字位口*/
delay
(2);/*延时几毫秒*/
y=_cror_(y,1);/*位选码右移一位,再选通下一个数码管,依次循环显示*/
}
6.结果分析
本次课程设计还比较顺利,最大的难点在于建立仿真模型后软件的调试。
先前我们理解错了课题的目的。
将数码管输出了电压的差值,经老师提醒才发现自己这样是做了无用功,电压差值只是为了显示压力差而使用的中间量,而且是可调控的。
在软件调试中,由于扫描频率过快,一度很难辨识清楚数码管显示的数字,几经修改才获得稳定的显示。
图6-1电压显示
图6-2系统显示压力差图
7.参考文献
[1] 何希才