旋钮编码器编码dk05e01t

1,思想:通过旋钮编码器信号识别旋钮正转or反转从而进行需要的操作
2,资料:编码器数据手册
(1)从数据手册得知 A通道先来下降沿并且完成一个周期则为正转。
(2)B通道先来下降沿并完成一个周期则为反转。

在这里插入图片描述

在这里插入图片描述
(3)细化正反识别 (去掉抖动与毛刺)
① A来下降沿中断后读取电平 A 低 B 高 + 延时3ms后B来中断后读取电平A低 B低为正转
②B来下降沿中断后读取电平 B 低 A 高 + 延时3ms后A来中断后读取电平A低 B低为反转
3,具体实现


void dk05e01t_clearA(void)
{
	uint8_t  b = 0 ,	b1 = 0;
		
	
	
				if( dk05e01_count.knob_a_count>>DK05E01T_VALUE)//滤波  
			{
				
			  		b = app_io_read_pin(ROTARY_A_PIN_TYPE , ROTARY_A_PIN );
				b1 = app_io_read_pin(ROTARY_B_PIN_TYPE , ROTARY_B_PIN );
				//	b = app_io_read_pin(ROTARY_B_PIN_TYPE , ROTARY_B_PIN );
				
				if( b1 == 1 &&b == 0)
				{
				
					dk05e01_count.knob_one = B_WAY;
					DK05E01T_LOG_printf(" dk05e01_count.knob_one = B_WAY; \r\n"  );
				}
				else if(dk05e01_count.knob_one == A_WAY &&  b == 0 && b1 == 0)
				{
					
					dk05e01_count.knob_one = A_WAY;
					DK05E01T_LOG_printf("  A_WAY \r\n"  );
					send_cmd_count  = 0;
						send_cmd_buf[ ++send_cmd_count ] = dk05e01_count.knob_one ; 
					  dk05e01_count.knob_one =WAY_NULL;
					dk05e01_count.knob_tow =WAY_NULL;
					dk05e01_count.knob_thr =WAY_NULL;
				}
				else
				{
				  dk05e01_count.knob_one =WAY_NULL;
					dk05e01_count.knob_tow =WAY_NULL;
					dk05e01_count.knob_thr =WAY_NULL;
				}
		  
		    dk05e01_count.knob_a_count =0;

			}		
					
        
					app_gpiote_init(&rotary_gpios[0], 2); 
	
}

void dk05e01t_clearB(void)
{
	uint8_t  b = 0 ,	b1 = 0;
		
	
	
		if( dk05e01_count.knob_b_count>>DK05E01T_VALUE)//滤波  
			{
				
				b = app_io_read_pin(ROTARY_A_PIN_TYPE , ROTARY_A_PIN );
				b1 = app_io_read_pin(ROTARY_B_PIN_TYPE , ROTARY_B_PIN );
				if(b == 1 && b1 == 0)
				{
				
					dk05e01_count.knob_one = A_WAY;
					DK05E01T_LOG_printf(" dk05e01_count.knob_one = A_WAY; \r\n"  );
				}
				else if(	dk05e01_count.knob_one == B_WAY &&  b == 0 && b1 == 0)
				{
					dk05e01_count.knob_one = B_WAY;
					DK05E01T_LOG_printf(" B_WAY \r\n"  );
						send_cmd_count  = 0;
						send_cmd_buf[ ++send_cmd_count ] = dk05e01_count.knob_one ; 
					  dk05e01_count.knob_one =WAY_NULL;
					dk05e01_count.knob_tow =WAY_NULL;
					dk05e01_count.knob_thr =WAY_NULL;
				}
				else
				{
				  dk05e01_count.knob_one =WAY_NULL;
					dk05e01_count.knob_tow =WAY_NULL;
					dk05e01_count.knob_thr =WAY_NULL;
				}
		  
		    dk05e01_count.knob_b_count =0;

			}		
			
					
        
					app_gpiote_init(&rotary_gpios[0], 2); 
	
}

详情查看我上传的源码资源

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Li_凌澜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值