你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

基于STM32定时器输入捕获经验分享

[复制链接]
攻城狮Melo 发布时间:2023-6-14 11:10
1.输入捕获的原理        输入捕获就是检测输入通道输入方波信号的跳变沿,并将发生跳变时的计数器的值锁存到CCR。该模式可以用来测量脉冲宽度或者测量频率,即可以计算方波信号的频率和方波信号的占空比。

微信图片_20230614110942.jpg


       输入捕获功能检测方波信号周期的工作原理示意图如上图所示,设置捕获极性是上跳沿,定时器在ARR的控制下周期性地计数。      假设输入方波的脉冲宽度小于定时器的周期,输入捕获测定脉冲周期的工作原理如下:
      (1)当捕获到一个上跳沿时,捕获/比较标志位CCyIF会被置1,并产生相应的中断;同时计数器的值自动锁存到CCR,假设锁存的值为CCR1。可以在程序里面读取CCR值,并清除CCyIF标志位。
      (2)当下一次再捕获到一个上跳沿时,计数器的值也会锁存到CCR,假设锁存的值为CCR2。      如果像上图中所示那样。两个上跳沿的捕获发生在定时器的一个计数周期内,两个计数器的值分别为CCR1和CCR2,则方波的周期为CCR2-CCR1个计数周期,这样根据定时器的时钟周期就可以计算出方波信号的周期和频率。     如果两个上跳沿的捕获发生在定时器的相邻两个计数周期里,如图所示两个计数器的值分别为CCR2和CCR3,只需要将计数器周期和UEV事件发生的次数考虑进去即可,对于上图所示情况,则方波的周期为ARR-CCR2+CCR31个计数周期。


2.输入捕获的应用场景
       定时器中断输入捕获可以应用于很多场景,例如测量信号的频率、测量脉冲宽度、计算脉冲个数等。
    (1) 用于测量流量传感器的输出信号的频率

微信图片_20230614110939.png

      对于上图所示的流量计,其输出的原始信号是脉冲信号,一升水输出330个脉冲,因此,可以通过定时器的输入捕获模式测量脉冲信号的个数,进而经过微处理器处理换算成水流量。

   (2)用于超声波测距
      HC-SR04超声波距离传感器的核心是两个超声波传感器。一个用作发射器,将电信号转换为40 KHz超声波脉冲。接收器监听发射的脉冲。如果接收到它们,它将产生一个输出脉冲,其宽度可用于确定脉冲传播的距离。而定时器捕获模式就可以实现脉冲宽度测量,测量结果精确度相对较高。



微信图片_20230614110937.png

微信图片_20230614110933.png


(3)3144霍尔开关传感器模块   
3144霍尔传感器模块是一种磁传感器,用它可以检测磁场及其变化,可在各种与磁场有关的场合中使用,霍尔器件具有许多优点,它的结构牢固,体积小,重量轻,寿命长,安装方便,功耗小,频率高,耐震动,不怕灰尘、油污、水汽及盐雾等的污染或腐蚀。传感器特设M3固定安装孔,调节方向与固定方便易用,使用宽电压LM393比较器,通过对霍尔元件传过来的值和电位器值比较,可以直接输出方波信号,可以利用输入捕获比较功能实现霍尔传感器输出方波信号频率的测量。

微信图片_20230614110930.png

微信图片_20230614110927.png



3.STM32输入捕获的应用实现

(1)输入捕获相关的HAL函数如下所示。


微信图片_20230614110925.jpg

(2)STM32G070CBT6定时器TIM1的输入捕获功能实现
      此案例是在之前PWM输出案例基础上修改,通过定时器1的输入捕获模式,测量定时器3输出的PWM波信号的脉冲宽度。项目主要配置如下:
  •       选择外部时钟HSE 8MHZ
  •       PLL锁相环25倍频,4分频后得到系统时钟频率为50MHZ
  •       设置APB分频器为1
  •       定时器的时钟频率就是50Mhz
    这里重点对输入捕获定时器1的配置进行详细介绍。定时器一模式配置如下图所示:时钟源选择内部时钟源,同时配置TIM3 CH4为输入捕获直接模式。这个是引脚PA11自动配置功能复用引脚,定时器3捕获输入引脚。

微信图片_20230614110922.png



      定时器3参数设置:参数设置如下图所示PSC设置为4999,即计数器的时钟频率为10Khz。定时器的计数周期ARR的值设置为49999,所以计数周期为5000ms。这里定时器1的计数周期大于定时器3的计数周期,即大于PWM波的周期。这样做的好处是在发生边沿捕获之前,TIM1的=不会产生UEV事件,计算比较简单。


微信图片_20230614110919.png



代码实现:重新生成MDK代码,然后打开keil 工程代码,在主程序添加以下变量


微信图片_20230614110916.png

在 while(1)中的用户代码区 3,写入TIM1 CH4通道的输入捕获控制和数据处理


微信图片_20230614110913.png



在main函数中重写输入中断事件的回调HAL_TIM_IC_CaptureCallback,
微信图片_20230614110910.png


     编译项目,选择在线调试。将变量high_time加入watch窗口中,点击运行,可以看到测量结果即high_time的值为50.即PWM波的脉宽为50/10000s,即5ms。这需要前面PWM设置结果一致。

微信图片_20230614110906.jpg

转载自:MCU学习笔记
如有侵权请联系删除




收藏 评论0 发布时间:2023-6-14 11:10

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版