基于单片机的压力检测系统设计.docx
《基于单片机的压力检测系统设计.docx》由会员分享,可在线阅读,更多相关《基于单片机的压力检测系统设计.docx(23页珍藏版)》请在冰豆网上搜索。
基于单片机的压力检测系统设计
常熟理工学院
电气与自动化工程学院
《传感器原理与检测技术》课程设计
题目:
基于AT89C51单片机的
压力检测系统的设计
姓名:
李莹
学号:
160509240
班级:
测控092
指导教师:
戴梅
起止日期:
2012年7月2日-9日
电气与自动化工程学院
课程设计评分表
课程名称:
传感器原理与检测技术
设计题目:
压力检测系统的设计
班级:
测控092学号:
160509240姓名:
李莹
项目
评分比例
得分
课程设计平时表现
20%
课程设计答辩
40%
课程设计报告
40%
课程设计总成绩
指导老师:
戴梅
年月日
课程设计答辩记录
自动化系测控专业092班级答辩人:
李莹
课程设计题目压力检测系统的设计
记录内容
记录人___________
第一章概述
1.相关背景和应用简介
2.总体设计方案
2.1总体设计框图
2.2各模块的功能介绍
第二章硬件电路的设计
1.传感器的选型
2.单片机最小系统设计
3.模数转换电路设计
4.传感器接口电路设计
5.显示电路设计
6.电源电路设计
7.原理图
第三章软件部分的设计
1.总体流程图
2.子程序流程图及相关程序
第四章仿真及结果
第五章小结
参考文献
第一章概述
1.传感器的相关背景及应用简介
近年来,随着微型计算机的发展,传感器在人们的工作和日常生活中应用越来越普遍。
压力是工业生产过程中的重要参数之一。
压力的检测或控制是保证生产和设备安全运行必不可少的条件。
实现智能化压力检测系统对工业过程的控制具有非常重要的意义。
压力传感器是工业实践、仪器仪表控制中最为常用的一种传感器,并广泛应用于各种工业自控环境,涉及水利水电、铁路交通、生产自控、航空航天、军工、石化、油井、电力、船舶、机床、管道等众多行业。
压力测量对实时监测和安全生产具有重要的意义。
在工业生产中,为了高效、安全生产,必须有效控制生产过程中的诸如压力、流量、温度等主要参数。
由于压力控制在生产过程中起着决定性的安全作用,因此有必要准确测量压力。
通过压力传感器将需要测量的位置的压力信号转化为电信号,再经过运算放大器进行信号放大,送至8位A/D转换器,然后将模拟信号转换成单片机可以识别的数字信号,再经单片机转换成LED显示器可以识别的信息,最后显示输出。
此次设计是基于单片机的压力检测系统,选择的单片机是基于AT89C51单片机的测量与显示,将压力经过压力传感器转变为电信号,经过放大器放大,然后进入A/D转换器将模拟量转换为数字量显示,我们所采样的A/D转换器为ADC0808。
2.总体设计方案
本次设计是基于AT89C51单片机的测量与显示。
电路采用ADC0809模数转换电路,ADC0809是CMOS工艺,采用逐次逼近法的8位A/D转换芯片,片内有带锁存功能的8路模拟电子开关,先用ADC0809的转换器对各路电压值进行采样,然后将模拟信号转换成单片机可以识别的数字信号,再经单片机转换成LED显示器可以识别的信息,最后显示输出。
本次设计是以单片机组成的压力测量,系统中必须有前向通道作为电信号的输入通道,用来采集输入信息。
压力的测量,需要传感器,利用传感器将压力转换成电信号后,再经放大并经A/D转换为数字量后才能由计算机进行有效处理。
然后用LED进行显示。
本设计的最终结果是,将软件下载到硬件上调试出来了需要显示的数据,当输入的模拟信号发生变化的时候,通过A/D转换后,LED将显示不同的数值。
设计框图如下图所示
压力检测电路
AT89C51单片机
74LS2554
LED显示电路
8255A
最小系统
ADC0808808
压力测量仪表原理方框图
电路主要分成两个模块:
A/D转换模块和显示模块,我们选用的A/D转换器是ADC0808,单片机为AT89C51,显示为4位数码管显示。
根据硬件电路编程,调试出来并显示结果。
第二章硬件电路的设计
1.传感器的选型
压力传感器是压力检测系统中的重要组成部分,由各种压力敏感元件将被测压力信号转换成容易测量的电信号作输出,给显示仪表显示压力值,或供控制和报警使用。
力学传感器的种类繁多,如电阻应变片压力传感器、半导体应变片压力传感器、压
阻式压力传感器、电感式压力传感器、电容式压力传感器谐振式压力传感器及电容式加速度传感器等。
而电阻应变式传感器具有悠久的历史。
由于它具有结构简单、
体积小、使用方便、性能稳定、可靠、灵敏度高动态响应快、适合静态及动态测量、测量精度高等诸多优点,因此是目前应用最广泛的传感器之一。
电阻应变式传感器
由弹性元件和电阻应变片构成,当弹性元件感受到物理量时,其表面产生应变,粘
贴在弹性元件表面的电阻应变片的电阻值将随着弹性元件的应变而相应变化。
通过
测量电阻应变片的电阻值变化,可以用来测量位移加速度、力、力矩、压力等各种
参数。
金属电阻应变片的工作原理:
应变式压力传感器是把压力的变化转换成电阻值的变
化来进行测量的,应变片是由金属导体或半导体制成的电阻体,是一种将被测件上的应变变化转换成为一种电信号的敏感器件。
它是压阻式应变传感器的主要组成部分之一。
电阻应变片应用最多的是金属电阻应变片和半导体应变片两种。
金属电阻应变片又有丝状应变片和金属箔状应变片两种。
通常是将应变片通过特殊的粘和剂紧密的粘合在产生力学应变基体上,当基体受力发生应力变化时,电阻应变片也一起产生形变,使应变片的阻值发生改变,从而使加在电阻上的电压发生变化。
这种应变片在受力时产生的阻值变化通常较小,一般这种应变片都组成应变电桥,并通过后续的仪表放大器进行放大,再传输给处理电路(通常是A/D转换和CPU)显示或执行机构。
2.单片机最小系统的设计
单片机的最小系统由RAM,ROM,晶振电路,复位电路,电源,地组成。
电路设计如图
随着电子技术的发展,单片机的功能将更加完善,因而单片机的应用将更加普及。
它们将在智能化仪器、家电产品、工业过程控制等方面得到更广泛的应用。
单片机将是智能化仪器和中、小型控制系统中应用最多的有种微型计算机。
51单片机最小系统电路介绍
1.51单片机最小系统复位电路的极性电容C1的大小直接影响单片机的复位时间,一般采用10~30uF,51单片机最小系统容值越大需要的复位时间越短。
2.51单片机最小系统晶振Y1也可以采用6MHz或者11.0592MHz,在正常工作的情况下可以采用更高频率的晶振,51单片机最小系统晶振的振荡频率直接影响单片机的处理速度,频率越大处理速度越快。
3.51单片机最小系统起振电容C2、C3一般采用15~33pF,并且电容离晶振越近越好,晶振离单片机越近越好4.P0口为开漏输出,作为输出口时需加上拉电阻,阻值一般为10k。
设置为定时器模式时,加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。
计数值N乘以机器周期Tcy就是定时时间t。
设置为计数器模式时,外部事件计数脉冲由T0或T1引脚输入到计数器。
在每个机器周期的S5P2期间采样T0、T1引脚电平。
当某周期采样到一高电平输入,而下一周期又采样到一低电平时,则计数器加1,更新的计数值在下一个机器周期的S3P1期间装入计数器。
由于检测一个从1到0的下降沿需要2个机器周期,因此要求被采样的电平至少要维持一个机器周期。
当晶振频率为12MHz时,最高计数频率不超过1/2MHz,即计数脉冲的周期要大于2ms。
AT89C51单片机简介
AT89C51是一种带4K字节闪烁可编程可擦除只读存储(FPEROM—FalshProgrammableandErasableReadOnlyMemory)的低电压,高性能CMOS8位微处理器,俗称单片机。
单片机的可擦除只读存储器可以反复擦除100次。
该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器。
管脚说明
VCC:
供电电压。
GND:
接地。
P0口:
P0口为一个8位漏级开路双向I/O口,每脚可吸收8TTL门电流。
当P1口的管脚第一次写1时,被定义为高阻输入。
P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。
在FIASH编程时,P0口作为原码输入口,当FIASH进行校验时,P0输出原码,此时P0外部必须被拉高。
P1口:
P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。
P1口管脚写入1后,被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。
在FLASH编程和校验时,P1口作为第八位地址接收。
P2口:
P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写“1”时,其管脚被内部上拉电阻拉高,且作为输入。
并因此作为输入时,P2口的管脚被外部拉低,将输出电流。
这是由于内部上拉的缘故。
P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。
在给出地址“1”时,它利用内部上拉优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。
P2口在FLASH编程和校验时接收高八位地址信号和控制信号。
P3口:
P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。
当P3口写入“1”后,它们被内部上拉为高电平,并用作输入。
作为输入,由于外部下拉为低电平,P3口将输出电流(ILL)这是由于上拉的缘故。
P3口也可作为AT89C51的一些特殊功能口:
P3口管脚备选功能
P3.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2/INT0(外部中断0)
P3.3/INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6/WR(外部数据存储器写选通)
P3.7/RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
RST:
复位输入。
当振荡器复位器件时,要保持RST脚两个机器周期的高电平时间。
ALE:
当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的地位字节。
在FLASH编程期间,此引脚用于输入编程脉冲。
在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。
因此它可用作对外部输出的脉冲或用于定时目的。
然而要注意的是:
每当用作外部数据存储器时,将跳过一个ALE脉冲。
如想禁止ALE的输出可在SFR8EH地址上置0。
此时,ALE只有在执行MOVX,MOVC指令是ALE才起作用。
另外,该引脚被略微拉高。
如果微处理器在外部执行状态ALE禁止,置位无效。
/PSEN:
外部程序存储器的选通信号。
在由外部程序存储器取指期间,每个机器周期两次/PSEN有效。
但在访问外部数据存储器时,这两次有效的/PSEN信号将不出现。
/EA:
当/EA保持低电平时,则在此期间外部程序存储器(0000H-FFFFH),不管是否有内部程序存储器。
注意加密方式1时,/EA将内部锁定为RESET;当/EA端保持高电平时,此间内部程序存储器。
在FLASH编程期间,此引脚也用于施加12V编程电源(VPP)。
XTAL1:
反向振荡放大器的输入及内部时钟工作电路的输入。
XTAL2:
来自反向振荡器的输出。
3.模数转换电路的设计
模拟量输入通道的任务是将模拟量转换成数字量。
能够完成这一任务的器件称之为模数转换器,简称A/D转换器。
本次设计的中A/D转换器的任务是将放大器输出的模拟信号转换位数字量进行输出。
A/D转换电路的核心元件是ADC0808芯片
ADC0808是ADC0809的简化版本,功能基本相同。
一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换。
ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。
它是逐次逼近式A/D转换器,可以和单片机直接接口。
(1)ADC0809的内部逻辑结构
由下图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。
多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。
三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
(2)ADC0809的引脚结构
ADC0809各脚功能如下:
D7-D0:
8位数字量输出引脚
IN0-IN7:
8位模拟量输入引脚
VCC:
+5V工作电压
GND:
地
REF(+):
参考电压正端
REF(-):
参考电压负端
START:
A/D转换启动信号输入端。
当ST上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D转换;在转换期间,ST应保持低电平。
ALE:
地址锁存允许信号输入端,高电平有效。
当ALE线为高电平时,地址锁存与译码器将A,B,C三条地址线的地址信号进行锁存,经译码后被选中的通道的模拟量进入转换器进行转换。
EOC:
转换结束信号输出引脚。
当EOC为高电平时,表明转换结束;否则,表明正在进行A/D转换。
OE:
输出允许控制端,用以打开三态数据输出锁存器。
CLK:
时钟信号输入端(一般为500KHz)。
A、B、C:
地址输入线,用于选通IN0-IN7上的一路模拟量输入。
ADC0809对输入模拟量要求:
信号单极性,电压范围是0-5V,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。
(3)ADC0809应用说明
1)ADC0809内部带有输出锁存器,可以与AT89S51单片机直接相连。
2)初始化时,使ST和OE信号全为低电平。
3)送要转换的哪一通道的地址到A,B,C端口上。
4)在ST端给出一个至少有100ns宽的正脉冲信号。
5)是否转换完毕,我们根据EOC信号来判断。
6)当EOC变为高电平时,这时给OE为高电平,转换的数据就输出给单片机了。
(4)ADC0809工作时序图
在ALE=1期间,模拟开关的地址(ADDC、ADDB和ADDA)存入地址锁存。
输入启动信号START的上升沿复位ADC0809,下降沿启动A/D转换。
EOC为输出的转换结束信号,正在转换时为0,转换结束时为1。
OE为输出允许控制端,在转换完成后用来打开输出三态门,以便从ADC0809输出这次转换的结果。
ADC0809的时序图如下图
4.接口电路的设计
ADC0809与AT89C51采用中断方式。
由于ADC0809片内有三态输出锁存器,因此可以直接与AT89C51接口。
这里将ADC0809作为一个外部扩展并行I/O口,采用先选法寻址。
由P3.0控制启动转换信号端(START),三位地址线加到ADC0809的ADDA、ADDB、ADDC端。
当启动ADC0809时,先送通道号地址到ADDA、ADDB和ADDC;锁存通道号并启动A/D转换。
A/D转换完毕,EOC端置1,然后使OE端有效,打开输出锁存器三态门,8位数据便读入到单片机中。
接口电路原理图如下
5.驱动与显示电路
74LS245的原理
74LS245为8路通向三态双向总线收发器,可双向传输数据。
16个三态门每两个三态门组成一路双向驱动。
驱动方向由
,DIR两个控制端控制,
控制端控制驱动器有效或高阻态,在
控制端有效(
=0)时,DIR控制端控制驱动器的驱动方向.即:
DIR=0信号由B→A;DIR=1信号由A→B传输。
在
=1时,A、B为高阻状态。
74LS245的管脚图如图所示。
74LS245管脚图
当数码管显示时,由于单片机的驱动能力达不到数码管的驱动电流,有时工作不稳定,因此需要一个驱动电路,使数码管显示电路,如下图所示。
本电路用74LS245
16个三态门每两个三态门组成一路双向驱动。
通过单片机输送过来的信号有74LS245进行驱动,由数码管进行显示。
6.电源电路的设计
7.原理图
第三章软件部分设计
1.总体流程图
主程序模块
主程序主要完成定时器初始化和A/D转换模拟值通道口选定,调用显示子程序等。
主程序的流程图下图所示。
开始
初始化
A/D转换模拟值通道口选定
调用显示子程序
图8主程序流程图
2.子程序
1)A/D转换程序
A/D转换子程序用于对ADC0809的输入模拟电压进行A/D转换,并将转换的数值存入8个相应的存入单元中。
A/D转换子程序每隔一定时间调用一次,即每隔一段时间对输入电压采样一次。
2)显示子程序
显示子程序采用动态扫描法实现4位数码管的数值显示。
LED数码管采用软件译码动态扫描方式。
在显示子程序中包含多路循环显示和单路显示程序。
多路循环显示把8个存储单元的数值依次取出送到4位数码管上显示。
每一路显示1秒,单路显示程序只对当前选中的一路数据进行显示。
每路数据显示时需经过转换变成十进制BCD码,放于4个数码管的显示缓冲中。
单路显示或多路显示通过标志位控制。
在显示控制程序中加入了对单路或多路循环按键和通道选择按键判断。
程序代码
#include
#defineucharunsignedchar
#defineuintunsignedint
unsignedcharcodetab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
ucharcodetab1[]={0xfe,0xfd,0xfb,0xf7};
uchardis_buf[4];
sbitST=P3^0;
sbitOE=P3^1;
sbitEOC=P3^2;
sbitCLK=P3^3;
sbitP20=P2^0;
sbitP21=P2^1;
sbitP22=P2^2;
sbitP23=P2^3;
sbitAA=P3^5;
sbitBB=P3^6;
sbitCC=P3^7;
voiddelay()//延时函数
{
uchart;
for(t=0;t<250;t++);
}
voiddisplay()
{
ucharj;
for(j=0;j<4;j++)
{
P1=tab[dis_buf[j]];
P2=tab1[j];
delay();
P2=0xff;
}
}
voidt1()interrupt1//定时器中断服务函数;作用:
产生CLK信号
{
TH0=(65536-200)/256;
TL0=(65536-200)%256;
CLK=~CLK;
}
voidmain()//主函数
{
ucharsj=0,ge=0,shi=0,bai=0,qian=0;
uinttemp;
TMOD=0x01;
TH0=(65536-200)/256;//定时时间为0.2us,亦即CLK周期为0.4us
TL0=(65536-200)%256;
EA=1;
ET0=1;
TR0=1;
while
(1)
{
AA=0;//选择通道0
BB=0;
CC=0;
ST=0;//关闭转换
OE=0;//关闭输出
ST=1;//开启转换
ST=0;//关闭转换
while(EOC==0);//判断是否转换结束:
是则执行以下语句,否则等待
OE=1;//开启数据输出允许
sj=P0;//将数据取走,存放在变量sj中
OE=0;//关闭输出
temp=sj;//电压值转换,5V作为参考电压,分成256份
qian=temp/1000;//个位
bai=(temp-qian*1000)/100;//十位
shi=(temp-qian*1000-bai*100)/10;//百位
ge=temp-qian*1000-bai*100-shi*10;//千位
dis_buf[0]=ge;
dis_buf[1]=shi;
dis_buf[2]=bai;
dis_buf[3]=qian;
display();
OE=0;
}
}
第四章仿真及结果
数据分析:
外部传感器检测到压力,显示相应电压,电压显示范围为0~5V,数码管显示范围为0~255,根据数码管显示的值可以求得相应电压的变化,结合压力检测传感器的参数可得到压力的值。
第五章小结
一周的传感器课程设计结束了,我的收获很多,我做的是基于AT89C51单片机的压力检测系统的设计,用到的主要芯片是AT89C51和ADC0808,实现的功能是将传感器采集到的模拟信号转换成单片机可以识别的数字信号,再经单片机转换成LED显示器可以识别的信息,最后显示输出。
在显示的过程中通过键盘,向计算机操作可以控制显示需要的值。
对于学习过单片机,因此对AT89C51比较熟悉,对ADC0808则比较陌生,从网上搜索的资料对我帮助很大,遇到不懂的问题自己解决不了,就和大家一起讨论。
此次课程设计使我更加了解C51程序的强大功能,以前学习单片机过程中得漏洞也得到了很好的修补,Keil和proteus的使用加深了我对着两种软件的理解程度,单片机控制数码管的显示时,尤其是多个时,要使用驱动电路。
课程设计暴露了我在平时学习中的不足,以及对知识缺乏融会贯通的能力,课程设计过程中,我们不断发现错误,不断修改,不断领悟,不断获取。
实践出真知,自己亲自动手去做,才知道知识的匮乏!
课程设计同样是一门专业课,它一不同于课程的形式让我们学习到更加实用的知识。
提升的也不仅仅是专业技能,更是我们独立思考,解决问题的能力。
不久之后我们将走上工作岗位,课程设计让很多方面的能力都得到了提升!
我想在以后的工作中,我们定会受益于在学校期间的课程设计!
第六章参考文献
1.姜志海赵艳雷陈松编著《单片机的C语言程序设计与应用》
2.王莹莹汪冬晁阳编著《ProtelDXP》
3.贾伯年俞朴宋爱国主编《传感器技术》
4.卿太全梁渊郭明琼编著《传感器应用电路集萃》
5.张萌和湘姜斌编著《单片机应用系统开发综合实例》
6.张国雄主编《测控电路》