脉冲宽度的测量

合集下载

脉冲宽度的测量

脉冲宽度的测量

第一章绪论§1-1研究本课题的意义脉冲宽度的测量,实质是时间的测量,在生产和科学研究中,经常要测量时间,例如,完成第一生产工序所需要的时间,周期性信号的周期,激光测距和雷达测量目标距离,也是测量电磁波从目标反射回来的时间来确定目标的距离,运动物体行程的时间等等都说明时间测量的重要性。

§1-2时间测量的方法常见的时间测量仪表有运动会上用的秒表和家庭用的时钟,个人用的手表,这些机械式仪表读数不太精确,分辨力不太高,例如手表的分辨力为秒百米赛跑的计时秒表也只能分辨到0.01秒,如果要测量微秒,机械式的秒表是办不到的,只有采用电子式仪表要测量。

§1-3电子计时的工作原理随着电子技术的飞速发展,新的电子元器件的出现,为制造先进的仪器仪表奠定基础。

电子计时器的工作原理是由一基准的时钟脉冲源,目前时钟频率可达到几千兆赫,如计算机的主振频率可达到几个GHz,它的一个周期的时间为零点几个毫微秒,用这种时钟脉冲来测量时间,其分辨力可达到10-9秒。

电子计时器的工作原理框图1-1所示,用一个门电路来控制时钟脉冲通过,例如用一个电子开关使门打开,使时钟脉冲通过门电路送到计数器,进行计数,经过一段时间发出一个信号使门电路关闭。

无时钟脉冲通过,计数器停止计数,计数器计的数通过译码、显示器、显示电路及可用数字显示这段时间时钟脉冲图1-1 计时电路框图电子计数仪的优点:精度高、使用方便、读数直观、测量范围大,可远距离传输§1-4时间测量仪的应用数字式时间测量仪是生产和科学实验中不缺少的基本仪表,在测量速度、加速度、动量、冲量、频率和周期等方面都得到广泛应用。

第二章方案论证§2-1设计任务输入被测电压幅度:0.1~10V输入信号的脉冲宽度≧100us测量误差≦1%可测量周期性信号的周期§2-2脉冲宽度测量的工作原理脉冲宽度的测量,实质上是时间的测量,其电路组成包括输入通道,时基电路、主控门电路、控制电路、计数与显示电路五大部分组成。

激光器脉冲宽度

激光器脉冲宽度

激光器脉冲宽度1. 介绍激光器脉冲宽度是指激光脉冲的时间间隔。

在激光技术中,脉冲宽度的精确控制非常重要,因为它会直接影响到激光器的性能和应用。

本文将深入探讨激光器脉冲宽度的含义、影响因素、测量方法以及其在不同领域的应用。

2. 脉冲宽度的含义激光器脉冲宽度是指激光脉冲的时间时长,通常用时间单位来表示,如纳秒(ns)或皮秒(ps)。

它是一个重要的参数,直接影响到激光器的光学特性和产生的光脉冲形状。

脉冲宽度越短,脉冲能量越集中,对某些应用来说更有优势。

3. 影响脉冲宽度的因素3.1 激光器本身的特性激光器本身的设计和制造过程会对脉冲宽度产生影响。

例如,激光脉冲的宽度往往受限于激光器的工作方式、脉冲波形以及荧光寿命等。

3.2 光学系统参数光学系统中的元件,如谐振腔、增益介质、输出镜片等,也会对激光器脉冲宽度产生影响。

这些元件的反射率、透过率以及位置都会对脉冲宽度进行调控。

3.3 外界条件外界条件,如温度、湿度、环境磁场等,也会对激光器脉冲宽度产生一定的影响。

外界条件的变化可能导致激光器输出脉冲的时间间隔发生变化,进而改变脉冲宽度。

4. 脉冲宽度的测量方法测量激光器脉冲宽度的方法有很多种,下面介绍几种常用的方法: ### 4.1 电光采样法电光采样法是通过将激光脉冲和一个光学准直系统耦合,然后将光束分成两路,一路进行延时,另一路经过探测器接收并产生电信号,接着通过测量延时的方法来得到脉冲宽度。

