EC11系列编码器

EC1102编码器图

EC1102编码器原理图

1:编码器中添加了两个上拉电阻,所以在软件配置中,配置下拉有效。

EC1102编码器资料手册

2:在EC1102编码器资料手册中,工作电压是1.5V以下有效,3.5V以上是无效,在这里需要注意延时消抖,1-3ms,在这里设置1ms。

 好了原理已经知道,直接上代码

1:初始化

 void EnCoder() //编码器
{

   GPIO_InitTypeDef GPIO_InitStructure;
   EXTI_InitTypeDef EXTI_InitStruct;
   NVIC_InitTypeDef NVIC_InitStruct;
	
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC|RCC_APB2Periph_GPIOA\
   |RCC_APB2Periph_AFIO, ENABLE); 

   GPIO_InitStructure.GPIO_Pin  =GPIO_Pin_7;
   GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD; 
   GPIO_Init(GPIOA,&GPIO_InitStructure);

   GPIO_InitStructure.GPIO_Pin  =GPIO_Pin_3;
   GPIO_InitStructure.GPIO_Mode =GPIO_Mode_IPD; 
   GPIO_Init(GPIOC,&GPIO_InitStructure);
  
	
	NVIC_InitStruct.NVIC_IRQChannel    =EXTI3_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelCmd =ENABLE;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority =3;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 0;
	NVIC_Init(&NVIC_InitStruct);
	
	NVIC_InitStruct.NVIC_IRQChannel    =EXTI9_5_IRQn;
	NVIC_InitStruct.NVIC_IRQChannelCmd =ENABLE;
	NVIC_InitStruct.NVIC_IRQChannelPreemptionPriority =3;
	NVIC_InitStruct.NVIC_IRQChannelSubPriority = 1;
	NVIC_Init(&NVIC_InitStruct);
	
	
	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOA,GPIO_PinSource7);
	EXTI_InitStruct.EXTI_Line    =EXTI_Line7;
	EXTI_InitStruct.EXTI_LineCmd =ENABLE;
    EXTI_InitStruct.EXTI_Mode    =EXTI_Mode_Interrupt;
	EXTI_InitStruct.EXTI_Trigger =EXTI_Trigger_Falling;
    EXTI_Init(&EXTI_InitStruct);
	
	GPIO_EXTILineConfig(GPIO_PortSourceGPIOC,GPIO_PinSource3);
	EXTI_InitStruct.EXTI_Line    =EXTI_Line3;
	EXTI_InitStruct.EXTI_LineCmd =ENABLE;
    EXTI_InitStruct.EXTI_Mode    =EXTI_Mode_Interrupt;
	EXTI_InitStruct.EXTI_Trigger =EXTI_Trigger_Falling;
    EXTI_Init(&EXTI_InitStruct);


}
2:中断配置
#define alv GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_7)
#define blv GPIO_ReadInputDataBit(GPIOC,GPIO_Pin_3)

volatile uint32_t encoder_left_ENABLE = 0;
volatile uint32_t encoder_right_ENABLE = 0; 

uint32_t time_A=0,time_B = 0;

//左边
void EXTI3_IRQHandler(void)
{

    Delay_ms(1);

	if (blv==0)
	{
        if(alv==0)
	    {

		    encoder_left_ENABLE=1;
			encoder_right_ENABLE=0;			 
			if(Buzzer_Stup)
			Buzzer_Time_ms=20;
			EC11_Time_B=0;
	    } 
	}
	
      EXTI_ClearITPendingBit(EXTI_Line3);  
}


//右边
void EXTI9_5_IRQHandler(void)
{


     Delay_ms(1);	

    if (alv==0)
	{
		if(blv==0)
		{ 
	
	        encoder_left_ENABLE=0;
		    encoder_right_ENABLE=1;
			if(Buzzer_Stup)
			Buzzer_Time_ms=20;
			EC11_Time_A=0;
					
		}
	}
	
     EXTI_ClearITPendingBit(EXTI_Line7); 
} 

 波形图效果

效果视频

WeChat_20231124111747-CSDN直播

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
EC11是一种常见的旋转编码器,适用于微控制器的输入设备。STM32是一系列32位ARM Cortex-M微控制器的型号。下面是关于EC11旋转编码器STM32源码的简要说明。 首先,要使用EC11旋转编码器,我们需要将其连接到STM32微控制器的相应GPIO引脚。这通常涉及到连接旋转编码器的A相、B相和SW(按下旋转编码器)引脚到微控制器的GPIO引脚,并进行所需的外部中断或输入捕获配置。 接下来,我们可以编写STM32源码来读取EC11旋转编码器的旋转和按键事件。首先,我们需要设置GPIO引脚的相关配置,如输入模式、中断触发方式等。 然后,我们可以使用STM32的外部中断或输入捕获模块来检测旋转编码器的旋转事件。外部中断可以在旋转编码器的A相或B相引脚上触发,并且可以根据A相和B相的相位关系来判断旋转方向。另外,输入捕获模块可以用来测量旋转编码器的旋转速度。 此外,我们还可以使用GPIO中断来检测EC11旋转编码器的按键事件。当按下旋转编码器的SW引脚时,相关的GPIO中断会被触发,我们可以在中断处理函数中处理按键事件。 根据具体的需求,我们可以编写处理旋转和按键事件的代码,例如更新显示、调整参数等。这些代码可以根据旋转编码器的旋转方向增加或减少数值,或执行其他相关操作。 综上所述,通过合适的GPIO配置和适当的中断处理,我们可以编写STM32源码来实现对EC11旋转编码器的读取和响应。这样,我们就能够利用EC11旋转编码器STM32微控制器提供旋转和按键输入功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值