МозгоНавигатор: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51

Шаговый двигатель BYJ48. Теория управления

08.12.2013 в Самодельные ЧПУ станки, Электронные самоделки

 FI0SQ71HMMF4YR9.LARGE

В конструкции шагового двигателя используется блок электромагнитных катушек (обмоток возбуждения) на статоре и определенное количество  постоянных магнитов, которые на роторе. При подаче электрического тока, катушки генерируют электромагнитное поле, которое притягивает либо отталкивает ближайший магнит на валу двигателя. Разумеется, это приводит к вращению вала двигателя, а также дает возможность точно регулировать угол его поворота. Одной из особенностей конструкции шаговых двигателей также является сохранение положения вала после отключения питания.

Наиболее распространены два типа шаговых двигателей – униполярные и биполярные. В отличии от биполярных, униполярные шаговые двигатели имеют 5 или 6 контактов ,через которые осуществляется управление четырьмя катушками. Питание (плюс) на каждую из катушек подается по общей шине питания, что и определяет название типа двигателя – униполярный. К минусовой шине каждая из катушек подключается через второй вывод, через которые также подаются импульсы, управляющие вращением.F68GVS8HMMF4YXM.LARGE

 

В статье описывается типичный представитель класса униполярных двигателей  — Unipolar Stepper Motor 28-DYJ48.

СПЕЦИФИКАЦИЯ

  • номинальное напряжение питания: 5 Вольт (постоянный ток)
  • количество фаз: 4
  • количество шагов: 64
  • количество микрошагов: 4096
  • шаг: 5.625 Градусов
  • номинальная частота: 100 Герц
  • номинальное сопротивление обмоток (при 25 Градусах по Цельсию): 50 Ом
  • частота холостого хода (по часовой стрелке) : 600 Герц
  • частота холостого хода (против часовой стрелки): 1000 Герц
  • крутящий момент (по часовой стрелке, при частоте 120 Герц): 34,3 Ньютон-метр
  • вращающий момент: 34,3 Ньютон-метров
  • момент трения (сопротивление вращению): 600-1200 Граммов-на-сантиметр
  • номинальная тяга: 300 Граммов-на-сантиметр
  • Класс электробезопасности: А


Материалы и детали:

  • Плата Arduino Шаговый двигатель BYJ48
  • Плата управления двигателем (драйвер) ULN2003
  • Джампер (перемычка)
  • Источник питания с выходным напряжением  5 Вольт
FP5CJZCHMWVZPBT.LARGEВодитель, в смысле, драйвер двигателя

FXTLPI9HMMF4YXN.LARGE F45YX55HMMF4YXJ.LARGE

Программная среда разработки для Arduino содержит очень простую в использовании стандартную библиотеку для работы с шаговыми двигателями stepper.h.

После сборки схемы из Arduino, шагового мотора и платы управления, достаточно лишь загрузить программный код в микроконтроллер и активировать его выполнение.

FV9LEN8HMWVZP97.LARGE

Все работает, ветится, и жужжит

ВНИМАНИЕ! ПРИ ИСПОЛЬЗОВАНИИ СХЕМЫ УПРАВЛЕНИЯ (ДРАЙВЕРА) НА МИКРОСХЕМЕ L293 ВМЕСТО СХЕМЫ НА ULN2003, КРАСНЫЙ ПРОВОД  НЕ ПОДКЛЮЧАЕТСЯ!

При программировании Arduino, для точного позиционирования вала вы должны обязательно учитывать характеристики двигателя, приведенные в спецификации. Так, если передаточное число мотора  равняется 64, а угол поворота каждого шага равен 5,626 градусов, то количество микрошагов можно рассчитать по следующей формуле:

Количество микрошагов = количество шагов в одном обороте * передаточное число.

Таким образом, для Unipolar Stepper Motor 28-ВYJ48 количество микрошагов равняется (360/5,625)*64 = 4096. Именно результат этого расчета вы должны указать в программном коде как максимальное количество микрошагов. Для шагового двигателя с углом поворота за один шаг в 7,5 градусов и передаточным числом, равным 16 расчеты такие же, разумеется с иными базовыми вводными. Итак, количество шагов на один полный оборот  равняется 48, то есть 360/7,5 = 48. Максимальное количество микрошагов считаем, умножая полученное значение на передаточное число, то есть, 48*16 = 768. Запомните! Все зависит от спецификации, так что внимательно изучайте инструкции для расчета  правильных значений управляющих команд.

Технические характеристики шагового двигателя 28-BY48