4.2 自相关法自相关法是利用非线性光学效应来测量脉冲宽度,常用的方法是通过将激光脉冲分为两部分并进行光学干涉,然后将干涉结果与参考脉冲进行相乘,最后测量乘积的能量分布,从而得到脉冲宽度。

4.3 束腰法束腰法是一种基于峰值功率密度来测量脉冲宽度的方法。

通过调节光束的尺寸,测量在不同尺寸下脉冲能量随时间分布的变化,从而得到脉冲宽度。

5. 激光器脉宽在不同领域的应用激光器脉冲宽度在许多领域都有广泛的应用,下面列举几个常见的应用场景: ### 5.1 生命科学领域在生命科学领域,激光器的脉冲宽度对于激光显微镜、流式细胞术等技术的成像和测量效果有很大影响。

数字脉冲宽度测量仪-文亚平

数字脉冲宽度测量仪-文亚平

数字脉冲宽度测量仪-文亚平数字脉冲宽度测量仪是一种用于测量数字脉冲的工具,它具有高准确度、高精密度、高速度等优点,被广泛应用于各个领域中的脉冲测量。

文亚平老师是该测量仪器的设计师,他是深圳大学控制科学与工程系的副教授。

数字脉冲宽度测量仪的概述数字脉冲宽度测量仪能够非常准确地测量脉冲的宽度,不仅适用于高速脉冲的测量,同时也可用于低速脉冲的测量。

该仪器具有清晰的界面,易于使用,能够轻松地获取精确的脉冲宽度测量数据。

数字脉冲宽度测量仪在高科技领域中广泛应用,它可以在医学、航空、车辆、通讯等领域得到应用。

数字脉冲宽度测量仪的主要功能包括:1.测量脉冲的宽度2.显示脉冲的时间基准和脉冲的周期3.显示脉冲的立即响应和延迟响应数字脉冲宽度测量仪的优点与传统的模拟脉冲宽度测量仪相比,数字脉冲宽度测量仪具有以下优点:1.高精度:数字脉冲宽度测量仪的精度达到毫微秒甚至亚毫微秒级别。

2.高速度:数字脉冲宽度测量仪可以测量高速的脉冲,速度非常快。

3.多功能:数字脉冲宽度测量仪不仅可以测量脉冲的宽度,还可以显示其它相关数据。

4.易于使用:数字脉冲宽度测量仪具有清晰的界面,易于操作,测量数据准确。

数字脉冲宽度测量仪的应用领域数字脉冲宽度测量仪适用于各个领域中的脉冲测量,如:1.医学领域:用于心脏脉冲的测量。

2.通讯领域:用于取样和测量宽带信号、脉冲信号、射频信号中的脉冲。

3.航空领域:控制飞机的脉冲信号、在飞机上使用。

4.车辆领域:适用于汽车控制单元脉冲信号的检测;汽车电控系统和机器控制系统的脉冲测量。

5.电子领域:适用于半导体测试、数字电路测试等领域。

文亚平老师的贡献文亚平是数字脉冲宽度测量仪的设计师,他拥有29项计算机软件著作权和专利。

他致力于数字测量仪器的研究,研发了多款高精度数字仪器,数字脉冲宽度测量仪就是其中之一。

文亚平老师的研究成果不仅延伸了数字测量仪器的应用领域,同时也提高了仪器测量的精度和准确性。

总结数字脉冲宽度测量仪是一款高精度、高速度、多功能的数字测量仪器,它被广泛应用于各个领域中的脉冲测量。

基于单片机的脉冲宽度测量

基于单片机的脉冲宽度测量

山东科技大学电工电子实验教学中心创新性实验研究报告课程名称:单片机原理及应用实验项目名称脉冲宽度测量姓名学号_________________专业_____________ 班级____________指导教师及职称________________________开课学期2011 至2012 学年第一学期提交时间2012 年 1 月 3 日五、实验结果与分析1、实验现象、数据记录按照流程图所示,按动脉冲按钮,可以看到,显示屏显示出所测脉冲的宽度。

