其他补充
1、TIx: 定时器连接通道的信号。如TI1,指TIMx _CH1接入的信号。
2、 TIXFPx:指来自定时器通道X,经滤波器连接至比较通道x的信号。
3、相对信号的电平: 编码器接入STM32的是两条数量相同但相位不同的信号,得知此时捕捉的边沿(上升或下降),再得知此刻相对信号的电平,正是为了确定编码器的转动方向。
#include "systick.h"
unsigned int Timing_delay;
void SysTick_Configration(void)
{
while(SysTick_Config(72));
SysTick->CTRL &=~(1<<0);//Եʼۯ۳ژҕ֨ʱǷ disable
}
void Delay_us(unsigned int n)
{
Timing_delay=n;
SysTick->CTRL |=(1<<0);//ߪǴ֨ʱǷ
while(Timing_delay);
SysTick->CTRL &=~(1<<0);
}
void delay_us(unsigned int n)
{
Timing_delay=n;
SysTick->CTRL |=(1<<0);//ߪǴ֨ʱǷ
while(Timing_delay);
SysTick->CTRL &=~(1<<0);
}
void delay_ms(unsigned int k)
{
while(k--)
{
delay_us(1000);
}
}
在参考手册上有这样的一个图,其中的相对信号的电平很难理解。运用编码器计数方向的图来对照比较,终于找出了其中的规则。
我们都知道编码器转动一圈输出脉冲,而输出的脉冲数量取决于编码器的线数。如线数为500,则A\B转动一圈各输出脉冲500,但是存在相位差,通常相位差为90。根据输出信号的相位差来对比,我们就可以分析编码器转动的方向。
以编码器信号“正向输入”为例,编码器的输入信号A、B分别连接TI1、TI2,脉冲计数值为CNT。按照有效边沿为TI1进行计数,也就是指,观察A的边沿变化。
位置1:
A为上升沿,因而TI1产生上升沿,经滤波后成为TI1FP1信号,即“TI1FP1=上升”。
而此时相对信号的电平,从正向输出的脉冲图中可以看出,也就是B,为低。按照参考手册,此时计数器应“向上计数”,此时CNT+1。
位置2:
A为下降沿,而B的信号为“高”,同样是“向上计数”,CNT+1。
位置3:
完成一个脉冲周期后同位置1,A/B信号相对情况不变,持续保持正向,故持续向上计数。
从这我们也可以看出,在采取单边沿计数时,虽然编码器只产生了一次脉冲,但是STM32的编码器模式下的计数器记2次,也就是计数值=编码器实际脉冲*2。
按照手册的规则进行同样推演,最终参考手册的这个表传达的意思总结如下:
1、计数器向上计数,则编码器正向转动;向下计数则反向。(前提:不改变信号极性)
2、单边沿计数时(无论在TI1/TI2),计数值=编码器实际脉冲 * 2。
双边沿计数时,计数值=编码器实际脉冲 * 4。
其他补充
1、TIx: 定时器连接通道的信号。如TI1,指TIMx _CH1接入的信号。
2、 TIXFPx:指来自定时器通道X,经滤波器连接至比较通道x的信号。
3、相对信号的电平: 编码器接入STM32的是两条数量相同但相位不同的信号,得知此时捕捉的边沿(上升或下降),再得知此刻相对信号的电平,正是为了确定编码器的转动方向。