题目: 压力传感器设计 学院(系):
年级专业: 电子信息科学与技术 学 号:
学生姓名: 指导教师:
目录
摘要----------------------------
-------------------------------------------------------------------------2 关键字----------------
----------------------------------------------------------------------------------2
第一章 总体设计方案及模块划分
---------------------------------------------------------------2
总体设计方案
--------------------------------------------------------------------------------3
模块划分
--------------------------------------------------------------------------------------4
设计框图如下图所示
-----------------------------------------------------------------------5 第二章各模块设计参数
-------------------------------------------------------------------------------5
传感器元件模块
------------------------------------------------------------------------------5
A/D转换模块
---------------------------------------------------------------------------------8
控制器处理模块
-----------------------------------------------------------------------------12
AD0809接口电路及LED接口电路
------------------------------------------------------14
第三章 压力传感器实验数据采集、显示及程序
---------------------------------------------14 数据采集及显示
-----------------------------------------------------------------------------14 第
四
章
心
得
体
会
--------------------------------------------------------------------------------------15
附录
-----------------------------------------------------------------------------------------------------16
程序设计
--------------------------------------------------------------------------------------16
参考文献资料
---------------------------------------------------------------------------------25
实物图
--------------------------------------------------------------------------------------25
摘要
此次设计是基于8051单片机的压力检测系统,简要介绍了压力传感器电路的
工作原理和弱信号传感器电路以及A/D变换电路的工作原理,通过压力传感器将需要
测量的位置的压力信号转化为电信号,再经过运算放大器进行信号放大,送至8位A/D转换器ADC0808,然后将模拟信号转换成单片机可以识别的数字信号,
再经单片机转换成LED显示器可以识别的信息,最后显示输出。
关键词: 单片机 压力传感器
A/D变换电路
LED显示器
第一章总体设计方案及模块划分
总体设计方案
本次设计是基于8051单片机的测量与显示。电路采用ADC0809模数转换电路,ADC0809是CMOS工艺,采用逐次逼近法的8位A/D转换芯片,片内有带锁存功能的8路模拟电子开关,先用ADC0809的转换器对各路电压值进行采样,然后将模拟信号转换成单片机可以识别的数字信号,再经单片机转换成LED显示器可以识别的信息,最后显示输出。本次设计是以单片机组成的压力测量,系统中必须有前向通道作为电信号的输入通道,用来采集输入信息。压力的测量,需要传感器,利用传感器将压力转换成电信号后,再经放大并经A/D转换为数字量后才能由计算机进行有效处理。然后用LED进行显示。本设计的最终结果是,将软件下载到硬件上调试出来了需要显示的数据,当输入的模拟信号发生变化的时候,通过A/D转换后,LED将显示不同的数值。
模块划分
(1) 传感器元件模块
传感器元件主要是对压力这样的物理量转变成电信号。 (2) A/D转换电路模块
A/D转换电路是将模拟量转换为数字量,便于单片机的处理。 (3) 控制器处理模块
控制器是通过51系列单片机对数字信号,按照预定目的进行处理。 (4) 显示与报告模块
显示与报告是对于最终输出结果进行直观的表达。
设计框图如下图所示:
图 设计框图
第二章 各模块设计参数
传感器元件模块
压力传感器是压力检测系统中的重要组成部分,由各种压力敏感元件将被测压力信号转换成容易测量的电信号作输出,给显示仪表显示压力值,或供控制和报警使用。力学传感器的种类繁多,如应变片、半导体应变片、压阻式、电感式、式谐振式及式加速度传感器等。 而电阻应变式传感器具有悠久的历史。由于它具有结构简单、体积小、使用方便、性能稳定、可靠、灵敏度高动态响应快、适合静态及动态测量、测量精度高等诸多优点,因此是目前应用最广泛的传感器之一,本实验采用电阻应变式传感器作为压力传感器。 压力传感器构成:
电阻应变式传感器由弹性元件和电阻应变片构成,当弹性元件感受到物理量时,其表面产生应变,粘贴在弹性元件表面的电阻应变片的电阻值将随着弹性元件的应变而相应变化。通过测量电阻应变片的电阻值变化,可以用来测量位移加速度、力、力矩、压力等各种参数。 压力传感器的工作原理:
本质上是惠斯通电桥,这里采用的是最常见的电阻应变片式的压力传感器。它得到广泛应用的原因是温度特性好,减小温度变化带来的误差。膜片上的压力使得电桥不平衡,从而产生一个差动的输出信号,这种结构的基本特性之一是它的差动输出电压U与偏置电压U成正比关系,这种关系隐含压力测量精度直接决定偏置电源的容限值,当四个桥臂电阻达到相应的关系时,电桥输出为零,或则就有电压输出同时,它也能提供一种温度补偿最通用的方法。本实验研究压力传感器电路
如图示,传感器采用恒压源供电,VCC为+15V,经过R23与R40分压(电容起滤波作用),点5、6、7三点处有相同电压U1:
根据上式,带入数据R231K ,R404K ,VCC15V,求得U13V。 经过电路电桥部分,简化如下图设桥臂电阻分别为R1,R2,R3,R4,
R1R3R1/(1/R101/(R11R12))118 ,R2R4R'120,则当压
力传感器受力时,电阻变化对应的输出电压值为
RUOUR'R'1RR'R1R'R,由于R<<1,则上式可化简为
带入电阻、电压值得
UO0.75R. R' 最后经过放大部分,如图,为压力传感器的微弱电压输出的放大电路。分析它是一个差分放大电路,其放大倍数为
AR320002500 ,那么放大后的电压值为 R22.43UO'0.75250RR6253R'R'又
RSF,选定材料,这里取R'S104UO0.0625F.因为A∕D转换器的最大输入电压为5v,所以
该压力传感器的测量范围为0~80N。
UO UO
. A/D转换模块
模拟量输入通道的任务是将模拟量转换成数字量。能够完成这一任务的器件称之为模数转换器,简称A/D转换器。本次设计的中A/D转换器的任务是将放大器输出的模拟信号转换位数字量进行输出。
A/D转换电路的核心元件是ADC0808芯片
ADC0808是ADC0809的简化版本,功能基本相同。一般在硬件仿真时采用ADC0808进行A/D转换,实际使用时采用ADC0809进行A/D转换。ADC0809是带有8位A/D转换器、8路多路开关以及微处理机兼容的控制逻辑的CMOS组件。它是逐次逼近式A/D转换器,可以和单片机直接接口。 ADC0809的内部逻辑结构
由下图可知,ADC0809由一个8路模拟开关、一个地址锁存与译码器、一个A/D转换器和一个三态输出锁存器组成。多路开关可选通8个模拟通道,允许8路模拟量分时输入,共用A/D转换器进行转换。三态输出锁器用于锁存A/D转换完的数字量,当OE端为高电平时,才可以从三态输出锁存器取走转换完的数据。
图 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,若信号太小,必须进行放大;输入的模拟量在转换过程中应该保持不变,如若模拟量变化太快,则需在输入前增加采样保持电路。 ADC0809应用说明
1) ADC0809内部带有输出锁存器,可以与ATS51单片机直接相连。 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的时序图如下图
实验电路及接线如下图示 :
连线 1 2 连接孔1 IN0 AD_CS 连接孔2 压力传感器输出 CS2 图 接线框图 图 实验电路连线图
A/D转换器的结构及连线图如上图所示,AD0809的工作过程如下:首先用指令选择0809的一个模拟输入通道,当执行MOVX @DPTR,A时,产生一个启动信号给START引脚送入脉冲,开始对选中通道转换。当转换结束后发出结束信号,置EOC引脚信号为高电平,该信号可以作为中断申请信号,当读允许信号到,OE端有高电平,则可以读出转换的数字量,利用MOVX A,@DPTR把该通道转换结果读到累加器A中。转换电压为0—5V,调节桥路中的电位器,使其输出电压为0—5V,可以在较小范围内波动,当满量程输出时对应八个1的输出,由于前边计算的电压变化和电阻变化成正比关系,而且电阻变化和应变成正比,进而得出的压力和电压是成正比的。传感器桥路输出的电压经过比例变换后转换成二进制码的形式送入P0口。 其程序框图如下:
开始 图五 主程序流程图
图六 中断子程序 产生中断初始化程序控制器处理模块 工程量代换转换为压力值 初始化LED 将结果分位成十进制 本实验采用8051单片机,其管脚图如下:
图 8051管脚图 其管脚功能如下: 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。 O线
80C51共有4个8位并行I/O端口:P0、P1、P2、P3口,共32个引脚。P3口还有 第二功能,用于特殊信号输入输出和控制信号(属控制总线)。
AD0809接口电路及LED接口电路
第三章 压力传感器实验数据采集及显示
数据采集及显示
数据处理子程序是整个程序的核心。主要用来调整输入值系数,使输出满足量程要求。另外完成A/D的采样结果从十六进制数向十进制数形式转化。系数转换在IN0输入的数最大为5V,要求压力200pa对应的是5V,将系数进行一定倍数的变换,并用小数点位置的变化体现这一过程。数制之间的转换:在二进制数制中,每向左移一位表示数增加两倍。要求压力80N对应的是5V,而压力与电压的变换是线性关系,对应AD转换器的输出为八个1,当有一定的压力值输入时,对应这个关系转化成相应的二进制代码送入P0口。然后再反过来应用这个变化关系,经最终得到的数值进行二进制到BCD码转化,然后逐位在LED数码管上显示。
数据采集用A/D0809芯片来完成,主要分为启动、读取数据、延时等待转换结束、读出转换结果、存入指定内存单元、继续转换(退出)几个步骤。ADC0809初始化后,就具有了将某一通道输入的0~5模拟信号转换成对应的数字量00H—FFH,然后再存入存储器的指定单元中。在控制方面有所区别。可以采用程序查询方式,延时等待方式和中断方式。
显示子程序是字符显示,首先调用事先编好数码管显示子程序。初始化命令,然后输出显示命令。在显示过程中一定要调用延时子程序。当输入通道采集了一个新的过程参数,当有压力信号输入时,调用显示子程序在数码管上显示。
第四章 心得体会
传感器课程设计结束了,我的收获很多,我做的是基于ATC51单片机的压力检测系统的设计,用到的主要芯片是ATC51和ADC0808,实现的功能是将传感器采集到的模拟信号转换成单片机可以识别的数字信号,再经单片机转换成LED显示器可以识别的信息,最后显示输出。在显示的过程中通过键盘,向计算机操作可以控制显示需要的值。对于学习过单片机,因此对ATC51比较熟悉,对ADC0808则比较陌生,从网上搜索的资料对我帮助很大,遇到不懂的问题自己解决不了,就和大家一起讨论。此次课程设计使我更加了解C51程序的强大功能,以前学习单片机过程中得漏洞也得到了很好的修补,Keil
和proteus的使用加深了我对着两种软件的理解程度,单片机控制数码管的显示时,尤其是多个时,要使用驱动电路。
课程设计暴露了我在平时学习中的不足,以及对知识缺乏融会贯通的能力,课程设计过程中,我们不断发现错误,不断修改,不断领悟,不断获取。实践出真知,自己亲自动手去做,才知道知识的匮乏!
附录:
程序设计
;
ADResult EQU 40H
RS BIT ;定义LCM的接脚RS、R/W、Enable为、、 R_W BIT ENABLE BIT
DB0_DB7 DATA P1 ;DB0-DB7的接脚为P1来控制,以方便程式的撰写与维护
;*------------------------------------------------------------------------ ORG 0000H ;通知编译器下面的程式由程式记忆体
;地址1000H开始存放
AJMP START ;跳到标记start处执行程式 ORG 000BH ;跳到中断服务程式 AJMP INSERS
ORG 0013H
AJMP INT
ORG 30H ;通知编译器下面的程式由程式记忆体地址0030H开始存入。
START: NOP
MOV TMOD,#0 ;初始化TO MOV TL0,#0 MOV TH0,#0 SETB EA SETB ET0 SETB TR0 SETB EX1 SETB IT1
MOV R5,#50 ;设定延时次数。
MOV SP,#60H ;设定MCS-51从内容资料记忆体地址61H开始存放堆栈资料。
CALL Initial ;调用启动LCM的子程式 CALL CLS ;调用清除显示器的子程式
;即将光标移到第一行第一个列的位置上。
CALL Write_instruction ; 调用写指令码子程式 MOV DPTR,#LINE3 ;将第一行字串在程式记忆体中的起始地址存入DPTR CALL STRING ;调用STRING子程式,将字串显示到LCM
;即将光标移到第二行第三个列的位置上
CALL Write_instruction ;调用写指令码子程式
MOV DPTR,#LINE4 ;将第二行字串在程式记忆体中的
起始
:地址存DPTR。
CALL STRING CALL DELAY0
CALL CLS ;调用清除显示器的子程式
;即将光标移到第一行第一个列的位置上。
CALL Write_instruction ;调用写指令码子程式。
MOV DPTR,#LINE1 ;将第一行字串在程式记忆体中的起始地址存入DPTR
CALL STRING ;调用STRING子程式,将字串显示到LCM
;即将光标移到第二行第三个列的位置上
CALL Write_instruction ;调用写指令码子程式。
CALL AD0809Read ;启动AD0809
;--------------------------------------------- LOOP: SJMP LOOP
SJMP LOOP;JNB IE1, LOOP ;查询等待 ;CLR IE1 ;SJMP INT
;--------------------------------------------
LINE1: DB \" Pressure: \在LCM第一行显示字串\"LCD Testing___\"
LINE3: DB \"Welcome To \LINE4: DB \"LiRen College!\
;------------------------------------------------------------------ ;ADC0809启动程序
;------------------------------------------------------------------ AD0809Read: MOV DPTR, #8000H MOV A, #00
MOVX @DPTR,A ; 起动 A/D MOV A, #40h
DJNZ ACC, $ ; 延时 > 100us
;********************************************************************** ;工程量代换:B存高八位,A存低八位
;程序中除以256相当于右移八位,即高八位变为整数位,低八位变为小数位 ;最后结果为: B存整数部分,A存小数部分
;********************************************************************** DAIHUAN: MOV B,#200 MOV A,ADResult
MUL AB
MOV 51H,A ;小数部分 MOV 50H,B ;整数部分 RET
;------------------------------------------------------------------ ;INT1查询服务子程式
;------------------------------------------------------------------ INT: MOV DPTR,#8000H MOVX A, @DPTR ; 读入结果 CALL CLS
;即将光标移到第一行第一个列的位置上。
CALL Write_instruction ;调用写指令码子程式。
MOV DPTR,#LINE1 ;将第一行字串在程式记忆体中的起始地址存入DPTR
CALL STRING ;调用STRING子程式,将字串显示到LCM
;即将光标移到第二行第三个列的位置上
CALL Write_instruction ;调用写指令码子程式。 MOV A,#50H
MOV ADResult, A
CALL DAIHUAN
MOV DPTR,#LINE2 ;将第二行字串在程式记忆体中的起始地址存DPTR。 CALL DATE ;调用DATE子程式,将数据显示到LCM RETI
;------------------------------------------------------------------ ;TO中断服务子程式
;------------------------------------------------------------------ INSERS: MOV TH0,#0 MOV TL0,#0 DJNZ R5,NO MOV R5,#50 NO: RETI
;------------------------------------------------------------------ ;Initial子程序 设定LCM使用8BITS汇流排,显示两行, ;使用5*7字型,显示器要显示 光标要显示但不闪烁
;------------------------------------------------------------------ Initial: MOV A,#00111000B ;
CALL Write_instruction ; 第一次设置显示模式 MOV A,#00111000B ;
CALL Write_instruction ; 第二次设置显示模式 MOV A,#00111000B ;
CALL Write_instruction ; 第三次设置显示模式 MOV A,#00111000B ;
CALL Write_instruction ; 第四次设置显示模式 MOV A,#00001110B ;
CALL Write_instruction ; 设置光标 MOV A,#00000110B ;
CALL Write_instruction ; 设置LCD数据指针自动加一 RET
;----------------------------------------------------------------- ;CheckBusy子程序
;等待LCM有空可以执行下一行命令
;-----------------------------------------------------------------
CheckBusy: PUSH ACC ;将累加器ACC的内容放到堆栈内,
;以免破坏原来的ACC的资料 CheckBusyLoop: CLR ENABLE ;设定E=0,禁能读模式 SETB R_W ;设定R/W=1,选择读模式
CLR RS ;设定RS=0,选择指令寄存器IR
SETB ENABLE ;将脚设定为1,使能LCM
MOV A,DB0_DB7 ;将存在ACC内的资料经由P1存入ACC中 ;以便查封第7位元及BF是否为0什么
CLR ENABLE ;将脚设定为0 MOV A,#00H
JB ,CheckBusyLoop ; 判断由LCM读入资料的第7位及BF ;是否为1,若等于1表示LCM忙碌中,CPU
;跳到标记CheckBusyLoop继续执行程序
POP ACC ;将累加器ACC内容从堆栈区取出 CALL DELAY ;调用延迟子程序,延时约数个mS RET ;返回主程序
;----------------------------------------------------------------- ;Write_instruction子程序
;将ACC内的资料输入到LCM的IR寄存器
;-----------------------------------------------------------------
Write_instruction: CALL CheckBusy ;调用CheckBusy子程序确定LCM可以执行指令
CLR ENABLE ;设定E=0,禁能LCM
CLR R_W ;设定R/W=0,选择写模式
CLR RS ;设定RS=0,选择指令寄存器IR SETB ENABLE ;将脚设定为1,使能LCM
MOV DB0_DB7,A ;将存在ACC内的指令码经由P1输出到LCM CLR ENABLE ;将设定为0,MCS-51向LCM存取资料后, ;必须将LCM的E脚输出0,让LCM禁能(Disable) ;不做介面的资料传送或设定 RET ;返回主程序
;----------------------------------------------------------------- ;WriteLCDData子程序
;将ACC内的资料输入到LCM的DR寄存器
;----------------------------------------------------------------- WriteLCDData:
CALL CheckBusy ;调用CheckBusy子程序,确定LCM可以执行指令
CLR ENABLE ;设定E=0,禁能LCM
CLR R_W ;设定R/W=0,选择写模式
SETB RS ;设定RS=1,选择U寄资料存器DR
SETB ENABLE ;将脚设定为1,使能LCM
MOV DB0_DB7,A ;将存在ACC内的指令码经由P0输出到LCM CLR ENABLE
RET ;返回主程序
;----------------------------------------------------------------- ;CLS子程序 清除LCM的显示字幕
;----------------------------------------------------------------- CLS: MOV A,#01H CALL Write_instruction RET
;----------------------------------------------------------------- ;DATE子程序
;压力数据的扫描显示
;----------------------------------------------------------------- DATE: PUSH ACC ;入栈累加器A PUSH PSW ;入栈PSW中的CY HIG:MOV R1,#50H MOV A,@R1
CJNE A,#H,CJ1 ;判断是否等于100,等于100则直接显示100 MOV A,#01H MOVC A,@A+DPTR LCALL WriteLCDData DEC A
LCALL WriteLCDData LCALL WriteLCDData SJMP XSD
CJ1: JC SHI ;判断是否大于100 大于100则继续执行分位操作
MOV B,#H ;否则跳转到十位分位程序 DIV AB ;除法做分位处理 MOVC A,@A+DPTR LCALL WriteLCDData MOV A,B SHI: CLR C
CJNE A,#0AH,CJ2 ;判断是否等于10等于10则直接显示10 MOV A,#01H MOVC A,@A+DPTR LCALL WriteLCDData DEC A
LCALL WriteLCDData SJMP XSD
CJ2: JC GEE ;判断是否大于10 MOV A,B ;否则跳转到个位显示程序 GEE: MOV B,#0AH DIV AB
MOVC A,@A+DPTR LCALL WriteLCDData MOV A,B
MOVC A,@A+DPTR LCALL WriteLCDData
XSD: MOV A,#0AH ;小数点显示程序 MOVC A,@A+DPTR LCALL WriteLCDData
LOWER: INC R1 ;小数位显示程序 分位原理同上 MOV A,@R1 MOV B,#H DIV AB
MOVC A,@A+DPTR LCALL WriteLCDData MOV A,B MOV B,#0AH DIV AB
MOVC A,@A+DPTR LCALL WriteLCDData MOV A,B
MOVC A,@A+DPTR LCALL WriteLCDData POP PSW POP ACC RET
;----------------------------------------------------------------- ;STRING子程序
;将一个字幕显示在LCM,字串的起地址要存入DPTR,字串必须以00H结束 ;----------------------------------------------------------------- STRING:
PUSH ACC LOOP1: CLR A MOVC A,@A+DPTR
JZ END_PR CALL WriteLCDData INC DPTR JMP LOOP1 END_PR: POP ACC RET
;----------------------------------------------------------------- ;DELAY子程所延迟的时间约为 ;延时时间约为R6*(500uS)
;----------------------------------------------------------------- DELAY: MOV R6,#5 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET
DELAY0: MOV R3,#20 D2: MOV R4,#248 D3: MOV R2,#200
DJNZ R2,$ DJNZ R4,D3 DJNZ R3,D2
RET END
参考文献资料:
1、单片微型计算机接口技术及其应用 张淑清 国防工业出版社 单片机原理及应用技术 张淑清
单片机应用技术汇编
实物图:
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务