再次按动,可以清楚地观察到所示的示数变化。

每次显示的示数,都根据所按按钮的时间长短,即高电平的脉宽长度。

第一张图为T0工作方式,第二张图为T2捕捉方式。

六、实验结论七、指导老师评语及得分:附件:源程序等。

T0门控方式:ORG 0000HLJMP MAINORG 000BHLJMP T0_INTORG 0030H MAIN: MOV TMOD,#09HMOV TL0,#0FCHMOV TH0,#17HMOV R4,#00HMOV R3,#00HJB ,$SETB ET0SETB EAIOC: SETB TR0JNB ,$MOV R3,#00HMOV R4,#00HJB ,$CLR TR0MOV 34H,R4MOV 35H,R3LCALL BCDLCALL UBCD DIS: LCALL DISPJB ,IOCSJMP DIST0_INT:INC R3CJNE R3,#00H,NEXTINC R4NEXT: MOV TH0,#0FCHMOV TL0,#17HRETIBCD: MOV R7,#16CLR AMOV 47h,AMOV 46h,AMOV 45h,ABCD1:CLR CMOV A,35HRLC AMOV 35H,AMOV A,34HRLC AMOV 34H,AMOV A,47HADDC A,47HDA AMOV 47H,AMOV A,46HADDC A,46HDA AMOV 46H,AMOV A,45HADDC A,45HDA AMOV 45H,ADJNZ R7,BCD1RETUBCD:MOV A,45HANL A,#0F0HSWAP AMOV 50H,AMOV A,45HANL A,#0FHMOV 51H,AMOV A,46HANL A,#0F0HSWAP AMOV 52H,AMOV A,46HANL A,#0FHMOV 53H,AMOV A,47HANL A,#0F0HSWAP AMOV 54H,AMOV A,47HANL A,#0FHMOV 55H,ARETDISP:MOV R0,#55HMOV R2,#20HMOV A,#0FFHMOV P0,AACALL DIPMOV R0,#54H MOV R2,#10H ACALL DIPMOV R0,#53H MOV R2,#08H ACALL DIPMOV R0,#52H MOV R2,#04H MOV A,R2MOV P2,AMOV A,@R0MOV DPTR,#TABLE MOVC A,@A+DPTR ANL A,#7FHMOV P0,AACALL DELAY MOV R0,#51H MOV R2,#02H ACALL DIPMOV R0,#50HMOV R2,#01HACALL DIPRETDIP:MOV A,R2MOV P2,AMOV A,@R0MOV DPTR,#TABLEMOVC A,@A+DPTRMOV P0,AACALL DELAYRETDELAY:MOV R5,#9FHDJNZ R5,$RETTABLE:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H ,80H,90H,88H,83H,0C6H,0A1H,86H,8EH ENDT2捕捉方式:T2CON EQU 0C8HTH2 EQU 0CDHTL2 EQU 0CCHRCAP2H EQU 0CBHRCAP2L EQU 0CAHTR2 BIT 0CAHORG 0000HLJMP MAINORG 000BHLJMP T0_INTORG 0030H MAIN: MOV TMOD, #01HMOV T2CON,#0FHJB ,$STR: MOV TL0, #17HMOV TH0, #0FCHMOV TH2, #00MOV TL2 ,#00MOV 50H,#00HMOV 51H,50HCLRSETB EASETB ET0JNB , $SETB TR0SETB TR2JB , $CLR TR0MOV 50H,RCAP2LMOV 51H,RCAP2HLCALL ZHUANHUAN LOOP1: LCALL DISPJB ,STRAJMP LOOP1T0_INT: MOV TL0, #17HMOV TH0, #0FCHSETBNOPNOPCLRRETI ZHUANHUAN: CLR A百度文库- 好好学习,天天向上-9 MOV 38H,51H MOV 37H,50H MOV 34H,#0 MOV 35H,#0 MOV 36H,#0 MOV R7,#16LOOP2: CLR CMOV A,37HRLC AMOV 37H ,AMOV A,38HRLC AMOV 38H ,AMOV A,36HADDC A,36HDA AMOV 36H,AMOV A,35HADDC A,35HDA AMOV 35H,AMOV A,34HADDC A,34HDA AMOV 34H,ADJNZ R7 ,LOOP2MOV R1,#35HMOV R0,#36HMOV A,#00XCHD A,@R0MOV 58H,AMOV A,@R0SWAP AMOV 57H,AMOV A,#00XCHD A,@R1MOV 56H,AMOV A,@R1SWAP AMOV 55H,AMOV A,#00MOV R0,#34HXCHD A,@R0MOV 54H,AMOV A,@R0SWAP AMOV 53H,ARETDISP: MOV R0,#53HMOV R2,#01HLOP11: MOV A,#0FFHMOV P0,AMOV A,R2MOV P2,AMOV A,@R0MOV DPTR,#TABMOVC A,@A+DPTRCJNE R0,#55H,LOP21ANL A,#7FHLOP21: MOV P0,AACALL DELAYINC R0MOV A,R2JB ,EXIT1RL AMOV R2,AAJMP LOP11EXIT1: RETDELAY: MOV R7,#0FEHLOOP: MOV R6,#70HDJNZ R7,LOOPRETTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8 H,80H,90H,88H,83H,0C6H,0A1H,86H,8EH END。

