Arduino Uno a Krokový motor s ovládačom ULN2003

Krokové motory 
spadajú niekde medzi konvenčný jednosmerný motor a servomotor. Môžu sa otáčať nepretržite ako jednosmerné motory a môžu byť nastavované presne (v diskrétnych krokoch) ako servomotory. Ak s krokovými motormi ešte len začínate, 28BYJ-48 je skvelá voľba. Zvyčajne sa dodávajú s doskou ovládača založenou na ULN2003, vďaka čomu sa veľmi jednoducho používajú.
Krokový motor 28BYJ-48

Keďže motor nepoužíva kontaktné kefy, má pomerne presný chod a je celkom spoľahlivý.
Napriek malým rozmerom poskytuje motor slušný krútiaci moment 34,3 mN.m pri otáčkach okolo 15 ot./min. Poskytuje dobrý krútiaci moment aj pri zastavení ho vie aj udržiavať.
Piny 
- 1.Cievka
- 2.Cievka
- 3.Cievka
- 4.Cievka
- 5 – Volt

28BYJ-48 má dve cievky, z ktorých každá má stredový kolík. Tieto kolíky sú vnútorne spojené a vyvedené ako 5. vodič (červený vodič).

Krokový motor sa otáča iba vtedy, keď sú fázy napájané v logickej sekvencii známej ako kroková sekvencia.
Motor 28BYJ-48
Každý krok zodpovedá otočeniu o 11,25°. To znamená, že na jednu otáčku je to 32 krokov
(360°/11,25° = 32).
Prevodovka vo vnútri motora je v pomere 64:1. Výsledkom je 2048 (32*64) krokov na 1 otáčku.
Spotreba energie
28BYJ-48 odoberá približne 240 mA.
Pretože motor spotrebúva značné množstvo energie, je lepšie ho napájať z externého 5V napájacieho zdroja a nie z Arduina. Motor spotrebúva energiu, aj keď je v pokoji, aby si udržiaval svoju polohu.
Technické špecifikácie :
28BYJ-48
- Prevádzkové napätie : 5V(DC)
- Počet fáz : 4
- Prevodový pomer : 64:1
- Krokový uhol : 5,625°/64
- Frekvencia : 100Hz
- Krútiaci moment : >34,3 mN
Doska ovládača ULN2003

Pretože krokový motor 28BYJ-48 spotrebuje značné množstvo energie, nemôže byť riadený priamo mikrokontrolérom. Na ovládanie motora je potrebný riadiaci IC, napríklad ULN2003; preto sa tento motor zvyčajne dodáva s doskou ovládača založenou na ULN2003.
ULN2003 pozostáva z poľa siedmich párov Darlingtonových tranzistorov, z ktorých každý môže riadiť záťaž až 500 mA a 50 V. Táto doska využíva štyri zo siedmich párov.

- 500mA
- 50V
Doska má štyri ovládacie vstupy a prípojku na napájanie. Okrem toho je tu konektor Molex, ktorý je kompatibilný s konektorom na motore, čo vám umožňuje zapojiť motor priamo do neho. Doska obsahuje štyri LED diódy, ktoré indikujú aktivitu na štyroch riadiacich vstupných linkách. Poskytujú dobrú vizuálnu indikáciu pri krokovaní. Na doske je prepojka ON/OFF na vypnutie krokového motora v prípade potreby.

- N1,N2 ,N3 ,N4 – Sú vstupné kolíky ovládania motora. Pripojte ich k digitálnym výstupným kolíkom Arduina.
- 5-12V – Tieto kolíky poháňajú motor. Pretože motor spotrebováva značné množstvo energie, je vhodné použiť externý 5V napájací zdroj.
- Molex – Tu sa zasunie konektor pre motor. Konektor je zakľúčovaný, takže pôjde len jedným smerom. (5pin).
Zapojenie krokového motora 28BYJ-48 a ovládača ULN2003 k Arduinu
Pripojte IN1, IN2, IN3 a IN4 piny dosky ovládača k digitálnym kolíkom 8, 9, 10 a 11 Arduino. Potom pripojte krokový motor k ovládaču ULN2003.

