脉宽测量1.docx
《脉宽测量1.docx》由会员分享,可在线阅读,更多相关《脉宽测量1.docx(16页珍藏版)》请在冰点文库上搜索。
脉宽测量1
《电子测量》课程设计报告
课题:
脉宽测量电路设计
班级学号
学生姓名
专业电子信息工程
系别电子信息工程系
指导教师电子测量课程设计指导小组
电子信息工程系
年月
1设计目的:
a)培养理论联系实际的正确设计思想,训练综合运用已经学过的理论生产实际知识去分析和解决工程实际问题的能力。
b)学习较复杂的电子系统设计的一般方法,了解和掌握模拟、数字电路等知识解决电子信息方面常见实际问题的能力,由学生自行制作和自行调试。
c)进行基本技术技能训练,如基本仪器仪表的使用,常用元器件的识别、测量、熟练运用的能力,掌握设计资料、手册、标准和规范以及使用仿真软件、实验设备进行调试和数据处理等。
d)培养学生的创新能力。
2设计要求:
a)说明电路的工作原理;
b)主单元电路和元器件参数计算、选择、使用方法经功能;
c)画出总体电路图;
d)上交完整的实习报告。
3总体设计
3.1脉冲宽度测量方法
8031/8051只有定时器0和定时器1,对图示的连续脉冲序列,可采用同时起动定时器0和定时器1,当读到第二个脉冲的上升沿时,关闭定时器0,测得值保存在TL0和TH0中,并转存到所设定的RAM区相应单元,得出T1时间值;当读到第二脉冲的下降沿时,关闭定时器1,计数值保存在TL1和TH1,同样存贮到RAM空间中,得出T2的时间值,T2减去T1即得T3。
用这种方法连续测量N次,则t=(t1+t2+∧+tn)/N,N的大小依实际情况而定。
图1测量脉冲宽度的分析图
3.2利用单片机89C2051实现脉冲宽度测量方法
AT89C51内有两个可编程定时/计数器。
我们使用T0完成定时功能,T1完成计数功能,当AT89C51的INT0端输入待测的随机脉冲序列时,在脉冲低电平时,引起INT0中断,进行定时,计数测脉宽。
因此,测得随机脉冲序列高电平宽度需将待测信号反向一次后输入给AT89C51的INT0引起INT0中断。
当脉冲低电平时,每定时10us,AT89C51的P1.0引脚求反一次,并将求反信号输入到计数器T1,作为计数脉冲信号启动计数器计数,直到输入到INT0的信号变为高电平为止,外部中断结束。
假设在这段时结果间内计数器总的计数值为X,则所测该脉冲宽度为t1=X×10(us),将一次测量存入相应RAM单元中。
若连续测量N个脉冲的宽度,则重复上述过程,将采样结果存入RAM区中。
为了避免测量时刻的随机性而造成第一个信号脉冲不定带来的测量误差及防止测量时干扰问题,则连续N+2次测量,将N+2次测量结果进行比较,去除一个最大值,一个最小值,剩余N个值进行平均,并送液晶显示器进行结果显示。
图2AT89C51引脚图及其功能
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.0RXD(串行输入口)
P3.1TXD(串行输出口)
P3.2INT0(外部中断0)
P3.3INT1(外部中断1)
P3.4T0(记时器0外部输入)
P3.5T1(记时器1外部输入)
P3.6WR(外部数据存储器写选通)
P3.7RD(外部数据存储器读选通)
P3口同时为闪烁编程和编程校验接收一些控制信号。
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:
来自反向振荡器的输出。
振荡器特性:
XTAL1和XTAL2分别为反向放大器的输入和输出。
该反向放大器可以配置为片内振荡器。
石晶振荡和陶瓷振荡均可采用。
如采用外部时钟源驱动器件,XTAL2应不接。
有余输入至内部时钟信号要通过一个二分频触发器,因此对外部时钟信号的脉宽无任何要求,但必须保证脉冲的高低电平要求的宽度。
4测量电路的硬件设计
4.1测量电路的硬件原理图
图3硬件原理图
由图3硬件原理可知,测量电路以AT89C51单片机为核心,四位数码液晶显示器组成,它由数码显示器、驱动电路、8位CPU接口构成。
在P3.2送入连续脉冲,T0、T1分别进行定时、计数。
利用AT89C51的P2口作为数据输出,送到数码显示管显示,P1口的P1.0、P1.1、P1.2、P1.3通过四个非门取反驱动数码显示。
运行键、复位键共两个功能键。
数字键主要用于设定N个连续脉冲信号的N值。
控制系统一上电,显示0值。
按运行键后,开始对脉冲序列宽度进行测量,测量过程中若因某种原因需重新开始测量时,按复位键,整个系统复位,并重新开始测量。
4.2单元电路设计
4.2.1时钟电路设计
时钟电路用于产生89C51单片机工作时所需要的时钟控制信号。
89C51单片机的内部电路在时钟信号的控制下,严格地按时序执行指令。
在执行指令时,CPU首先到程序存储器中取出需要执行的指令操作码,然后译码,并由时序电路产生一系列控制信号去完成指令所规定的操作。
单片机各功能部件的运行都是通过时钟信号来控制,有条不紊地一拍一拍地工作的,因此,时钟频率直接影响单片机的速度,时钟电路的质量也直接影响单片机系统的稳定性。
本设计中,单片机要完成对呀信号的A/D转换和对A/D转换的结果存入外部存储器,对于高频载波信号和调制信号,单片机的速度要够快才能在两次采样之间的时间内完成这两项工作,时钟电路对于本设计有着重要的作用。
常用的时钟电路设计有两种方式,内部时钟方式和外部时钟方式,本设计采用内部时钟的方式。
89C51内部有一个用于构成振荡器的高增益反相放大器,该高增益反相放大器的输入端为芯片引脚XTAL1,输出端为引脚XTAL2。
这两个引脚跨接石英晶体振荡器和微调电容,就构成了一个稳定的自激振荡器,89C51内部时钟的振荡电路如下图所示:
图4振荡电路
电路中的电容C1和C2典型值通常选择为30PF左右,晶体频率越高,系统的时钟频率也就越高,单片机的运行速度也就越快。
选用12MHZ的晶振,机器周期则为1us。
4.2.2上电复位电路
图5按键式复位电路
单片机的复位都是靠外部复位电路来实现的,在时钟电路工作后,只要在单片机的RESET引脚上出现24个时钟震荡脉冲(两个机器周期)以上的高电平,单片机就能实现复位。
为了保证系统可靠复位,在设计复位电路时,一般使RESET引脚保持10ms以上的高电平,单片机便可以可靠的复位。
图5是一个按键式复位电路,它的上电复位功能通过按键实现。
当开关按下时,电容C充电,通过R6、R7形成回路,使RESET端产生高电平;当开关断开时,电容放电,RESET的点位与地相同,复位结束。
4.2.3数码管显示电路
数码管显示电路如图6所示:
图6数码管引脚排列
5软件设计
5.1软件总框图
图7T0工作方式1的结构图
首先将定时/计数器设定为定时方式0,且GATE=1,计数器初值为0,将TR0置1。
如图7是T0工作方式1结构图。
当INTO(P3.2)上出现高电平时,加1计数器开始对机器周期计数,当INTO上信号变为低电平时,停止计数,读出TH1、TL1的值,显然TH1、TL1的读出值即INTO引脚上脉冲的宽度(机器周期数)。
图8软件流程图
5.2主程序模块
5.2.1主程序
AT89C51单片机的内部16位定时/计数器是一个可编程定时/计数器,它既可以工作在13位定时方式,也可以工作在16位定时方式和8位定时方式。
只要通过设置特殊功能寄存器TMOD,即可完成。
定时/计数器何时工作也是通过软件来设定TCON特殊功能寄存器来完成的。
这里选用16位定时工作方式,对于T0来说,最大定时也只216*1us=65536us,即65.536ms。
如果被测脉冲的宽度大于65536个机器周期时,可设一个中断次数计时器R1,每当定时/计数器满65536个机器周期而产生溢出中断时,计数器R1加1计数,且定时/计数器T0清0后重新从0开始计数,直到脉冲结束。
MOV TMOD,#09H ;置定时/计数方式1,GATE=1
MOV TL1,#00H ;计数器清零
MOV TH1,#00H
MOV TL0,#10 ;延时10us常数
MOV TH0,#0
MOV R0,#20H ;置地址指针初值
MOVIE,#82H;开放CPU和T0中断
MOVR1,#00H;中断次数计数器清零
JBP3.2,$;等待/INTO变低
SETB TR0 ;启动T0
SETB TR1 ;启动T1
JNBP3.2,$
JBP3.2,$
CLR TR1
CLR TR0;关T0
MOV @R0,TL1 ;保存计数值
INCR0
MOV @R0,TH1
INT_T1:
PUSH ACC
PUSH PSW
CLR TR1
CLR TR0;关T0
INCR1
SETB TR1
SETB TR0
POP PSW
POP ACC
RETI
运行上述程序后,只要将21H、20H两单元的内容(定时/计数器中的内容)转化成十进制数,乘以机器周期,再加上65536个机器周期乘以中断次数(R1的内容),即是外部正脉冲的宽度。
5.2.2中断部分
所谓中断,是指CPU正在处理某件事情的时候,外部发生了某一事件请求CPU迅速去处理。
CPU暂时中断当前的工作,转入处理所发生的事件,处理完以后,再回来继续执行被中止了的工作。
外部中断是由外部原因引起的。
本设计使用单片机的外部中断0和外部中断1,相应的中断请求信号是
和
,有两种触发方式,即电平触发方式和脉冲触发方式。
(1)首先应考虑设置中段触发方式。
定时器控制寄存器TCON与中断有关的位如下:
8F
8E
8D
8C
8B
8A
89
88
TF1
-
TF0
-
IE1
IT1
IE0
IT0
表5.1定时器控制寄存器TCON
其中IT1(IT0):
外中断请求信号方式控制位。
该位由用户设置。
当IT1(IT0)=1时,选择脉冲触发方式,负跳变有效;当IT1(IT0)=0时,选择电平触发,低电平有效。
由硬件连接可知,单稳态触发器输出单稳态脉冲的每个下降沿触发中断0,每次AD转换结束后触发中断1,则外部中断0和外部中断1均为脉冲触发方式。
在初始化程序中应使用以下指令对触发方式进行设置:
SETBIT0;外部中断0设置为边沿触发方式
SETBIT1;外部中断1设置为边沿触发方式
(2)另外要考虑中断允许
中断的允许或者禁止是由片内的中断允许寄存器IE控制的,寄存器的内容及位地址如下:
AF
AE
AD
AC
AB
AA
99
A8
EA
/
/
ES
ET1
EX1
ET0
EX0
表5.2中断允许寄存器IE
EA:
中断允许总控制位。
EA=0时,表示CPU禁止所有中断,即所有的中断请求被屏蔽;EA=1时,表示开放CPU中断,但是每个中断源的中断请求是允许还是禁止,要由各自的允许位控制。
EX0(EX1)位:
外部中断允许控制位。
EX0(EX1)=0,禁止外中断;EX0(EX1)=1,允许外中断。
在初始化程序中,应先开放中断,以等待采样结束后进入中断服务程序进行AD转换。
则EA=1,EX1=1,EX0=1,IE=82H。
初始化程序中,使用MOVIE,#82H,开放中断。
5.2.3数码显示部分
Disolay:
mova,r0
movP2,a ;把计数值在LED上显示
sjmpdisplay
play:
movr1,#dat ;p2口接数码管显示
mova,@r1
movdptr,#tab1 ;查段码表1
movca,@a+dptr
movp2,a ;数据送p2口
acalldelay ;调用延时
incr1
mov a,@r1
movdptr,#tab2 ;查段码表2
movca,@a+dptr
movp2,a ;数据送p2口
acalldelay ;调用延时
incr1
mov a,@r1
movdptr,#tab3 ;查段码表3
movca,@a+dptr
movp2,a
acalldelay
incr1
mov a,@r1
movdptr,#tab4 ;查段码表4
movca,@a+dptr
movp2,a
acalldelay
ajmpplay
delay:
movr7,#1
del0:
movr6,#2
del1:
movr5,#10
djnzr5,$
djnzr6,del1
djnzr7,del0
ret
tab1:
db0e0h,0e1h,0e2h,0e3h,0e4h,0e5h,0e6h,0e7h,0e8h,0e9h;最低位数码管段码
tab2:
db0d0h,0d1h,0d2h,0d3h,0d4h,0d5h,0d6h,0d7h,0d8h,0d9h
tab3:
db0b0h,0b1h,0b2h,0b3h,0b4h,0b5h,0b6h,0b7h,0b8h,0b9h
tab4:
db70h,71h,72h,73h,74h,75h,76h,77h,78h,79h,0ffh ;最高位数码管段码
6调试
1、硬件调试,用PROTEUS画出原理图,完毕后进行检查,检查是否有元器件正负接反、引脚功能是否匹配、有无短路现象,如有则进行相应的修改直至无误为止。
并通过仿真,在其环境下实现脉宽的测量。
2、软件调试,本次课程设计是在KeilC51单片机上进行的初步软件仿真,所以当在软件程序与软硬件联调时,发现了许多问题。
比如:
试验箱上芯片不全;计时功能也是很难得以实现,由于所计时间观察需要很长时间才能判断是否有错误,所以没有深入,只是实现了计时功能。
7课程设计总结
课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。
回顾起此次课程设计,至今我仍感慨颇多,的确,从找资料到定稿,从理论到实践,在整整两星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,为了提高自己的能力,我选择用单片机进行设计。
这毕竟第一次做的,难免会遇到过各种各样的问题,有时候被一些小的,细的问题挡住前进的步伐,让我总是为了解决一个小问题而花费很长的时间。
最后还要查阅其他的书籍才能找出解决的办法。
并且我在做设计的过程中发现有很多东西,也知道拉自己的不足之处,知道自己对以前所学过的知识理解得不够深刻,掌握得不够牢固。
8参考文献
1.梅丽凤,王艳秋,汪毓铎,张军单片机原理及接口技术(修订本).北京:
清华大学出版社;北京交通大学出版社2007
2.严石,郑蓉建,徐君单片机原理及应用.淮阴工学院2009
3.朱玉红MCS—51单片机对连续脉冲宽度测量的实验自动化与仪器仪表2003第一期1001-9227(2003)01-0035-02
4.张兰群利用单片机门控位测量脉冲的宽度电脑学习2004第六期
5.康华光.电子技术基础数字部分.北京:
高等教育出版社,2000
6.李光飞等,单片机课程设计实例指导.北京:
北京航空航天大学出版社,2004