输入捕获

输入捕获是一种通过定时器捕捉外部信号特定边沿(如上升沿或下降沿)发生时的时间戳的功能。它可以精确测量外部信号的周期、频率或脉宽等时间特性,常用于频率计数、脉冲宽度测量和信号时序分析等应用。输入捕获模式通常通过定时器的输入引脚接收信号,并将捕获的时间值存储在定时器的捕获寄存器中。

工作原理

输入捕获模式

  • 当定时器在输入捕获模式下工作时,它会检测输入信号(如ICx引脚上的信号),并根据设定条件记录捕获时刻的计数器值。
  • 在这种模式下,定时器会通过输入信号触发捕获,并将捕获的时间戳存储在寄存器TIMx_CCR1中。
  • 需要注意的是,捕获是基于输入信号的边沿进行的,通常是上升沿或下降沿,取决于配置。

配置步骤

  • 选择输入引脚并配置TIMx_CCR1寄存器连接到对应的输入信号。
  • 配置输入信号的边沿检测(上升沿或下降沿),通过设置TIMx_CCMR寄存器的CC1S位来选择。
  • 配置定时器的周期频率,并通过设置TIMx_CCR1寄存器的C1E位来允许或禁止捕获。

定时器寄存器的配置

  • 配置TIMx_CCR1寄存器中的C1S位来选择输入信号的类型(例如选择TIMx的输入引脚)。
  • 配置TIMx_CCMR寄存器中的CC1S位,用于选择捕获的边沿(上升沿或下降沿)。
  • 允许或禁止DMA请求和中断功能,通过设置TIMx_DIER寄存器中的CC1IE位和CC1DMA位来启用DMA和中断请求。

输入捕获时的工作原理

  • 在输入信号的每次边沿变化时,TIMx_CCR1寄存器会捕获当前计数器的值。
  • 如果启用了DMA,捕获值会自动传送到内存或其他寄存器,并生成中断或DMA请求。

特性

主要特点

  • 16 位计数器:定时器采用 16 位计数器,可以产生高精度的计时和信号控制。

  • 可编程的时钟分频器:定时器支持 16 位可编程预分频器,时钟频率可调,分频范围从 1 到 65536,适应不同的应用场景。

  • 多功能通道支持:支持 4 种输入输出通道,可以进行 输入捕获、输出比较、PWM 输出 等多种功能,广泛用于电机控制、亮度调节、频率测量等。

  • 死区时间控制:支持 PWM 信号的死区时间控制,适用于 H 桥电路驱动和电机控制等应用,确保信号的稳定性。

  • DMA 支持:定时器支持 DMA,可以高效地将数据从外设传输到内存,减少 CPU 占用,提高系统性能。

  • 多定时器同步:多个定时器可以通过同步信号协同工作,适用于更复杂的应用场景,如多任务控制。

  • 高级功能(TIM1 和 TIM8)TIM1TIM8 定时器作为高级定时器,支持更高精度的频率控制、波形生成和同步功能。

各定时器功能区分如下

Timerqf

注意事项

  • 时钟配置:在配置定时器时,要确保时钟源的正确配置,特别是当使用 外部时钟源预分频器 时,确保时钟频率符合系统要求。

  • 死区时间控制:当使用 PWM 输出 时,需要合理设置 死区时间,避免输出信号的交叠,这在电机驱动和高功率控制应用中尤为重要。

  • DMA 配置:使用 DMA 时,要确保 DMA 配置正确,确保数据的传输效率,并避免冲突。

  • 同步信号:在使用多个定时器进行同步操作时,需要确保各定时器的同步信号正确配置,避免不同定时器之间的竞争条件。

  • 高级定时器的资源共享TIM1TIM8 是高级定时器,它们共享一些系统资源。在使用这些定时器时,要注意避免资源冲突,确保系统的稳定性。

功能框图

高级定时器框图

gjdsqgnkt

通用定时器框图

tydsqgnkt

基本定时器框图

jbdsqgnkt

模板代码

https://github.com/TooUpper/SensorDrive

说明一下这里采样到的数值是 0~4095 因为寄存器最大就是 12 位,所以是 4095;

ADC值 0:表示输入电压为 0V

ADC值 4095:表示输入电压为 V_ref(通常为 3.3V 或 5V)。

ADC值 2047:表示输入电压大约为 V_ref / 2,例如 1.65V 如果 V_ref = 3.3V

这里得到的 0~4095 不停波动的值指的是该引脚采样所获取的电压值;