Príklad kódu Arduino – Použitie vstavanej knižnice
Knižnica (Arduino Stepper Library) spracováva postupnosť krokovania a umožňuje vám ovládať širokú škálu unipolárnych a bipolárnych krokových motorov.
Tu je program, ktorý otáča motor pomaly jedným smerom a potom rýchlo opačným smerom.
// Knižnica Arduino Stepper Library
#include <Stepper.h>
// Definuje počet krokov na jedno otočenie
const int stepsPerRevolution = 2038;
// Piny zadané v poradí IN1-IN3-IN2-IN4 pre správnu postupnosť krokov
Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11);
void setup() {
// (Knižnica nastaví kolíky ako výstupy)
}
void loop() {
// Pomaly otáčať rýchlosťou 5 ot./min
myStepper.setSpeed(5);
myStepper.step(stepsPerRevolution);
delay(1000);
// Rýchlo otáčať rýchlosťou 10 ot./min
myStepper.setSpeed(10);
myStepper.step(-stepsPerRevolution);
delay(1000);
}
Vysvetlenie kódu:
skica začína zahrnutím vstavanej knižnice.
#include <Stepper.h>
Ďalej je definovaný konštantný počet krokov za otáčku, ktorý obsahuje počet „krokov“, ktoré motor vykoná na dokončenie jednej otáčky. V našom prípade je to 2038.
const int stepsPerRevolution = 2038;
Postupnosť krokov unipolárneho krokového motora 28BYJ-48 je IN1-IN3-IN2-IN4. Tieto informácie použijeme na ovládanie motora vytvorením inštancie knižnice myStepper so sekvenciou pinov 8, 10, 9, 11.
Stepper myStepper = Stepper(stepsPerRevolution, 8, 10, 9, 11);
Keďže knižnica interne konfiguruje štyri ovládacie kolíky ako výstupy, v nastavovacej funkcii nie je čo konfigurovať, takže zostane prázdna.
void setup() {
}
Vo funkcii loop používame funkciu setSpeed() na určenie rýchlosti, ktorou sa má krokový motor pohybovať, a funkciu step() na určenie počtu krokov, ktoré treba vykonať.
Zadanie záporného čísla do funkcie step() spôsobí, že sa motor roztočí v opačnom smere.
Prvá časť kódu spôsobuje, že sa motor otáča veľmi pomaly v smere hodinových ručičiek, zatiaľ čo druhá spôsobuje, že sa otáča rýchlo proti smeru hodinových ručičiek.
void loop() {
// Pomaly otáčať rýchlosťou 5 ot./min
myStepper.setSpeed(5);
myStepper.step(stepsPerRevolution);
delay(1000);
// Rýchlo otáčať rýchlosťou 10 ot./min
myStepper.setSpeed(10);
myStepper.step(-stepsPerRevolution);
delay(1000);
}
Príklad kódu Arduino – Použitie knižnice AccelStepper
Knižnica (Arduino Stepper Library) je ideálna pre jednoduché aplikácie s jedným motorom. Ak však chcete ovládať viacero motorov, budete potrebovať výkonnejšiu knižnicu. Pre náš ďalší experiment teda použijeme pokročilú knižnicu krokových motorov – knižnicu AccelStepper.
Prevyšuje štandardnú knižnicu Arduino Stepper nasledujúcimi spôsobmi:
- Podporuje zrýchlenie a spomalenie.
- Podporuje polohovanie v polovičnom kroku.
- Podporuje viacero motorov naraz, s nezávislým krokovaním na každom motore.
Táto knižnica nie je súčasťou Arduino IDE, takže si ju musíte najskôr nainštalovať.
Inštalácia knižnice
Ak chcete nainštalovať knižnicu, prejdite na Sketch > Include Library > Manage Libraries…

Filtrujte vyhľadávanie zadaním „accelstepper“. Kliknite na prvú položku a potom vyberte Inštalovať.

Tu je jednoduchý náčrt, ktorý zrýchľuje krokový motor v jednom smere a potom spomaľuje, aby sa zastavil. Po jednej otáčke motor zmení smer otáčania a proces zopakuje.
// Knižnica AccelStepper Library
#include <AccelStepper.h>
// Definuje konštantu
#define MotorInterfaceType 4
// Piny zadané v poradí IN1-IN3-IN2-IN4 pre správnu postupnosť krokov
AccelStepper myStepper(MotorInterfaceType, 8, 10, 9, 11);
void setup() {
// nastaviť maximálnu rýchlosť, faktor zrýchlenia,
// počiatočná rýchlosť a cieľová poloha
myStepper.setMaxSpeed(1000.0);
myStepper.setAcceleration(50.0);
myStepper.setSpeed(200);
myStepper.moveTo(2038);
}
void loop() {
// Keď motor dosiahne cieľovú polohu, zmeniť smer
if (myStepper.distanceToGo() == 0)
myStepper.moveTo(-myStepper.currentPosition());
// motor roztočiť
myStepper.run();
}
Vysvetlenie kódu:
Program začína zahrnutím novo nainštalovanej knižnice AccelStepper.
#include <AccelStepper.h>
Potom určíme typ rozhrania motora pre knižnicu AccelStepper.
V tomto prípade budeme štvorvodičový krokový motor poháňať v plnokrokovom režime, preto nastavíme konštantu MotorInterfaceType na 4. Ak chcete motor spustiť v polovičnom kroku, nastavte konštantu na 8.
#define MotorInterfaceType 4
Ďalej vytvoríme inštanciu knižnice myStepper s príslušným typom rozhrania motora a sekvenciou pinov 8, 10, 9, 11. (Nezabudnite, že postupnosť krokov pre tieto motory je IN1-IN3-IN2-IN4 ).
AccelStepper myStepper(MotorInterfaceType, 8, 10, 9, 11);
Vo funkcii setup sú maximálne povolené otáčky motora nastavené na 1000 (motor na túto rýchlosť zrýchli, keď ho spustíme).
Konštantná rýchlosť je nastavená na 200. A keďže 28BYJ-48 urobí 2038 krokov na otáčku, cieľová poloha je tiež nastavená na 2038.
void setup() {
myStepper.setMaxSpeed(1000.0);
myStepper.setAcceleration(50.0);
myStepper.setSpeed(200);
myStepper.moveTo(2038);
}
Vo funkcii loop() sa príkaz if používa na určenie toho, ako ďaleko musí motor prejsť (načítaním vlastnosti distanceToGo) pred dosiahnutím cieľovej polohy (nastavenej pomocou moveTo). Keď distanceToGo dosiahne nulu, motor sa otočí v opačnom smere nastavením polohy moveTo.
V spodnej časti cyklu si všimnete, že sa volá funkcia run(). Toto je najdôležitejšia funkcia,motor sa vám bez toho nepohne.
void loop() {
// Keď motor dosiahne cieľovú polohu, zmeniť smer
if (myStepper.distanceToGo() == 0)
myStepper.moveTo(-myStepper.currentPosition());
// motor roztočiť
myStepper.run();
}
Príklad kódu Arduino – Ovládajte dva krokové motory 28BYJ-48 súčasne


Pridajme do nastavenia druhý krokový motor 28BYJ-48.
Pripojte IN1, IN2, IN3 a IN4 k digitálnym kolíkom Arduino 4, 5, 6 a 7.
1.Ovládač ULN2003
- IN1 – 8
- IN2 – 9
- IN3 – 10
- IN4 – 11
- GND – GND
2.Ovládač ULN2003
- IN1 – 4
- IN2 – 5
- IN3 – 6
- IN4 – 7
- GND – GND
Ako to zostaviť:

Kód
Tu je náčrt, ktorý poháňa jeden motor v režime plného kroku a druhý v režime polovičného kroku pri zrýchľovaní a spomaľovaní. Po jednej otáčke sa zmení smer ich otáčania.
// Knižnica AccelStepper Library
#include <AccelStepper.h>
// Definuje konštanty
#define FULLSTEP 4
#define HALFSTEP 8
// Piny zadané v poradí IN1-IN3-IN2-IN4 pre správnu postupnosť krokov
AccelStepper stepper1(HALFSTEP, 8, 10, 9, 11);
AccelStepper stepper2(FULLSTEP, 4, 6, 5, 7);
void setup() {
// nastaviť maximálnu rýchlosť, faktor zrýchlenia,
// počiatočná rýchlosť a cieľová poloha motora 1
stepper1.setMaxSpeed(1000.0);
stepper1.setAcceleration(50.0);
stepper1.setSpeed(200);
stepper1.moveTo(2038);
// nastaviť to isté pre motor 2
stepper2.setMaxSpeed(1000.0);
stepper2.setAcceleration(50.0);
stepper2.setSpeed(200);
stepper2.moveTo(-2038);
}
void loop() {
// Keď motor dosiahne cieľovú polohu, zmeniť smer
if (stepper1.distanceToGo() == 0)
stepper1.moveTo(-stepper1.currentPosition());
if (stepper2.distanceToGo() == 0)
stepper2.moveTo(-stepper2.currentPosition());
// motory roztočiť
stepper1.run();
stepper2.run();
}
Pridaj komentár