Пропуск шагов шагового двигателя

IvGor

✩✩✩✩✩✩✩
21 Апр 2021
8
0
Друзья доброго всем времени суток.
Собрал по схеме стенд для работы с шаговым двигателем.
a4988.jpg
Микроконтроллер: Arduino Nano
Драйвер: A4988
Двигатель: Nema17 JK45HNM34-1334A
Питание двигателя: БП 12В 3А.
Vref:-0.9В

Суть проблемы.
При небольших нагрузках двигатель можно остановить рукой. Т.е. Вешаю на вал шестерню диаметром 30мм и могу спокойно без усилий пальцами остановить двигатель. Что делать? Как можно увеличить крутящий момент не боясь сжечь драйвер?
Еще интересная проблема, при ускорении и замедлении двигатель делает это рывками. Создается впечатление, как-будто он делаем несколько микрошагов назад (но это не точно). Скетч использовал из описания библы, где двигло просто качается туда сюда.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
Как можно увеличить крутящий момент не боясь сжечь драйвер?
поставить редуктор/заменить двигатель/добавить предохранитель
Еще интересная проблема, при ускорении и замедлении двигатель делает это рывками.
такого быть не должно, смотрите код
 
  • Лойс +1
Реакции: IvGor

IvGor

✩✩✩✩✩✩✩
21 Апр 2021
8
0
IvGor написал(а):
Как можно увеличить крутящий момент не боясь сжечь драйвер?
поставить редуктор/заменить двигатель/добавить предохранитель
Странно просто. на том же 3д принтере эти двигатели с этими драйверами хрен остановишь рукой. А тут не прилагая больших усилий он легко останавливается.

IvGor написал(а):
Еще интересная проблема, при ускорении и замедлении двигатель делает это рывками.
такого быть не должно, смотрите код
Скетч взят со страницы описания библиотеки. Чистый копипаст. Поэтому и возник вопрос.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
Странно просто. на том же 3д принтере эти двигатели с этими драйверами хрен остановишь рукой. А тут не прилагая больших усилий он легко останавливается.
значит напряжение/ток на принтере выше чем здесь, поставьте такой же бп.
Скетч взят со страницы описания библиотеки. Чистый копипаст. Поэтому и возник вопрос.
Я без понятия о какой библиотеки идет речь, т.к. их много и примеров к ним так же много.
 

IvGor

✩✩✩✩✩✩✩
21 Апр 2021
8
0

IvGor

✩✩✩✩✩✩✩
21 Апр 2021
8
0
Собственно вот пример работы двигателя.
Могу предположить, что это не программная проблема.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
Избыточное цитирование
Собственно вот пример работы двигателя.
Могу предположить, что это не программная проблема.
Я же написал: читайте описание библиотеки, примеры, которые там есть, нужно настраивать под свой драйвер и подключение
 

IvGor

✩✩✩✩✩✩✩
21 Апр 2021
8
0
Я же написал: читайте описание библиотеки, примеры, которые там есть, нужно настраивать под свой драйвер и подключение

#include "GyverStepper.h"

GStepper< STEPPER2WIRE> stepper(200, 2, 3, 5);


void setup() {
// режим следования к целевй позиции
stepper.setRunMode(FOLLOW_POS);
// установка макс. скорости в шагах/сек
stepper.setMaxSpeed(400);
// установка ускорения в шагах/сек/сек
stepper.setAcceleration(400);
}
void loop() {
// просто крутим туды-сюды
if (!stepper.tick()) {
static bool dir;
dir = !dir;
stepper.setTarget(dir ? -400 : 400);
}
// график положения
static uint32_t tmr2;
if (millis() - tmr2 > 20) {
tmr2 = millis();
Serial.println(stepper.getCurrent());
}
}


В скетче, что я использую нужно настроить только пины. На моем драйвере вполне неплохо работает стандартная задержка, значит ничего больше настраивать не нужно. При этом двигатель все равно не отрабатывает нормально. Пробовал и разные двигатели и разные драйвера. Но результат один и тот же. Может есть какие-то предположения? Я прочитал документацию к библиотеке и не нашел там решения, которое мне могло бы помочь в данной проблеме.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,242
1,297
Москва
Тут что то в корне неверно. Предлагаю вам забить на библиотеку для начала.
Далее. у Вас ms0-ms2 подтянуты куда от ? не надо что бы они весели в в воздухе.
Опять же сначала плюньте на пиш DIR , он вам нужен будет потом. Надо сначала научить двигатель работать как следует.
Далее пин STEP берете на выход. и в цикле loop делаете что то типа

digitalWrite(пин_шага,1)
delay(1);
digitalWrite(пин_шага,0)
delay(50);

и смотрите как оно будет двигаться

