TIM编码器接口(Encoder)

232 阅读5分钟

1.编码器接口简介

image.png

  • 最终实验现象便是:

image.png 左边是一个编码器有两个接口输出,A,B。接入到STM32定时器的编码器接口(编码器接口自动控制时基单元的CNT计数器)。INSTANCE:初始化后,CNT初始值为0,右转CNt++,每产生一个脉冲就加一次,左转CNt--。现在产生10个脉冲后停下来,再左转产生4个脉冲,CNT=6.(CNt就相当于一个带有方向控制的外部时钟,同时控制着CNT的计数时钟和计数方向,这样的话CNT的值就表示了编码器的位置,如果每隔相同的时间取值并且将CNt清零,那么测出来的就是编码器的速度,类似上节课的侧偏发和测周法

2.正交编码器

image.png

  • 转得越快,方波频率便越高,取任意一相来测频率,依靠另外一相来测方相
    • 当正转时,A相 提前 B相 90度
    • 当正转时,A相 滞后 B相 90度
  • 编码器接口得设计逻辑:首先把AB相的所有边沿作为计数器得计数时钟,出现信号时就计数自增或自减,至于自增还是自减就靠上图
  • 每个[定时器]只有一个编码器接口,基本定时器没有编码器接口。

3.编码器输入部分

image.png

  • 编码器的引脚借用了输入捕获单元的通道,因此编码器的输入引脚就是定时器的TIMx_CH1和TIMx_CH2引脚 其中CH1和CH2的输入滤波器和边沿检测编码器也可以使用,但是之后的不能使用

4.编码器输出部分(相当于从模式控制器)


从模式控制器

在 STM32 微控制器中,从模式控制器(Slave Mode Controller)是指定时器的从模式功能,允许定时器在接收到外部信号时进行同步和控制。它主要用于实现复杂的定时器操作,如多定时器之间的同步、外部事件触发等。

  • 外部触发

    • 从模式控制器可以配置为响应外部信号(如输入引脚的上升沿或下降沿),以启动或停止计数。
  • 同步操作

    • 可以将多个定时器配置为从模式,以便它们在接收到相同的外部触发信号时同时开始计数。这对于需要精确同步的应用(如多通道 PWM)非常重要。
  • 多种工作模式

    • 从模式控制器支持多种工作模式,如边缘触发、脉冲触发等,允许用户根据具体需求进行配置。

image.png

编码器输出部分控制CNT计数时钟,和计数方向,输出执行流程是,如出现了边沿信号,并且对应另一相的状态为正转,则控制CNT自增,否则控制CNT自减。内部72Mhz时钟和时基单元初始化设置的计数方向,并不会使用。

5.编码器接口基本结构

image.png

  • 输入捕获前2个通道,通过GPIO接入编码器A,B相,通过滤波器和边沿检测和极性选择,产生TI1FP1,TI1FP2,通向编码器接口,编码器接口通过预分频器控制CNT计数器的时钟,同时编码器接口还根据编码器的旋转方向,控制CNT计数的方向,编码器正转时,CNT自增,编码器返转时,CNT自减。 这里ARR有效,设置为最大量程65535,利用补码的特性,很容易得到负数。

  • 这里我们知道了一个输出的到负数的方法:正转时是1,2,3可以理解,但是反转时,却是65535而不是-1,因此我们可以利用补码的特性,将16为无符号转化为16为有符号(16位有符号数范围是-32768到32767)

  • 步骤:大概就是,A,B相接入GPIO口,随便选一相设置为上升沿(或下降沿)触发中断作为主要的判断角度依据,另外一相和这一相结合可以作为判断方向的依据

6.工作模式

image.png

  • 总结:正转的状态都向上计数,反转的状态都向下计数。(左上角为正转的图)

7.实例

均不反相

image.png

  • 毛刺部分,展示的是正交编码器抗噪声的原理,TI2没有变化,TI1跳变好几次(如TI1上升沿,TI2低电平,就是向上计数),如出现一个引脚不变,另一个引脚连续跳变多次的毛刺信号,计数器就会加,减加减来回摆动,但最终计数器的值不变,并不受毛刺噪声的影响,这就是正交编码器抗噪声的原理。

TI1反相,TI2不反相

image.png

  • 这里不是边沿的极性选择而是高低电平的极性选择,即选择是否对极性进行翻转,加一个非门 ,因此使用前先要检查极性是否反转

8.HAL库设置编码器

image.png

  • 直接在定时器中设置为编码器模式即可

  • 编码器设置 image.png