使用STM32定时器输入捕获的一些记录

(最近在学习六步换相驱动直流无刷电机,记录一下其中陌生的定时器功能)

英文标识含义

  • TIx:TIM Input;

霍尔传感器接口

霍尔传感器接口大概功能逻辑:

  1. 将CH1~3的输入连接到异或器,输出TI1,实现同时对三个信号的边沿检测;
  2. TI1经过滤波、边沿检测 -> TI1F_ED信号 -> TRC;
  3. TRC被映射到IC1,使之触发输入捕获;

输入捕获一般都会开启从模式RESET实现硬件的计数器清零,这里在TRC映射为输入捕获信号的同时,也作为从模式RESET的触发信号。(但是二者不会相互冲突,在IC触发想要获取周期量之前,因为最先触发从模式而导致计数器清零?可能的原因是从模式有一定的延迟……)

PWM输入模式

image

程序需要对主控MCU(外部MCU)输入的PWM作周期、占空比等数据的解析,此时可配置输入捕获为PWM输入模式,比如将IC1、IC2映射到一个TI输入信号,使PWM信号通过一个输入给到两个通道:

选择TIMx CCR1的有效输入:置TIMx CCMR1寄存器的CC1S=01(选择TI1)
选择TIMx_CCR2的有效输入:置TIMx_CCMR1寄存器的CC2S=10(选择T1)

对应到代码,即对通过对两个通道分别配置TIM_ICSelection_DirectTITIM_ICSelection_IndirectTI

/** @defgroup TIM_Input_Capture_Selection TIM Input Capture Selection
  * @{
  */
#define TIM_ICSELECTION_DIRECTTI           TIM_CCMR1_CC1S_0                     /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to IC1, IC2, IC3 or IC4, respectively */
#define TIM_ICSELECTION_INDIRECTTI         TIM_CCMR1_CC1S_1                     /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to IC2, IC1, IC4 or IC3, respectively */
#define TIM_ICSELECTION_TRC                TIM_CCMR1_CC1S                       /*!< TIM Input 1, 2, 3 or 4 is selected to be connected to TRC */
/**
  * @}
  */

配置后的效果是:

image

但是这样的输入路线,通道2无法进行边沿检测,如何实现两个信号极性相反?手册里面有说要“选择TI1FP2的有效极性(捕获数据到TIMx_CCR2):置CC2P=1(下降沿有效)”。但是结合结构框图,置CC2P=1(下降沿有效)配置的是TI2的边沿检测器。(可以实际测试以下不配置CC2P还能否实现PWM输入模式效果)
image

在野火的HAL库文档看到这样的描述:

作为触发输入的那一路信号还需要设置极性,是上升沿还是下降沿捕获,一旦设置好触发输入的极性,另外一路硬件就会自动配置为相反的极性捕获,无需软件配置。

posted on 2024-12-20 08:28  fhbui  阅读(172)  评论(0)    收藏  举报