Задержки от фонаря, но они точно слишком большие даже для целого шага. Я вроде крутил с задержкой 1. делал с delaymicroseconds , 1-ая задержка была 5, а вторая менее 1000 для целого шага. Начиная с какого то времени начинались пропуски шагов под нагрузкой.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
Избыточное цитирование
В скетче, что я использую нужно настроить только пины. На моем драйвере вполне неплохо работает стандартная задержка, значит ничего больше настраивать не нужно. При этом двигатель все равно не отрабатывает нормально. Пробовал и разные двигатели и разные драйвера. Но результат один и тот же. Может есть какие-то предположения? Я прочитал документацию к библиотеке и не нашел там решения, которое мне могло бы помочь в данной проблеме.
3 раз говорю: читайте описание!
setMaxSpeed(speed) – установка максимальной скорости по модулю в шагах/секунду
у вас в коде:
C++:
......

GStepper< STEPPER2WIRE> stepper(200, 2, 3, 5);

......

stepper.setMaxSpeed(400);

.....
итого 2 полных оборота в секунду!
такую скорость двигатель, естественно, не поддерживает.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,242
1,297
Москва
такую скорость двигатель, естественно, не поддерживает.
Это почему ? у меня спокойно работал при 1000 шагов в секунду. Это при полном шаге. при 200 шагах на оборот получается 5 оборотов в секунду. Вполне себе нормальная скорость.
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
@Старик Похабыч, максимальная скорость зависит от самого двигателя (характеристики не смотрел, но по видео он медленный) + не забывайте что в коде еще ускорение
C++:
// установка ускорения в шагах/сек/сек
stepper.setAcceleration(400);
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,242
1,297
Москва
И как ускорение связано с максимальной скоростью? Если поставить его криво выйдет за границы ?
Вот нашел свои заметки:
A4988
digitaWrite
/16 25 микросекунд задержка 5,3 оборота. 3200 оборотов 0,1125
/8 45 микросекунд задержка 6,3 оборота. 1600 оборотов 0,225
/4 90 микросекунд задержка 6,5 оборота. 800 оборотов 0,45
/2 180 микросекунд задержка 6,7 оборота. 400 оборотов 0,9
1 1 импульс 720 микросекунд задержка 6,8 оборота. 200 оборотов 1,8

Порядок проводов Немо: Белый-Фиолетовый-Черный-Серый.
Да, забыл написать тестировал на Nema 17HS4401, у меня он 12-тивольтовый. Тот что у автора по поиску выдает на 2.1 вольта, не знаю на сколько правда
 

IvGor

✩✩✩✩✩✩✩
21 Апр 2021
8
0
Избыточное цитирование
digitalWrite(пин_шага,1)
delay(1);
digitalWrite(пин_шага,0)
delay(50);
Двигается. Вообще при малых, очень малых скоростях, типа 1 шаг в сек. Двигатель удержать нереально. но как только я добавляю скорость до 50 ш/сек, как все снова ломается. К слову двигатель сильно гудить при работе. и с ним сильно свистит БП. БП пробовал разные.


И как ускорение связано с максимальной скоростью? Если поставить его криво выйдет за границы ?
Вот нашел свои заметки:


Да, забыл написать тестировал на Nema 17HS4401, у меня он 12-тивольтовый. Тот что у автора по поиску выдает на 2.1 вольта, не знаю на сколько правда
на двигателе Nema 17HS4401 проблема такая же.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,242
1,297
Москва
..
delay(1);
..
delay(50);

при таких задержках должно быть 20 шагов в секунду.
Меняем так:
digitalWrite(пин_шага,1)
delaymicroseconds (5);
digitalWrite(пин_шага,0)
delaymicroseconds (950);

Далее я так и не понял. подтянуты ли шаговые пины драйвера к земле.

И пальцем надо потрогать сам драйвер. Он должен быть теплый. 40-50 градусов для него не много. Если он холодный - крутить подстроечник увеличивать ток.

Есть возможность сменить драйвер ? На такой же но другой ?
 
  • Лойс +1
Реакции: IvGor

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
И как ускорение связано с максимальной скоростью? Если поставить его криво выйдет за границы ?
Возможно, если интересно - можете разобрать библиотеку и посмотреть, есть ли в ней проверка.

Тем не менее логично сразу исключить неправильные настройки.
 
  • Лойс +1
Реакции: IvGor

IvGor

✩✩✩✩✩✩✩
21 Апр 2021
8
0
В общем проблема решилась путем установки перемычек на деление шагов до 1/32. И все стало работать плавно, без рывков.

IvGor написал(а):
Как можно увеличить крутящий момент не боясь сжечь драйвер?
поставить редуктор/заменить двигатель/добавить предохранитель
IamNikolay Спасибо за совет, буду делать редуктор. На сколько я понял просто поднимать напряжение на питании драйвера - бессмысленно.

Всем спасибо. Тему можно закрыть.