技术文档

单片机对外部脉冲计数 【原理】看看单片机是如何实现外部脉冲信号的计数功能?

小编 2024-10-06 技术文档 23 0

【原理】看看单片机是如何实现外部脉冲信号的计数功能?

有的传感器会输出脉冲信号,MCU需要统计脉冲输入的个数,通常有如下实现方式:

1.GPIO中断

原理很简单,利用GPIO的上升沿或者下降沿中断,进中断的次数就是脉冲的个数。只需要在中断服务函数里计数即可。

使用GPIO中断需要注意:

脉冲信号的频率不能太高,否则MCU可能处理不过来GPIO中断处理程序应尽可能短,否则影响处理速度GPIO中断优先级应高,否则会延迟对脉冲信号的处理

我们先用一个板子产生频率为10Khz的PWM波,时长为100ms 。

下降沿的脉冲数理论为100ms/0.1ms=1000个,实际上因为有少许误差,从上面逻辑分析仪可以看到实际脉冲数为1.009k,即1009个。然后将PWM接到另外一个板子的GPIO引脚上,开启下降沿中断,在中断服务函数中计数,可以看到实际值就是1009。

2.定时器输入捕获

输入捕获常用来测量脉冲宽度和频率,它也可以用来对脉冲计数。它的原理和上述GPIO中断类似,只不过用的是定时器的输入捕获中断。

3.定时器用作计数

定时器和计数器其实很相似,只不过定时器是对内部的时钟脉冲进行计数,计数到一定数值时就可以根据频率,计算出时间。

而计数器是对外部脉冲进行计数,即外部引脚每发生一次变化,计数器就计数一次。

可以将外部脉冲信号接入到MCU的TIMx_ETR引脚,就可以使用MCU的定时器来计数。

它的使用也很简单,主要就是配置TIMx_SMCR寄存器(slave mode control register),具体可以参考芯片参考手册。

可以看到定时器CNT的值就是脉冲的个数。

总结:

1)尽量使用TIMER ETR引脚通过计数器方式来实现脉冲计数,如果条件不允许,外部脉冲输入频率不是很高,也可以使用GPIO中断来实现,不过还是要同时考虑高频中断对整体系统的影响。比如上面MCU主频是48Mhz,将10Khz调整为100Khz,实测GPIO中断还可以准确计数,但是当再继续增大到1Mhz时,就处理不过来了,实测发出约50000个脉冲,GPIO中断只测出了10206个,而使用计数器模式则可以准确的计数。

2)如果使用GPIO中断计数,要特别注意GPIO上不能有接地的电容,否则会改变脉冲波形,导致错误的计数。

加入Q群学习【我爱单片机】:775957568

定时器计数器综合应用实例讲解

【例1】 编写定时器T0产生1秒的定时程序,通过P1.0口输出高、低电平均为1s的方波(假设单片机采用12MHz的晶振)。

分析如下:

12MHz的晶振,机器周期为1us,各种工作方式直接定时的最大定时时间分别为:

方式0: 2 13 =8192us=8.192ms

方式1: 2 16 =65536us=65.536ms

方式2、3: 2 8 =256us

编程思路:

任何一种方式都无法直接实现1s的定时,可以考虑采用方式1实现50ms定时中断,设置一变量对中断的次数进行计数,计数到20时即为1秒。

c语言源程序如下:

【例2】 脉冲宽度的检测:要求对外部输入的高电平脉冲持续的时间进行检测,即检测高电平脉冲宽度,将检测的脉宽以微秒为单位显示在数码管上(假设单片机的晶振频率为12MHz)。

脉宽检测系统电路如图5-8所示。

图5-8 脉冲宽度检测系统电路图

分析如下:

TMOD的GATE位为门控位,当GATE置1时,只有当对应的外部中断引脚

为1,且TRn置1时,定时器n才会启动定时(n=0或1)。利用该特点,可以检测

口脉冲高电平持续的时间,在信号的上升沿启动定时器,下降沿停止定时器。

在本实例中,采用T0的方式1定时功能对脉冲宽度进行测量,直接测量的最大值为65535,如果晶振为12MHz,则机器周期为1us,直接可检测的最大脉冲宽度为65.535ms。如果需要检测更宽的脉冲,可对定时器0溢出的次数进行计数,将溢出次数乘以65536,来计算。将外部中断设为下降沿触发,当检测到下降沿信号时,将进入外部中断处理程序,读取定时器的数值,此数值即为脉冲信号的宽度,通过数码管(关于数码管显示的知识参见8.3节)动态扫描显示检测的脉冲宽度值。

c源程序如下:

【例3】 单片机时钟:由6个数码管的动态扫描显示分别显示小时、分钟、秒,由四个按键对时间进行调节。数据调整采用移位的方式,根据移位键触发的次数去调节不同的时间对象,加1、减1键分别对时间进行加1和减1调整,清零键将时间清零。

