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

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
359
569
Для более эффективной работы в прерывании лучше использовать gyverstepper2, об этом в той же статье написано
 

AlexGyver

★★★★★★✩
Команда форума
30 Июл 2018
359
569
Если нормально написать опрос энкодера без while - прерывания для мотора будут не нужны. Почему энкодер ломается из за прерываний мотора - вопрос, возможно где то не хватает volatile или опять же запрета прерываний
 
  • Лойс +1
Реакции: Epszit

j0ker

✩✩✩✩✩✩✩
31 Май 2023
3
0
Есть CNC Shield v3, DRV8825, NEMA17. Пытаюсь крутить моторчик с помощью библиотеки GyverStepper. Но крутится только в одну сторону, менял setSpeed(-2000), вставлял reverse() - ничего не помогает. Почему так?

C++:
#include <GyverStepper.h>

GStepper<STEPPER4WIRE> stepper(200, 2, 5);

void setup() {
  pinMode( 8 ,OUTPUT);          // ВАЖНО !!!!!
  digitalWrite(8, LOW);         // иначе не будет работать

  stepper.setMaxSpeed(5000);
  stepper.setRunMode(KEEP_SPEED);
  stepper.setSpeed(2000);
}

void loop() {
    stepper.tick();
}
 

viktor1703

★★★✩✩✩✩
9 Дек 2021
557
135
Сигналы/питание-"земля" доходят до драйвера? Может какая дорожка в обрыве. А, может быть и такое, как было на моей плате, были закорочены дорожки. По питанию моторов, при первом включении выгорел предохранитель и какие-то, уже не помню, к одному из четырех драйверов сигнальные. Пришлось резать одну и воспользоваться МГТФом.
 

j0ker

✩✩✩✩✩✩✩
31 Май 2023
3
0
Написал простенький скетч, без использования библиотеки GyverStepper - всё работает, крутится туда-сюда.
Непонятно.
Может у кого есть работающий скетч для CNC Shield v3 с GyverStepper, а то библиотека хорошая и удобная.

C++:
const int StepX = 2;
const int DirX = 5;

void setup() {
  pinMode(StepX,OUTPUT);
  pinMode(DirX,OUTPUT);
 
  pinMode( 8 ,OUTPUT);
  digitalWrite(8, LOW);
 
}
 
void loop() {
 digitalWrite(DirX, HIGH); // set direction, HIGH for clockwise, LOW for anticlockwise
 
 for(int x = 0; x < 200; x++) { // loop for 200 steps
  digitalWrite(StepX,HIGH);
  delayMicroseconds(500);
  digitalWrite(StepX,LOW);
  delayMicroseconds(500);
 }
delay(1000); // delay for 1 second
    
 digitalWrite(DirX, LOW); // set direction, HIGH for clockwise, LOW for anticlockwise

    for(int x = 0; x < 200; x++) { // loop for 200 steps
  digitalWrite(StepX,HIGH);
  delayMicroseconds(500);
  digitalWrite(StepX,LOW);
  delayMicroseconds(500);
 }
 

PiratFox

★★★★★✩✩
13 Фев 2020
1,713
476
@j0ker, драйвер 8825 условно 2-х проводной. Следовательно, вместо
GStepper<STEPPER4WIRE> stepper(200, 2, 5);
нужно указать
GStepper<STEPPER2WIRE> stepper(200, 2, 5);
И будет вам счастье.;)
Читайте внимательно описание вот здесь , раздел "Документация GStepper" - Инициализация.
 
  • Лойс +1
Реакции: j0ker

j0ker

✩✩✩✩✩✩✩
31 Май 2023
3
0
И правда, как я раньше не заметил. Большое спасибо. Теперь всё работает.
 

Vitaliy_K

✩✩✩✩✩✩✩
31 Мар 2022
3
0
Здравствуйте. GStepper2 <STEPPER4WIRE> stepper (2048, 5, 3, 4, 2); 5, 3, 4, 2 – данные порты берутся с Ардуино нано. Подключил модуль PCF8575. Мне нужно подключить порты с модуля PCF8575, а не с ардуино в GStepper2 <STEPPER4WIRE> stepper (2048, PCF8575.5, PCF8575.3, PCF8575.4, PCF8575.2) (пример); Как правильно это сделать, ПОДСКАЖИТЕ.
 