Наконец, перейдем к управлению и питанию вашего шагового двигателя. В принципе, производителем рекомендуется использовать внешний источник питания с выходным напряжением  5 Вольт и током 500 миллиАмпер.

Помните! Питание двигателя непосредственно через 5 Вольтовый вывод Arduino недопустимо. Это может привести к выходу микроконтроллера из строя из-за перегрузки по питанию.

Направления вращения вала, устранение проблемы

Дрожащими руками, задаем количество микрошагов в качестве аргумента оператора  step(steps); и заливаем код в микроконтроллер. При наличии электропитания,  двигатель проворачивает вал на заданный угол (количество шагов), потом еще, и еще. Теория гласит, что направления вращения вала меняется знаком (больше или меньше нуля)  переменной, которая определяет количество  микрошагов.

Комментарий переводчика: Для тех, кто плохо учился в школе  забыл, напоминаю, что есть числа положительные, то есть больше нуля (например: 100), и отрицательные, которые теоретически меньше нуля, и, соответственно, имеют знак минус (пример: -100).

Если изменение знака числа шагов  изменяет направление вращения вала, вам повезло, и дальше можете не читать, и сразу перейти к созданию станка с ЧПУ. Однако, если изменение знака числа шагов не приводит к изменению направления вращения, вам понадобится поправить программный код библиотеки, которая отвечает за работы с шаговыми двигателями.

Ниже приведен модифицированный программный код, который заставляет двигатель вращать вал по часовой стрелке и в обратном направлении.

 

 

/*

BYJ48 Stepper motor code

Connect :

IN1 >> D8

IN2 >> D9

IN3 >> D10

IN4 >> D11

VCC … 5V Prefer to use external 5V Source

Gnd

written By :Mohannad Rawashdeh

http://www.instructables.com/member/Mohannad+Rawashdeh/

28/9/2013

*/

 

#define IN1 8

#define IN2 9

#define IN3 10

#define IN4 11

int Steps = 0;

boolean Direction = true;// gre

unsigned long last_time;

unsigned long currentMillis ;

int steps_left=4095;

long time;

void setup()

{

Serial.begin(115200);

pinMode(IN1, OUTPUT);

pinMode(IN2, OUTPUT);

pinMode(IN3, OUTPUT);

pinMode(IN4, OUTPUT);

// delay(1000);

 

}

void loop()

{

while(steps_left>0){

currentMillis = micros();

if(currentMillis-last_time>=1000){

stepper(1);

time=time+micros()-last_time;

last_time=micros();

steps_left—;

}

}

Serial.println(time);

Serial.println(«Wait…!»);

delay(2000);

Direction=!Direction;

steps_left=4095;

}

 

void stepper(int xw){

for (int x=0;x<xw;x++){

switch(Steps){

case 0:

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, HIGH);

break;

case 1:

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, HIGH);

digitalWrite(IN4, HIGH);

break;

case 2:

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, HIGH);

digitalWrite(IN4, LOW);

break;

case 3:

digitalWrite(IN1, LOW);

digitalWrite(IN2, HIGH);

digitalWrite(IN3, HIGH);

digitalWrite(IN4, LOW);

break;

case 4:

digitalWrite(IN1, LOW);

digitalWrite(IN2, HIGH);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

break;

case 5:

digitalWrite(IN1, HIGH);

digitalWrite(IN2, HIGH);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

break;

case 6:

digitalWrite(IN1, HIGH);

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

break;

case 7:

digitalWrite(IN1, HIGH);

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, HIGH);

break;

default:

digitalWrite(IN1, LOW);

digitalWrite(IN2, LOW);

digitalWrite(IN3, LOW);

digitalWrite(IN4, LOW);

break;

}

SetDirection();

}

}

void SetDirection(){

if(Direction==1){ Steps++;}

if(Direction==0){ Steps—; }

if(Steps>7){Steps=0;}

if(Steps<0){Steps=7; }

}

 

F0SUW4EHMMF4YXK.LARGE

Комплект из двигателя и драйвера

Примечание переводчика: цена на набор из шагового двигателя 28-DYJ48 и контроллера (ДРАЙВЕРА) на ULN2003 в китайских онлайн-магазинах колеблется в пределах 3 — 5 долларов.  Несмотря на недостатки, это делает его идеальным для изучения принципов использования шаговых двигателей с Arduino.

(A-Z Source)


  • RSS
  • Facebook
  • LiveJournal
  • Добавить ВКонтакте заметку об этой странице
  • Мой Мир
  • В закладки Google
  • Blogger
  • Twitter

