STM32驱动_旋转编码器EC11

STM32驱动_旋转编码器EC11

前言:经过做项目了解了旋转编码器的原理,大白话讲就是正反旋转输出两种相位差不同的波形,我们程序解析这段波形就可以了 波形如图:使用示波器和逻辑分析仪采集波形都印证这个图是正确的
分析这个图,找一种最简便的方法采集和判断(只用一个定时器即可),判断这个变化过程就可以知道此时是正转还是反转 说明:使用定时器中断只能判定是正转还是反转,如果需要采集当前的旋转数字具体是多少,需要在main函数中判断
void TIM4_IRQHandler(void)   //3ms定时器定时中断(自己随意设定2ms~10ms应该都可以)
{
          
   
	static int a = 0,b = 0,c = 0,d = 0;
	if (TIM_GetITStatus(TIM4, TIM_IT_Update) != RESET)  
	{
          
   
		TIM_ClearITPendingBit(TIM4, TIM_IT_Update); 
		{
          
   
			c = SCENE_KEY1;  //读取编码器引脚状态
			d = SCENE_KEY2;  //读取编码器引脚状态
			if(a == 0 && b == 0)
			{
          
   
				if(c == 1 && d == 0)
				{
          
   
					Ec_status = 1;//正转
				}
				if(c == 0 && d == 1)
				{
          
   
					Ec_status = 2;//反转
				}
			}
			a = c;           
			b = d;  //a,b保存前一次引脚采集到的状态
		}
	}
}

//实际在main函数中使用时
int main()
{
          
   
	int Ec_count = 0;  //旋转编码器当前的数值(取值范围0~10)
	while(1)
	{
          
   
		if(Ec_status == 1)
		{
          
   
			Ec_count++;
			if(Ec_count > 10)
			{
          
   
				Ec_count = 10;
			}
		}
		else if(Ec_status == 2)
		{
          
   
			Ec_count--;
			if(Ec_count < 0)
			{
          
   
				Ec_count = 0;
			}
		}
		delay_ms(5);
	}
}
旋转编码器硬件电路也需要注意几点 1、旋转编码器旋转过程中也是有毛刺需要消抖的,软件消抖或是硬件消抖(建议是硬件,加个电容即可) 2、以下是参考电路,加了那个100NF的电容之后,使用示波器观察,几乎看不到抖动的毛刺,软件就简单了,不需要消抖
经验分享 程序员 微信小程序 职场和发展