
1.输入捕获的原理 输入捕获就是检测输入通道输入方波信号的跳变沿,并将发生跳变时的计数器的值锁存到CCR。该模式可以用来测量脉冲宽度或者测量频率,即可以计算方波信号的频率和方波信号的占空比。" f2 L! k) X( n; t- u ' Y8 F, o. I9 n9 P/ H8 }* c ![]() 7 b m0 ~! d6 ~9 q 6 b7 q& u0 E* _4 e( J; x 输入捕获功能检测方波信号周期的工作原理示意图如上图所示,设置捕获极性是上跳沿,定时器在ARR的控制下周期性地计数。 假设输入方波的脉冲宽度小于定时器的周期,输入捕获测定脉冲周期的工作原理如下:' q9 z7 W# W7 Z+ E (1)当捕获到一个上跳沿时,捕获/比较标志位CCyIF会被置1,并产生相应的中断;同时计数器的值自动锁存到CCR,假设锁存的值为CCR1。可以在程序里面读取CCR值,并清除CCyIF标志位。 (2)当下一次再捕获到一个上跳沿时,计数器的值也会锁存到CCR,假设锁存的值为CCR2。 如果像上图中所示那样。两个上跳沿的捕获发生在定时器的一个计数周期内,两个计数器的值分别为CCR1和CCR2,则方波的周期为CCR2-CCR1个计数周期,这样根据定时器的时钟周期就可以计算出方波信号的周期和频率。 如果两个上跳沿的捕获发生在定时器的相邻两个计数周期里,如图所示两个计数器的值分别为CCR2和CCR3,只需要将计数器周期和UEV事件发生的次数考虑进去即可,对于上图所示情况,则方波的周期为ARR-CCR2+CCR31个计数周期。/ j! R+ c/ B! {$ d R* m : ? K5 D B% Y6 T! O0 c 9 p2 w% h8 Q5 l9 y4 j7 l 2.输入捕获的应用场景 定时器中断输入捕获可以应用于很多场景,例如测量信号的频率、测量脉冲宽度、计算脉冲个数等。 (1) 用于测量流量传感器的输出信号的频率 ![]() y3 b- B; E2 j0 K& [3 G0 Y (2)用于超声波测距 HC-SR04超声波距离传感器的核心是两个超声波传感器。一个用作发射器,将电信号转换为40 KHz超声波脉冲。接收器监听发射的脉冲。如果接收到它们,它将产生一个输出脉冲,其宽度可用于确定脉冲传播的距离。而定时器捕获模式就可以实现脉冲宽度测量,测量结果精确度相对较高。 " E3 \: W8 A9 D% [! T0 v* x& h5 U0 G/ q 0 W# F1 A3 N$ p; z ![]() ![]() a/ z1 E* P- h. s, S , C" `8 ^. i/ v (3)3144霍尔开关传感器模块 3144霍尔传感器模块是一种磁传感器,用它可以检测磁场及其变化,可在各种与磁场有关的场合中使用,霍尔器件具有许多优点,它的结构牢固,体积小,重量轻,寿命长,安装方便,功耗小,频率高,耐震动,不怕灰尘、油污、水汽及盐雾等的污染或腐蚀。传感器特设M3固定安装孔,调节方向与固定方便易用,使用宽电压LM393比较器,通过对霍尔元件传过来的值和电位器值比较,可以直接输出方波信号,可以利用输入捕获比较功能实现霍尔传感器输出方波信号频率的测量。. c$ [' U+ K) ?& W ![]() ![]() ; b# ~/ w! [6 \$ N E 3.STM32输入捕获的应用实现 (1)输入捕获相关的HAL函数如下所示。, v* ~2 C( l/ Y% J4 a6 G + R7 Z* _/ @: a( Q, m ![]() (2)STM32G070CBT6定时器TIM1的输入捕获功能实现 此案例是在之前PWM输出案例基础上修改,通过定时器1的输入捕获模式,测量定时器3输出的PWM波信号的脉冲宽度。项目主要配置如下:
![]() . E0 }9 S" K/ T, m 定时器3参数设置:参数设置如下图所示PSC设置为4999,即计数器的时钟频率为10Khz。定时器的计数周期ARR的值设置为49999,所以计数周期为5000ms。这里定时器1的计数周期大于定时器3的计数周期,即大于PWM波的周期。这样做的好处是在发生边沿捕获之前,TIM1的=不会产生UEV事件,计算比较简单。 4 I8 }! ~- {- V; u/ [& b! P ) @' m! O, f( r3 k# u ![]() # l0 j0 n. |8 o8 ` 代码实现:重新生成MDK代码,然后打开keil 工程代码,在主程序添加以下变量 & l9 \0 M, F/ }7 V1 u/ w6 h* x ![]() 在 while(1)中的用户代码区 3,写入TIM1 CH4通道的输入捕获控制和数据处理 9 L: h6 \' J* m! J9 o ![]() 3 w4 }1 D; K' |" `1 X1 _) U 在main函数中重写输入中断事件的回调HAL_TIM_IC_CaptureCallback,+ x6 H# l( `: ^) u, H( V ![]() ) u% y( g( K+ C9 q; [6 K# f 编译项目,选择在线调试。将变量high_time加入watch窗口中,点击运行,可以看到测量结果即high_time的值为50.即PWM波的脉宽为50/10000s,即5ms。这需要前面PWM设置结果一致。 9 Y4 s, \, b8 X. G- A+ ]![]() 转载自:MCU学习笔记 如有侵权请联系删除 " h+ D+ h- |8 E* P1 S 6 p" a3 o; p2 W- { |
基于定时器捕获测量脉宽的应用示例
狂欢三】STM32C031使用TIM定时器DMA方式实现WS2812彩灯输出(三)
【狂欢三】STM32C031使用TIM定时器DMA方式实现PWM输出(二)
【狂欢三】STM32C031使用TIM定时器PWM输出
stm32使用定时器触发dma传输,启动dma没反应的几种情况的解决方法
定时器剩余通道是否可以做PWM输出呢?
基于STM32双定时器+ADC+DMA实战经验分享
基于STM32的定时器触发ADC时可能遇到的情形
【NUCLEO-U545RE-Q评测】5. 基本计时器
基于STM32的定时器不按设定超时产生中断