一、原理部分



转得越快方波的频率就越高,取任意一相的频率便可以知道速度。正转和反转是极性的问题,不是绝对的,就是一个相的信号要么提前要么滞后。
编码器接口的设计逻辑是:首先把A相和B相的所以边沿作为计数器的计数时钟,出现边沿信号时,就计数自增或自减。到底是增还是减?计数的方向是由另一相的状态来确定。当出现某个边沿时,我们判断另一相的高低电平。如果对应另一项的状态出现在上面的表里那就是正转反之就是反转。
定时器的预分频器和CCR寄存器与编码器接口无关。我们之前一直在使用的72MHz的内部时钟和在时基单元初始化时设置的计数方向并不会使用。
编码器接口的输出部分就是去控制CNT的计数时钟和计数方向,CNT的自增和自减就是这个硬件设计自己弄好的,根据上面的那张表来看,自行判断自增还是自减,我们看软件上面的CNT显示出来的值就知道编码器有没有接反了。

其中的预分频器一般是选择不分频,一般设置ARR为65535。但是我不知道为什么我的编码器的反转计数不是65535往下减,而是4的后面一长串数字。
正转是向上计数,反转是向下计数。这个是规定的,电路就是这么设置的。假设用TI1FP1接的是A相,那么A相看A相的上升沿。如果此时B相对应的电平是低电平,那么这个时候就是正转,向上计数反之向下计数。
表里面的在TI1和TI2上计数,就是AB相的上升沿下降沿都会看,并且判断此时相对信号的电平来判断是正转还是反转是向上计数还是向下计数。如果是仅在TI1计数或者是仅在TI2计数,那么这个时候就看的是A相的上升沿或者是下降沿或者是B相的上升沿或者是下降沿然后来看相对信号的电平来判断上升沿还是下降沿。
一般选择的是在TI1和TI2上面计数,这种计数方式精度最高。正交编码器的抗噪声原理也在这节课里面,感兴趣可以了解一下。
二、代码部分

调整编码器的极性:比如接一个编码器发现它数据的加减方向反了,想要正转的方向结果自减了,可以换AB相的引脚(其实这个没太听明白)。它这个好像是在标准库里面写代码,可以软件控制反不反相,我一般使用的是hal库,所以应该只需要外接的线换一下。

测编码器的位置:读出CNT的值。测量编码器的速度和方向:每隔一段时间取出一次CNT,然后把CNT清零,这就是测频法测量速度。
用江科大的OLED显示可以显示负数。
这个代码里面有三个点:
1、uint只能返回正数 int就能够显示负数
2、如果没有清零函数,就是可以测量轮子转一圈的脉冲,可以一直加
3、编码器测速的话,就是首先你要加一个清零函数,然后在一个定时器中断里面读取这个编码值,如果是10ms,那么测出来的就是10ms的一个速度,可以把这个速度放到pid里面去用作速度环
