Отслеживание переполнения и потери оптического кодировщика, а также общего количества - PullRequest
0 голосов
/ 21 июня 2020

Я использую MCU STM32F407 с инкрементальным оптическим энкодером 600 PPR. Энкодер соединен с шаговым двигателем, который приводит в движение шарико-винт с шагом 5 мм. Я пытаюсь отслеживать счетчик энкодера, чтобы определить абсолютное положение шпинделя, прикрепленного к шарико-винтовой передаче. Кроме того, при использовании энкодера в квадратурном режиме фактический счет на 1 оборот энкодера составляет 2400 отсчетов. Я написал следующую программу только для проверки logi c (а не для сохранения фактического числа), но это, похоже, не работает. Есть идеи, что мне не хватает?

Я отслеживаю, когда кодировщик переполняется и становится нулевым. Если он вращается по часовой стрелке, то предыдущий счет - 2399, а в против часовой стрелки он должен быть 1, верно? Также я был бы очень признателен, если бы кто-нибудь мог порекомендовать лучший способ отслеживания переполнения.

void encoderCount()
{
    currCount = __HAL_TIM_GET_COUNTER(&htim1); //get encoder count

    if (!__HAL_TIM_IS_TIM_COUNTING_DOWN(&htim1)) //Is the encoder timer counting up? (CW)
    {
        if (currCount == 0)
        {
            prevCount = 2399;
            indexCount++;
        }
    }
    else //then it must be counting down (CCW)
    {
        if (currCount == 0)
        {
            prevCount = 1;
            indexCount--;
        }
    }
}
...