6-06 利用门控位GATEx测量脉冲宽度

6-06 利用门控位GATEx测量脉冲宽度

;等待INT1*升高 ;INT1*高, 此时计数器计数, ;INT1*低,停止T1计数 ;T1计数值送A ;T1计数值送A
5
;复位入口转主程序 ;主程序入口
;T1为方式1,定时器模式,GATE1=1 ;T1初始化为0
;等待INT1*低 ;如INT1*为低,启动T1
4
门控制位GATEx的应用—测量脉冲宽度
LOOP1:JNB P3.3,LOOP1 LOOP2:JB P3.3,LOOP2
CLR TR1 MOV A,TL1 MOV A,TH1 …… END利用源自ATE位测量正脉冲的宽度3
门控制位GATEx的应用—程序
ORG RESET: AJMP
ORG MAIN: MOV
MOV MOV MOV LOOP0:JB SETB
0000H MAIN 0100H SP,#60H TMOD,#90H TL1,#00H TH1,#00H P3.3,LOOP0 TR1
利用门控位GATEx测量脉冲宽度
Harbin Institute of Technology
1
门控制位GATEx的应用
—测量脉冲宽度原理
GATE=0,T1计数启动由TR1控制, GATE=1,T1计数启动由TR1与INTx*共同控制!
2
门控制位GATEx的应用
——测量脉冲宽度思路
【例】 门控位GATE1可使T1的启动计数受INT1* 的控制,当GATE1=1, TR1=1时,只有 INT1*引脚输入高电平时,T1才被允许计数。可测量 引脚 (P3.3)上正脉冲的宽度。其方法如下图。

STM32利用捕获功能完成脉冲宽度测量

STM32利用捕获功能完成脉冲宽度测量
极性 TIM_ICInitStructure.TIM_ICPrescaler=TIM_ICPSC_DIV1; //分频系
数 TIM_ICInitStructure.TIM_ICSelection=TIM_ICSelection_DirectTI;//
直接映射到 TI1 TIM_ICInit<TIM5,&TIM_ICInitStructure>;
捕获程序
需要区分是捕获中断还是定时器更新中断 设置全局变量记录捕获状态和定时器更新
次数 在捕获到高电平后要改变捕获极性为低电
平捕获 如何更新中断发生次数超过记录极限,强制
设置捕获完成状态
知识回顾 Knowledge ReviewBiblioteka 如果使用TIM5和PA0作为捕获引脚
〔4开启捕获和定时器溢出〔更新中断 假如我们需要检测输入信号的高电平脉宽,就需
要在第一次上升沿到来时捕获一次,然后设置为 下降沿捕获,等到下降沿到来时又捕获一次.如 果输入信号的高电平脉宽比较长,那么定时器就 可能溢出,所以需要对定时器溢出进行处理,否 则计算的高电平时间将不准.所以需要开启定时 器溢出中断.
GPIO_Init<GPIOA,&GPIO_InitStructure>; //初 始化结构体
如果使用TIM5和PA0作为捕获引脚
〔2初始化定时器参数,包含自动重装值,分频系数,计数方式 等
要使用定时器功能,必须对定时器内相关参数初始化,其库 函数如下:
voidTIM_TimeBaseInit<TIM_TypeDef*TIMx,TIM_TimeBaseInit TypeDef*TIM_TimeBaseInitStruct>;
RCC_APB1PeriphClockCmd<RCC_APB1Periph_ TIM5,ENABLE>;//使能 TIM5 时

