1.什么是编码器接口(编码器接口其实就是相当于一个带有方向控制的外部时钟)
原理:编码器接口接收编码器(正交)的信号(输出的两个方波信号,相位相差九十度,超前九十度或者滞后九十度,分别代表正转和反转),根据编码器旋转产生的正交信号脉冲,从而来自动控制CNT自增或自减
正交编码器
编码器转的越快,这个方波的频率就越高,因此方波的频率就代表了速度。我们取出任意一相的信号来测频率,就能知道旋转速度了。
但是只有一相的信号无法测量旋转方向。因为无论正转还是反转,它都是这样的方波,想要测量方向,还必须要有另一根线的辅助。再定义一个方向输出脚正转至高电平,反转至低电平,亦或者是正交信号,当正转时,A相提前B相九十度反转时。A相滞后B相九十度,当然这个正转是A相提前还是A相滞后并不是绝对的
好处:
1.首先就是正交信号精度更高,因为AB相都可以计次,相当于计次频率提高了一倍。
2.其次就是正交信号可以抗噪声。因为正交信号,两个信号必须是交替跳变的,所以可以设计一个抗噪声电路。如果一个信号不变,另一个信号连续跳变,也就是产生了噪声,这时计次值是不会变化的
2.编码器在硬件内部位于位置
如图所示编码器也只能用TIMx_CH1和TIMx_CH2
每个高级定时器和通用定时器都拥有1个编码器接口
由图可看出如果将定时器配置成编码器接口模式其通道被占用也就无法实现其他功能
如果出现边沿信号并且另一相对应正转则编码器控制CNT计数器自增,反之则自减
3.编码器接口基本结构
正转ARR自动重装值为0,1,2,3,4
反转ARR自动重装值为0,65535,65534,65533,65532
4.工作模式
这个是正转状态:对应图内可找出符合对象
1.仅在TI1计数:就是仅在A相发生电平转变时候计数
2.仅在TI2计数:就是仅在B相发生电平转变时候计数
3.在TI1和TI2上计数代表正转向上计数,反转向下计数
进入第一个边沿比如开始TI1高电平,TI2电平向上计数,
进入第二个边沿后来TI2高电平,TI1高电平,对应表格也是向上计数
进入第三个边沿TI1低电平,TI2高电平,向上计数
一直到毛刺:在这里TI2没有变化,但是TI1却跳变了好几次。这不符合正交编码器的信号规律,正交信号两个输出交替变化,就像人走路一样,先迈左腿,再迈右腿,再左腿再右腿。这里就是右腿没动,左腿连续走了好几步,显然这个左腿的动作是一个毛刺信号。
第一个边沿信号TI1上升沿,TI2低电平查表得向上计数,这里自增
下一个状态TI1下降沿,TI2还是低电平,查表就是向下计数,所以这里自减
然后继续TI1上升沿,TI2低电平,自增。
接着TI1下降沿,TI2低电平,自减。
计数器就会加减加减来回摆动。最终计数值还是原来个数并不受毛刺噪声的影响。这就是正交编码器抗噪声的原理
TI1反相是什么意思?
我们看一下这个图,这里TI1和TI2进来都会经过这个即极性选择的部分,如果我们选择上升沿的参数,就是信号直通过来,高低电平极性不反转。如果选择下降沿的参数就是信号通过一个非门进来,高低电平极性反转
一反相就导致计数器计数方向发生改变
因此当你接一个编码器,发现它数据的加减方向反了,你想要正转的方向,结果它自减了,你想要反转的方向,结果它自增。这时就可以调整一下极性,把任意一个引脚反相就能反转计数方向了。但如果想改变计数方向的话,我们还可以直接把AB相两个引脚换一下,这也是可以的,有很多地方都可以调整极性,还是非常方便的。
参考文档《stm32学习笔记》