El 28BYJ-48 je unipolární krokový motor nízká cena a vysoká přesnost, ideální pro elektronické projekty, pro 3D tiskárny, CNC stroje a robotiku. Jeho kompaktní rozměry, nízká spotřeba energie a snadné použití z něj dělají oblíbenou volbu pro nadšence a profesionály v oblasti elektroniky.
Kromě toho spolu s tímto motorem a modul s ULN2003, pro vaši kontrolu. Tímto způsobem máme vše potřebné k tomu, abychom tento systém mohli kompletně používat, pomocí mikrokontroléru nebo desky Arduino nebo podobné.
Co je to krokový motor 28BYJ-48?

Un krokový motor je druh elektromotoru který se pohybuje spíše v malých diskrétních úhlových krocích než v nepřetržité rotaci. Funguje pomocí sady elektromagnetů, které se aktivují v určité sekvenci. Aktivací různých elektromagnetů se vytváří magnetické pole, které přitahuje rotor motoru a způsobuje jeho otáčení o jeden krok za druhým. Počet kroků na otáčku a přesnost pohybu závisí na konkrétní konstrukci motoru a použité řídicí sekvenci.
V rámci krokových motorů máme dva typy:
- Jednopolární- Mají jednu sadu cívek a vyžadují speciální ovladač pro obrácení proudu a otáčení motoru v obou směrech.
- Bipolární- Mají dvě sady nezávislých cívek, které jim umožňují otáčení v obou směrech bez potřeby speciálního ovladače.
V případě 28BYJ-28 se jedná o unipolární typ, jak jsem již zmínil. A v rámci této skupiny se vyznačuje tím, že má následující specifikací:
- Unipolární stepper: jednoduché ovládání pouze pomocí 4 kabelů.
- Integrovaná redukce: nabízí vysokou přesnost (0.088° na krok) a točivý moment (3 N·cm).
- Nízká spotřeba: 83 mA (model 5V) nebo 32 mA (model 12V).
- krmení: 5V nebo 12V (v závislosti na modelu).
- Ekonomická cena: od 1.2 EUR za jednotku nebo o něco více, pokud obsahují modul ULN2003.
Vzhledem k tomu, možné aplikace, o některých z nich jsem se již zmínil dříve, ale zde vám opět dám několik nápadů pro vaše projekty:
- Ovládání hydraulických a pneumatických ventilů.
- Kloubové roboty a robotická ramena.
- Umístění senzoru.
- Otočné stoly pro skenery.
- 3D tiskárny.
- CNC stroje.
Krokový motor nefunguje sám, vyžaduje další prvek. V tomto případě, 28BYJ-48 je řízen deskou s integrovaným ULN2003, který umožňuje zesílení proudu výstupů Arduina pro napájení cívek motoru. Aktivací cívek ve správném pořadí se motor otáčí krok za krokem s velkou přesností.
Typy regulačních sekvencí a fází
Tam různé ovládací sekvence pro 28BYJ-48, nejběžnější jsou:
- Celá sekvence vln: aktivuje všechny cívky současně.
- Půlkroková sekvence: Aktivuje dvě sousední cívky současně.
- Mikroskopická sekvence kroků: Aktivuje jednu cívku najednou.
Uvidíme fáze podrobně:
- Sekvence 1-fázová: V 1-fázové sekvenci zapínáme vždy jednu cívku. Vezmeme-li tuto sekvenci zapalování do tabulky, v pinu motoru by se muselo vygenerovat následující:
| 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-fázová sekvence: zapneme dvě korelační cívky v každé fázi, takže generované magnetické pole je větší (o 41% více), takže motor má větší točivý moment, to znamená, že získáme větší sílu. Jako negativní bod jsme zdvojnásobili spotřebu energie. Pokud jde o tabulku, byla by:
| 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 |
- Půlkroková sekvence: Toto je další z etap, které uvidíme, můžete zažít to, co vás nejvíce zajímá. Zde střídavě zapínáme jednu a dvě cívky, dosahujeme přesnosti půl kroku. Používá se v aplikacích, kde je vyžadována nejvyšší přesnost, i když mohou nastat problémy, když je aplikace na limitu točivého momentu. Vyjádření sekvence ve formě tabulky má za následek:
| Půlkrok | 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 s Arduinem

První věcí je správné připojení modul a motor 28byj-48 k naší desce Arduino, k tomu stačí provést následující připojení:
- Pin – z ULN2003 do GND Arduina.
- Pin + ULN2003 na Vcc (5V nebo v jiných případech, pokud se jedná o 12V motor, musel by být použit zdroj s tímto napětím) z Arduina.
- IN1, IN2, IN3 a IN4 ULN2003 k digitálním vstupům D8, D9, D10 a D11 Arduina.
- Motor 28byj-48 jednoduše připojte k portu na modulu ULN2003.
Nyní, když jste připojeni, další věc je použít příklad v Arduino IDE, který můžete použít tak, jak je, k experimentování nebo si jej upravit podle svého. V tomto příkladu jsou všechny tabulky fází zakomentovány, jako // před řádkem, víte... Chcete-li jednu z nich použít, smažte // před pokyny.
//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));
}