Mystepper.disableoutputs();

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем krasmos, 30 мар 2022.

  1. krasmos

    krasmos Нуб

    Всем привет.Помогите с решением задачи по деактивации зарезервированных пинов.
    Рабочий скетч.Шилд cnc v4.После нажатия кнопки подается сигнал на пин который управляет реле 5v.Силовая 12 вольт которая также включает электромагнитное реле.После этого действия включаются шаговики и делаю необходимые в скетче задачи.Проблема-После нажатия кнопки и подачи сигнала на реле ,происходит непонятная наводка на шаговики и они сдвигаются на пару миллиметров.После того как счет закончился и опять происходит сигнал на реле.Так же наводка на шаговики сдвиг.Пробовал Реле подключать от отдельного источника ,не помогает.Одним из решений считаю снятие нагрузки на пины шаговиков,но неполучается активировать функцию mystepper.disableOutputs(); .
    Код (Text):


    #include <AccelStepper.h>
    AccelStepper stepper1(1, 5, 2);
    AccelStepper stepper2(1, 6, 3);
    uint8_t  ledPin = 13;
    uint8_t  switchPin = 12;
    uint16_t stepsNumber = 1000;


    void setup() {
     
      pinMode(ledPin, OUTPUT);
      digitalWrite(ledPin, LOW);
      pinMode(switchPin, INPUT_PULLUP);
      stepper1.setMaxSpeed(600.0);
      stepper1.setAcceleration(1000.0);
      stepper2.setMaxSpeed(600.0);
      stepper2.setAcceleration( 1000.0);
     stepper1.setMinPulseWidth(5);
    stepper2.setMinPulseWidth(5);
      }
      void loop() {
      stepper1.disableOutputs();
      stepper2.disableOutputs();
      uint8_t buttonSignal = 0x01;
      do { buttonSignal = (buttonSignal << 1) | digitalRead(switchPin);
      delay(1);
      }
      while (buttonSignal != 0x00) ;
      digitalWrite(ledPin, HIGH); // led on
      delay(2000);
     stepper1.setCurrentPosition (0x00);
     stepper2.setCurrentPosition (0x00);
     stepper1.moveTo(1000);
     stepper2.moveTo(stepsNumber);
     while (stepper1.distanceToGo() != 0x00) {
      stepper1.run();
      stepper2.run();
      }
      delay(1000);
      digitalWrite(ledPin, LOW); // led on
      digitalWrite(switchPin, INPUT_PULLUP);
      }
     
     
     
  2. b707

    b707 Гуру

    обьясните мне смысл последней строчки в коде
     
  3. krasmos

    krasmos Нуб

    Посчитал что нужно после всего завершения скетча вернуть кнопку в исходный высокий вход.сейчас проверил убрав эту строчку ,да не имеет значение .
     
  4. b707

    b707 Гуру

    хм, вы таки не видите, что в строчке ошибка? - независимо от того, что вы имели в виду, в этой строчке написан просто бред

    Ну и вообще весь код написан "левой рукой"
    - почему условие остановки только по одному мотору, если крутим оба?
    - зачем выключать степперы до нажатия кнопки?
    - если вы их выключили, кто их будет включать обратно?
     
  5. krasmos

    krasmos Нуб

    - почему условие остановки только по одному мотору, если крутим оба?- на работу не влияло по моторам
    - зачем выключать степперы до нажатия кнопки?0-для того чтобы наводок не было на шаговики.
    - если вы их выключили, кто их будет включать обратно?-включать функцией mystepper.enableOutputs();
    но дела то в том , что они не выключаются.
     
  6. b707

    b707 Гуру

    ну это же косяк, не находите? сегодня не влияло. а завтра степпер2 чуть медленнее пойдет и код не будет работать как надо
    я спрашивал не "зачем выключать степппер", а зачем это делать еще ДО нажатия кнопки. Это не ошибка, но логики в этом нет.
    Логично было бы либо выключать моторы сразу после их отработки. либо уже ПОСЛЕ нажатия кнопки.
    как вы это установили?
     
  7. krasmos

    krasmos Нуб

    пробовал и вначале выключать и после отработки.на них все равно подается ток.рукой нельзя провернуть.вот так определил.