单片机时钟系统电路如图5-9所示。

分析如下:

根据题目的功能要求,系统主要包括数码管动态扫描显示程序、按键检测调时程序、时间产生程序、系统初始化等程序模块。

➢ 时间产生的思路 :由定时器产生50毫秒定时中断,中断20次为1秒,当秒加到60时,秒清零,分钟加1,当分钟加到60分时,分钟清零,小时加1,当小时加到24时,小时清零。

➢ 按键检测调时思路 :设置时间变量setNum对移位按键的次数进行记录,默认为0,不进入调时状态,随着移位按键的触发,setNum值加1,程序根据setNum的值分别处于调节秒、分钟、小时状态,当setNum加到4时回到0。

➢ 数码管动态扫描显示思路 :将秒、分、时时间分别拆分出个位和十位数,通过查询数字显示的代码表,送至P0口,通过P2.0~P2.5动态扫描驱动对应的数码管显示。

图5-9 单片机时钟系统电路图

c源程序如下:

【例4】 单片机频率计:将外部脉冲从P3.5口输入,利用利用单片机的定时/计数器功能,计算脉冲频率并将频率值通过数码管进行显示。

频率计系统电路如图5-10所示。

分析如下:

频率是周期的倒数,即每秒钟产生的周期信号的个数。根据频率的定义,充分的利用单片机的定时/计数器资源,由定时器0实现1秒定时,定时器1则对外部脉冲个数进行计数,这样1秒钟内所计的脉冲个数即为输入信号的频率。

编程说明:

在8051单片机中有两个16位的定时/计数器,分别为T0和T1,在这里设置T0为工作方式1定时,T1为工作方式1计数,则TMOD=0x51。

计数脉冲由单片机的P3.5口输入,利用定时器0产生50毫秒定时,定时中断20次即为1秒钟,将单片机定时器1设为计数模式,由P3.5(T1)口输入外部计数脉冲,在1秒钟计数的脉冲信号数即为所测信号的频率,然后由数码管动态扫描显示对应的频率值。

图5-10 频率及系统电路图

c源程序如下:

相关问答

51 单片机 定时器和 计数 器的对 脉冲 有何要求?

定时器计数器是一个器件,两种功能如果对周期稳定的脉冲数数(计数),就叫定时器,比如单片机内部的机器周期脉冲如果对随机性脉冲数数,就叫计数器,比如外部...

单片机 的定时器资源是什么 计数 器?

单片机的定时器资源是脉冲计数器51单片机外部脉冲计数原理:51单片机外部脉冲计数与时间之间的关系十分密切,每输入一个脉冲,计数器的值就会自动累加1。51单...

单片机计数脉冲 电压大小?

编码器可以不用5V的电压,但用12V或者24V电源时,输出的脉冲电压应该也在12V或者24V大小,如果直接接单片机I/O口,毫无疑问会损坏单片机。简单的办法就是搭一个...

单片机 如何接收 外部 的信号?

如果只是开关信号,那只要扫描IO就行;如果是脉冲信号,只要用外部定时计数器或者外部中断就行,比如光电编码器;发射出来的信号是个周期信号,不同的按键,...如...

怎么用 单片机 检测 脉冲 输入个数?

可以使用单片机的计数器功能来检测脉冲输入个数。具体步骤如下:1.将计数器输入引脚与脉冲信号输入引脚连接。2.将计数器清零,并开启计数器。3.每次脉冲信号...

如何用 单片机 接收 脉冲 信号?

STC15W系列单片机,采用外部INT触发中断(可以上升沿与下降沿同时使能),脉冲输入信号用电阻分压就可以(峰值控制在3.3或者5V,根据VCC电源),可以运行在...

51 单片机脉冲 参数及测量方法?

51单片机脉冲参数包括脉冲宽度、脉冲周期、脉冲占空比等。下面是一些测量方法:1.脉冲宽度:使用计时器测量脉冲的高电平或低电平时间即可得到脉冲宽度。2...

单片机 的时钟电路内部时钟方式和 外部 时钟方式有什么不同?

一、内部时钟方式:利用单片机内部的振荡器,然后在引脚XTAL1(18脚)和XTAL2(19脚)两端接晶振,就构成了稳定的自激振荡器,其发出的脉冲直接送入内部时钟电路...

51系列 单片机 提供了哪几种中断源在中断管理上有什么特点?

51系列单片机提供了外部中断、定时器中断和串口中断三种中断源。其中,外部中断和定时器中断都是硬件中断,由硬件触发和处理,而串口中断则是软件中断,需要通过...

单片机 ctl是什么意思?

单片机CTL是英文ConTroL(控制)的缩写,是由专用的CTL磁头在录像带控制磁迹上记录的控制信号,是频率为25Hz(PAL制的帧频)的方波脉冲。计数方式按XX小时XX分...

猜你喜欢