El 28BYJ-48 е еднополюсен стъпков двигател ниска цена и висока прецизност, идеален за електроника, за 3D принтери, CNC машини и роботика. Неговият компактен размер, ниска консумация на енергия и лекота на използване го правят популярен избор за любители на електрониката и професионалисти.
Освен това, заедно с този двигател, a модул с ULN2003, за ваш контрол. По този начин имаме всичко необходимо, за да можем да използваме тази система напълно, с микроконтролер или платка Arduino или подобен.
Какво е 28BYJ-48 стъпков двигател?
Un стъпковият двигател е вид електрически двигател който се движи на малки дискретни ъглови стъпки, а не на непрекъснато въртене. Той работи с помощта на набор от електромагнити, които се активират в определена последователност. Чрез активиране на различни електромагнити се създава магнитно поле, което привлича ротора на двигателя, карайки го да се върти стъпка по стъпка. Броят на стъпките на оборот и точността на движение зависят от специфичния дизайн на двигателя и използваната последователност на управление.
В рамките на стъпковите двигатели имаме два вида:
- Еднополюсен- Те имат един комплект намотки и изискват специален контролер, който да обръща тока и да кара двигателя да се върти в двете посоки.
- Биполярно- Имат два комплекта независими бобини, което им позволява да се въртят в двете посоки без нужда от специален контролер.
В случая на 28BYJ-28 той е еднополюсен тип, както споменах по-рано. И в рамките на тази група се характеризира със следното especificaciones:
- Еднополюсен степер: лесно управление само с 4 кабела.
- Интегриран редуктор: предлага висока точност (0.088° на стъпка) и въртящ момент (3 N·cm).
- Ниска консумация: 83 mA (5V модел) или 32 mA (12V модел).
- хранене: 5V или 12V (в зависимост от модела).
- Икономична цена: от €1.2 за единица или малко повече, ако включват модул ULN2003.
Относно възможни приложения, вече споменах някои от тях преди, но тук отново ви давам няколко идеи за вашите проекти:
- Управление на хидравлични и пневматични клапани.
- Съчленени роботи и роботизирани ръце.
- Позициониране на сензора.
- Въртящи се маси за скенери.
- 3d принтери.
- CNC машини.
Стъпковият двигател не работи сам, той изисква друг елемент. В такъв случай, 28BYJ-48 се управлява от платка с интегриран ULN2003, което позволява токът на изходите на Arduino да бъде усилен за захранване на намотките на двигателя. Чрез активиране на бобините в правилната последователност, моторът се върти стъпка по стъпка с голяма прецизност.
Видове управляващи последователности и фази
там различни контролни последователности за 28BYJ-48, най-често срещаните са:
- Пълна вълнова последователност: Активира всички бобини едновременно.
- Половин стъпка последователност: Активира две съседни бобини едновременно.
- Микроскопска последователност от стъпки: Активира една намотка наведнъж.
Нека видим фазите подробно:
- Последователност 1-фаза: В 1-фазна последователност ние включваме една бобина наведнъж. Вземайки тази последователност на запалване в таблица, следното трябва да бъде генерирано в разводката на двигателя:
Paso | A | B | A ' | B ' |
---|---|---|---|---|
1 | ON | OFF | OFF | OFF |
2 | OFF | ON | OFF | OFF |
3 | OFF | OFF | ON | OFF |
4 | OFF | OFF | OFF | ON |
- 2-фазова последователност: ние включваме две корелативни бобини във всяка фаза, така че генерираното магнитно поле е по-голямо (41% повече), така че двигателят има повече въртящ момент, тоест получаваме повече сила. Като отрицателен момент ние удвояваме консумацията на енергия. Що се отнася до таблицата, тя ще бъде:
Paso | A | B | A ' | B ' |
---|---|---|---|---|
1 | ON | ON | OFF | OFF |
2 | OFF | ON | ON | OFF |
3 | OFF | OFF | ON | ON |
4 | ON | OFF | OFF | ON |
- Последователност от половин стъпка: Това е още един от етапите, които ще видим, можете да изпитате това, което ви интересува най-много. Тук последователно включваме една и две намотки, постигайки точност от половин стъпка. Използва се в приложения, където е необходима най-висока точност, въпреки че може да има проблеми, когато приложението е на границата на въртящия момент. Изразяването на последователността в таблична форма води до:
Полустъпка | A | B | A ' | B ' |
---|---|---|---|---|
1 | ON | OFF | OFF | OFF |
2 | ON | ON | OFF | OFF |
3 | OFF | ON | OFF | OFF |
4 | OFF | ON | ON | OFF |
5 | OFF | OFF | ON | OFF |
6 | OFF | OFF | ON | ON |
7 | OFF | OFF | OFF | ON |
8 | ON | OFF | OFF | ON |
28BYJ-28 с Arduino
Първото нещо е да свържете правилно модул и мотор 28byj-48 към нашата платка Arduino, за да направите това, просто трябва да направите следните връзки:
- Пин – от ULN2003 към GND на Arduino.
- Pin + на ULN2003 към Vcc (5v или в други случаи, ако е 12v двигател, трябва да се използва захранване с това напрежение) от Arduino.
- IN1, IN2, IN3 и IN4 на ULN2003 към цифровите входове D8, D9, D10 и D11 на Arduino.
- Моторът 28byj-48, просто го свържете към порта на модула ULN2003.
Сега, когато сте свързани, следващото нещо е да използвате пример в Arduino IDE, който можете да използвате такъв, какъвто е, за да експериментирате или да го промените по ваш вкус. В този пример всички фазови таблици са коментирани, като // пред реда, нали знаете... Ако искате да използвате една от тях, просто изтрийте // пред инструкциите.
//Definir los pines const int motorPin1 = 8; // 28BYJ48 In1 const int motorPin2 = 9; // 28BYJ48 In2 const int motorPin3 = 10; // 28BYJ48 In3 const int motorPin4 = 11; // 28BYJ48 In4 //Definición de variables int motorSpeed = 1200; //Velocidad del motor int stepCounter = 0; //Contador de pasos int stepsPerRev = 4076; //Pasos para un giro completo //Tablas de secuencia (descomentar la que necesites) //Secuencia 1-fase //const int numSteps = 4; //const int stepsLookup[4] = { B1000, B0100, B0010, B0001 }; //Secuencia 2-fases //const int numSteps = 4; //const int stepsLookup[4] = { B1100, B0110, B0011, B1001 }; //Secuencia media fase //const int numSteps = 8; //const int stepsLookup[8] = { B1000, B1100, B0100, B0110, B0010, B0011, B0001, B1001 }; void setup() { //Declarar los pines usados como salida pinMode(motorPin1, OUTPUT); pinMode(motorPin2, OUTPUT); pinMode(motorPin3, OUTPUT); pinMode(motorPin4, OUTPUT); } void loop() { for (int i = 0; i < stepsPerRev * 2; i++) { clockwise(); delayMicroseconds(motorSpeed); } for (int i = 0; i < stepsPerRev * 2; i++) { anticlockwise(); delayMicroseconds(motorSpeed); } delay(1000); } void clockwise() { stepCounter++; if (stepCounter >= numSteps) stepCounter = 0; setOutput(stepCounter); } void anticlockwise() { stepCounter--; if (stepCounter < 0) stepCounter = numSteps - 1; setOutput(stepCounter); } void setOutput(int step) { digitalWrite(motorPin1, bitRead(stepsLookup[step], 0)); digitalWrite(motorPin2, bitRead(stepsLookup[step], 1)); digitalWrite(motorPin3, bitRead(stepsLookup[step], 2)); digitalWrite(motorPin4, bitRead(stepsLookup[step], 3)); }