Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >MCU如何实现对外部脉冲信号的计数功能?

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

作者头像
用户2366192
发布于 2023-03-06 05:50:05
发布于 2023-03-06 05:50:05
9550
举报
文章被收录于专栏:TopSemic嵌入式TopSemic嵌入式

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 TopSemic嵌入式 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
定时器的时钟来源(内置触发,外部捕获,其它外设驱动)
MCU定时器-从度量到设计 这篇文章里面写的是CW32的,但是今天文章里面出现的是TI的MSPM0,里面有很多有趣的设计。
云深无际
2025/02/05
2340
定时器的时钟来源(内置触发,外部捕获,其它外设驱动)
定时器的输入捕获通道(Input Capture Channel)
输入捕获(Input Capture,IC)是定时器的一种模式,它允许 MCU 精确记录外部信号发生变化的时间(通常是上升沿或下降沿)。
云深无际
2025/02/05
980
定时器的输入捕获通道(Input Capture Channel)
利用STM32F103精确控制步进电机
STM32F103C8T6 42步进电机(42SHDC4040-17B) TB6600电机驱动器升级版
全栈程序员站长
2022/09/05
2K0
利用STM32F103精确控制步进电机
电机控制基础1——定时器基础知识与PWM输出原理
单片机开发中,电机的控制与定时器有着密不可分的关系,无论是直流电机,步进电机还是舵机,都会用到定时器,比如最常用的有刷直流电机,会使用定时器产生PWM波来调节转速,通过定时器的正交编码器接口来测量转速等。
xxpcb
2021/02/26
1.9K0
电机控制基础1——定时器基础知识与PWM输出原理
4.4 51单片机-NEC红外线遥控器解码
实验板上的红外线接收头是接在单片机的P3.2 IO口上,要使用红外线接收功能,需要将红外线接收头的跳线帽接上。
DS小龙哥
2022/01/12
1.9K0
4.4 51单片机-NEC红外线遥控器解码
【STM32】PWM输出
PWM是“Pulse Width Modulation”的缩写,即脉冲宽度调制,简称脉宽调制。是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术。简单来说,就是对脉冲宽度的控制。
DevFrank
2024/07/24
1790
【STM32】PWM输出
电机控制基础3——定时器编码器模式使用与转速计算
上篇电机控制基础——定时器捕获单输入脉冲原理介绍了定时器捕获输入脉冲的原理,那种方式是根据捕获的原理,手动切换上升沿与下降沿捕获,计算脉冲宽度的过程原理比较清晰,但编程操作起来比较麻烦。
xxpcb
2021/03/18
3K0
电机控制基础3——定时器编码器模式使用与转速计算
定时器的PWM输出与输入捕获
STM32F1的定时器非常多,由2个基本定时器(TIM6、TIM7)、4个通用定时器(TIM2-TIM5)和2个高级定时器(TIM1、TIM8)组成。基本定时器的功能最为简单,类似于51单片机内定时器。通用定时器是在基本定时器的基础上扩展而来,增加了输入捕获与输出比较等功能。高级定时器又是在通用定时器基础上扩展而来,增加了可编程死区互补输出、重复计数器、带刹车(断路)功能,这些功能主要针对工业电机控制方面。这里主要介绍通用定时器。
飞哥
2020/07/10
4.2K0
定时器的PWM输出与输入捕获
【STM32】TIM定时器
STM32定时器的功能十分丰富,不仅有定时中断功能,还有内外时钟源选择、输入捕获、输出比较、主从触发模式等多种功能
s-little-monster
2024/08/09
2630
【STM32】TIM定时器
4.10 51单片机-使用计数器测量NE555脉冲频率
STC90C51RC/RD+系列单片机内部设置的两个16位定时器/计数器T0和T1都具有计数方式和定时方式两种工作方式。对每个定时器/计数器(T0和T1),在特殊功能寄存器TMOD中都有一控制-C/T来选择T0或者T1为定时器还是计数器。定时器/计数器的核心部件是一个加法计数器,其本质是对脉冲进行计数。只是计数脉冲来源不同:如果计数脉冲来自系统时钟,则为定时方式,此时定时器/计数器每12个时钟或者每6个时钟得到一个计数脉冲,计数值加1;如果计数脉冲来自单片机外部引脚(T0为P3.3,T1为P3.3),则为计数方式,每来一个脉冲加1。
DS小龙哥
2022/01/10
1.7K0
4.10 51单片机-使用计数器测量NE555脉冲频率
脉冲计数器校准配置方案
脉冲计数器是一种能够响应脉冲信号并进行计数测量的电子测量仪器,响应周期性电信号并进行脉冲计数测量的称周期信号脉冲计数器。
时频专家
2019/04/04
5710
CW32L010-定时器一览
定时器就是一个计数器,不停的+1+1+1,直到一个周期记满,其实就是和我们的表一样,计数源就是秒针,一圈转完的时候就会有一个事件,可以是清零,可以是进位,反正就是完成了,诸如此类的可以看分针时针,就完成了级联。其实就是计数+在进位时的各种事件,输出以后告诉外设或者程序去执行任务。就把握住计数源和分频以及各种更新事件,再难的定时器外设都能玩转。
云深无际
2024/12/03
1390
CW32L010-定时器一览
STM32Cube-12 | 使用通用定时器产生PWM驱动蜂鸣器
本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的通用定时器外设,产生 PWM 驱动无源蜂鸣器。
Mculover666
2020/07/16
1.9K0
STM32Cube-12 | 使用通用定时器产生PWM驱动蜂鸣器
(十七)STM32——定时器
目录 学习目标 内容 简介 定时器分类 定时器功能介绍 计时器模式 工作过程 内部时钟选择 寄存器 配置 代码 总结  ---- 学习目标         本节内容我们来介绍一下有关定时器的知识,其实这个定时器,和我们日常接触的定时器没有什么区别,都是到了一定的时间就去做指定的事情。和51单片机的定时器也没有很大区别,就是数量和功能明显变多了许多,那我们就开始吧! 内容 简介         STM32F4 的定时器功能十分强大,有 TIME1 和 TIME8 等高级定时器,也有 TIME2~TIM
小点点
2022/12/12
1.1K0
(十七)STM32——定时器
PWM输入输出
输出PWM波的原理是,利用TIM定时器和输出比较,TIM定时器会周期性地线性增长,当计数器的值低于设定的比较值时输出高电平,大于等于比较值时输出低电平。由于是线性增长,高电平时长占整个周期信号时长的比例是固定的,这个比例被称为“占空比”,英文“Duty Cycle”。 在嵌入式系统中,特别是使用定时器来生成PWM信号时,经常使用的是定时器的比较寄存器(Capture/Compare Register,CCR)和自动重载寄存器(Auto-Reload Register,ARR)来控制PWM的占空比。 给定:
WuShF
2024/02/10
9530
PWM输入输出
STM32定时器—PWM 输出
PWM(Pulse Width Modulation,脉冲宽度调制)。是一种利用微处理器的数字输出来对模拟电路进行控制的技术,广泛应用在测量、通信、功率控制等诸多领域。
韦东山
2022/05/09
1.6K0
STM32定时器—PWM 输出
【STM32H7教程】第34章 STM32H7的定时器应用之TIM1-TIM17的PWM实现
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第34章       STM32H7的定时器应用之TIM1-TIM17
Simon223
2019/11/30
1.4K0
基于STM32F4单片机对步进电机的控制(有代码)「建议收藏」
步进电机是将电脉冲控制信号转变为角位移或线位移的一种常用的数字控制执行元件,又称为脉冲电机。在驱动电源的作用下,步进电机受到脉冲的控制,其转子的角位移量和速度严格地与输入脉冲的数量和脉冲频率成正比。步进电机每接收一个电脉冲,转子就转过一个相应的角度(步距角)。**改变通电顺序可改变步进电动机的旋转方向;改变通电频率可改变步进电动机的转速。**因此,通过控制输入电脉冲的数目、频率及电动机绕组的通电顺序就可以获得所需要的转角、转速及转向,利用单片机就可以很容易实现步进电机的开环数字控制。 传统的步进电机控制方法是由触发器产生控制脉冲来进行控制的,但此种控制方法工作方式单一而且难于实现人机交互,当步进电机的参数发生变化时,需要重新进行控制器的设计。因此适合于单片机控制,单片机通过向步进电机驱动电路发送控制信号就能实现对步进电机的控制。
全栈程序员站长
2022/08/23
8.7K2
基于STM32F4单片机对步进电机的控制(有代码)「建议收藏」
【STM32】HAL库 STM32CubeMX教程六—-定时器中断
今天我们来学习定时器,32的定时器有着非常丰富的功能, 输入捕获/输出比较,PWM,中断等等。是我们学习STM32最频繁使用到的外设之一,所以一定要掌握好,这节我们讲解定时器中断,本系列教程将对应外设原理,HAL库与STM32CubeMX结合在一起讲解,使您可以更快速的学会各个模块的使用
全栈程序员站长
2022/08/11
4.1K0
【STM32】HAL库 STM32CubeMX教程六—-定时器中断
【STM32H7教程】第32章 STM32H7的TIM定时器基础知识和HAL库API
本章节为大家讲解TIM1 – TIM17(STM32H7没有TIM9,TIM10和TIM11)共计14个定时器的基础知识和对应的HAL库API。
Simon223
2019/07/27
3.6K0
推荐阅读
相关推荐
定时器的时钟来源(内置触发,外部捕获,其它外设驱动)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档