STM32利用捕获功能完成脉冲宽度测量解析

STM32利用捕获功能完成脉冲宽度测量解析

STM32利用捕获功能完成脉冲宽度测量解析脉冲宽度测量是一种常见的电子测量技术,它可以用来测量脉冲信号的时间间隔,常用于测量脉冲频率、PWM信号的占空比以及其他与时间相关的信号参数。

在STM32微控制器中,捕获功能可以使用定时器外设来实现。

定时器可以产生定时中断或者触发其他外设,同时,它还可以配置为捕获模式,以测量脉冲信号的时间间隔。

在使用STM32捕获功能进行脉冲宽度测量时,主要需要以下几个步骤:1.初始化定时器:选择合适的定时器外设,并根据具体需求配置计数模式、时钟源以及预分频系数。

需要注意的是,定时器的时钟源和预分频系数会影响测量的时间分辨率。

2.配置捕获模式:选择合适的输入通道,并配置捕获模式为边沿对齐模式或中心对齐模式。

边沿对齐模式适用于测量脉冲宽度,而中心对齐模式适用于测量脉冲间隔。

3.获取捕获值:在触发捕获事件时,通过读取捕获寄存器的值来获取脉冲宽度。

捕获值的单位由定时器的时钟源和预分频系数决定,通常为计数周期数。

4.计算脉冲宽度:根据捕获值和定时器的参数,可以计算出具体的脉冲宽度。

如果需要转化为实际的时间值,还需要考虑时钟源的频率和预分频系数。

在编写使用STM32捕获功能进行脉冲宽度测量的代码时,可以使用STM32Cube库或其他编写固件的开发工具。

以下是一个简单的示例代码:```c#include "stm32f4xx_hal.h"TIM_HandleTypeDef htim;void HAL_TIM_IC_CaptureCallback(TIM_HandleTypeDef *htim)if (htim->Instance == TIM1) { // 根据实际情况修改定时器实例uint32_t captureValue = HAL_TIM_ReadCapturedValue(htim, TIM_CHANNEL_1);float pulseWidth = (float)captureValue / htim.Instance->ARR;//在这里进行脉冲宽度的处理}int main(void)HAL_Init(;SystemClock_Config(;__HAL_RCC_GPIOA_CLK_ENABLE(;__HAL_RCC_TIM1_CLK_ENABLE(;GPIO_InitTypeDef GPIO_InitStruct;GPIO_InitStruct.Pin = GPIO_PIN_8;GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;GPIO_InitStruct.Pull = GPIO_PULLUP;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_HIGH;GPIO_InitStruct.Alternate = GPIO_AF1_TIM1;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);htim.Instance = TIM1;htim.Init.Prescaler = 0;htim.Init.CounterMode = TIM_COUNTERMODE_UP;htim.Init.ClockDivision = TIM_CLOCKDIVISION_DIV1;HAL_TIM_Base_Init(&htim);TIM_IC_InitTypeDef sConfigIC;sConfigIC.ICPolarity = TIM_ICPOLARITY_RISING;sConfigIC.ICSelection = TIM_ICSELECTION_DIRECTTI; sConfigIC.ICPrescaler = TIM_ICPSC_DIV1;sConfigIC.ICFilter = 0;HAL_TIM_IC_ConfigChannel(&htim, &sConfigIC, TIM_CHANNEL_1); HAL_TIM_IC_Start_IT(&htim, TIM_CHANNEL_1);while (1)//主循环}```上述代码在初始化后,通过HAL库函数配置了一个TIM1定时器通道1的输入捕获模式,并启动了中断。

