Проблема с шаговым двигателем

Тема в разделе "Моторы, сервоприводы, робототехника", создана пользователем kirill-007, 2 ноя 2014.

  1. kirill-007

    kirill-007 Нуб

    Всем привет. Копаюсь с шаговиками и наткнулся на проблему пропуска шагов.
    Имею:
    Шаговый двигатель 42STH47
    Драйвер для него Н-мост
    Arduino nano

    Так как движок униполярный с 6-тью выходами решил подключать его без центральных проводов на обмотках как расписано вот тут (Вариант 6А).

    Всё собрано по схеме с офсайта:
    [​IMG]
    Выводы 1,2,3,4in отправил на ардуинку 8,9,10,11.
    V1,1-4 en дал 5 вольт с 5v ардуины.
    на Vin ардуины и V2 моста подал 12 вольт (источник питания мощностью 1А).

    скетч опять же с офсайта:

    #include <Stepper.h>

    // change this to the number of steps on your motor (Если я правильно понял то здесь задаётся количество шагов на оборот, у меня 200)
    #define STEPS 200

    // create an instance of the stepper class, specifying
    // the number of steps of the motor and the pins it's
    // attached to
    Stepper stepper(STEPS, 8, 9, 10, 11); (тут понятно прописываем пины управления)
    // the previous reading from the analog input
    void setup()
    {
    // set the speed of the motor to 60 RPMs (Вот тут как я понял указывается скорость вращения в оборотах/сек)
    stepper.setSpeed(60);
    }

    void loop()
    {
    stepper.step(100); (количество шагов за цикл)
    }


    Теперь собственно проблема:

    Судя по описанию двигателя он должен крутить 2500 оборотов в минуту. Мне надо 1000 оборотов в минуту. т.е. 16 оборотов в секунду.
    Однако. когда ставишь параметр stepper.setSpeed(16); мотор крутится со скоростью один оборот в 4 секунды. при этом жрёт 0.52 ампера.
    когда ставишь параметр stepper.setSpeed(60) мотор крутится со скорость 1 об/секунду. и жрёт 0,29 ампера.
    Начинаешь давать значение > 60 (из предположения что setSpeed задаёт таки об/мин а не об/сек) так двигатель начинает пропускать шаги, хотя токопотребление ещё больше падает.

    Собственно теперь вопрос:
    1) правильно ли я понял что можно подключать униполярник таким способом.
    2) может я чего не так понимаю в коде...

    Спасите! я чайник =)
     
  2. судя по даташиту, он биполярный с возможностью работы в униполярном режиме

    Stepper.h она для биполярных движков
     
  3. kirill-007

    kirill-007 Нуб

    ну так stepper.h не всё ли равно какое железо на том конце? подключён то он как биполярный.
     
  4. нет конечно, эта библиотека проста перебирает выхода и написана для работы в полношаговом реиме , соответственно, их дергать можно и без библиотеки.

    2500 оборотов в минуту, это максимальная скорость, с учетом что на входе будет синусоида.
     
  5. vvr

    vvr Инженерище

    Шаговый двигатель не высокооборотный и для достижения максимальной скорости (которую данный тип двигателя может достигнуть ) его нужно РАЗГОНЯТЬ. В противном случае будут проблемы с шагами, зависания, вой, скачки в скорости.
     
  6. kirill-007

    kirill-007 Нуб

    А могли бы вы рассказать как это можно сделать.

    попытался таким вот циклом - результат нулевой. крутится 1 об/с и всё тут =(

    void loop()
    {
    for (int x=40; x<1001; x++)
    {
    stepper.setSpeed(x);
    if(x=1000) stepper.step(5000);
    stepper.step(3);
    }
    delay (1000);
    }
     
  7. kirill-007

    kirill-007 Нуб

    уф... нарыл библиотеку AccelStepper. Обсуждение живёт тут:
    http://forum.arduino.cc/index.php?topic=194671.0
    Там же и сама библиотека.
    здесь описание её http://www.airspayce.com/mikem/arduino/AccelStepper/index.html
    но я вообще никак не пойму как мне простую задачу выполнить - разогнать мотор до 1000 и оставить крутиться 15 секунд.
    по этому скечу получается только разогнать до какого-то значения и потом он останавливается:

    #include <AccelStepper.h>
    // Define some steppers and the pins the will use
    AccelStepper stepper(4, 8, 9, 10, 11);
    // The first argument '5' indicates that we're using a 28byj-48 geared motor. The rest is just pin numbers.
    //You can still use all the other types of motors supported by accelstepper library (e.g. 4 for a normal 4 wire step motor, 8 for a halfstepped normal 4 wire motor etc.)


    void setup()
    {
    stepper.setMaxSpeed(1000.0); //max speed of the first motor - modify if you want to
    stepper.setAcceleration(100.0); // rate at which the first motor accelerate -


    }

    void loop()
    {

    stepper.moveTo(7000);
    stepper.run();


    }
     
  8. vvr

    vvr Инженерище

    ТАКИХ ОБОРОТОВ НА ШАГОВОМ НЕ ПОЛУЧИТЕ, НЕ ДЛЯ ЭТОГО ОН СДЕЛАН.
    Шаговый двигатель для точного позиционирования.

    По вашему скетчу
    7000 это количество шагов.
    Можете посчитать, сколько шагов мотор пройдёт за 15 сек - потом останавливать
     
  9. kirill-007

    kirill-007 Нуб

    на пурелоджиковских драйверах и контроллерах у меня получается 2500 с шаговиков снимать. как-то они это делают. на этих контроллерах собрал ЧПУ станок, на 1500 даже нагрузки на двигатель не заставляют его пропускать шаги.
    проблема в том что мне полка постоянных оборотов нужна. ну пусть не 1000, 600 уже будет достаточно. MoveTo разгоняет до точки и сразу начинает останавливать.
     
  10. vvr

    vvr Инженерище

    или останавливай после какого то количества шагов или включай таймер и через нужное время стоп
     
  11. vvr

    vvr Инженерище

    драйвер и контроллер в данном случае не имеют значения
     
  12. kirill-007

    kirill-007 Нуб

    а можно ссылку на синтаксис и описание функций? я пока не силен в ардуинке...
     
  13. и всеже нужно было смотреть в сторону bldc
     
  14. kirill-007

    kirill-007 Нуб

    расшифруйте плиз.
     
  15. vvr

    vvr Инженерище

    Если честно, тема -какая то пурга.
    Автор не формулирует задачу и упёрся в имеющийся шаговый мотор.
    Хотите услышать разные мнения и получить помощь - напишите, какая ЗАДАЧА.