NodeMCU и шаговик 28byj-48 с драйвером uln2003

SomeBody
Offline
Зарегистрирован: 14.08.2019

Всех приветствую.

Пытаюсь заставить работать Nodemcu и шаговик. 

Появилась такая проблема:

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

Также, чем больше указываю скорость в прошивке - тем "меньше" двигатель может выдержать нагрузки. Типа, при высокой скорости - просто так же начинает дребезжать и не крутиться.

Из-за чего это может быть? Пины правильные, питаю их отдельно от powerbank'а на 5В 16000 мАч.

Прошивка, на которой все работает более-менее, но иногда все равно пропускает шаги:

  #include<AccelStepper.h>
   #include <Servo.h>
   
   // создаем экземпляр AccelStepper

   #define IN1 D0
   
   #define IN2 D1

   #define IN3 D2

   #define IN4 D3



   

   #define IN1_1 D4
   
   #define IN2_1 D5

   #define IN3_1 D6

   #define IN4_1 D7

   #define SERVO_PIN D8

   AccelStepper step_motor(8, IN1, IN3, IN2, IN4);
   AccelStepper step_motor_y(8, IN1_1, IN3_1, IN2_1, IN4_1);

   Servo servo1;

   int z = 150;
   int x = 0;
   int y = 0;
   bool valueIsChanged = false;
   int multipler = 1;



   void setup(){

      Serial.begin(9600);
      Serial.setTimeout(10);

    servo1.attach(SERVO_PIN);

   step_motor.setMaxSpeed(800.0*multipler);

   step_motor.setAcceleration(80.0*multipler);

   step_motor.setSpeed(300*multipler);

   step_motor_y.setMaxSpeed(800.0*multipler);

   step_motor_y.setAcceleration(80.0*multipler);

   step_motor_y.setSpeed(300*multipler);

   

   }



   void loop(){


    if (step_motor.distanceToGo() == 0 && step_motor_y.distanceToGo() == 0){

        String request = Serial.readString();
        
    
        if (request.length() > 1)
        {
      
          x = getValue(request, ':', 0).toInt();
          y = getValue(request, ':', 1).toInt();
          z = getValue(request, ':', 2).toInt();

          
          valueIsChanged = true;
          
        }
    }
    step_motor_y.moveTo(y);
    step_motor.moveTo(x);
    servo1.write(z);
    step_motor.run();
    step_motor_y.run();
    if (step_motor_y.distanceToGo() == 0 && step_motor.distanceToGo() == 0 && valueIsChanged){
      Serial.println("OK");
      valueIsChanged = false;
    }
  }

   String getValue(String data, char separator, int index)
{
  int found = 0;
  int strIndex[] = {0, -1};
  int maxIndex = data.length() - 1;

  for (int i = 0; i <= maxIndex && found <= index; i++)
  {
    if (data.charAt(i) == separator || i == maxIndex)
    {
      found++;
      strIndex[0] = strIndex[1] + 1;
      strIndex[1] = (i == maxIndex) ? i + 1 : i;
    }
  }
  return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
}
Прошивка, при которой скорость работы нормальная (не особо уж и быстрая),
но мощность мотора очень сильно падает (начинает дребезжать и пропускать шаги):
 

 

Moderator : пожалуйста, вставьте код правильно (возможно, новым сообщением в тему), как описано в http://arduino.ru/forum/obshchii/vstavka-programmnogo-koda-v-temukommentarii
 
 
 

Почему так может быть? Из-за NodeMCU и ее 3.3-х вольт? Из-за библиотеки?

Кстати, вобрал всю эту конструкцию на макетной плате, может быть контакт там плохой? Да вродь нормальный, если бы там был плохой контакт - то такая проблема была бы на всех уровнях ускорения двигателя.

Прошу помощи. 

 

 

 

sadman41
Offline
Зарегистрирован: 19.10.2016

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

В данном конкретном случае возьмите Example от стоковой библиотеки Stepper и проверьте - действительно ли дело в скорости или таки пауэрбанк не затаскивает.

SomeBody
Offline
Зарегистрирован: 14.08.2019

sadman41 пишет:

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

В данном конкретном случае возьмите Example от стоковой библиотеки Stepper и проверьте - действительно ли дело в скорости или таки пауэрбанк не затаскивает.

 

хм, со стандартным примером работает хорошо, зависаний нет даже на скорости 120, ездит туда-сюда

sadman41
Offline
Зарегистрирован: 19.10.2016

Значит берёте стоковый пример от аксельстеппера и начинаете его терзать... мошт параметры неправильные задаете. Как заездит хорошо - переходите к водным процедурам... Т.е. - "дефектному" скетчу.

b707
Offline
Зарегистрирован: 26.05.2017

SomeBody пишет:

хм, со стандартным примером работает хорошо, зависаний нет даже на скорости 120

Фраза "даже на скорости 120" намекает на то, что это довольно большая скорость. Так почему вы в своем примере ставите скорость 800? - Может попробовать на скорости пониже?

SomeBody
Offline
Зарегистрирован: 14.08.2019

b707 пишет:

SomeBody пишет:

хм, со стандартным примером работает хорошо, зависаний нет даже на скорости 120

Фраза "даже на скорости 120" намекает на то, что это довольно большая скорость. Так почему вы в своем примере ставите скорость 800? - Может попробовать на скорости пониже?

 

120 в этой библиотеке быстрее, чем 800 в той

b707
Offline
Зарегистрирован: 26.05.2017

SomeBody пишет:

120 в этой библиотеке быстрее, чем 800 в той

а примеры от той библиотеки, где 800 - работают?