关于STM32正交编码器边沿的理解

STM32中的TIM_EncoderInterfaceConfig()函数。其配置的定时器有编码器接口等功能,一般是定时器的通道1和通道2才能作为编码器的输入口,对应编码器输出的两项。 
TIMx参数就是使用哪个定时器作为编码器接口的捕捉定时器。 
一般一个编码器占用一个定时器。 
TIM_EncoderMode参数是模式,是单相计数(只能反映速度)还是两相计数(速度和方向)。 
TIM_IC1Polarity和TIM_IC2Polarity参数就是通道1、2的捕捉极性。 
但是一般来说,STM32对应的都是两相计数,一项计数容易误判,也就是说,你可以按一路计数,但是接线时好像两相的编码线A,B都是需要接上的,否则容易误判。
  
一:Counting on TI1 only(通过TI1来计数,一个周期内只能有两个跳边沿): 
若TI2为高时(第一行):TI1上升沿则向下计数,下降沿则向上计数。 
1时刻:TI2为低电平,TI1上升沿跳变,计数器向上计数; 
3时刻:TI2为高电平,TI1下降沿跳变,计数器仍然向上计数。 
二. Countingon TI1 and TI2:一个周期完成4次跳变。精度提高 
1时刻:TI2为低电平,TI1上升沿跳变,计数器向上计数; 
2时刻:TI1为高电平,TI2上升沿跳变,计数器仍然向上计数; 
3时刻:TI2为高电平,TI1下降沿跳变,计数器仍然向上计数; 
4时刻:TI1为低电平,TI2下降沿跳变,计数器仍然向上计数。

关于STM32正交编码器边沿的理解

 

 

 

 

关于STM32正交编码器边沿的理解

上图可见编码器模式下不支持配置双边沿模式

 

 

关于STM32正交编码器边沿的理解

上图可见STM32的编码器都是双边沿触发的   上升下降沿只是配置极性而已,个人理解也就是在输入端接个反相器。

 

 

 

关于STM32正交编码器边沿的理解

上图是ST的标准外设库,说明的很明确。

 

 

可以在初始化代码中添加这么一句,就可以实现单通道计数,一个上升沿、一个下降沿计数器变化1

实测OK

TIM_PrescalerConfig(TIM2, 1 , TIM_PSCReloadMode_Immediate);