一、编码器接口简介
-
Encoder Interface 编码器接口
-
编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制 CNT 自增或自减,从而指示编码器的位置、旋转方向和旋转速度
-
每个高级定时器和通用定时器都拥有 1 个编码器接口(基本定时器没有)
-
两个输入引脚借用了输入捕获的通道 1 和通道 2
二、正交编码器
![](https://img-blog.csdnimg.cn/835f0449e0a046f496586709774e47e9.png)
-
正交编码器一般可以测量位置,或者带有方向的速度值
-
由两个信号输出引脚,一个是A相,一个是B相
-
当编码器的旋转轴转起来时,A相和B相会输出这样的方波信号,转得越快方波的频率越高
-
方波的频率代表了速度,取出任意一相的信号来测频率就可以得到旋转速度
//只有一相的信号无法测量旋转方向,无论时正转还是反转都是方波
//想要测量旋转方向,还需要另一根线的辅助
-
正转时,A相提前B相90度
-
反转时,A相滞后B相90度
//信号如何计次和区分旋转方向
由正反转的方波信号和【边沿状态表】对应关系可知:
正反转的【边沿状态表】正好是相反的
-
编码器结构的设计逻辑
-
首先把A相和B相的所有边沿作为计数器的计数时钟,出现边沿信号时,就计数自增或自减
-
自增或自减由另一相的状态确定,当出现某个边沿时判断另一相的状态
//如果对应另一相的状态对应出现在【正转】的表中,那么就是正转,计数自增
//如果对应另一相的状态对应出现在【反转】的表中,那么就是反转,计数自减
三、编码器接口框图
![](https://img-blog.csdnimg.cn/63127c487ec54db99e8ad586c1da62f7.png)
高级定时器和通用定时器一样,每个定时器都只有一个编码器接口
编码器接口的输入部分
-
编码器接口有两个输入端(TI1FP1、TI2FP2),分别接到编码器的A相和B相
-
编码器接口的两个引脚借用了输入捕获单元的前两个通道,所以最终编码器的输入引脚就是定时器的CH1和CH2两个引脚
-
编码器接口也使用CH1和CH2的输入滤波器和边沿检测器,但不使用其后边的部分
编码器接口的输出部分
-
相当于从模式控制器,去控制CNT的计数时钟和计数方向
//如果对应另一相的状态对应出现在【正转】的表中,那么就是正转,计数自增
//如果对应另一相的状态对应出现在【反转】的表中,那么就是反转,计数自减
-
注意:之前使用的72MHz内部时钟和时基单元初始化设置的计数方向(向上自增……)并不会使用
//此时计数时钟和计数方向都处于编码器接口托管状态,计数器的自增和自减受编码器控制
四、编码器接口基本结构
![](https://img-blog.csdnimg.cn/ea69492ba0244899aa5a1ee3ed1f645f.png)
-
输入捕获的前两个通道通过【GPIO】接入编码器的A、B相
-
通过滤波器和边沿检测、极性选择,产生TI1FP1和TI2FP2通向编码器接口
-
编码器接口通过预分频器控制CNT计数器的时钟,同时根据编码器的旋转方向控制CNT的计数方向
//编码器正转时CNT自增,编码器反转时CNT自减
-
设置ARR为65535最大量程,利用补码的特性得到负数
//EX:正转CNT自增0、1、2、3、4……,反转CNT自减4、3、2、1、0、65535、65534、65533
//在函数中将反转的16位无符号数转换为16位的有符号数,根据补码定义可得65535=-1,65534=-2,65533=……
五、工作模式
![](https://img-blog.csdnimg.cn/0a8c14c80e5444b6a1078d78b1bbc251.png)
//TI1FP1信号和TI2FP2在A相和B相的上升沿或者下降沿触发计数,判断向上计数还是向下计数取决于边沿信号发生的时刻另一相的电平状态
//仅在TI1/TI2计数:只在一相的边沿计数,另一相的边沿忽略(不计数)
//在TI1和TI2上计数精度更高(A、B相有效边沿同时判断)
正转
![](https://img-blog.csdnimg.cn/cf8876017afa4c36bb3c46de0280b904.png)
EX:
-
TI1FP1信号上升(A相上升),相对信号的电平(B相)为低电平,此时向上计数(下表1)
-
TI1FP1信号上升(A相下降),相对信号的电平(B相)为高电平,此时向上计数(下表2)
-
TI1FP1信号上升(B相上升),相对信号的电平(A相)为高电平,此时向上计数(下表3)
-
TI1FP1信号上升(B相下降),相对信号的电平(A相)为低电平,此时向上计数(下表4)
//总结:正转的状态都向上计数,反转的状态都向下计数
六、实例
均不反相
![](https://img-blog.csdnimg.cn/8461278ab2c9465687afcf0be232b028.png)
![](https://img-blog.csdnimg.cn/b6a4de17bd554e83bfe29532738af9dc.png)
图中【两个引脚的边沿都计数】
-
前四个状态:TI1上升沿,TI2低电平,查表得【向上计数】——正转
-
中间状态:正交编码器抗噪声的原理
//当出现毛刺时(TIx没有变化,另一相却跳变了计次),根据表中规则可以滤除毛刺波形,保持计数器值不变
-
后两个状态:TI1下降沿,TI2低电平,查表得【向下计数】——反转
TI1反相,TI2不反相
![](https://img-blog.csdnimg.cn/cc15f3f823024336ac6b2d5df956fdd0.png)
![](https://img-blog.csdnimg.cn/e3e6fe2b1f704d6982be481b9468d839.png)
图中【极性的变化对计数的影响】
-
TI1反相,在分析时需要再【反相】以后才能进行分析
-
之后的分析过程与之前一样
-
引入反相功能的意义:接入编码器发现数据加减方向反了,正转时数据自减,反转时数据自增
//通过调整极性,将任意一个引脚反相就能反转计数方向了
//如果不想改变引脚极性,直接把A、B相的引脚对换也可以反转计数方向