30 ответов на Шаговый двигатель BYJ48. Теория управления

  1. Встановили енкодер загружаю на плату видає повідомлення:
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 1 of 10: not in sync: resp=0x2c
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 2 of 10: not in sync: resp=0x2c
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 3 of 10: not in sync: resp=0x2c
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 4 of 10: not in sync: resp=0x2c
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 5 of 10: not in sync: resp=0x2c
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 6 of 10: not in sync: resp=0x2c
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 7 of 10: not in sync: resp=0x2c
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 8 of 10: not in sync: resp=0x2c
    avrdude: stk500_recv(): programmer is not responding
    Проблема загрузки на плату. Для достижения дзен, курить http://www.arduino.cc/en/Guide/Troubleshooting#upload .
    avrdude: stk500_getsync() attempt 9 of 10: not in sync: resp=0x2c
    avrdude: stk500_recv(): programmer is not responding
    avrdude: stk500_getsync() attempt 10 of 10: not in sync: resp=0x2c
    В чому може бути проблема?

  2. Спасибо за подсказку по поводу этих движков. Чуть переделав приложенный пример, я написал библиотеку под эти движки. Писал под свои цели, но может кому пригодится. http://depositfiles.com/files/lqhk0w80g. Библиотека позволяет подключать одновременно несколько двигателей (лишь бы пинов хватило) и параллельно вращению двигателя выполнять основную программу. в архиве библиотека и пример.

  3. мда.., ЧПУ станок на этих двигателях?! Даже не думайте. Максимум что я мог выжать из них — 1 оборот в минуту! внутри стоит встроенный редуктор, который увеличивает мощность, но очень сильно уменьшает скорость. Лучше уж посмотрите в сторону двигателей от старых принтеров, да и то их мощности хватит максимум на выжигание лазером.

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

  5. А если нет драйвера, можно его чем-то заменить? Своими руками сделать как-нибудь

    • Да, точно можно на транзисторах собрать. Как именно.. не силен(

    • uln2003 стоит от 5 до 10 грн , в любом радиомагазине. На транзисторах дешевле не получится.
      Можно глянуть ещё ULN2008, у неё не 7, а 8 каналов, что позволит подключить одновременно два униполярных ШД. Стоимость почти такая же.

  6. Сколько оборотов можно максимально выжать с этого двигателя?

  7. А этот драйвер будет работать на 3.3 В логике?

    • В смысле? Если ты про напряжение 3.3 Вольт, то не думаю. Не хватит тока и напряжения.

  8. У меня все получилось 😀

  9. Почему то при проверке программы в ардуино постоянно выскакивают ошибки. Здесь точно все правильно?

    • Посмотрел код на официальном источнике. теперь все работает 🙂

      • Тэээкс, а где проблема была то?

        • там много где
          сначала
          steps_left—; это ошибка
          а должно быть
          steps_left—;
          потом
          Serial.println(«Wait…!») это ошибка
          А должно быть
          Serial.println(«Wait…!»);
          потом в конце
          if(Direction==0){ Steps—; } это ошибка
          а должно быть
          if(Direction==0){ Steps—; }
          ну и все, если это исправить то должно работать

          • блин как то странно знаки препинания сайт меняет, теперь я понимаю почему с сразу не заработало

      • скиньте ссылку на официальный источник

  10. а где купить можно

  11. А можно ли из этих двигателей сделать маленький ЧПУ, и что нужно для подключения его к компу?

    • Коненчо) Нужен контроллер минимум 3-х осевой для фрезерного станка. Для лазерного подойдет 2-х осевой контроллер.
      Подробнее в этом цикле статей.

      • Как я уже писал, и напишу далее, для подобного рода станков (для начинающих) наиболлее эффективным считаю использование Arduino — совместимого микроконтроллера. В то же время, классический фрезерный станок имеет 3 оси, а просто гравировальный или дл вырезания, вне зависимотсти от инструмента — только две с предварительной ручной установкогй глубины реза.

  12. Ну, наверно тут нельзя? Скину в личку.

  13. Можно ссылку на подобный интернет-магазин, где бы все это можно было приобрести?

Прокомментировать

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Мастер-классы | Как сделать | DIY | Handmade | Self made | Поделки | Своими руками | Карта сайта | Реклама

Всё что ты хочешь, ты можешь сделать САМ! Мы за созидание, развитие и свободное распространение знаний и личного опыта!

МозгоЧины - сообщество энтузиастов © 2010 – 2016

Перейти к верхней панели