射频系统中脉冲宽度 -回复

射频系统中脉冲宽度 -回复

射频系统中脉冲宽度-回复射频系统中脉冲宽度是指脉冲信号中连续电压高电平存在的时间,通常用时间单位(如秒)来表示。

脉冲宽度是射频系统中的一个重要参数,对于系统的性能和功能具有重要影响。

本文将一步一步回答有关射频系统中脉冲宽度的问题,以便更好地理解。

第一步:什么是射频系统?射频系统是指在射频频段(射频波段)范围内进行信号传输、处理和控制的一种电子系统。

这个频段通常涵盖从30 kHz到300 GHz的电磁频谱范围。

射频系统被广泛应用于无线通信、雷达、卫星通信、无线电广播等领域。

第二步:什么是脉冲信号?脉冲信号是指一种瞬时变化的电信号,其特点是时间上的高低电平交替出现。

脉冲信号可以通过改变电平的方法来表示信息,比如数字信号中的“1”和“0”。

脉冲信号在射频系统中用于控制、定时、调制、调制解调等各种应用。

第三步:为什么需要脉冲宽度?脉冲宽度对于射频系统的性能和功能具有重要影响,下面列举了几个重要的原因:1. 信息传输:脉冲宽度可以用来表示不同信息的编码和解码。

不同宽度的脉冲可以对应不同的数字或字符,从而实现信息的传输。

2. 调制:脉冲宽度调制(PWM)是一种常见的调制方式,通过改变脉冲宽度来控制信号的幅度或频率。

PWM技术广泛应用于电机驱动、电源控制等领域。

3. 定时和时序控制:脉冲宽度可以用于生成周期性的时序信号,如时钟信号、同步信号等。

这对于实现同步操作、时序控制、时序测量等都非常重要。

4. 脉冲压缩:脉冲宽度压缩技术可以通过调整脉冲宽度来增加射频系统的分辨率和灵敏度。

这在雷达、通信、医学成像等领域具有重要应用。

第四步:如何测量脉冲宽度?脉冲宽度的测量可以使用不同的方法和设备,下面列举了几种常见的方法:1. 示波器:示波器是一种常用的仪器,可以直接测量脉冲宽度。

简单地连接脉冲信号到示波器的输入端口,并设置正确的时间和电压尺度,即可读取脉冲宽度。

2. 定时器:定时器是一种测量时间间隔和脉冲宽度的设备。

通过将脉冲信号输入到定时器中,并使用适当的设置,可以测量脉冲宽度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

电子科技大学综合课程设计报告基于单片机门控位的脉冲宽度测量与显示think2011/5/4一、 可行性分析及其原理:该项目是要实现脉冲宽度的测量,再把测量值用数码管显示。

为了实现这一功能我们大致把整个系统分为以下几个模块:1. 振荡器模块:产生某一特定振荡频率的时钟,一般要求这一频率较高,本题要求精度为10us ,所以采用100kHZ 的振荡频率即可。

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

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

框图如下:二、 本次设计构思了两个方案:方案一:运用CD4518(BCD 码全加器)的级联来实现计数,CD4511七段译码,555多谐振荡器提供100kHZ 频率,待测信号输入到计数器使能。

电路连接图如下:上述方案为数码管静态显示。

优点为方案简单无需编程,只需要组合逻辑与时序逻辑即可完成。

缺点为硬件电路的连线过于复杂上容易出错且很难排除故障,另一个问题在于使用的外接振荡源精度不是很高,势必带来不小的误差。

此方案理论上可行,由于实际操作带来的不方便,我们考虑了后面一种方案。

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

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

