Управлять количеством оборотов шаговика

Тема в разделе "Arduino & Shields", создана пользователем очумелые ручки, 22 фев 2024.

  1. Здравствуйте.
    помогите собрать систему.
    необходимо задавать шаговому двигателю необходимое число оборотов
    к примеру,нажал кнопку-двигатель провернулся строго на 50/2оборота ,и так далее
    генератор импульсов присмотрел на али.но им можно только регулировать скорость вращения
    в наличии шд23/57 и драйвер HBS57H
     
  2. User248

    User248 Гик

    Например, так. Двигатель делает 100 шагов в одном направлении, потом обратно.
    Код (C++):

    #include <AccelStepper.h>

    #define POSITION 100 // позиция, к которой должен двигаться двигатель

    // Устанавливаем выводы
    const int enaPin = 2;
    const int dirPin = 3;
    const int stepPin = 4;

    // MotorInterfaceType, STEP, DIR
    AccelStepper myStepper(AccelStepper::DRIVER, stepPin, dirPin);

    int pos = 0;

    void setup() {

      // включение драйвера
      pinMode( enaPin, OUTPUT );
      digitalWrite( enaPin, 0 );

      // Устанавливаем максимальную скорость, коэффициент ускорения,
      // начальную скорость и целевую позицию
      int stepperSpeed = 150;
      myStepper.setMaxSpeed(stepperSpeed);
      myStepper.setAcceleration(stepperSpeed / 0.5); // ускорение 0.5 секунд
      myStepper.setSpeed(stepperSpeed);
      myStepper.moveTo(POSITION);
    }

    void loop() {

      // Изменение направления вращения, когда двигатель достигнет заданного положения
      if (myStepper.distanceToGo() == 0) {
        pos = POSITION - myStepper.currentPosition();
        myStepper.moveTo(pos);
      }

      // Передвинуть на 1 шаг
      myStepper.run();
    }
     
     
    очумелые ручки нравится это.
  3. Спасибо!
    посоветовали такой вариант https://aliexpress.ru/item/1005005124969176.html
     
  4. jr.Bush

    jr.Bush Нерд

    Привет, не хочу плодить новых тем,
    очень странное поведение очень простого кода.
    Задача простая, при появлении определенного уровня сигнала должен вращаться мотор 2, а через определенное время в данном случае 3,5 секунды, должны вращаться мотор 1 и мотор 2.
    Но в этом коде оба мотора начинают вращаться вместе.
    Код (C++):
    #include <GyverFilters.h>
    GFilterRA analog7;
    #include "GyverStepper2.h"
    GStepper2<STEPPER2WIRE> stepper1(400,4);
    GStepper2<STEPPER2WIRE> stepper2(200,6);
    #include "GyverWDT.h"
    static uint32_t tmr;
    bool flag = false;
    void setup() {
      Watchdog.enable(RESET_MODE, WDT_PRESCALER_512);
      analog7.setCoef(0.02);
      analog7.setStep(20);
      pinMode(4, OUTPUT); // + step servo
      pinMode(5, OUTPUT); // - step servo
      pinMode(6, OUTPUT); // + step steper
      pinMode(7, OUTPUT); // - step steper
      pinMode(A7, INPUT); // фоторезистор сигнал
      pinMode(19, OUTPUT); // питание фоторезистора
      digitalWrite(19, HIGH);
      digitalWrite(5, LOW);
      digitalWrite(7, LOW);
      stepper1.setAcceleration(150);
      stepper2.setAcceleration(150);
      stepper1.setMaxSpeed(10000);
      stepper2.setMaxSpeed(10000);
    }

    void loop() {
    stepper1.tick();
    stepper2.tick();
      if (analog7.filteredTime(analogRead(A7)) >= 150) {
        stepper2.setSpeed(700);
        if (millis() - tmr > 3500) {
        tmr = millis();
        stepper1.setSpeed(100);
      }
      }
      else
    {
      stepper1.brake();
      stepper2.brake();
    }

      Watchdog.reset();
    }
    где я ошибся?
     
  5. User248

    User248 Гик

    Сброс таймера "tmr = millis()" по другому нужно делать. Сбросить один раз с триггеризацией, когда датчик сработал.
     
    Последнее редактирование: 27 фев 2024
  6. Если кто в курсе,подскажите по этой штуковине,не могу сообразить,.
    Выставил в настройках параметры при которых двигатель делает один оборот до следующего
    нажатия кнопки.Но при увеличении скорости вращения энкодером на панельки контроллера ,
    двигатель продолжает вращаться некоторое время и точка останова постепенно смещается
    по ходу вращения.Если вернуть скорость, двигатель производит точно один оборот без смещения.
    не могу понять в чем причина.
    (энкодер на моторе +драйвер должны были бы среагировать на это.однако ошибки нет)
     
  7. Решено.настройка ускорения
     
  8. здравствуйте,
    Использую прошивку "Марлин" (в свободном доступе). При нажатии кнопки "Дом" все три оси станка перемещаются на 10мм .
    Какое значение в строках программы нужно заменить (исключить) ,что бы при "парковки " не было этих перемещений?
    Т.е "0" оставался там ,где была остановка
    ("зип" не получается прикрепить)