El 28BYJ-48 je unipolárny krokový motor nízke náklady a vysoká presnosť, ideálne pre elektronické projekty, pre 3D tlačiarne, CNC stroje a robotiku. Vďaka kompaktným rozmerom, nízkej spotrebe energie a jednoduchému použitiu je obľúbenou voľbou pre nadšencov a profesionálov v oblasti elektroniky.
Ďalej spolu s týmto motorom a modul s ULN2003, pre vašu kontrolu. Týmto spôsobom máme všetko potrebné na to, aby sme tento systém mohli úplne využívať pomocou mikrokontroléra alebo dosky Arduino alebo podobne.
Čo je krokový motor 28BYJ-48?
Un krokový motor je typ elektromotora ktorý sa pohybuje skôr v malých diskrétnych uhlových krokoch než v nepretržitej rotácii. Funguje pomocou sady elektromagnetov, ktoré sa aktivujú v špecifickom poradí. Aktiváciou rôznych elektromagnetov sa vytvára magnetické pole, ktoré priťahuje rotor motora a spôsobuje jeho otáčanie o krok za krokom. Počet krokov na otáčku a presnosť pohybu závisia od konkrétnej konštrukcie motora a použitej riadiacej sekvencie.
V rámci krokových motorov máme dva typy:
- Unipolárne- Majú jednu súpravu cievok a vyžadujú špeciálny ovládač na obrátenie prúdu a otáčanie motora v oboch smeroch.
- bipolárny- Majú dve sady nezávislých cievok, čo im umožňuje otáčať sa v oboch smeroch bez potreby špeciálneho ovládača.
V prípade 28BYJ-28 ide o unipolárny typ, ako som už spomenul. A v rámci tejto skupiny sa vyznačuje tým, že má nasledujúce especificaciones:
- Unipolárny stepper: jednoduché ovládanie len pomocou 4 káblov.
- Integrovaná redukcia: ponúka vysokú presnosť (0.088° na krok) a krútiaci moment (3 N·cm).
- Nízka spotreba: 83 mA (5V model) alebo 32 mA (12V model).
- Alimentación: 5V alebo 12V (v závislosti od modelu).
- Ekonomická cena: od 1.2 EUR za jednotku alebo o niečo viac, ak obsahujú modul ULN2003.
Vzhľadom k tomu, možné aplikácie, Niektoré z nich som už spomenul predtým, ale tu vám opäť dám niekoľko nápadov pre vaše projekty:
- Ovládanie hydraulických a pneumatických ventilov.
- Kĺbové roboty a robotické ramená.
- Umiestnenie snímača.
- Otočné stoly pre skenery.
- 3D tlačiarní.
- CNC stroje.
Krokový motor nefunguje sám, vyžaduje si ďalší prvok. V tomto prípade, 28BYJ-48 je riadený doskou s integrovaným ULN2003, ktorý umožňuje zosilnenie prúdu výstupov Arduina na napájanie cievok motora. Aktiváciou cievok v správnom poradí sa motor otáča krok za krokom s veľkou presnosťou.
Typy riadiacich sekvencií a fáz
Tam rôzne riadiace sekvencie pre 28BYJ-48, najbežnejšie sú:
- Úplná vlnová sekvencia: Aktivuje všetky cievky súčasne.
- Postupnosť polovičných krokov: Aktivuje dve susedné cievky súčasne.
- Mikroskopická postupnosť krokov: Aktivuje jednu cievku naraz.
Pozrime sa fázy podrobne:
- Sekvencia 1-fázová: V 1-fázovej sekvencii zapíname naraz len jednu cievku. Ak zoberieme túto sekvenciu zapaľovania do tabuľky, v pinoute motora by sa muselo vygenerovať nasledovné:
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á sekvencia: zapneme dve korelačné cievky v každej fáze, takže generované magnetické pole je väčšie (o 41% viac), takže motor má väčší krútiaci moment, to znamená, že získame väčšiu silu. Ako negatívny bod zdvojnásobujeme spotrebu energie. Čo sa týka tabuľky, bude to:
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 |
- Polkroková sekvencia: Toto je ďalšia z etáp, ktoré uvidíme, môžete zažiť to, čo vás najviac zaujíma. Tu striedavo zapíname jednu a dve cievky, čím dosiahneme presnosť pol kroku. Používa sa v aplikáciách, kde je potrebná najvyššia presnosť, aj keď môžu nastať problémy, keď je aplikácia na hranici krútiaceho momentu. Výsledkom vyjadrenia sekvencie vo forme tabuľky je:
Polkrok | 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 Arduinom
Prvá vec je správne pripojiť modul a motor 28byj-48 k našej doske Arduino, aby ste to urobili, musíte jednoducho vykonať nasledujúce pripojenia:
- Pin – od ULN2003 po GND Arduina.
- Pin + ULN2003 na Vcc (5V alebo v iných prípadoch, ak ide o 12V motor, musel by sa použiť zdroj s týmto napätím) od Arduina.
- IN1, IN2, IN3 a IN4 ULN2003 k digitálnym vstupom D8, D9, D10 a D11 Arduina.
- Motor 28byj-48 jednoducho pripojte k portu na module ULN2003.
Teraz, keď ste pripojení, ďalšia vec je použiť príklad v Arduino IDE, ktorý môžete použiť tak, ako je, na experimentovanie alebo si ho upraviť podľa svojich predstáv. V tomto príklade sú všetky tabuľky fáz zakomentované, napríklad // pred riadkom, viete... Ak chcete použiť jednu z nich, jednoducho vymažte // pred pokynmi.
//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)); }