MCU如何实现对外部脉冲信号的计数功能?

简介: MCU如何实现对外部脉冲信号的计数功能?

有的传感器会输出脉冲信号,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上不能有接地的电容,否则会改变脉冲波形,导致错误的计数。


相关文章
|
数据采集 C语言
单片机开发之ADC0808/9信号采集
本文主要介绍了单片机开发之ADC0808/9信号采集
500 0
单片机开发之ADC0808/9信号采集
ZYNQ-AXI总线的信号接口要求以及时序关系
ZYNQ-AXI总线的信号接口要求以及时序关系
310 0
ZYNQ-AXI总线的信号接口要求以及时序关系
|
2天前
|
存储 算法 异构计算
m基于FPGA的多功能信号发生器verilog实现,包含testbench,可以调整波形类型,幅度,频率,初始相位等
使用Vivado 2019.2仿真的DDS信号发生器展示了正弦、方波、锯齿波和三角波的输出,并能调整幅度和频率。DDS技术基于高速累加器、查找表和DAC,通过频率控制字和初始相位调整产生各种波形。Verilog程序提供了一个TEST模块,包含时钟、复位、信号选择、幅度和频率控制输入,以生成不同波形。
39 18
|
7月前
|
传感器 芯片
MCU实现对外部脉冲信号的计数功能
MCU实现对外部脉冲信号的计数功能
26 1
|
8月前
|
编译器 数据安全/隐私保护 C语言
独立按键的四大要素(自锁,消抖,非阻塞,清零式滤波)
独立按键的四大要素(自锁,消抖,非阻塞,清零式滤波)
138 0
|
9月前
【单片机期中测试】2.独立按键控制LED移位
【单片机期中测试】2.独立按键控制LED移位
83 0
|
11月前
舵机应该如果选择?讲讲模拟舵机,数字舵机和总线舵机的区别
舵机应该如果选择?讲讲模拟舵机,数字舵机和总线舵机的区别
711 0
|
算法 异构计算
m通信系统中基于相关峰检测的信号定时同步算法的FPGA实现
m通信系统中基于相关峰检测的信号定时同步算法的FPGA实现
307 0
m通信系统中基于相关峰检测的信号定时同步算法的FPGA实现
PLC的脉冲定时器是怎样工作的?西门子S7-300脉冲S5定时器如何使用?
本篇我们以西门子S7-300的脉冲S5定时器S_PULSE为例来讲解一下PLC的脉冲定时器是怎样工作的
PLC的脉冲定时器是怎样工作的?西门子S7-300脉冲S5定时器如何使用?
|
异构计算
实验二 基于FPGA的分频器的设计(基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。拓展任务1:用按键或开关控制蜂鸣器的响与不响。拓展任务2:用按键或开)
实验二 基于FPGA的分频器的设计(基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。拓展任务1:用按键或开关控制蜂鸣器的响与不响。拓展任务2:用按键或开)
906 0
实验二 基于FPGA的分频器的设计(基本任务:设计一个分频器,输入信号50MHz,输出信号频率分别为1KHz、500Hz及1Hz。拓展任务1:用按键或开关控制蜂鸣器的响与不响。拓展任务2:用按键或开)

热门文章

最新文章