Как разогнать шаговый мотор? Кто-нибудь знает?

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

  1. Янек

    Янек Нуб

    Я проектирую гидро-пневмо-автоматику. Электроника не мой стиль. Задача в том чтобы управлять неким высокоскоростным вентилем с помощью шагового мотора. Мотор - 42STH60-1206A. Для просоты и удобства подключен к ардуине через драйвер шагового двигателя (Troyka-модуль). Простенький код с задержкой высокого и низкого сигнала в 2000 микросекунд. На выходе вращение вала около 1 об/сек. С меньшей задержкой мотор перестает реагировать. Только гудит. Блок питания мотора 3 А.
    Как разогнать его до заявленных 2500 шагов в секунду?
    P.S. Нужен именно шаговый мотор, ибо обратной связи нет и не будет.
     
  2. ANV

    ANV Гуру

    1. Разгон повышением напряжения
    2. Вы ошибаетесь, думая что с шаговым двигателем не нужна обратная связь. Под нагрузкой он вполне может пропускать шаги.
     
  3. Янек

    Янек Нуб

    В данном случае, будет обновляться нулевая позиция. Ваша правда, возможно придется создавать обратную связь, а не хочется.
    Повышением напряжения - что это значит? Момент конечно подрастет, но скорость. И почему эта зараза не хочет есть например задержку в 1000 или 500?
     
  4. ANV

    ANV Гуру

    Подрастет момент, двигатель быстрее повернется.
    Не всматриваясь в характеристики двигателя, похоже получается так, что он еще не успел провернуться на шаг, а Вы ему уже следующий командуете. Вот он и гудит.
     
  5. vvr

    vvr Инженерище

    код покажите
     
  6. Янек

    Янек Нуб

    Код (Text):
    // Troyka-Stepper подключён к следующим пинам:
    const byte stepPin = 7;
    const byte directionPin = 8;
    const byte enablePin = 11;



    void setup() {
    // Настраиваем нужные контакты на выход
    pinMode(stepPin, OUTPUT);
    pinMode(directionPin, OUTPUT);
    pinMode(enablePin, OUTPUT);

    }

    void loop() {

    // Подаём питание на двигатель
    digitalWrite(enablePin, HIGH);

    // Задаём направление вращения по часовой стрелке
    digitalWrite(directionPin, HIGH);

    // Делаем 200 шагов
    for (int i = 0; i < 200; ++i) {
    // Делаем шаг
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(2000);


    digitalWrite(stepPin, LOW);
    delayMicroseconds(2000);

    }

    // Переходим в режим экономичного удержания двигателя...
    analogWrite(enablePin, 100);
    //... на три секунды
    delay(3000);

    // Меняем направление вращения
    digitalWrite(directionPin, LOW);

    // Включаем двигатель на полную мощность
    digitalWrite(enablePin, HIGH);

    // Делаем 200 шагов
    for (int i = 0; i < 200; ++i) {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(2000);

    digitalWrite(stepPin, LOW);
    delayMicroseconds(2000);
    }

    // Ничего не делаем без отключения двигателя
    delay(3000);

    // Отключаем двигатель
    digitalWrite(enablePin, LOW);

    // Ничего не делаем до перезагрузки

    while (true) {
    ;
    }

    }
     
     
    Последнее редактирование: 28 апр 2015