Почему в библиотеке Stepper при прямом вращении меняется сигнал DIR ?

ArtemDolst
Offline
Зарегистрирован: 08.03.2021

Доброго времени суток! Из теории известно, что сигнал DIR отвечает за направление вращения шагового двигателя, а STEP за необходимое количество шагов, в зависимости от количества тактов. При подробном изучении стандартной библиотеки Stepper увидел, что при прямом направлении вращения мотора на выход DIR подаются разные уровни логических сигналов. По сути, если у нас направлении прямое, то всегда должна быть единица, а если обратное, то ноль. Возникает вопрос, почему так написано в коде и это работает?

Приведу ниже код из библиотеки Stepper, отвечающих за вращение дигателя:

 

void Stepper::stepMotor(int thisStep)
{
  if (this->pin_count == 2) {
    switch (thisStep) {
      case 0:  // 01
        digitalWrite(motor_pin_1, LOW);
        digitalWrite(motor_pin_2, HIGH);
      break;
      case 1:  // 11
        digitalWrite(motor_pin_1, HIGH);
        digitalWrite(motor_pin_2, HIGH);
      break;
      case 2:  // 10
        digitalWrite(motor_pin_1, HIGH);
        digitalWrite(motor_pin_2, LOW);
      break;
      case 3:  // 00
        digitalWrite(motor_pin_1, LOW);
        digitalWrite(motor_pin_2, LOW);
      break;
    }
  }
}

Если будут выполняться команды в последовательности 0-1-2-3 это будет прямое направление вращения, а если в последовательности 3-2-1-0 будет обратное. Меня интересует тот факт, почему в принципе у DIR разные уровни при движении в одном направлении? Благодарю.

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

И где ты в этом коде увидел пин DIR?

ArtemDolst
Offline
Зарегистрирован: 08.03.2021

Изначально мы задаём переменные:

motor_pin_1 - это сигнал STEP

motor_pin_2 - это сигнал DIR

Используется 2-х проводной драйвер для шагового мотора A4988

 

 

 

 

 

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

https://www.arduino.cc/en/Reference/StepperBipolarCircuit
Никакого степ-дира тут нет.

ArtemDolst
Offline
Зарегистрирован: 08.03.2021

У меня используется другой драйвер шагового двигателя, отличный от того, ссылку на который Вы привели.

Я подключаю драйвер A4988, у которого с микроконтроллера идут на него такие сигналы. Даташит: https://iarduino.ru/lib/763deea2b49e5b0d72287a32b6bcdd87.pdf

 

 

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

Эта библиотека для L293, а не 4988. Никаких степ и дир здесь нет. Управление через ключи L293  обмотками двигателя

ArtemDolst
Offline
Зарегистрирован: 08.03.2021

Благодарю за ответ! Проблема в том и заключается, что библиотека предназначена дла другого, а работает и на моём А4988. Мой вопрос как раз в том и заключался, почему же так происходит?

Да, я изначально не знал, что библиотека для другого, но я подключил А4988 и всё заработало - двигатель вращается. И мне стало очень интересно, а почему же он крутится, что и хочу у Вас узнать.

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

А так-ли он крутится как Вы хотите? Меняет направление вращения? Делает нужное количество шагов? Крутиться он будет если на вход степ приходят импульсы.

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

Ты и с подключением накосячил, очевидно.