GyverStepper. Обсуждение библиотеки

Aschas

✩✩✩✩✩✩✩
15 Авг 2020
20
0
Вот я Rez понял как результат. Но после пояснения стало понят, что это именно разрез. Но тогда разрез это не какое то мгновенное действие, а процесс, который занимает определенное время. Больше вопросов чем ответов
А выдержка времени в 1 сек

Пусть это будет не рез любая реакция на достижение целевой точки.
 

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
359
574
Я делал что то подобное на AccelStepper только рез делал тоже шаговиком и всё работало как часы
C++:
if(Schet==Stopa){
  Schet=0;
  mystepper_1.setAcceleration( Speed*50);
  mystepper_1.setSpeed( Speed*10);
  mystepper_1.setCurrentPosition(0);
  mystepper_1.runToNewPosition(Lenta);
if(mystepper_1.distanceToGo()==0){
  delay(100);
  mystepper.setAcceleration(Speed_1*50);
  mystepper.setSpeed(Speed_1*10);
  mystepper.setCurrentPosition(0);
  mystepper.runToNewPosition(200);
сейчас хотел попробовать на Gyver Stepper
Потому что у Аксель степпер есть блокирующие функции, вроде тот же runtoposition. Если тебе нужно так упростить код - пишешь
stepper.setTarget(1234);
while (stepper.tick());
Код не пойдет дальше пока мотор не приедет
 

Aschas

✩✩✩✩✩✩✩
15 Авг 2020
20
0
И всё же если использовать setTarget(1234, RELATIVE ), как определить момент достижения целевой позиции,чтобы использовать как событие
 

Aschas

✩✩✩✩✩✩✩
15 Авг 2020
20
0
C++:
 #include "GyverStepper.h"
 #include "GyverTimer.h"
 #include "GyverButton.h"
 GStepper<STEPPER2WIRE> stepper2(96, 4, 5);
#define BTN_PIN 13
#define REZ     24
GButton butt1(BTN_PIN);
long Shag=384;
GTimer myTimer(MS);
void setup() {
  Serial.begin(9600);
  pinMode(REZ, OUTPUT);
  digitalWrite(REZ, HIGH);
}

void loop() {
 butt1.tick();
if (butt1.isPress()) {
    stepper2.setRunMode(FOLLOW_POS);
  stepper2.setMaxSpeed(100);
  stepper2.setAcceleration(10000);
  stepper2.setTarget(Shag,RELATIVE);
  Serial.print(stepper2.getCurrent());
 }
    if (!stepper2.tick()){
 digitalWrite(REZ, LOW);
 Serial.println("REZ");
  myTimer.setTimeout(1000);
 if (myTimer.isReady()) {
  Serial.println("Timeout");
  digitalWrite(REZ, HIGH);
  }
  }
 stepper2.tick();
}
таже вакханалия REZ лупит сразу после загрузки и никакое вращение не нужно
 

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
359
574
C++:
 #include "GyverStepper.h"
#include "GyverTimer.h"
#include "GyverButton.h"
GStepper<STEPPER2WIRE> stepper2(96, 4, 5);
#define BTN_PIN 13
#define REZ     24
GButton butt1(BTN_PIN);
long Shag=384;
GTimer myTimer(MS);
void setup() {
  Serial.begin(9600);
  pinMode(REZ, OUTPUT);
  digitalWrite(REZ, HIGH);
}

void loop() {
butt1.tick();
if (butt1.isPress()) {
    stepper2.setRunMode(FOLLOW_POS);
  stepper2.setMaxSpeed(100);
  stepper2.setAcceleration(10000);
  stepper2.setTarget(Shag,RELATIVE);
  Serial.print(stepper2.getCurrent());
}
    if (!stepper2.tick()){
digitalWrite(REZ, LOW);
Serial.println("REZ");
  myTimer.setTimeout(1000);
if (myTimer.isReady()) {
  Serial.println("Timeout");
  digitalWrite(REZ, HIGH);
  }
  }
stepper2.tick();
}
таже вакханалия REZ лупит сразу после загрузки и никакое вращение не нужно
Естественно лупит, ты ведь так и написал. tick() у тебя возвращает false, условие if (!tick()) постоянно выполняется. Если нужно однократно - вводи свой флаг
 

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

★★★★★★★
14 Авг 2019
4,281
1,306
Москва
Потому что начальная позиция не должна соотв. позиции реза. А тут имеем просто неподвижный мотор.
Но я уже объяснял этот случай, повторяться не буду.
 

Aschas

✩✩✩✩✩✩✩
15 Авг 2020
20
0
Извините if (stepper2.tick()) работает, моя ошибка, я проверял условие if (!stepper2.tick())
 

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
359
574
Если ты хочешь перейти с Аксель степпер без сильных изменений в коде - оберни tick() в while(), как я писал выше
 

Aschas

✩✩✩✩✩✩✩
15 Авг 2020
20
0
Но .tick действительно тикает т.е. выдаёт им пульсы, а не прямую или не так поясните
 

Aschas

✩✩✩✩✩✩✩
15 Авг 2020
20
0
Ну так уже открывал но решения не нашёл.
В примере не рассматривается относительные перемещения когда .tick тикает в Loop
 

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
359
574
Ну так уже открывал но решения не нашёл.
В примере не рассматривается относительные перемещения когда .tick тикает в Loop
Там тик тикает именно в луп.... В общем понятно, больше практики и все получится
 

Aschas

✩✩✩✩✩✩✩
15 Авг 2020
20
0
И всё же хоть какой то примерчик с setTarget(val, RELATIVE )
 

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
359
574
Изменено:

YPAL

✩✩✩✩✩✩✩
14 Сен 2020
4
0
Строю фрезерный станок. При выключенном шпинделе все шаговики работают нормально. При включении шпинделя начинаются перебои сигнала и шаговики встают. Померил напряжение приходящее с клемы Step а там 0,01 вольта... сигналы на DIR и En нормальные порядка 5 вольт. Похоже шпиндель создает помехи которые перебивают сигнал step. Есть ли способ увеличить напряжение на Step?
 

b707_2

★★✩✩✩✩✩
22 Июл 2020
182
51
для начала я бы проверил, сконфигурирован ли пин STEP как OUTPUT
А то симптомы уж больно характерные.
 

YPAL

✩✩✩✩✩✩✩
14 Сен 2020
4
0
Да использую arduino uno
GStepper< STEPPER2WIRE> stepper1(400, 5, 6, 7);
GStepper< STEPPER2WIRE> stepper2(400, 8, 9, 10);
void setup()
{
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT);
pinMode(10, OUTPUT);
pinMode(LED_BUILTIN, OUTPUT);

delay(1000);
stepper1.enable();
stepper1.autoPower(true);
stepper1.setAcceleration(1200);

stepper2.enable();
stepper2.autoPower(true);
// установка ускорения в шагах/сек/сек
stepper2.setAcceleration(1200);
keyboard.begin(DataPin, IRQpin);
Serial.begin(115200);

для начала я бы проверил, сконфигурирован ли пин STEP как OUTPUT
А то симптомы уж больно характерные.
Глянь может я неправильно это сделал?

Нужно найти сопли в схеме.
Провода проверял. И такая проблема на обоих шаговиках...
 

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

★★★★★★★
14 Авг 2019
4,281
1,306
Москва
А как ты снимаешь напряжение со STEP ? Отключи от драйвера и подай на пин HIGH сигнал и сделай измерение.
А если ты пытаешься поймать HIGH во время работы.. Там же нет постоянного напряжения в 5 в, там импульс короткий.
Я думаю, что если нарисовать схему подключения шаговых моторов и шпинделя к ардуино и источника питания, то электроникам будет куда проще угадывать.
 

YPAL

✩✩✩✩✩✩✩
14 Сен 2020
4
0
А как ты снимаешь напряжение со STEP ? Отключи от драйвера и подай на пин HIGH сигнал и сделай измерение.
А если ты пытаешься поймать HIGH во время работы.. Там же нет постоянного напряжения в 5 в, там импульс короткий.
Я думаю, что если нарисовать схему подключения шаговых моторов и шпинделя к ардуино и источника питания, то электроникам будет куда проще угадывать.
Шпиндель с ардуино никак не связан включатся отдельно. А схема стандарт step dir en подключены к цифровым пинам, земля к земле. Просто у меня есть плата от 3д принтера там спокойно можно измерить 5В на степе при включении двигателя.
"Отключи от драйвера и подай на пин HIGH сигнл и сделай измерение." попробую проверить так.
 

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

★★★★★★★
14 Авг 2019
4,281
1,306
Москва
Все равно не понимаю как там можно померить. Двигатель делает шаг, когда на контакт STEP подается ИМПУЛЬС. Импульсты будут подаваться с определенной частотой и определенной длительностью. Эдакий ШИМ сигнал
 

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
359
574
Пины делаются OUTPUT сами внутри библиотеки, дублировать в скетче нет смысла. Напряжение на STEP измерить не получится, потому что сигнал подаётся импульсом на 4 микросекунды