基于单片机的压力传感器系统的设计与实现.docx
《基于单片机的压力传感器系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《基于单片机的压力传感器系统的设计与实现.docx(26页珍藏版)》请在冰豆网上搜索。
基于单片机的压力传感器系统的设计与实现
毕业设计报告(论文)
报告(论文)题目:
基于单片机的压力传感器
系统的设计与实现
作者所在系部:
电子工程系
作者所在专业:
电子信息工程
作者所在班级:
B10212
作者姓名:
雷宇
作者学号:
20104020419
指导教师姓名:
王喜斌
完成时间:
2014年6月3日
北华航天工业学院教务处制
北华航天工业学院
毕业设计(论文)任务书(理工类)
学生姓名:
雷宇专业:
电子信息工程班级:
B10212学号:
20104020419
指导教师:
王喜斌职称:
副教授完成时间:
2014.6
毕业设计(论文)题目:
基于单片机的压力传感器系统的设计与实现
题目来源
教师科研课题
纵向课题()
题目类型
理论研究( )
注:
请直接在所属项目括号内打“√”
横向课题(√)
应用研究( )
教师自拟课题( )
应用设计(√)
学生自拟课题(√)
其他( )
总体设计要求及技术要点:
依托于单片机的控制原理,设计控制程序和相关电路,实现对AD转换电路和液晶显示器的控制,使之能够基本实现对压力的测量和显示。
整体设计的关键部分有两点:
1.对传感器输入模拟信号的放大与转换。
2.对液晶显示电路的控制。
工作环境及技术条件:
个人计算机一台,相关开发软件,单片机最小系统开发板一套,液晶显示屏一块。
工作内容及最终成果:
1、编写出控制程序。
2、调试AD转换以及液晶显示电路。
3、焊接出放大电路,AD转换模块和LCD显示模块电路
4、连接各个模块,并调试程序,使之能够与已有压力传感器配合测量压力
时间进度安排:
1、第七学期第6周~第15周,查阅资料,完成开题报告、文献综述、外文文献翻译;
2、第七学期第16周~第17周,开题报告审阅、答辩;
3、第八学期第1周~第4周,分析系统功能确定各个模块的核心器件;
4、第八学期第5周~第7周,搜集整理各模块核心器件的使用方法,并设计硬件原理图;
5、第八学期第8周~第14周,完成控制程序的编制;
6、第八学期第15周~第17周,完成电路的焊接,并调试功能,完成毕业论文。
指导教师签字:
年月日
教研室主任意见:
教研室主任签字:
年月日
北华航天工业学院
本科生毕业设计(论文)原创性及知识产权声明
本人郑重声明:
所呈交的毕业设计(论文)
环道控制系统下位软件设计方案二
是本人在指导教师的指导下,独立进行研究工作取得的成果。
除文中已经注明引用的内容外,本设计(论文)不含任何其他个人或集体已经发表或撰写过的作品或成果。
对本设计(论文)的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。
因本毕业设计(论文)引起的法律结果完全由本人承担。
本毕业设计(论文)成果归北华航天工业学院所有。
本人遵循北华航天工业学院有关毕业设计(论文)的相关规定,提交毕业设计(论文)的印刷本和电子版本。
本人同意北华航天工业学院有权保存毕业设计(论文)的印刷本和电子版,并提供目录检索与阅览服务;可以采用影印、缩印、数字化或其它复制手段保存论文;在不以营利为目的的前提下,可以公布非涉密毕业设计(论文)的部分或全部内容。
特此声明
毕业设计(论文)作者:
指导教师:
年月日年月日
摘要
在现实生活与工业生产中几乎随时随地都要测量各种物理量,例如压力,温度,长度等等。
然而这些不同的物理量的测量与处理过程是大同小异的,主要包括传感器,放大电路,AD转换电路,控制器,以及输出部分,这就给我们的模块化设计提供了先天条件。
这样我们就可以很方便在不同测量设备中进行模块化移植。
关键词单片机,AD转换电路,液晶显示
Abstract
Almostwheneverandwhereverpossibletomeasurevariousphysicalquantities,inreallifeandinindustrialproduction,suchaspressure,temperature,length,etc..However,measurementandprocessthesedifferentphysicalquantityisverymuchthesame,mainlyconsistsofsensor,amplifiercircuit,ADconversioncircuit,controller,andoutputpart,thiswillgiveourmodulardesignprovidescongenitalconditions.Sowecaneasilybemodulargraftingindifferentmeasuringequipment
KeywordsMicrocontroller,ADconversioncircuit,liquidcrystaldisplay
第1章绪论
1.1课题设计背景
随着社会科技的进步,人们对生活的品质要求的提高,以及工业生产中日益精确的控制要求,现在几乎随时随地都需要对各种物理量进行测量。
我们从很早就开始了对现实物理世界的观察与描述,而测量则是我们探索物理世界的一个重要手段。
随着电子技术的迅速发展,我们开始在测量中大量引入电子技术,其测量的便捷性,智能性都得到了广泛的认可,从而促进了传感器技术的迅速发展。
各种传感器种类繁多,形态各异,其测量机理也不尽相同,但是不论其测量的是何种物理量,基于哪一种测量机理,其最终的转换结果都是电信号。
那么我们若除去传感器的部分的非电量部分,而只关注其电器性能部分,则我们只要关注对电子量的处理与识别就可以。
这里我们引入“网口”的概念,即对于网络内部的构造于运行机理并不投入过多的注意力,转而关注整个网络于网络外部的接口部分的电量变换规律,这样就大大降低了设计与使用的难度。
这个课题的目的就是想通过压力传感器系统这一个例的设计与研究,总结出一个行之有效的,可以应用于其他传感器类型的调理控制电路。
1.2传感器系统简介
依据上文所说到的“网口”概念,我们抛开其内部工作机理对系统进行简单的划分与介绍。
这里的“网口”其实也可以理解为系统,我们生活中会遇到很多系统,而系统与系统之间又相互交汇,存在着信息与能量的交换,即与外部存在着“网口”。
例如传感器系统,一端与物理世、世界相连,将物理量采集到其系统内部,经过系统内的一系列运作,最终变成人可识别的信息输出给人。
物理世界就是它的输入,人能看到的输出终端就是他的输出。
而对于传感器系统内部而言,又可以划分为一连串的小系统,其中包括放大电路,AD转换电路,单片机控制电路,LCD显示电路。
其连接结构如下:
1.3本文内容提要
本文主要包括以下内容:
1.整体系统的的实现方法。
2.各个模块的设计连接与实现方案。
3.为其他传感器的测量变送系统提供设计思路。
第2章调理电路硬件设计
在课题设计中我们采用的控制芯片为STC89C52单片机,AD转换采用AD0804,显示模块采用LCD1602,由于这几种芯片已经是很成熟的设备,各种技术资料的介绍已经很完备,所以在本文中我们不对各个芯片的技术参数再做赘述,而侧重于实际设计的思路分析。
文中仅引用一些我们设计时需要关心的内容,在设计思路上,我们先对各个模块进行独立设计,在最后再将各部分组装到一起。
2.1传感器电路分析
由于传感器输出信号很小,一般是几十到几百毫伏,而且为保证下一级电路的介入不影响传感器的工作状态我们要选择输入阻抗较高的放大电路,防止放大电路的输入级从传感器吸收过多的电流从而导致传感器输出的电压下降,造成测量误差。
其机理如下图:
如图,我们取c,d两端作为输出级当电桥处于不平衡状态时c,d两点间存在电位差,取为输出,则经过简单的三角形星形变换后可知输出负载阻抗越高,对桥型电路影响越小。
2.2选用放大电路及其电路分析
采用的放大电路如图1所示,对上图电路进行分析,LM324的1引脚输出为VO1,7引脚输出为VO2,8引脚为VO,
对上图所示为一个仪用放大器电路原理图,具有高输入阻抗和高电压增益的特点,图中U2:
A和U2:
B构成了同相并联差动放大器,第一级输出为:
VO’=[1+(R2+R3)/RV2]VI;
由于反馈的作用使第一级的两个运放的vp和vn几乎相等即虚短,进而使其输入端几乎没有电流流过,这意味着它不从上一级的传感器桥式电路中吸收电流,具有高输入阻抗。
U2:
C构成第二级差动放大,在这一级放大电路中,欲有效抑制共模干扰,需使R1=R4==R;R5=R6=Rf;则总的放大输出为VO=(Rf/R)VO’=[1+(R2+R3)/RV2](Rf/R)VI。
其中RV2为滑动变阻器,可调节放大增益。
2.3AD转换电路的设计
由于传感器输出信号为模拟信号,我们使用的处理芯片只识别数字信号,所以需要将模拟量转换为数字量,对于使用者而言我们不必过多关心起内部的构造与原理,而把注意力放到其控制接口与接口性能上,本文以AD0804为例来设计AD转换电路,
2.3.1AD0804的外围接口的功能:
/CS:
芯片片选信号,低电平有效,即/CS=0,该芯片才能正常工作,当外接多个AD芯片是可以通过这个接口来控制是哪一个芯片在工作;如在多通道采集电路中,当我们使用到AD转换时,就可以通过片选信号的控制来完成通道的选择。
/WR:
启动ADC0804进行ADC采样,该信号低电平有效,我们在程序的初始化时该接口给低电平,使用时当整个电路初始换完成后,准备开始数据采集时,给该接口低电平信号,AD芯片开始进行转换。
DB0~DB7:
由于AD0804是8位转换芯片,即将AD所能采集到的最大模拟量分成28分,结果以二进制形式存储到DB0~DB7,等待控制芯片的读取。
/RD:
低电平有效,当转换完成后,转换结果已经存到DB0~DB7后,由单片机控制给出低电平信号,这时单片机可以从数据接口读出转换结果。
UIN(+)和UIN(-):
模拟电压输入端,模拟电压输入接UIN(+)端,UIN(-)端接地。
双边输入时UIN(+)、UIN(-)分别接模拟电压信号的正端和负端。
当输入的模拟电压信号存在“零点漂移电压”时,可在UIN(-)接一等值的零点补偿电压,变换时将自动从UIN(+)中减去这一电压。
本电路中直接将传感器的两个输出端接到芯片的两个模拟输入端上。
VREF/2:
参考电压接入引脚,参考电压值是AD输出的最大值该引脚可外接电压也可悬空,若外界电压,则ADC的参考电压为该外界电压的两倍,如不外接,则Vref与Vcc共用电源电压,此时ADC的参考电压即为电源电压Vcc的值,。
CLKR和CLKIN:
外接RC电路产生模数转换器所需的时钟信号,时钟频率CLK=1/1.1RC,一般要求频率范围100KHz~1.28MHz。
AGND和DGND:
分别接模拟地和数字地,电路中有时会出现数字部分与模拟部分相互干扰的情况,这时我们要实行数模隔离,地线需相对独立。
/INT:
中断请求信号输出引脚,该引脚低电平有效,当一次A/D转换完成后,
将引起/INT=0,应用时,将这一接口与单片机中断入口相连接,当中断触发时单片机处理中断程序,读取AD转换结果。
2.3.2外围电路的设计
1.需要单片机控制的引脚:
/CS、/WR、DB0~DB7、/RD,以上几个接口用于与单片机的数据通信,实现单片机对数据转换的控制和结果的读取。
2.电源电路的接法:
电源部分包括VCC、VREF/2、AGND、DGND。
VCC使用5V电压,VREF/2悬空这样参考电压即为电源电压,AGND和DGND可根据实际情况选择公用地线,或者进行隔离。
3.CLKR和CLKIN接口可根据实际工作电路的运行情况选择RC震荡电路的频率。
若不影响实际的使用,可以将频率设计的地一些,给单片机留出工作反应时间,以免中断请求过于频繁而影响到整个系统程序的执行。
仿真电路如下:
我们进行电路设计时此图中C4选取的值较大,实际设计时可根据CLK=1/1.1RC进行换算选取合适的时钟频率。
且由于设计时是分模块进行的,所以上图的UIN(+)和UIN(-)两个模拟输入量未接入上级的放大电路输出接口,仅以一个可控的电源输入来代替。
实际应用时UIN(+)接放大电路的输出接口,UIN(-)接地。
2.3.3控制程序的设计:
在进行程序设计时我们需要用到数据手册中的时序图:
结合前文的接口功能我们读时序图,时序图由两个部分组成,转换时序和输出时序,
1.转换时序:
由转换时序图可知,当/CS给低电平的情况下,/WR由高电平变成低电平并保持TW(/WR)的时间后再拉高,即启动一次转换,启动之后需等待转换完毕这一段的时间最少是8+73=81个时钟周期,结合前文提到的CLK=1/1.1RC公式我们可以计算出这一延时的长度。
转换完成之后芯片自动将结果存到D0~D7的寄存器中。
这时中断输出位拉低。
2.输出时序:
采样转换完毕后,再/CS信号为低的前提下,将/RD脚由高电平拉成低电平后,经过tACC的延时即可从DB脚读出有效的采样结果。
根据以上分析结果我们就可以进行程序的编写了,以下为AD转换模块的控制程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitcs=P0^1;
sbitwr=P0^3;
sbitrd=P0^2;
voidinit();//初始化程序
voidstart();//启动转换程序
voidread();//结果读取程序
voiddelay(uintz);//延时函数
voidmain()
{
init();
while
(1)
{
start();
read();
}
}
voidinit()//初始化程序
{
cs=1;
wr=1;
}
voiddelay(uintz)//延时函数
{
uintx,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}
voidstart()//启动转换程序
{
cs=0;
wr=0;
delay
(1);
wr=1;
delay(3);
}
voidread()//结果读取程序
{
uchardd;
cs=0;
rd=0;
delay(10);
dd=P1;
}
我们现在编写的仅仅是针对于AD转换的一部分,但是C语言程序有很高的可移植性。
所以讲几个模块的程序编写出来以后再进行程序的“组装”。
2.4LCD显示电路的设计
LCD显示乍一看好像很麻烦,实际上来讲其设计思路与AD电路的设计思路是非常相似的,其区别在于AD0804芯片是靠其外围接口的控制来完成控制工作,不同之处在于,LCD显示模块中有存储功能,需要对其内部的存储空间具有一定的了解。
下面我们从LCD1602的数据手册开始逐步的了解其使用方法。
等我们将数据手册分析明白后,我们的硬件电路接线图和程序就基本上设计出来了。
2.4.1LCD的介绍
这里我们任然秉承前文的“网络”概念,关于其内部一些不必要的构造以及运行原理全部摒弃不要,只介绍我们使用时需要了解的部分,即,主要技术参数、外围电路接口、指令、时序图,
供电电源
设计外围电路时我们因注意这些使用参数,暂且称之为运行条件吧,其内容如下:
芯片工作电压:
4.5—5.5V
工作电流:
2.0mA(5.0V)
模块最佳工作电压:
5.0V
设计电路时,参照这几个参数以保证电路的正常运行,避免损坏芯片。
硬件接口
第1脚:
VSS为地电源。
第2脚:
VDD接5V正电源。
第3脚:
VL为液晶显示器对比度调整端,接正电源时对比度最弱,接地时对比度最高,对比度过高时会产生“鬼影”,使用时可以通过一个10K的电位器调整对比度。
第4脚:
RS为寄存器选择,LCD1602模块中集成了寄存器,以存储指令和数据,我们写入的内容是放到数据寄存器来显示,还是放到程序寄存器来进行模块控制,由此引脚的状态来决定。
RS高电平时选择数据寄存器、低电平时选择指令寄存器。
第5脚:
R/W为读写信号线,高电平时进行读操作,低电平时进行写操作。
本系统只进行写操作,所以此引脚一直给低电平。
第6脚:
E端为使能端,当E端由高电平时读取信息;由高电平跳变成低电平时,液晶模块执行命令。
第7~14脚:
D0~D7数据线,我们通过这八个I/O口进行单片机和LCD的数据传输。
第15脚:
背光源正极。
第16脚:
背光源负极。
有了以上内容我们就可先进行硬件电路的设计了,因为LCD与单片机之间只有信号的交流,其显示功率由模块内部的驱动电路提供所以省去了数码管的外围驱动电路。
这样大大简化了硬件电路的设计难度。
其连接图如下
由于我们只进行写操作所以RW引脚一直给低电平,直接接地
控制指令
序号
指令
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
读出的数据内容
在研究LCD数据手册时,我迷惑了半天始终搞不明白LCD的控制方法,原因之一就是,没有把指令、数据以及控制时序之间的关系搞明白。
现在我用自己的话将我对这些操作的理解叙述一遍:
在操作LCD模块时其实和操作单片机是一样的,不管我们操作的是单片机的哪一种功能,控制的哪一个引脚,实际上我们并没有对这个引脚进行直接的操作,我们操作的是这一引脚所对应的寄存器。
例如:
我们想让P1^1口输出1,我们是把“1”这个数据装入到与P1^1连接的寄存器中,到时候单片机自动将寄存器中的状态转换成P1^1接口的高低电平输出。
现在回到LCD的操作,我们在操作LCD模块时,本质上也是对其内部的寄存器进行操作,而且,LCD的寄存器有两种,一种是程序寄存器(指令寄存器),一种是数据寄存器,指令寄存器,顾名思义,就是存指令的,而指令的作用我们先前已经介绍了,但是在阅读指令集的时候要弄清楚各个位是做什么的。
前面的两位RS和RW是控制位,他们的状态决定了我们是对数据寄存器操作还是对指令寄存器进行操作,和进行的是读操作还是写操作,后面的D0~D7八个位才是写到寄存器里面的内容。
这样我们的思路就清晰了。
:
RS,RW,E三个端口的时序配合如下:
读状态输入:
RS=L,RW=H,E=H输出:
DB0~DB7=状态字
写指令输入:
RS=L,RW=L,E=下降沿脉冲,DB0~DB7=指令码输出:
无
读数据输入:
RS=H,RW=H,E=H输出:
DB0~DB7=数据
写数据输入:
RS=H,RW=L,E=下降沿脉冲,DB0~DB7=数据输出:
无
读操作时序
写操作时序
看到这里我们在回头对应先前的指令集,就可以发现,所谓的指令集,是要分开两个部分来看的,第一部分是RS和RW两个控制位,第二部分我们可以称之为指令。
我们要做的工作就是按照时序图的要求将需要写入的指令或数据送给LCD。
在编写程序时,将rs,rw,e三个端口设置好之后,直接将要写入的内容送给D0~D7口就可以了。
程序设计
由先前的分析我们可知,LCD的主要控制程序分为写指令程序和写数据程序,我们先按照时序图将两个子程序写下来
写指令程序
voidlcdwrite_com(ucharcom)
{
lcdrs=0;
P0=com;
delay
(1);//延时函数
lcden=1;
delay(5);
lcden=0;
}
写数据程序
voidwrite_data(uchardate)
{
lcdrs=0;
P0=date;
delay(5);
lcden=1;
delay(5);
lcden=0;
}
利用这两个子程序就可以写入相关指令和程序了
下面我们先利用这两个子程序完成LCD的初始化设置。
voidinit()
{
lcdwrite_com(0x06);//指令3,光标右移,文字不移动
lcdwrite_com(0x0c);//指令4,显示器开,无光标,无闪烁
lcdwrite_com(0x14);//指令5,光标右移一格
lcdwrite_com(0x38);//指令6,设置8位格式,2行,5x7
lcdwrite_com(0x01);//清屏
delay(5);延时,令LCD有足够时间完成清屏程序
}
然后我们就可以对先前写成的程序进行组装了,组装结果如下:
#include
#defineucharunsignedchar
#defineuintunsignedint
#definelcd_dbP0
sbitlcdrs=P2^0;
sbitlcden=P2^1;
voidlcdwrite_com(ucharcom);//写指令
voidlcdwrite_data(uchardate);//写数据
voidlcd_disp_char(uchara,ucharb,ucharc);//显示程序
voidinit();
voiddelay(uintz);
voidmain()
{
init();
lcd_disp_char(0,1,'A');
while
(1);
}
voidlcd_disp_char(uchara,ucharb,ucharc)//显示程序
{
ucharaddress;
if(b==1)
address=0x80+a;
else
address=0xc0+a;
lcdwrite_com(address);
lcdwrite_data(c);}
由于其他子程序内容,前文已经给出,所以这里的程序就不再赘述。
第3章控制程序的设计
在之前的对各个硬件电路的控制过程
3.1程序要完成的任务
程序即命令,它要担负起整合硬件资源的任务,并且要对信息进分析处理。
针对我们这个课题