Я использую 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--;
}
}
}