单片机测量方波的频率、占空比及相位差的方法
1.2 脉冲频率测量
频率测量实际上就是在 1s 内对脉冲个数进行计数,计数值就是信号频率。令定时器 T0
工作在方式 1,得到 100ms 的定时间隔,再进行软件计数 10 次,形成一个 1s 的测量闸门信
号。在测量闸门信号期间令计数器 T1 工作在计数方式 1,对脉冲信号的频率计数,计数值
存入 COUNT、COUNT+1 和 COUNT+2 单元,计数值通过 6 位动态数码管显示出来。
1.3 扩展测量范围原理
上述系统被测脉冲宽度范围最大为 65535us,扩展计数器的位数可提高脉冲宽度的测量
范围。令定时器 T1 工作在方式 1 定时,GATE=1,用 COUNT 单元,COUNT+1 单元即定时器 T1
的计数单元 TH1 和 TL1 组成一个 32 位的计数器对脉冲宽度进行测量。并且在定时器 T1 溢出
时,给 COUNT+2 赋值#01H,并将 THI 和 TH0 置零,重新开始计数。以扩展系统测量范围使可
以达到 130ms 的任务要求。同时在进行频率测量时,当计数器 T1 溢出时,给 COUNT+2 赋值
#01H,并将 THI 和 TH0 置零,重新开始计数。以扩展系统测量范围使可以达到 100KHZ 的任务
要求。
第 2 章 测量系统的硬件设计
由于是在实验箱测试本系统,且实验箱上的芯片已经连接固定好了,不能调整,所以以
LAP 2000 模拟系统的逻辑波形作为输入信号。因此硬件只需选用 8051 芯片以及六位 LED 数
码管。在单片机应用系统中,为了便于对 LED 显示器进行管理,需要建立一个显示缓冲区。
显示缓冲区 DISBUF 是片内 RAM 的一个区域,占用片内 RAM 的 70H 至 75H 单元,它的作用是
存放要显示的字符,其长度与 LED 的位数相同。显示程序的任务是把显示缓冲区中待显示的
字符送往 LED 显示器显示。
1、 频率及占空比的测量
上 升沿 打
开定时器
下 降沿 读
取 定时 器
值并保存
下一个上升沿关
闭定时器,读取
定时器值并保存
起来的一种面向控制的大规模集成电路模块,具有功能强、体积小、可靠性高、价格
低廉等特点,在工业控制、数据采集、智能仪表、机电一体化、家用电器等领域得到了广泛
的应用,极大的提高了这些领域的技术水平和自动化程度。单片机应用的意义绝不仅限于它
的广阔范围以及带来的经济效益,更重要的意义在于,单片机的应用正从根本上改变着传统
的控制系统的设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分控制功
能,现在使用单片机通过软件就能实现了。随着单片机应用的推广普及,单片机控制技术将
不断发展,日益完善。本文是设计频率/脉冲宽度的测量与显示的硬件电路与程序的编制。
它可以测量脉冲信号的脉冲宽度,频率等参数。利用定时器的门控信号 GATE 进行控制可以
实现脉冲宽
如上图所示,当脉冲的上升沿来临时,将定时器打开;紧接着的下降沿来临
时,读取定时器的值,假设定时时间为 t1;下一个上升沿来临时关闭定时器,读
取定时器的值,假设定时时间为 t2。t1 即为 1 个周期内高电平的时间,t2 即为脉
冲的周期。t1/t2 即为占空比,1/t2 即为频率。
//定时器高位,初值设为 0
//定时器低位,初值设为 0
C 语言程序如下:
TH0=0;
TL0=0;
//定时器溢出次数,初值设为 0
T0_num=0;
//pulse 为脉冲的输入引脚
while(pulse);
//等待上升沿来临
while(!pulse);
//打开定时器
TR0=1;
//等待下降沿来临
while(pusl1);
th1=TH0;tl1=TL0;num1=T0_num;
while(!pusl1);
//保存定时器值
//等待上升沿来临
TR0=0;
th2=TH0;tl2=TL0;num2=T0_num;
//关闭定时器
//保存定时器值
2、 相位差的测量
测量相位差的电路如上所示,待测量的两路脉冲分别作为两个 D 触发器的
时钟输入,两个 D 触发器的输入端 D 及 S 端都接高电平,第一个 D 触发器的输
出接第二个 D 触发器的 R 端,第二个 D 触发器的互补输出端接第一个 D 触发器
的 R 端。从下面的波形图可以看出,第一个 D 触发器输出的脉冲信号的占空比
乘以 2π即为相位差。这样就将测量两路方波信号的相位差转化为测量一路方波
信号的占空比,就可以按照前面介绍的测量占空比的方法来测量了。
黄色的波形为脉冲 1,蓝色的波形为脉冲 2,红色的波形为相位差。