定时器数值乘以机器周期即为脉冲宽度。

电路连接图如下:可以看出,电路结构由以下部分构成:1.振荡模块:12MHZ晶体振荡器,由XTAL1和XTAL2接入单片机。

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

3.输出显示模块:由数码管动态扫描显示,注意P0需要外接上拉电阻。

另外,还有一个异或门电路是用来实现选择测量正脉冲还是负脉冲。

和前一方案相比可以发现,这样的方案要比用组合时序逻辑连线简单,而且较容易查错。

单片机内部有定时器计数器,就可以使用相同的原理来对脉冲宽度进行测量,所以说使用单片机编程实现控制也是可行的,所以,下面就针对方案二的程序进行进一步的分析。

三、程序设计及分析:51单片机的计数功能我们已经很熟悉了,但是我们也知道不论是哪种方式的计数,其最大值也只能计65535,而本次设计要求要计的范围是0到99.99ms,这就意味着超出了计数器的量程,解决方案也有两个。

第一种,使用两个计数器配合实现计数位的扩展。

第二种,使用中断服务程序,也可以实现扩展。

这里我们选择使用中断服务程序的方法。

以下是该设计的中断服务程序:T0INT: PUSH ACCMOV TH0,#00HMOV TL0,#00HMOV A,COUNT+1ADD A,#01HMOV COUNT+1,AMOV A,COUNTADDC A,#00HMOV COUNT,APOP ACCRETI考虑到单次测量可能会带来较大的误差,我们采用次测量取平均的方法,方便起见,我们使用两个计数器共32位计数值,对连续脉冲测量256次,只显示其高24位,低8位舍掉不显示,这样就巧妙地实现了测量256次取平均的效果。

另外,因为外部电路省掉了译码的部分,所以必须在单片机内部完成译码功能,在译码之前首先还必须经过一次转码,即把2进制码转换成可以由数码管显示的码。

这里用循环移位的方法把所有测量位都连了起来。

然后再转换成BCD码存放。

最后还有显示的子函数就实现把BCD码转换成7段码,显示程序如下:DISPLAY: MOV R0,#70HMOV R3,#01HNEXT: MOV A,#00HMOV P1,AMOV A,@R0MOV DPTR,#LABLE1MOVC A,@A+DPTRMOV P0,AMOV A,R3MOV P1,ALCALL DELAYINC R0JB ACC.5,EXITRL AMOV R3,ASJMP NEXTEXIT: RETLABLE1: DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FHDB 6FH,77H,7CH,39H,5EH,79H,71H,00H,73H DELAY: MOV R7,#02HDEL1: MOV R6,#0FFHDEL2: DJNZ R6,DEL2DJNZ R7,DEL1RETEND2进制转换为BCD码程序如下:WDISBUF:CLR AMOV R3, AMOV R4, AMOV R5, AMOV R2, #24HB1: MOV R6, HEXMOV R7, HEX+1MOV R1, HEX+2HB2: MOV A,R1RLC AMOV R1,AMOV A,R7RLC AMOV R7,AMOV A,R6RLC AMOV R6,AMOV A,R5ADDC A,R5DA AMOV R5,AMOV A,R4ADDC A,R4DA AMOV R4,AMOV A,R3ADDC A,R3DA AMOV R3,AJNC OVERMOV A,#00HMOV P1,ARETOVER: DJNZ R2,HB2MOV R0,#DISBUF+5MOV A,#00HMOV @R0,AMOV A,R3SWAP AANL A,#0FHMOV @R0,ADEC R0MOV A,R3ANL A,#0FHMOV @R0,ADEC R0MOV A,R4SWAP AANL A,#0FHMOV @R0,ADEC R0MOV A,R4ANL A,#0FHMOV @R0,ADEC R0MOV A,R5SWAP AANL A,#0FHMOV @R0,ADEC R0MOV A,R5ANL A,#0FHMOV @R0,ARET四、关于程序及硬件电路的调试过程程序调试:作为没太多经验的程序员,程序编写完成后就编译一般会报出很多错误,通常为语法错误,这时就需要根据编程软件(我们用的是keil)的提示检查程序的错误。

