Подключение шагового двигателя 28BYJ-48 через ULN2003

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем d00m, 19 фев 2013.

  1. pyro

    pyro Гик

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

    d00m Гик

    хм.. то есть наш моторчик может крутится с более мелким шагом. это по идее лучше..
    а вот написать код - для меня пока проблема..
    по логике - надо добавить кейсов еще 4 штуки..
     
  3. pyro

    pyro Гик

    А что тут сложного, представьте что вместо мотора подключено 4 светодиода и вам их надо поочереди зажечь определенное колличество раз, как бегущие огни.
     
  4. uussh

    uussh Нерд

    С библиотекой удобней, можно и без нее вот тут мне кажется не плохой скетч под этот мотор:
    http://www.4tronix.co.uk/arduino/Stepper-Motors.php
    если поменять в тексте delayMicroseconds(motorSpeed); на delay(motorSpeed);
    то по светодиодам на плате ULN2003 виден правельный алгоритм управления.
     
  5. uussh

    uussh Нерд

    Вроде все понятно 64 это полу шаги библиотека Stepper работает с полными шагами вот откуда берется 32, но тогда не понятно если редукция 64 почему полный оборот 2038 а не 2048?
     
  6. d00m

    d00m Гик

    мда.. и код этот какойто непонятный..
    то есть в итоге мотор делает 512 шагов за оборот ? а чтож мы тут считали-считали..

    UPD: не 512, ибо опять есть погрешность.. хотя видимо число будет близкое - как 2038 к 2048-ми...
     
  7. uussh

    uussh Нерд

    не тут не 512 шагов на полный оборот, а программа пробегает 512 раз по 8 шагов вот и получается 4096
    пробовал предложенную библиотеку AccelStepper.h да там вроде можно использовать и шаг и полу шаг
    но там синтаксист не простой надо разбираться, и опять же для этого мотора пришлось выводы менять.
     
  8. d00m

    d00m Гик

    о блин я не додумался что это 8 на 512.. но раз в этом случае есть смещение, значит не 4096 надо делать ?

    так что, получается для AccelStepper.h надо не 8,10,9,11 ?
     
  9. uussh

    uussh Нерд

    мне удалось так запустит:
    Код (Text):
    #include <AccelStepper.h>

    // Define a stepper and the pins it will use
    AccelStepper stepper (AccelStepper::FULL4WIRE, 2, 4, 3, 5);
    int val=0;
    void setup()
    {
    stepper.setMaxSpeed(500.0);
    stepper.setAcceleration(10000.0);

    }

    void loop()
    {


    stepper.runToNewPosition(val);
    // stepper.runToNewPosition(2048);
    // stepper.runToNewPosition(4096);
    // stepper.runToNewPosition(120);
    val=val+2048;
    delay(500);
    }
    FULL4WIRE, 2, 4, 3, 5 это я как понял полный шаг, а чтобы библиотека заработала с пулу шагом вроде на до ставить: HALF4WIRE

    даный скетч как то не понятно работает мотор делает по обороты много раз затем отматывает все назад без пауз да и погрешность вроде тоже набегает но не такая большая.
     
  10. d00m

    d00m Гик

    мда. действительно отматыввает
     
  11. d00m

    d00m Гик

  12. uussh

    uussh Нерд

    похоже это другой мотор 3072 шага вообще не подходит
    (There are only 48 step (7.5 degree) per revolution, and inside is a 1/64 reduction gear set. What this means is that there are really 48*64 steps per revolution = 3072 steps!)
     
  13. d00m

    d00m Гик

    вероятно. но маркировка совпадает. вобще это уже становиться гаданием.. :(
     
  14. uussh

    uussh Нерд

    да что-то не понятно вроде 2048 это в шаговом режиме 4096 в полушаговом,
    а вот почему набегает погрешность не понятно вероятно что то мы не учитываем при расчетах
    ведь при 2038 не набегает.
     
  15. d00m

    d00m Гик

    надо бы разобрать и подсчитать зубцы )
     
  16. uussh

    uussh Нерд

    Разобрался почему крутиться назад переменная int val=0; Тип данных int (от англ. integer - целое число) один их наиболее часто используемых типов данных для хранения чисел. int занимает 2 байта памяти, и может хранить числа от -32 768 до 32 767 (от -2^15 до 2^15-1)
    она переполняться вот и крутиться он назад на -32 768

    Когда переменная типа int в следствие арифметической операции достигает своего максимального значения, она "перескакивает" на самое минимальное значение и наоборот:int x
    x = -32,768;
    x = x - 1; // x теперь равно 32,767 - перескакивает на минимальное значение

    x = 32,767;
    x = x + 1; // x теперь равно -32,768
     
  17. Megakoteyka

    Megakoteyka Оракул Модератор

    попробуйте использовать unsigned int - беззнаковое целое. Тогда при переполнении будет переход на 0.
    Или возьмите long, если в unsigned int число не влазит.
     
  18. uussh

    uussh Нерд

    Все таки не удержался разобрал:
    28byj48_01_shest_1.jpg

    получается,
    32/9=3,55555555555555
    22/11=2
    26/9=2,88888888888888
    31/10=3,1

    Кпер=3,5555555555*2*2,88888888*3,1=63,683950

    32шага* 63,683950=2037,88

    вот откуда 2038 шагов на полный оборот:D
     
    Megakoteyka нравится это.
  19. d00m

    d00m Гик

    респект и уважуха !
    число не целое - значит по любому будут смещения-ошибки :(
     
  20. uussh

    uussh Нерд

    да если крутить на десятки оборотов, а вот если крутить на 1-2 оборота то думаю можно вполне использовать данный мотор.