nema17+drv8825 точность позиционирования

den_non
Offline
Зарегистрирован: 09.05.2021

Добрый день всем!

Помогите разобраться или хотя бы подскажите, в какую сторону копать. Задача следующая: есть три диска, которые нужно шаговыми двигателями повернуть в нужное положение. Это что-то вроде механического табло: на дисках цифры и они показывают трехзначное число.

Используются три 17HS8401, драйвера drv8825, cnc shield v4 и arduino nano.

Никак не могу добиться необходимой точности. Как будто у двигателя не 200 шагов на оборот. Понятно, что погрешность возможна, но как-то совершенно нестабильно всё происходит.

Пробовал разные библиотеки для управления двигателями, толку никакого.

Вообще реально добиться точного позиционирования?

nik182
Offline
Зарегистрирован: 04.05.2015

Только при условии что есть датчик нулевой позиции. Относительно этой позиции подача одного и того же количества импульсов на ногу степ драйвера будет приводить в одну и туже позицию. Но есть условия. Ограничение тока драйвера должно быть достаточным что бы мотор не пропускал шаги. Выставляется переменным резистором на плате драйвера согласно току мотора по формуле из мануала на драйвер.

den_non
Offline
Зарегистрирован: 09.05.2021

ток на драйверах я вроде отрегулировал...

меня смущает, что когда я даю команду сделать например Х шагов вперед, а потом Х назад, возвращается не точно в ту же позицию. если это связано с пропуском шагов, то видимо нужно поднимать ток на драйвере. но он сейчас четко по мануалу задан

rkit
Offline
Зарегистрирован: 23.11.2016

А нагрузка точно посчитана? Частота шагов?

den_non
Offline
Зарегистрирован: 09.05.2021

что имеется в виду?

колесо, которое крутится, пластиковое, достаточно легкое.

количество шагов 200, исходя из характеристик двигателя

Kakmyc
Offline
Зарегистрирован: 15.01.2018

А если назад делать "х+1" шагов ?

den_non
Offline
Зарегистрирован: 09.05.2021

1/200 оборота довольно сложно отследить. вообще складывается впечатление что на полный оборот выходит не 200, а примерно 210 шагов. это вполне укладывается в указанную в характеристиках движка погрешность

но вот вопрос: он всегда врет именно настолько или нет. и как вообще заставить шаговый двигатель двигаться туда, куда надо. в моём случае необходимая точность - 1/8 оборота

nik182
Offline
Зарегистрирован: 04.05.2015

Ну так дайте ему в 10 раз больше. 2100 шагов и посмотрите куда придёт. Меняя количество шагов можно найти сколько шагов на оборот. А потом последить за стабильностью. 3д принтеры на таких движках десятые миллиметра стабильно выдают.

Morroc
Offline
Зарегистрирован: 24.10.2016

Да вы уж прям вообще... 3d принтеры на таких работают, точность там нормальная. Точная отработка шагов  (без пропуска) зависит от нагрузки, тока и напряжения/скорости поворота, попробуйте увеличить напряжение на драйвере или уменьшить скорость. В дополнение - нельзя дергать движок с 0 сразу на приличной скорости, вернее есть ограничения, нужно работать с ускорением, используйте полношаговый режим драйвера (все М на GND).

den_non
Offline
Зарегистрирован: 09.05.2021

Ну то есть эта погрешность должна быть стабильной для каждого двигателя, и нужно только её выяснить? Я правильно понял?

Morroc
Offline
Зарегистрирован: 24.10.2016

О какой погрешности вы говорите ? 1/8 оборота - это не погрешность, это грубый косяк в механике или управлении ШД, точность там в десяток процентов от 1/200 оборота, а если просто гонять туда-сюда, то встает обычно в 0.

 

svm
Offline
Зарегистрирован: 06.11.2016

den_non пишет:
Ну то есть эта погрешность должна быть стабильной для каждого двигателя, и нужно только её выяснить? Я правильно понял?

У исправного ШД в полно шаговом режиме никакой погрешности быть не может. Правильно выбирайте режимы и проверьте монтаж. Может где-то контакт хреновый. Если на беспаечной макетке, то 100%.

Morroc
Offline
Зарегистрирован: 24.10.2016

Поставьте grbl или аналог marlin для 328 (вроде такие есть), поставьте jerk ~10 и ускорения для начала 1000, полношаговый режим драйвера, напряжение на драйвере минимум 12в (лучше 20+в), погоняйте g-кодом - если будет в 0 возвращаться после программ на несколько минут движений (ну т.е. программа должна возвращать в итоге шд в первоначальное положение, конечно) значит косяк в вашем скетче, если и так не будет - что то с механикой не то или скорость хотите слишком высокую.

Может питание на драйверы хреновое и под нагрузкой просаживается ?

den_non
Offline
Зарегистрирован: 09.05.2021

ну, у движка прямо в характеристиках написано что шаг 1,8 градуса плюс/минус 5%

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

den_non
Offline
Зарегистрирован: 09.05.2021

Morroc пишет:

1/8 оборота - это не погрешность

не, ошибка там шагов может на 10 на оборот. 1/8 оборота - это нужная мне точность. а через какое-то количество оборотов отклонение идет гораздо больше, в этом-то и проблема:(

попробую покрутить grbl'ом, спасибо за совет

Morroc
Offline
Зарегистрирован: 24.10.2016

На драйверах 12 вольт ?

den_non
Offline
Зарегистрирован: 09.05.2021

да, от компьютерного блока питания на 350W

nik182
Offline
Зарегистрирован: 04.05.2015

5% от 1.8 градуса глазом не увидеть. И к тому же это отклонение от расчётного положения из за криво намотаных обмоток и относится к конкретному положению ротора. Если пропуска шагов нет то шаговой двигатель всегда встаёт в положение определяемое количеством шагов. Если программа правильная. И количество шагов одинаковое. И скорость подачи импульсов на ногу степ соответствует требованиям мануала.

den_non
Offline
Зарегистрирован: 09.05.2021

В примере к библиотеке по идее правильная программа должна быть. Но невооружённым глазом видно, что 200 шагов дают немного меньше оборота:(

nik182
Offline
Зарегистрирован: 04.05.2015

2000 сделали?

den_non
Offline
Зарегистрирован: 09.05.2021

Ещё нет. Я ненадолго бросил всё это и пошел салют смотреть:)

den_non
Offline
Зарегистрирован: 09.05.2021

крутанул на 2000 шагов, потом вернул обратно. если и есть смещение, то на глаз не видно

получается, что чем больше оборотов, тем точнее позиционирование?

nik182
Offline
Зарегистрирован: 04.05.2015

Нет. Отпозиционируйте на больших количествах оборотов точно место куда надо попасть. Разделите на 10, проверните на полученное число оборотов и посмотрите куда попали. Должно быть то же самое место. Если нет, то оборотов было не 10. И значит шагов на оборот не 200. Кстати, количество шагов кроме поданных программой определяется четырьмя перемычками на плате. Можно подать 100 импульсов, а сделать 200 шагов. Это тоже надо учитывать. Подробности в мануале. 

Morroc
Offline
Зарегистрирован: 24.10.2016

den_non пишет:

крутанул на 2000 шагов, потом вернул обратно. если и есть смещение, то на глаз не видно

И больше прям ничего ничего не менялось ?

den_non
Offline
Зарегистрирован: 09.05.2021

ничего