Askelmoottori Arduino -opas: NEMA17 ja L298N
Askelmoottori on yksi harrastajan tärkeimmistä komponenteista, kun tarvitaan tarkkaa liikkeenohjausta. Olipa kyseessä 3D-tulostin, CNC-jyrsin, kameran liukusäädin tai robottikäsivarsi, askelmoottori Arduino -yhdistelmä tarjoaa edullisen ja tehokkaan tavan hallita liikettä askel askeleelta – ilman kalliita servomoottoreita tai takaisinkytkentäjärjestelmiä. Tässä kattavassa oppaassa käymme läpi kaiken tarvittavan NEMA17-askelmoottorin ohjaamiseen L298N-ohjaimella: komponenttivalinnat, kytkentäkaaviot, kolme eri koodiesimerkkiä ja vianetsintävinkit yleisimpiin ongelmiin.
Sisällysluettelo
- Tarvittavat komponentit
- NEMA17-askelmoottorin perusteet
- L298N-moottoriohjaimen toiminta
- Askelmoottori Arduino -kytkentäohje vaihe vaiheelta
- Koodiesimerkki 1: Stepper.h-kirjasto
- Koodiesimerkki 2: AccelStepper ja kiihdytys
- Koodiesimerkki 3: Nopeuden säätö potentiometrillä
- Askellustilat vertailussa
- Vianetsintä ja yleiset ongelmat
- Seuraavat askeleet
Tarvittavat komponentit
Ennen kuin aloitamme, tarvitset seuraavat osat:
- Arduino Uno (tai muu Arduino-yhteensopiva kehitysalusta, kuten ATmega328P Nano -ohjain)
- NEMA17-askelmoottori – esimerkiksi NEMA17 59Ncm stepper tai kevyempiin sovelluksiin NEMA17 40Ncm stepper
- L298N-moottoriohjain – L298N duaali H-silta ohjain (4,90 €)
- 12V DC-virtalähde (vähintään 2A)
- Hyppylankoja kytkentöihin – esimerkiksi Dupont-hyppylangat 30cm uros-uros (20 kpl)
- Moottoripidike (valinnainen) – NEMA17 Moottoripidike – Litteä alumiiniprofiilikiinnitykseen
NEMA17-askelmoottorin perusteet

NEMA17 on yksi suosituimmista askelmoottorityypeistä harrastuskäytössä. Nimi viittaa moottorin etupaneelin kokoon: 1,7 tuumaa eli 42 × 42 mm. Tyypillinen NEMA17-askelmoottori pyörähtää 1,8° per askel, mikä tarkoittaa 200 askelta per kierros.
Tekniset ominaisuudet
- Askelkulma: 1,8° (200 askelta/kierros)
- Moottorityyppi: Bipolaarinen hybridiaskelmoottori
- Akselin halkaisija: 5 mm D-tasolla
- Kiinnitysreikien väli: 31 mm (M3-ruuvit)
- Johdot: 4 johtoa (kaksi kelaparia)
- Pitomomentti: 40–59 Ncm mallista riippuen
Kelaparien tunnistaminen
NEMA17-moottorissa on neljä johtoa, jotka muodostavat kaksi kelaparia. Johtojen värit vaihtelevat valmistajittain, joten kelaparit on tunnistettava ennen kytkentää. Helpoin tapa on käyttää yleismittaria:
- Aseta yleismittari vastus- tai jatkuvuusmittaukselle.
- Mittaa johtoparien välinen vastus. Samaan kelaan kuuluvat johdot näyttävät tyypillisesti 1–10 ohmia.
- Eri kelojen johdot näyttävät ääretöntä vastusta (avoin piiri).
Toinen nopea tapa: kytke kaksi johtoa yhteen ja yritä pyörittää akselia käsin. Jos akseli tuntuu jäykemmältä, johdot kuuluvat samaan kelaan.
L298N-moottoriohjaimen toiminta

