1.编码器接口简介
- 最终实验现象便是:
左边是一个编码器有两个接口输出,A,B。接入到STM32定时器的编码器接口(编码器接口自动控制时基单元的CNT计数器)。INSTANCE:初始化后,CNT初始值为0,右转CNt++,每产生一个脉冲就加一次,左转CNt--。现在产生10个脉冲后停下来,再左转产生4个脉冲,CNT=6.(CNt就相当于一个带有方向控制的外部时钟,同时控制着CNT的计数时钟和计数方向,这样的话CNT的值就表示了编码器的位置,如果每隔相同的时间取值并且将CNt清零,那么测出来的就是编码器的速度,类似上节课的侧偏发和测周法)
2.正交编码器
- 转得越快,方波频率便越高,取任意一相来测频率,依靠另外一相来测方相,
- 当正转时,A相 提前 B相 90度
- 当正转时,A相 滞后 B相 90度
- 编码器接口得设计逻辑:首先把AB相的所有边沿作为计数器得计数时钟,出现信号时就计数自增或自减,至于自增还是自减就靠上图
- 每个[定时器]只有一个编码器接口,基本定时器没有编码器接口。
3.编码器输入部分
- 编码器的引脚借用了输入捕获单元的通道,因此编码器的输入引脚就是定时器的TIMx_CH1和TIMx_CH2引脚 其中CH1和CH2的输入滤波器和边沿检测编码器也可以使用,但是之后的不能使用
4.编码器输出部分(相当于从模式控制器)
从模式控制器
在 STM32 微控制器中,从模式控制器(Slave Mode Controller)是指定时器的从模式功能,允许定时器在接收到外部信号时进行同步和控制。它主要用于实现复杂的定时器操作,如多定时器之间的同步、外部事件触发等。
-
外部触发:
- 从模式控制器可以配置为响应外部信号(如输入引脚的上升沿或下降沿),以启动或停止计数。
-
同步操作:
- 可以将多个定时器配置为从模式,以便它们在接收到相同的外部触发信号时同时开始计数。这对于需要精确同步的应用(如多通道 PWM)非常重要。
-
多种工作模式:
- 从模式控制器支持多种工作模式,如边缘触发、脉冲触发等,允许用户根据具体需求进行配置。
编码器输出部分控制CNT计数时钟,和计数方向,输出执行流程是,如出现了边沿信号,并且对应另一相的状态为正转,则控制CNT自增,否则控制CNT自减。内部72Mhz时钟和时基单元初始化设置的计数方向,并不会使用。
5.编码器接口基本结构
-
输入捕获前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.工作模式
- 总结:正转的状态都向上计数,反转的状态都向下计数。(左上角为正转的图)
7.实例
均不反相
- 毛刺部分,展示的是正交编码器抗噪声的原理,TI2没有变化,TI1跳变好几次(如TI1上升沿,TI2低电平,就是向上计数),如出现一个引脚不变,另一个引脚连续跳变多次的毛刺信号,计数器就会加,减加减来回摆动,但最终计数器的值不变,并不受毛刺噪声的影响,这就是正交编码器抗噪声的原理。
TI1反相,TI2不反相
- 这里不是边沿的极性选择而是高低电平的极性选择,即选择是否对极性进行翻转,加一个非门 ,因此使用前先要检查极性是否反转
8.HAL库设置编码器
-
直接在定时器中设置为
编码器模式即可 -
编码器设置