Krokový motor 28BYJ-48: vše, co potřebujete vědět

Krokový motor 28byj-48

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?

vnitřní elektromotor: stator-rotor

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

28byj-48 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));
}