L298N on edullinen ja monipuolinen duaali H-silta -ohjain, joka soveltuu sekä DC-moottoreiden että askelmoottorien ohjaukseen. Se sisältää kaksi itsenäistä H-siltapiiriä, joista kumpikin ohjaa yhtä askelmoottorin kelaa.
L298N:n tekniset tiedot
- Moottorin käyttöjännite: 5–35 V
- Logiikkajännite: 5 V (TTL-yhteensopiva)
- Jatkuva virta: 2 A per kanava, huippu 3 A
- Sisäänrakennettu jännitesäädin: 78M05 (5 V, kun syöttö ≤ 12 V)
- Mitat: 43 × 43 × 27 mm
L298N:n rajoitukset
On tärkeää ymmärtää L298N:n rajoitukset verrattuna nykyaikaisiin askelmoottoriohjaimiin kuten A4988 tai DRV8825:
- Ei virranrajoitusta: L298N ei rajoita moottorin virtaa automaattisesti. Virta määräytyy kaavalla I = V / R (jännite / käämivastus). Liian suuri virta voi ylikuumentaa moottorin tai ohjaimen.
- Ei mikroaskellusta: L298N tukee vain täysaskellusta ja puoliaskellusta – ei mikroaskellusta.
- Jännitehäviö: Sisäiset transistorit aiheuttavat noin 2 V jännitehäviön. 12 V syötöllä moottori saa todellisuudessa noin 10 V.
L298N on kuitenkin erinomainen valinta oppimiseen ja kevyisiin projekteihin, erityisesti kun haluat ymmärtää askelmoottorin toimintaperiaatteen syvällisesti. Vakavampiin sovelluksiin (3D-tulostimet, CNC-koneet) suosittelemme siirtymistä A4988- tai DRV8825-ohjaimiin, jotka tarjoavat virranrajoituksen ja mikroaskelluksen.
Askelmoottori Arduino -kytkentäohje vaihe vaiheelta
Alla on kytkentätaulukko askelmoottori Arduino -kokoonpanolle L298N-ohjaimen kanssa:
L298N → Arduino
- IN1 → Arduino pin 8
- IN2 → Arduino pin 9
- IN3 → Arduino pin 10
- IN4 → Arduino pin 11
- GND → Arduino GND
L298N → NEMA17-moottori
- OUT1 → Kela A, johto 1
- OUT2 → Kela A, johto 2
- OUT3 → Kela B, johto 1
- OUT4 → Kela B, johto 2
L298N → Virtalähde
- +12V (VS) → 12 V DC-virtalähteen plus (+)
- GND → 12 V DC-virtalähteen miinus (−)
Tärkeät huomiot kytkennässä
- ENA- ja ENB-hyppyjohdot: Pidä paikallaan – ne pitävät moottorin aina aktiivisena.
- 5V-hyppyjohto: Kun moottorin syöttöjännite on ≤ 12 V, pidä 5V-hyppyjohto paikallaan. Kortin oma säädin syöttää logiikalle 5 V. Jos syöttöjännite ylittää 12 V, poista 5V-hyppyjohto ja syötä ulkoinen 5 V VSS-pinniin.
- Yhteinen maa: Arduinon GND ja L298N:n GND on yhdistettävä!
- Älä syötä moottoria Arduinon kautta – käytä aina ulkoista virtalähdettä.
Koodiesimerkki 1: Perusohjaus Stepper.h-kirjastolla
Arduinon sisäänrakennettu Stepper.h-kirjasto on yksinkertaisin tapa aloittaa askelmoottorin ohjaus. Alla oleva koodi pyörittää NEMA17-moottoria yhden kierroksen myötäpäivään ja sitten vastapäivään:
#include <Stepper.h>
// NEMA17: 200 askelta per kierros
const int STEPS_PER_REV = 200;
// Pinnijärjestys: IN1, IN3, IN2, IN4 (huomaa ristikkäinen järjestys!)
Stepper myStepper(STEPS_PER_REV, 8, 10, 9, 11);
void setup() {
myStepper.setSpeed(60); // Nopeus: 60 RPM
}
void loop() {
// Yksi kierros myötäpäivään
myStepper.step(STEPS_PER_REV);
delay(1000);
// Yksi kierros vastapäivään
myStepper.step(-STEPS_PER_REV);
delay(1000);
}
Huomioitavaa: Stepper.h:n step()-funktio on blokkaava – ohjelma pysähtyy odottamaan moottorin liikkeen valmistumista. Pinnien järjestys konstruktorissa on ristikkäinen (pin1, pin3, pin2, pin4), mikä on tärkeää oikean askelsekvenssin kannalta.
Miksi ristikkäinen pinnijärjestys? L298N:n IN1/IN2 ohjaavat kelaa A ja IN3/IN4 kelaa B. Stepper.h odottaa kuitenkin pinnit järjestyksessä kela A+, kela B+, kela A−, kela B−, joten fyysisten pinnien 8, 9, 10, 11 sijaan konstruktoriin annetaan 8, 10, 9, 11.
Koodiesimerkki 2: AccelStepper kiihdytyksellä
AccelStepper-kirjasto on huomattavasti monipuolisempi kuin Stepper.h. Se tukee kiihdytystä ja hidastusta, ei-blokkaavaa toimintaa sekä usean moottorin samanaikaista ohjausta. Asenna kirjasto Arduino IDE:ssä: Sketch → Include Library → Manage Libraries → hae ”AccelStepper”.
#include <AccelStepper.h>
#define STEPS_PER_REV 200
// FULL4WIRE = 4-johtiminen bipolaarinen askelmoottori (L298N)
AccelStepper stepper(AccelStepper::FULL4WIRE, 8, 10, 9, 11);
void setup() {
stepper.setMaxSpeed(1000); // Maksiminopeus: 1000 askelta/s
stepper.setAcceleration(500); // Kiihtyvyys: 500 askelta/s²
stepper.moveTo(STEPS_PER_REV); // Kohde: 200 askelta (yksi kierros)
}
void loop() {
// Kun kohde saavutettu, käännetään suunta
if (stepper.distanceToGo() == 0) {
delay(1000);
stepper.moveTo(-stepper.currentPosition());
}
stepper.run(); // Ei-blokkaava – kutsu joka loop-kierroksella
}
AccelStepperin run()-funktio on ei-blokkaava, joten voit suorittaa muuta koodia samanaikaisesti. Tämä on erityisen hyödyllistä, kun ohjaat useita moottoreita tai luet sensoreita moottorin liikkuessa.
AccelStepperin tärkeimmät funktiot
setMaxSpeed(float)– maksiminopeus (askelta/s)setAcceleration(float)– kiihtyvyys (askelta/s²)moveTo(long)– absoluuttinen kohdepositiomove(long)– suhteellinen siirtymärun()– liikuta yksi askel tarvittaessa (ei-blokkaava)distanceToGo()– jäljellä olevat askeleetcurrentPosition()– nykyinen positiostop()– hidasta ja pysäytä
Koodiesimerkki 3: Nopeuden säätö potentiometrillä
Tässä esimerkissä askelmoottorin nopeutta säädetään potentiometrillä. Tämä on käytännöllinen tapa testata eri nopeuksia ja oppia moottorin käyttäytymistä:
#include <Stepper.h>
const int STEPS_PER_REV = 200;
const int SPEED_CONTROL = A0; // Potentiometri analogituloon A0
Stepper stepper_NEMA17(STEPS_PER_REV, 8, 10, 9, 11);
void setup() {
// Ei alustuksia tarvita
}
void loop() {
int sensorReading = analogRead(SPEED_CONTROL);
int motorSpeed = map(sensorReading, 0, 1023, 0, 100);
if (motorSpeed > 0) {
stepper_NEMA17.setSpeed(motorSpeed);
stepper_NEMA17.step(STEPS_PER_REV / 100);
}
}
Kytke 10 kΩ potentiometri Arduinon pinnien 5V, A0 ja GND välille. Potentiometrin keskijohto menee A0-pinniin, ja ääripäät 5V- ja GND-pinneihin. Potentiometrin kääntö muuttaa moottorin nopeutta 0–100 RPM välillä. map()-funktio skaalaa analogiluennan (0–1023) halutulle nopeusalueelle.
Askellustilat vertailussa
L298N-ohjaimella voit käyttää kolmea eri askellustilaa. Alla vertailu:
Täysaskellus (Full-Step)
Molemmat kelat ovat jatkuvasti virrallisia. Tämä on oletusmodi ja tarjoaa suurimman pitomomentin. 200 askelta per kierros, 1,8° per askel. Haittapuolena on enemmän tärinää matalilla nopeuksilla.
Puoliaskellus (Half-Step)
Vuorottelee yhden ja kahden kelan virrallisena olon välillä. Tuplaa tarkkuuden 400 askeleeseen per kierros (0,9° per askel). Tasaisempi pyörimisliike, mutta hieman pienempi momentti yhden kelan vaiheissa. AccelStepper-kirjastolla puoliaskellus onnistuu käyttämällä AccelStepper::HALF4WIRE-tilaa.
Mikroaskellus (ei mahdollista L298N:llä)
Mikroaskellus vaatii erikoisohjaimen kuten A4988 (1/16-askellus, 3200 askelta/kierros) tai DRV8825 (1/32-askellus, 6400 askelta/kierros). Mikroaskellus tuottaa huomattavasti tasaisemman ja hiljaisemman liikkeen, mutta L298N ei tue mikroaskellusta, koska se on yksinkertainen H-silta ilman virransäätöä.
Vianetsintä ja yleiset ongelmat
Jos askelmoottori Arduino -projektisi ei toimi odotetusti, tarkista nämä yleisimmät ongelmat:
- Moottori tärisee mutta ei pyöri: Kelajohdot ovat väärin päin. Vaihda yhden kelaparin johdot keskenään (esim. OUT1 ja OUT2).
- Moottori kuumenee voimakkaasti: Virta on liian suuri. Tarkista moottorin spesifikaatiot ja laske virta kaavalla I = V / R. Harkitse matalamman jännitteen käyttöä tai siirtymistä A4988/DRV8825-ohjaimeen, jossa on virranrajoitus.
- Moottori hyppii askeleita: Nopeus on liian suuri tai kiihtyvyys liian aggressiivinen. Laske
setMaxSpeed()– jasetAcceleration()-arvoja. - Moottori pyörii vain yhteen suuntaan: Tarkista, että kaikki neljä IN-pinniä (IN1–IN4) on kytketty oikein.
- Ei liikettä lainkaan: Tarkista virtalähde, ENA/ENB-hyppyjohdot ja yhteinen maa Arduinon ja L298N:n välillä.
- Nykivä liike: Käytä AccelStepper-kirjastoa kiihdytyksellä Stepper.h:n sijaan. Aloita matalilla nopeuksilla ja nosta asteittain.
Seuraavat askeleet
Nyt kun hallitset askelmoottorin perusohjauksen L298N:llä, voit laajentaa osaamistasi:
- Siirry A4988/DRV8825-ohjaimiin: Nämä tarjoavat virranrajoituksen, mikroaskelluksen ja tehokkaamman ohjauksen. Kytkentä on yksinkertaisempi – tarvitset vain STEP- ja DIR-pinnit.
- Kokeile useamman moottorin ohjausta: AccelStepperin
MultiStepper-luokka mahdollistaa usean moottorin koordinoidun liikkeen. - Rakenna CNC-projekti: Yhdistä askelmoottori lineaarijohteisiin ja kuularuuveihin tarkkaa lineaariliikettä varten.
- Lisää rajakytkimet: Rajakytkimillä voit toteuttaa kotiaseman haun (homing) ja estää moottorin yliajamisen.
Suositellut tuotteet tähän projektiin
Protocachen valikoimasta löydät kaikki tarvittavat komponentit askelmoottori Arduino -projekteihin: L298N-ohjaimet, NEMA17-askelmoottorit, moottoripidikkeet ja hyppylangat. Aloita rakentaminen jo tänään – tilaa komponentit ja toteuta ensimmäinen askelmoottori Arduino -projektisi!























