0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MCU是如何统计脉冲信号输入个数的呢?

TopSemic嵌入式 来源:TopSemic嵌入式 2023-01-09 09:08 次阅读

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

1.GPIO中断

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

使用GPIO中断需要注意:

脉冲信号的频率不能太高,否则MCU可能处理不过来

GPIO中断处理程序应尽可能短,否则影响处理速度

GPIO中断优先级应高,否则会延迟对脉冲信号的处理

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

5cc93916-8fb1-11ed-bfe3-dac502259ad0.png

5cf127b4-8fb1-11ed-bfe3-dac502259ad0.png

下降沿的脉冲数理论为100ms/0.1ms=1000个,实际上因为有少许误差,从上面逻辑分析仪可以看到实际脉冲数为1.009k,即1009个。

然后将PWM接到另外一个板子的GPIO引脚上,开启下降沿中断,在中断服务函数中计数,可以看到实际值就是1009。

5cfe6082-8fb1-11ed-bfe3-dac502259ad0.png

2.定时器输入捕获

输入捕获常用来测量脉冲宽度和频率,它也可以用来对脉冲计数。

它的原理和上述GPIO中断类似,只不过用的是定时器的输入捕获中断。

5d29f7f6-8fb1-11ed-bfe3-dac502259ad0.png

3.定时器用作计数

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

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

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

5d50b7ec-8fb1-11ed-bfe3-dac502259ad0.png

5d84ede6-8fb1-11ed-bfe3-dac502259ad0.png

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

5d94c1da-8fb1-11ed-bfe3-dac502259ad0.png

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

5db905ea-8fb1-11ed-bfe3-dac502259ad0.png

总结:

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

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






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    17014

    浏览量

    350363
  • 脉冲信号
    +关注

    关注

    6

    文章

    395

    浏览量

    36918
  • GPIO
    +关注

    关注

    16

    文章

    1196

    浏览量

    51926
  • PWM波
    +关注

    关注

    0

    文章

    99

    浏览量

    16842

原文标题:MCU如何实现对外部脉冲信号的计数功能?

文章出处:【微信号:TopSemic,微信公众号:TopSemic嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    MCU可以正常工作但是端口输入脉冲信号后,读值不准确大幅度变化是为什么?

    MCU还可以正常工作但是端口输入脉冲信号后,读值不准确大幅度变化,之前是好的,这是为啥,是MCU坏了吗
    发表于 02-20 07:09

    labview 脉冲个数测量

    我正在做毕设:基于labview的直流电机调速控制,现在信号进来后是脉冲信号,想转化为转速,必须知道它的脉冲个数,有哪位知道怎么测
    发表于 03-21 10:58

    循环输出不同频率,不同个数脉冲

    较多的时候,就提示发生内部错误。 不知如何解决,是分配的内存不够的原因吗?另外,如何验证输出的脉冲正确。本想再通过计数器采集脉冲,但同一个通道不能在输出的同时做数据采集呀?所以,如何将这个输出通道的信号给到另一个计数器中
    发表于 05-30 11:23

    用matlab统计有效信号个数

    最近在测激光,用逻辑分析仪测出来的信号是0和1组成的信号。现在需要统计有效信号个数。比如00100011101100,不管0和1的
    发表于 06-30 20:43

    请问能用中断方式计算接收输入脉冲个数吗?

    一个单片机用外部中断方式发出脉冲的同时,能不能也用中断方式计算接收输入脉冲个数
    发表于 07-12 04:35

    如何测输入脉冲个数

    我用一个单片机输出频率为100K的脉冲信号,另一个单片机用外部中断方式接收脉冲信号,能测出脉冲个数
    发表于 07-24 02:10

    linux统计文件个数

    这篇文章主要介绍了Linux下统计当前文件夹下的文件个数、目录个数,本文使用ls命令配合管理、grep命令实现统计需求,需要的朋友可以参考下
    发表于 07-24 08:40

    如何控制波形脉冲个数

    。首先知道正常的PWM波是用一个定时器输出的,配置好以后就开始源源不断地输出波形。那么如何控制波形脉冲个数?这里我提出三种设计思路:一个定时器输出PWM波,另一个定时器也通过对时间的计数功能来判断波形
    发表于 08-18 06:41

    使用STM32芯片统计某外部信号脉冲个数

    有人使用STM32芯片开发产品,其中有个功能就是统计某外部信号脉冲个数。他采用外部中断方式,来一个信号触发一次中断,在中断程序里实现计数累加。但由于被
    发表于 08-18 07:33

    STM32脉冲计数低频时不准这个是为什么

    ,此时捕获引脚捕获到的脉冲个数不正确;正玄波频率调到1khz以上时,脉冲个数就准确了。2、信号源输出方波,频率1hz时,经比较整形电路后送给
    发表于 11-30 10:26

    有哪些方法可以实习MCU对外部脉冲信号的计数功能

    有的传感器会输出脉冲信号MCU需要统计脉冲输入个数
    发表于 02-03 15:49

    脉冲输入信号调理电路

    脉冲输入信号调理电路
    发表于 02-09 16:14 1844次阅读
    <b class='flag-5'>脉冲</b>量<b class='flag-5'>输入</b><b class='flag-5'>信号</b>调理电路

    如何用示波器去测量脉冲信号

    如何用示波器去测量脉冲信号以及测量脉冲信号对示波器有什么要求。
    的头像 发表于 10-04 08:49 1.6w次阅读

    怎么去判断支路的个数

    支路是什么意思?怎么去判断支路的个数
    的头像 发表于 02-02 09:05 2.2w次阅读

    脉冲编码器输入信号有哪几种 | 编码器输出的脉冲信号有电压吗 | 脉冲编码器输入信号怎么调

    脉冲编码器输入信号有哪几种 脉冲编码器是一种用于测量运动、位置和速度的设备。它通过输出脉冲信号
    的头像 发表于 02-18 18:25 2530次阅读
    <b class='flag-5'>脉冲</b>编码器<b class='flag-5'>输入</b><b class='flag-5'>信号</b>有哪几种 | 编码器输出的<b class='flag-5'>脉冲</b><b class='flag-5'>信号</b>有电压吗 | <b class='flag-5'>脉冲</b>编码器<b class='flag-5'>输入</b><b class='flag-5'>信号</b>怎么调