blog

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.

Tarvittavat komponentit

Ennen kuin aloitamme, tarvitset seuraavat osat:

NEMA17-askelmoottorin perusteet

NEMA17 Moottoripidike - Litteä
NEMA17-askelmoottori kiinnitettynä litteään alumiinipidikkeeseen – tyypillinen asennustapa CNC- ja 3D-tulostinprojekteissa.

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:

  1. Aseta yleismittari vastus- tai jatkuvuusmittaukselle.
  2. Mittaa johtoparien välinen vastus. Samaan kelaan kuuluvat johdot näyttävät tyypillisesti 1–10 ohmia.
  3. 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 duaali H-silta ohjain
L298N duaali H-silta -moottoriohjain – edullinen ja monipuolinen valinta askelmoottorin ohjaukseen.

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ä

  1. ENA- ja ENB-hyppyjohdot: Pidä paikallaan – ne pitävät moottorin aina aktiivisena.
  2. 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.
  3. Yhteinen maa: Arduinon GND ja L298N:n GND on yhdistettävä!
  4. Ä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 kohdepositio
  • move(long) – suhteellinen siirtymä
  • run() – liikuta yksi askel tarvittaessa (ei-blokkaava)
  • distanceToGo() – jäljellä olevat askeleet
  • currentPosition() – nykyinen positio
  • stop() – 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()– ja setAcceleration()-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!

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *