自学内容网 自学内容网

STM32 EC11旋转编码器扫描读取

EC11电路如下
在这里插入图片描述
扫描代码如下,经测试靠谱

    uint32_t wait_t = 0;
    bool encoder_switch = 0;
    uint8_t encoder_a_pre = HAL_GPIO_ReadPin(GPIOA, EC11_A_Input_Pin);
    int32_t steps = 0;

    uint8_t encoder_a_temp ;
    /* Infinite loop */
    while (1)
    {
        uint32_t t = HAL_GetTick();

        uint8_t encoder_a = HAL_GPIO_ReadPin(GPIOC, EC11_A_Input_Pin);
        uint8_t encoder_b = HAL_GPIO_ReadPin(GPIOC, EC11_B_Input_Pin);

        if (encoder_a_pre != encoder_a && !encoder_switch)
        {
            wait_t = HAL_GetTick();
            encoder_a_temp = encoder_a;
            encoder_switch = true;
        }

        if (encoder_switch && ((t - wait_t) >= 1))
        {
            if (encoder_a_temp != encoder_a)
            {
                encoder_a_pre = encoder_a;
                encoder_a_temp = encoder_a;
                encoder_switch = false;
                continue;
            }

            //a 0->1, b 0 Clockwise; b 1 AntiClockwise
            if (encoder_a == 1)
            {
                if (encoder_b == 0)
                {
                    steps++;
                }
                else
                {
                    steps--;
                }
            }
            //a 1->0, b 1 Clockwise; b 0 AntiClockwise
            else
            {
                if (encoder_b == 1)
                {
                    steps++;
                }
                else
                {
                    steps--;
                }
            }

            encoder_a = HAL_GPIO_ReadPin(GPIOC, EC11_A_Input_Pin);
            encoder_b = HAL_GPIO_ReadPin(GPIOC, EC11_B_Input_Pin);
            encoder_switch = false;
            encoder_a_pre = encoder_a;
        }
    }

原文地址:https://blog.csdn.net/alongsxmx/article/details/153048991

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!