liudijiang的个人空间 https://bbs.21ic.com/?1439800 [收藏] [复制] [RSS]

日志

旋转编码器

已有 382 次阅读2016-12-5 15:22 |个人分类:器件|系统分类:嵌入式系统| 编码器, ALPS

   上图为ALPS的旋钮编码器动作的时序图,这里以SRGPWJ0200为例。

   每旋转一个单位,①②端口都产生一个上升沿或者下降沿,往右旋转时,①端口相位先于②端口,往左旋转时,②端口相位先于①端口。图中11.25°标识的范围是旋转一个单位产生的边沿跳变。

   单片机分别检测①②端口的上升沿和下降沿中断,在各自的中断中判断两个端口的电平就可以区分出左转右转了。


下面是基于nrf52832编写的驱动代码,中断实现部分。


void GPIOTE_IRQHandler(void)

{

        if(NRF_GPIOTE->EVENTS_IN[0]==1)

        {

                NRF_GPIOTE->EVENTS_IN[0] = 0;

                if( (nrf_gpio_pin_read(26)==0 && nrf_gpio_pin_read(27)==0)||

                        (nrf_gpio_pin_read(26)==1 && nrf_gpio_pin_read(27)==1) )

                {

                        spin_left++;

                }

        }

       

        if(NRF_GPIOTE->EVENTS_IN[1]==1)

        {

                NRF_GPIOTE->EVENTS_IN[1] = 0;

                if( (nrf_gpio_pin_read(26)==0 && nrf_gpio_pin_read(27)==0)||

                        (nrf_gpio_pin_read(26)==1 && nrf_gpio_pin_read(27)==1) )

                {

                        spin_right++;

                }       

        }

}


路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)