1. 编码器接口简介
- Encoder Interface 编码器接口
- 编码器接口可接收增量(正交)编码器的信号,根据编码器旋转产生的正交信号脉冲,自动控制CNT自增或自减,从而指示编码器的位置、旋转方向和旋转速度
- 每个高级定时器和通用定时器都拥有1个编码器接口
- 两个输入引脚借用了输入捕获的通道1和通道2
1.1 正交编码器
正交信号精度更高,因为A、B相都可以计次,相当于计次频率提高了一倍,其次就是正交信号可以抗噪声,因为正交信号,两个信号必须是交替跳变的,所以可以设计一个抗噪声电路,
如果一个信号不变,另一个信号连续跳变,也就是产生了噪声,那这时计次值是不会变化的,
1.2 编码器接口
高级定时器和通用定时器具有一个编码器接口
1.2.1 编码器接口的输入部分
这里编码器接回有两个输入端,分别要接到编码器的A相和B相,然后这里是两个网络标号,分别写的是TI1FP1和TI2FP2,对应的就是这里,TI1FP1,TI2FP2,电路是这样连接的。
可以看出,这个编码器接口的两个引脚,借用了输入捕获单元的前两个通道,所以最终编码器的输入引脚,就是定时器的CI1和CH2这两个引脚
信号的通路是,CH1通过这里,通向编码器接口,CH2通过这里,通向编码器接回,CH3和CH4…与编码器接回无关,其中CH1和CH2的输入捕获滤波器和边沿检测也有使用,但是后面的是否交叉、预分频器和QCR寄存器,与编码器接口无关,这就是编码器接口的输入部分
1.2.2 编码器接口的输出部分
那编码器接口的输出部分,其实就相当于从模式控制器了,去控制CNT的计数时钟和计数方向,简单来说,这里的输出执行流程是,按照我们之前总结的那个表,如果出现了边沿信号,并且对应另一相的状态为正转,则控制CNT自增,否则,控制CNT自减,
注意在这里,我们之前一直在使用的72MHz内部时钟,和我们在时基单元初始化时设置的计数方向,并不会使用,因为此时计数时钟和计数方问都处于编码器接口托管的状态,计数器的自增和自减,受编码器控制,这就是编码器接口的电路结构了
1.3 基本结构
输入捕获的前两个通道,通过GPIO口接入编码器的A、B相,然后通过滤波器和边沿检测极性选择,产生TI1FP1和TI2FP2,通向编码器接口,编码器接口通过预分频器控制CNT计数器的时钟,同时,编码器接口还根据编码器的旋转方向,控制CNT的计数方向,编码器正转时,CNT自增,编码器反转时,CNT自减
另外这里ARR也是有效的。一般我们会设置ARR为65535,最大量程,这样的话,利用补码的特性,很容易得到负数,比如CNT初始为0,我正转,CNT白增,0、1、2、3、4、5、6、7等等,但是我反转呢,CNT自减,0下一个数就是65535,这里负数不应该是-1、-2吗,65535是不是就出问题了,但是没关系,我们做一个操作,直接把这个16位的无符号数转换为16位的有符号数,根据补码的定义,这个65535就对应-1,这样就可以直接得到负数,非常方便
1.4 工作模式
这里T1FP1和I2FP2接的就是编码器的A、B相,在A相和B相的上升沿或者下降沿触发计数,到底是向上计数还是向下计数,取决于边沿信号发生的这个时刻,另一相的电平状态,也就是这里的相对信号的电平,TI1FP1对应T12,T12FP2对应T11,就是另一相电平的意思,
然后在这里,这个编码器还分了3种工作模式,分别是仅在T1计数、仅在T2计数和T1 TI2都计数(精度比较高)
1.5 实例1,均不反向
1.6 实例2,TI1反向
这里T1和T12进来,都会经过这个极性选择的部分,在输入捕获模式下,这个极性选择是选择上升沿有效还是下降沿有效的,但是,编码器接口,显然始终都是上升沿和下降沿都有效的,上升沿和下降沿都需要计次,所以在编码器接口模式下,这里就不再是边沿的极性选择了,而是高低电平的极性选择
- 如果我们选择上升沿的参数,就是信号直通过来,高低电平极性不反转
- 如果我们选择下降沿的参数,就是信号通过一个非门过来,高低电平极性反转
所以这里就会有两个控制极性的参数,选择要不要在这里加一个非门,反转一下极性
显然,这与刚刚图的计数方向是相反的,这有什么用呢,比如你接一个编码器,发现它数据的加减方向反了,你想要正转的方向,结果它自减了,这时候把任意一个引脚反相,就能反转计数方向了这时,就可以调整一下极性,当然如果想改变计数方向的话,我们还可以直接把A、B相两个引脚换一下