Двигатель произвольно двигается при включении

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

  1. vertraut

    vertraut Нуб

    Добрый день. Подключил шаговый двигатель через драйвер A4988. Использую скетч из статьи про поворотный стол. Так вот, при включении ардуино, двигатель хаотично дергается и смещается. Как избавиться от этой проблемы. Необходимо, чтобы при включении двигатель не шевелился, пока не будет соответствующей команды). Пожалуйста, подскажите, как это можно сделать??
     
  2. vertraut

    vertraut Нуб

    Сейчас провел эксперимент, залил полностью пустые setup и loop, так вот, двигатель вращается от того, я просто подношу руку к контактам ардуино, даже их не касаясь. Получается какие-то помехи
     
  3. Пушной звер

    Пушной звер Оракул

    там есть вход enable, заведи его на ардуину и включай им драйвер только когда нужно
     
  4. vertraut

    vertraut Нуб

    именно так и делаю, он начинает шевелиться еще до того, как программно включается на него питания, т.е. при загрузке ардуино или ресете
     
  5. vvr

    vvr Инженерище

    если правильно всё подключил - должно работать.
    проверь схему.
     
  6. vertraut

    vertraut Нуб

    да оно то работает) просто при включении и ресете двигатель двигается сам по себе. также, если отключить от ардуино step двигатель начинает скакать, пока обратно не вставишь)
     
  7. Пушной звер

    Пушной звер Оракул

    ну тогда только переставить подтягивающий резистор на массу, чтобы по умолчанию модуль был выключен.
     
  8. vertraut

    vertraut Нуб

    А подскажите, пожалуйста, как это сделать?
     
  9. Пушной звер

    Пушной звер Оракул

    паяльником.
     
  10. vertraut

    vertraut Нуб

    спасибо, теперь все понятно стало:(
     
  11. Пушной звер

    Пушной звер Оракул

    там есть резистор который подключен между выходом enable и питанием, вот нужно сделать так, чтобы он был между выходом и массой.. что тут непонятного?
     
  12. vertraut

    vertraut Нуб

    Я просто мало что в этом понимаю. А есть другие способы, а то тут так все мелко, что у меня может не получится выполнить данные действия?
     
  13. vvr

    vvr Инженерище

    Схема подключения.
    Скетч.
    Вопросы.
     
  14. Unixon

    Unixon Оракул

    Возле входа Enable стоит резистор и рядом еще одна пустая площадка, резистор нужно переставить на нее.

    Берете паяльник и большую каплю припоя размером с резистор, через каплю прогреваете его с обоих концов, пинцетом снимаете, потом оплеткой чистите плату и запаиваете резистор на новое место.
     
  15. enclouder

    enclouder Нерд

    У меня такая же проблема, только нет никакой площадки свободной. Что делать в этом случае возможно?
    Может попробовать все спаять через сдвиговый регистр? И управлять просто подавая напряжение на соответствующие пины, без библиотеки.
     
  16. vvr

    vvr Инженерище

    неправильное подключение
    или
    сдохший драйвер или дуня
    или
    корявый код
    или
    всё вместе

    на самом деле при правильном подключении шаговика, с библиотеками или без, должно всё адекватно работать, подводных камней там нет
     
  17. enclouder

    enclouder Нерд

    2 ардуины nano (одна достал новую с пакета после обнаружения бага)
    2 драйвера a4988 (новый драйвер, достал после обнаружения бага)
    2 двигателя nema17 (4401)(проверял как на одном, так и на втором)
    2 двигателя 28byj48 (переделал в биполярный)
    каждый из двигателей ведет себя подобным образом!
    код:
    Код (C++):
    int Motor1dir = 3;
    int Motor1step = 2;

    void setup () {
      pinMode(Motor1dir, OUTPUT);
      pinMode(Motor1step, OUTPUT);
    }

    void rotate_low(int rt)  {
      digitalWrite(Motor1dir, LOW);
      for (int i = 0; i < rt; i++)  {
        delay(1);
        digitalWrite(Motor1step, HIGH);
        delay(1);
        digitalWrite(Motor1step, LOW);
      }
    }

    void rotate_high(int rt)  {
      digitalWrite(Motor1dir, HIGH);
      for (int i = 0; i < rt; i++)  {
        delay(1);
        digitalWrite(Motor1step, HIGH);
        delay(1);
        digitalWrite(Motor1step, LOW);
      }
    }

    void loop ()  {
      rotate_high(2000);
      delay(300);
      rotate_low(2000);
      delay(300);
    }
    Схема подключения к драйверу:
    [​IMG]

    Даже припаял пин Enable на цифровой выход потом, устанавливал как HIGH так и LOW:
    при HIGH во время исполнения кода вал не вращался, но при заливке кода и при загрузке платы после включения двигатель продолжал себя странно вести и вибрировать.

    P.S. использую этот код вместо AccelStepper так как при использовании этой библиотеки результат при загрузке кода и платы такой же - двигатель вибрирует, только еще и в момент работы пропускает шаги, поэтому был вынужден использовать этот код. Но по факту что с библиотекой что без - везде при загрузке платы/кода вибрирует, да при не слабом крутящем моменте.
     
    Последнее редактирование: 1 сен 2017
  18. vvr

    vvr Инженерище

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

    enclouder Нерд

    Причем тут библиотеки? Даже если скетч пустой и выводы step и dir ставим как output так и input, то двигатель при включении платы arduino и загрузке скетча на нее все равно двигается.
    Сейчас речь идет не про то, что двигатель пропускает шаги, а про то что при подключении драйвера a4988 к ардуино двигатели дергаются при загрузке!
     
  20. sslobodyan

    sslobodyan Гик

    Не стоит так эмоционально реагировать. Вам же выше объяснили, что нужен резистор в несколько килоом, который будет тянуть вход ENABLE к земле даже если вашу ардуину отключить и спрятать :) При этом драйверу будет просто запрещено посылать импульсы на мотор - никаких подвижек не будет. А вот когда подключите ардуину, она стартует, то вывод ардуинки высоким состоянием передавит низкое состояние от резистора и драйверу будет разрешено рулить моторчиком.
     
    enclouder нравится это.