Dima89

✩✩✩✩✩✩✩
27 Июл 2023
3
0
Подскажите как передать в конструктор класса объект GStepper?
Таким способом не получается ошибка:
Compilation error: no matching function for call to ‘GStepper2<(GS_driverType)0>::GStepper2()’

C++:
#include "GyverStepper2.h"

class My {
  public:
    My(GStepper2<STEPPER2WIRE> stepper ){
      _stepper =  stepper;
    }
    private:
     GStepper2<STEPPER2WIRE> _stepper;
  };
 

vortigont

★★★★★★✩
24 Апр 2020
996
525
Saint-Petersburg, Russia
Подскажите как передать в конструктор класса объект GStepper?
эта фраза не имеет смысла. Попробуйте еще раз.

в простейшем случае как-то так:

C++:
#include "GyverStepper2.h"

template <GS_driverType D>
class My : public GStepper2<D> {
  public:
    My(uint16_t steps) : GStepper2<D>(steps) {
      //do something
    }
    private:
     //GStepper2<STEPPER2WIRE> _stepper; это не надо
};
 

Sabonius

✩✩✩✩✩✩✩
7 Мар 2021
4
0
Понимаю, что очень чайницкий вопрос, но

Использую GStepper2.
Мне нужно, чтобы двигатель резко менял направление вращение например каждые 2 оборота.
И чтобы помнил сколько ему ещё крутиться, поэтому останавливать и делать setTarget() не годится.
Для этого подходит функция reverse().

Вот это не работает. И кстати какую bool переменную нужно передавать в reverse и зачем?
C++:
if ((stepper.pos % 400 == 0)) {
    guide.reverse(1);
  }
 

Chak

✩✩✩✩✩✩✩
6 Янв 2024
3
0
Всем привет
У меня есть вот такой мотор LSA421S14-A-UKBN-152 с вот такими характеристиками
1713425728486.png
И есть драйвер TB67S249FTG и стандартный H-bridge LM298N

когда подключаю мотор через LM298N и использую библиотеку GyverStepper2 всё работает
когда подключаю мотор через TB67S249FTG с другой библиотекой - то всё то же работает, но когда хочу использовать GyverStepper2 с этим драйвером, то он не хочет даже запускаться

На TB67S249FTG ток вроде как настроен правильно и Vref выставлен в 1.10 v (с другими библиотеками всё работает)
на TB67S249FTG пробовал ставить режим работы full step и 1/2 step

мне кажется, что у меня проблема с созданием объекта мотора (не очень понимаю из моего даташита сколько шагов полный оборот)

пытался запустить код из примера homing (на 4 пиновом драйвере всё ок, а на 2 пиновом - не хочет работать)

C++:
#include <Arduino.h>
#include "Debug.h"
#include "GyverStepper2.h"

#define dirPin 12
#define stepPin 11
#define enPin 10
void homing();

#define LIMSW_X 3

GStepper2<STEPPER2WIRE> stepper(2048, stepPin, dirPin, enPin);


void setup()
{
    Serial.begin(9600);
    pinMode(LIMSW_X, INPUT_PULLUP);
    delay(1000);
    DEBUGLN("setup");
    homing();     
}

void loop()
{
}

void homing()
{
    stepper.enable();
    DEBUGLN("start homing");
    if (digitalRead(LIMSW_X))
        DEBUGLN("start");
    {                          // если концевик X не нажат
        stepper.setSpeed(-10); // ось Х, -10 шаг/сек
        while (digitalRead(LIMSW_X))
        {                   // пока кнопка не нажата
            stepper.tick(); // крутим
        }
        // кнопка нажалась - покидаем цикл
        stepper.brake(); // тормозим, приехали
        DEBUGLN("finish");
    }
    stepper.reset(); // сбрасываем координаты в 0
}
может кто-то может подсказать куда смотреть, ибо я уже ничего не понимаю