Положения шагового мотора и микрошаг

vvadim
Offline
Зарегистрирован: 23.05.2012

Есть шаговик, EasyDriver, кнопки . Использую библиотеку AccelStepper .

Управление

удерживаю кнопку ЛЕВО - крутит влево

удерживаю кнопку ПРАВО - крутит вправо

нажал кнопку ЗАПОМНИТЬ - запомнил позицию  savedPos = stepper.currentPosition();

нажал кнопку ВОЗВРАЩЕНИЕ - вернулся в запомненную позицию из любой точки

Всё работает в режиме полного шага, работает отлично.

Возникла необходимость иногда переходить в режим микрошага 1/8  - тоже не проблема, нажал кнопку- микрошаг, нажал - полный шаг. Проблема в том, что после игрищ с микрошагом нужно перейти в полный шаг и вернуться в сохранённую позицию. Казалось бы нужно убрать дополнительные шаги, но нифига не получается. Понятно, что при делении появится погрешность, но у меня убегает ну очень сильно. Может алгоритм неправильный, может в библиотеке загвоздка.

savedPos = savedPos - (stepper.currentPosition() - savedPos)/8;

 

 

art100
Offline
Зарегистрирован: 09.03.2014

vvadim пишет:
... EasyDriver...AccelStepper... микрошага...

accelstepper еще чудеса на двух моторах имеет я уже об этом писал я выкинул

 

vvadim
Offline
Зарегистрирован: 23.05.2012

art100 пишет:

 

accelstepper еще чудеса на двух моторах имеет я уже об этом писал я выкинул

 

Читал твои посты про эту либу. 

Но меня сейчас интересую не недостатки библиотеки, а решение своей проблемы

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

В чем проблема ? Количество микрошагов в шаге известно, после перехода в микрошаги считаем их, делимна 4, остаток от деления на 4 отрабатываем назад, или добиваем до полного шага, попадаем в позицию полного шага. А вообще, уж если работаешь в микрошагах так и работай в таком режиме. Зачем использовать полный шаг ?

vvadim
Offline
Зарегистрирован: 23.05.2012

Я в первом посте написал

savedPos = savedPos - (stepper.currentPosition() - savedPos)/8;

но не хочет работать