脉冲宽度测量与显示的方法有哪些

脉冲宽度测量与显示的方法有哪些,第1张

  脉冲宽度测量方法有几种。最常用的脉冲宽度有W_(pp)(两峰值点的间距)、W_(50)(最高峰值强度50%处的宽度)和W_(10)(最高峰值强度10%处的宽度)。另外,还有测量两个最外成分各自强度50%处的宽度W_(c50)和各自强度10%处的宽度W_(c10)。

  要实现脉冲宽度的测量,再把测量值用数码管显示

  为了实现这一功能我们大致把整个系统分为以下几个模块:

  1. 振荡器模块:产生某一特定振荡频率的时钟,一般要求这一频率较高,本题要求精度为10us,所以采用100kHZ的振荡频率即可。

  2. 计数器模块:对振荡脉冲进行计数,用待测脉冲信号作为使能输入(或开关),这样就可以记录下脉冲有效的时间,计数值乘以10us即为待测脉冲宽度。

  3. 译码显示模块:题目中要求用数码管显示6位测量值,分别完成译码和数码管的静态显示或是动态扫描输出即可。

  框图如下:

  脉冲宽度测量与显示的方法有哪些,脉冲宽度测量与显示的方法有哪些,第2张

  方案一:运用CD4518(BCD码全加器)的级联来实现计数,CD4511七段译码,555多谐振荡器提供100kHZ频率,待测信号输入到计数器使能。 电路连接图如下:

  

  上述方案为数码管静态显示。优点为方案简单无需编程,只需要组合逻辑与时序逻辑即可完成。缺点为硬件电路的连线过于复杂上容易出错且很难排除故障,另一个问题在于使用的外接振荡源精度不是很高,势必带来不小的误差。此方案理论上可行,由于实际 *** 作带来的不方便,我们考虑了后面一种方案。

  方案二:利用单片机门控位实现脉冲宽度测量。基本思路为:

  利用单片机内部定时器的GATE信号,对于定时器T0来讲,如果GATE=1,则用软件把TR0置1,且INT0为高电平时可以启动定时器T0,所以我们就把被测脉冲信号从INT0端输入,使其上升沿触发启动T0计数,下降沿停止T0计数。定时器数值乘以机器周期即为脉冲宽度。电路连接图如下:

  

  可以看出,电路结构由以下部分构成:

  1. 振荡模块:12MHZ晶体振荡器,由XTAL1和XTAL2接入单片机。

  2. 单片机控制模块:AT89S51单片机实现控制,主要任务是对其进行必要的编程设计。

  3. 输出显示模块:由数码管动态扫描显示,注意P0需要外接上拉电阻。 另外,还有一个异或门电路是用来实现选择测量正脉冲还是负脉冲。

  脉冲宽度测量与显示的方法有哪些,脉冲宽度测量与显示的方法有哪些,第3张

  和前一方案相比可以发现,这样的方案要比用组合时序逻辑连线简单,而且较容易查错。单片机内部有定时器计数器,就可以使用相同的原理来对脉冲宽度进行测量,所以说使用单片机编程实现控制也是可行的,所以,下面就针对方案二的程序进行进一步的分析。

  程序设计及分析:

  51单片机的计数功能我们已经很熟悉了,但是我们也知道不论是哪种方式的计数,其最大值也只能计65535,而本次设计要求要计的范围是0到99.99ms,这就意味着超出了计数器的量程,解决方案也有两个。第一种,使用两个计数器配合实现计数位的扩展。第二种,使用中断服务程序,也可以实现扩展。这里我们选择使用中断服务程序的方法。以下是该设计的中断服务程序:

  T0INT: PUSH ACC

  MOV TH0,#00H

  MOV TL0,#00H

  MOV A,COUNT+1

  ADD A,#01H

  MOV COUNT+1,A

  MOV A,COUNT

  ADDC A,#00H

  MOV COUNT,A

  POP ACC

  RETI

  考虑到单次测量可能会带来较大的误差,我们采用次测量取平均的方法,方便起见,我们使用两个计数器共32位计数值,对连续脉冲测量256次,只显示其高24位,低8位舍掉不显示,这样就巧妙地实现了测量256次取平均的效果。

  另外,因为外部电路省掉了译码的部分,所以必须在单片机内部完成译码功能,在译码之前首先还必须经过一次转码,即把2进制码转换成可以由数码管显示的码。这里用循环移位的方法把所有测量位都连了起来。然后再转换成BCD码存放。最后还有显示的子函数就实现把BCD码转换成7段码,显示程序如下:

  DISPLAY: MOV R0,#70H

  MOV R3,#01H

  NEXT: MOV A,#00H

  MOV P1,A

  MOV A,@R0

  MOV DPTR,#LABLE1

  MOVC A,@A+DPTR

  MOV P0,A

  MOV A,R3

  MOV P1,A

  LCALL DELAY

  INC R0

  JB ACC.5,EXIT

  RL A

  MOV R3,A

  SJMP NEXT

  EXIT: RET

  LABLE1: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH

  DB 6FH,77H,7CH,39H,5EH,79H,71H,00H,73H

  DELAY: MOV R7,#02H

  DEL1: MOV R6,#0FFH

  DEL2: DJNZ R6,DEL2

  DJNZ R7,DEL1

  RET

  END

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2717415.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存