我还记得我们是从几十个错误一点一点地改正过来,包括push和pop后面的A改成ACC。

还需要注意的是,有些错误很隐蔽,比如中文的输入法造成的错误,这样的中文字符或标点在编辑界面都是看不见的,要找出这样的错误就需要把那一行注释掉,这样就可以看到以前错误输入的中文字符和标点,再加以改正就可以了。

这属于语法错误的改正方法。

还有一类错误是:语法都正确,但是运行结果不正确,这样的错误就比较难改,建议大家单步执行来调试仿真,keil里可以单步执行,但是我特别想推荐的是protus软件,在连接好单片机及其外围电路后,可以把在keil上对单片机编的程序直接在protus上运行仿真,而且protus可以打开单片机的RAM单元和各个特殊功能寄存器,可以观察到每一步执行后各个地址里所存放的单元的具体变化,这样对查错带来了极大的方便。

我们在进行此类调试的时候,出现的问题比较难解决的主要是一个:不管输入多少HZ的信号显示的数码管一直显示29952。

这样的错误简直太严重了,问题的原因可能是显示部分程序不对,或者是单片机的控制程序本身就出了问题,经过一系列的试验,我们排除了第一种可能,单步执行前面的程序,观察每个寄存器的数值,好几天后才发现了这个奇怪的现象:每当定时器记满中断后,我们用于存放数据的40H就会被改变,但我们一开始也不知道是什么原因,后来才发现堆栈指针*SP指向的就是40H,修改SP后,程序就变得正常了,可以显示正确的测量值。

其他还存在的问题比如说显示的数值会闪烁,我们修改延时程序后也相应解决了。

硬件调试:我个人觉得我们对硬件的调试要比对软件的调试痛苦,虽然软件我们也花了一个多星期调试,但是硬件调试有个很要命的问题,就是硬件的东西都是真实的,有可能会买来就是坏的而你不知道顺势把它焊在板子上了,而且也有可能本来是好的,你稍不注意通电的时候短路了,烧坏几个器件就得重新再来,我们还算幸运,从开始到调试成功只遇到了一个异或门是坏的和不小心烧了一个三极管,其他电路基本都正确。

硬件电路一开始存在的问题:1.有些连接部分其实并没有导通,造成显示结果不正确。

2.有些引脚很难焊,可能连到一起了。

3.排除了第一第二种可能后,还有就是外围电路需要一个振荡源提供某一频率的输入信号,我们因为条件限制,没有这样的输入信号,就用单片机的ALE信号代替,结果怎么都出不了正确测量值,这也是我们这几天不管怎么努力也出不了结果的原因。

当我们把输入信号源找到,一切问题都迎刃而解了。

失败和成功原本就只有一步之遥,在还没成功的时候,你根本想不到它原来已经这么近了。

五、对结果的分析总结5%,其他地方均在3%以下,所以可以认为误差在允许范围内。

需要说明的是,当使用最大量程时,即测量1s 的脉宽的时候,需要等待的时间太长,因为我们选用的是重复测量256次取平均的方式,这样就就需要花大约四分钟的时间。

在这一点上,程序还可以优化。

画出了输入取对数对应的输出图:另外,造成这些误差的原因我想应该是多方面的,首先,我们选择单片机编程,而且是使用中断服务程序实现计数计时的扩展,这样会有个弊端,就是中断服务程序自身代码的执行会需要几个机器周期,这样造成的误差使用重复测量是无法消除的,有一个办法就是不用中断服务程序,只执行一个外部中断计数使另一个计数器加一。

但是这样的程序又不能实现我们需要的众多操作,所以对此进一步优化的方案还没有给出来。

其误差关于频率的曲线如下:02468101214160.050.10.150.20.25log2(x )y输入输出关系0.511.52 2.533.544.5x 104-0.04-0.020.020.040.06频率x相对误差y相对误差关于输入频率曲线。

相关文档
最新文档