blog

A4988 ohjain – kytkentä, Vref-säätö ja mikroaskeleet

A4988 on yksi suosituimmista askelmoottorin ohjaimista harrastaja- ja DIY-projekteissa. Se löytyy lähes jokaisesta 3D-tulostimesta, CNC-koneesta ja robotiikkaprojektista – eikä syyttä. Pieneen piirilevyyn on pakattu mikroaskeleet, säädettävä virranrajoitus ja yksinkertainen STEP/DIR-ohjausrajapinta, joka vaatii Arduinolta vain kaksi digitaalista pinniä. Mutta miten A4988 ohjain oikein kytketään, miten virranrajoitus säädetään oikein ja mitä mikroaskeleet käytännössä tarkoittavat? Tässä kattavassa tutoriaalissa käymme läpi kaiken, mitä tarvitset A4988-askelmoottorin ohjaimen käyttöönottoon: kytkennän, Vref-säädön, mikroaskeleet ja toimivat koodiesimerkit.

A4988 ohjaimen tekniset tiedot

A4988 ohjain perustuu Allegro MicroSystemsin DMOS-mikroaskelpiiriin, joka sisältää sisäänrakennetun translaattorin ja ylivirtasuojauksen. Tärkeimmät tekniset tiedot:

  • Moottorin käyttöjännite (VMOT): 8–35 V DC
  • Logiikkajännite (VDD): 3–5,5 V DC (yhteensopiva sekä 3,3 V:n että 5 V:n logiikan kanssa)
  • Jatkuva virta per vaihe: 1 A ilman jäähdytysripaa, jopa 2 A riittävällä jäähdytyksellä
  • Mikroaskelresoluutiot: täysi askel, 1/2, 1/4, 1/8 ja 1/16
  • Minimi STEP-pulssin kesto: 1 µs
  • Piirilevyn koko: ~15,5 × 20,5 mm
  • Suojaukset: ylivirta, oikosulku, alijännitelukitus, ylilämpösuoja (~165 °C)

A4988 ohjain on erittäin kompakti ja edullinen, mutta silti täynnä ominaisuuksia. Verrattuna yleiskäyttöiseen L298N-H-siltaan A4988 tarjoaa mikroaskeleet, sisäänrakennetun virranrajoituksen ja huomattavasti yksinkertaisemman ohjausrajapinnan – vain kaksi pinniä riittää.

Pinnijako ja toiminta

A4988-moduulissa on 16 pinniä kahdessa rivissä. Ymmärtämällä jokaisen pinnin toiminnan vältät yleisimmät kytkentävirheet.

Tehopinnit

  • VMOT: Moottorin käyttöjännite (8–35 V). Lisää aina vähintään 100 µF:n elektrolyyttikondensaattori VMOT:n ja GND:n väliin lähelle ohjainta.
  • GND (moottori): Moottorin käyttöjännitteen maa.
  • VDD: Logiikkajännite (3,3–5 V). Kytke Arduinon 5V-pinniin.
  • GND (logiikka): Logiikan maa. Kytke Arduinon GND-pinniin.

Moottorilähdöt

  • 1A, 1B: Kela 1:n liitännät
  • 2A, 2B: Kela 2:n liitännät

Ohjauspinnit

  • STEP: Jokainen nouseva reuna (LOW→HIGH) siirtää moottoria yhden (mikro)askelen. Tämä on pääohjauspin.
  • DIR: Suunnan ohjaus. HIGH = yksi suunta, LOW = toinen.
  • ENABLE (EN): Aktiivinen LOW. Kun LOW tai kelluva, ohjain on käytössä. Vedä HIGH poistaaksesi moottorilähdöt käytöstä.
  • SLEEP: Aktiivinen LOW. Vedä LOW asettaaksesi lepotilaan (vähentää virrankulutusta). Yhdistetään usein RESET-pinniin, jotta molemmat pysyvät HIGH-tilassa normaalikäytössä.
  • RESET: Aktiivinen LOW. Nollaa sisäisen translaattorin askellaskurin. Yhdistetään usein SLEEP-pinniin (molemmat vedetään HIGH-tilaan).

Mikroaskelpinnit

  • MS1, MS2, MS3: Mikroaskelresoluution valinta. Kaikissa on sisäiset alasvetovastukset, joten kytkemättä jättäminen = täysi askel.

Kytkentä Arduinoon ja NEMA17-moottoriin

Tässä esimerkissä käytämme ATmega328P ’Nano’ ohjainta ja NEMA17 40Ncm askelmoottoria. Kytkentä on suoraviivainen:

ATmega328P Nano ohjain
ATmega328P ’Nano’ ohjain – kompakti Arduino-yhteensopiva kehitysalusta A4988-projekteihin
Arduino Nano          A4988-moduuli
────────────────────────────────────
D3 (digitaalinen)  →  STEP
D2 (digitaalinen)  →  DIR
5V                 →  VDD
GND                →  GND (logiikkapuoli)
                      RESET ←→ SLEEP (yhdistä toisiinsa)

Ulkoinen virtalähde (12 V, vähintään 3–4 A)
────────────────────────────────────
V+                 →  VMOT
GND                →  GND (moottoripuoli)
100 µF kondensaattori VMOT:n ja GND:n väliin!

NEMA17-askelmoottori
────────────────────────────────────
Kela 1, lanka A    →  1A
Kela 1, lanka B    →  1B
Kela 2, lanka A    →  2A
Kela 2, lanka B    →  2B

Moottorin kelojen tunnistaminen

Käytä yleismittaria vastustilassa. Mittaa vastus kaikkien johdinparien välillä – kaksi johdinta, joiden välillä on pieni vastus (esim. 1–3 Ω), kuuluvat samaan kelaan. Tyypilliset NEMA17-johdinvärit: punainen+sininen = kela 1, vihreä+musta = kela 2 (vaihtelee valmistajan mukaan!).

Kriittiset varoitukset

  • Lisää AINA vähintään 100 µF:n elektrolyyttikondensaattori VMOT:n ja GND:n väliin. Ilman sitä LC-jännitepiikit voivat tuhota ohjaimen.
  • ÄLÄ KOSKAAN kytke tai irrota moottoria ohjaimen ollessa päällä – tämä voi tuhota A4988:n välittömästi.
  • Tarkista kondensaattorin napaisuus – väärinpäin kytketty elektrolyyttikondensaattori voi räjähtää.
  • Säädä virranrajoitus ENNEN moottorin käynnistämistä.

Vref-virranrajoituksen säätö

Virranrajoituksen säätö on A4988 ohjaimen käyttöönoton tärkein vaihe. Liian suuri virta ylikuumentaa moottorin ja ohjaimen, liian pieni virta aiheuttaa askelten ohituksia.

Laskukaava

Vref-jännite lasketaan kaavalla:

Vref = I_max × 8 × R_sense

Missä I_max on haluttu maksimivirta per vaihe (ampeereina) ja R_sense on piirilevyn mittavastuksen arvo (ohmia). Tarkista mittavastuksen arvo piirilevyltä:

  • R100 tai R10: 0,1 Ω → Vref = I_max × 0,8
  • R068: 0,068 Ω → Vref = I_max × 0,544
  • R05: 0,05 Ω → Vref = I_max × 0,4

Esimerkkilaskelma NEMA17 40Ncm -moottorille

Moottorin nimellisvirta on 1,7 A. Käytämme 80 % nimellisvirrasta turvamarginaalina:

  • Tavoitevirta: 1,7 A × 0,8 = 1,36 A
  • R_sense = 0,068 Ω: Vref = 1,36 × 0,544 = 0,74 V
  • R_sense = 0,1 Ω: Vref = 1,36 × 0,8 = 1,09 V

Mittaus ja säätö käytännössä

  1. Kytke virta ohjaimeen (VDD ja VMOT), moottoria ei tarvitse kytkeä.
  2. Aseta yleismittari DC-jännitetilaan.
  3. Aseta punainen mittapää potentiometrin säätöruuvin päälle.
  4. Aseta musta mittapää GND-pinniin.
  5. Käännä potentiometriä pienellä ruuvimeisselillä: myötäpäivään = enemmän virtaa, vastapäivään = vähemmän.
  6. Säädä, kunnes Vref vastaa laskettua arvoa.

Vinkki: käytä mieluiten keraamista tai muovista ruuvimeisseliä oikosulkujen välttämiseksi. Metallinen ruuvimeisseli voi helposti oikosulkea potentiometrin ympärillä olevia komponentteja ja vahingoittaa ohjainta.

Mikroaskeleet käytännössä

Mikroaskeleet ovat yksi A4988 ohjaimen parhaista ominaisuuksista. Ne jakavat jokaisen täyden askelen pienempiin osiin, mikä tekee moottorin liikkeestä tasaisempaa ja hiljaisempaa.

MS1 MS2 MS3 Resoluutio Askelta/kierros (1,8° moottori)
LOW LOW LOW Täysi askel 200
HIGH LOW LOW 1/2 askel 400
LOW HIGH LOW 1/4 askel 800
HIGH HIGH LOW 1/8 askel 1 600
HIGH HIGH HIGH 1/16 askel 3 200

Tärkeää: Mikroaskeleet toimivat oikein vain, kun virranrajoitus on säädetty oikein. A4988 ohjain käyttää PWM-chopper-tekniikkaa (vakiovirranrajoitus), joka moduloi kelavirran sinimuotoiseksi mikroaskeleiden välillä. Jos virranrajoitus on säädetty liian korkealle eikä se aktivoidu, ohjain ei pysty tuottamaan tarvittavia välivirtatasoja ja moottori ohittaa mikroaskeleita. Käytännössä tämä tarkoittaa, että Vref-säätö on tehtävä huolellisesti ennen mikroaskeleiden käyttöönottoa.

Käytännön nyrkkisäännöt:

  • Täysi askel: maksimivääntö, eniten tärinää ja melua
  • 1/8 askel: hyvä kompromissi tarkkuuden ja nopeuden välillä – yleisin valinta
  • 1/16 askel: tasaisin liike, mutta vaatii nopeamman pulssitaajuuden samaan RPM-nopeuteen

Esimerkiksi 1/16-mikroaskeleilla yhden kierroksen tekemiseen tarvitaan 3 200 pulssia. Jos haluat 150 RPM:n nopeuden, pulssitaajuuden on oltava 3 200 × (150/60) = 8 000 pulssia sekunnissa. Huomaa, että Arduino Nanon digitalWrite()-funktio pystyy tuottamaan noin 100 000 pulssia sekunnissa, joten 8 kHz on hyvin toteutettavissa.

Koodiesimerkki: peruskäyttö ilman kirjastoa

Yksinkertaisin tapa ohjata A4988 ohjainta Arduinolla on generoida STEP-pulsseja suoraan. Tämä esimerkki pyörittää moottoria vuorotellen molempiin suuntiin:

// A4988 askelmoottorin ohjaus – perusesimerkki
// Ohjaa NEMA17-moottoria ilman ulkoista kirjastoa

const int dirPin = 2;    // Suuntapin
const int stepPin = 3;   // Askelpin
const int stepsPerRevolution = 200; // 1,8° per askel = 200 askelta/kierros

void setup() {
  pinMode(stepPin, OUTPUT);
  pinMode(dirPin, OUTPUT);
}

void loop() {
  // Pyöritä myötäpäivään yksi täysi kierros
  digitalWrite(dirPin, HIGH);
  for (int x = 0; x < stepsPerRevolution; x++) {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(1000);  // Säädä nopeutta (pienempi = nopeampi)
    digitalWrite(stepPin, LOW);
    delayMicroseconds(1000);
  }
  delay(1000); // Tauko 1 sekunti

  // Pyöritä vastapäivään yksi kierros (nopeammin)
  digitalWrite(dirPin, LOW);
  for (int x = 0; x < stepsPerRevolution; x++) {
    digitalWrite(stepPin, HIGH);
    delayMicroseconds(500);   // Nopeampi
    digitalWrite(stepPin, LOW);
    delayMicroseconds(500);
  }
  delay(1000);
}

Koodin toimintaperiaate: jokainen STEP-pinnin nouseva reuna siirtää moottoria yhden askelen. delayMicroseconds(1000) tarkoittaa, että yksi askel kestää 2 ms (1 ms HIGH + 1 ms LOW), joten 200 askelta × 2 ms = 400 ms per kierros eli noin 150 RPM. Arvolla 500 µs nopeus kaksinkertaistuu 300 RPM:ään.

Jos käytät 1/16-mikroaskeleita, muuta askelmäärä: stepsPerRevolution * 16 eli 3 200 askelta per kierros.

Koodiesimerkki: AccelStepper-kirjasto

Vakavampiin projekteihin suosittelen AccelStepper-kirjastoa, joka tarjoaa tasaisen kiihdytyksen ja hidastuksen. Tämä vähentää askelten ohituksia ja tekee liikkeestä sulavamman.

// A4988 + AccelStepper-kirjasto
// Tasainen kiihdytys ja hidastus

#include <AccelStepper.h>

// Tyyppi 1 = ulkoinen ohjain (STEP/DIR-rajapinta)
AccelStepper stepper(1, 3, 2); // (tyyppi, stepPin, dirPin)

void setup() {
  stepper.setMaxSpeed(1000);      // Maksiminopeus (askelta/s)
  stepper.setAcceleration(500);   // Kiihtyvyys (askelta/s²)
}

void loop() {
  // Liiku asentoon 800 (4 täyttä kierrosta täysaskeltilassa)
  stepper.moveTo(800);
  stepper.runToPosition();  // Estävä: odottaa kunnes perillä

  delay(1000);

  // Palaa takaisin nolla-asentoon
  stepper.moveTo(0);
  stepper.runToPosition();

  delay(1000);
}

AccelStepper tarjoaa myös ei-estävän run()-funktion, jota voit kutsua toistuvasti loop()-funktiossa. Tämä mahdollistaa muiden tehtävien suorittamisen samanaikaisesti:

#include <AccelStepper.h>

AccelStepper stepper(1, 3, 2);

void setup() {
  stepper.setMaxSpeed(1000);
  stepper.setAcceleration(500);
  stepper.moveTo(3200); // 1 kierros 1/16-mikroaskeleilla
}

void loop() {
  // Ei-estävä – kutsu run() niin usein kuin mahdollista
  if (stepper.distanceToGo() == 0) {
    stepper.moveTo(-stepper.currentPosition()); // Käännä suunta
  }
  stepper.run();
}

AccelStepper-kirjaston hyödyllisimmät funktiot:

  • setMaxSpeed(nopeus) – maksiminopeus askeleina sekunnissa
  • setAcceleration(kiihtyvyys) – kiihtyvyys askeleina per sekunti²
  • moveTo(asento) – aseta kohdeasento (absoluuttinen)
  • move(askeleet) – aseta kohdeasento (suhteellinen)
  • runToPosition() – estävä: ajaa moottoria kohteeseen kiihdytyksellä
  • run() – ei-estävä: kutsu toistuvasti loop()-funktiossa
  • distanceToGo() – palauttaa jäljellä olevat askeleet

Vianetsintä ja yleiset ongelmat

A4988 ohjain on luotettava, mutta muutamat ongelmat toistuvat usein aloittelijoilla:

  • Moottori ei liiku lainkaan: Tarkista kytkennät, varmista että STEP/DIR-signaalit tulevat oikeisiin pinneihin, tarkista että ENABLE on LOW (tai kelluva) ja että RESET ja SLEEP on yhdistetty toisiinsa.
  • Moottori tärisee mutta ei pyöri: Kelajohdot ovat ristissä. Vaihda yhden kelan johtimet keskenään (esim. vaihda 1A ja 1B).
  • Moottori ylikuumenee: Virranrajoitus on liian korkealla. Laske Vref-arvoa.
  • Ohjain sammuu toistuvasti: Ylilämpösuoja laukeaa. Lisää jäähdytysripa, laske virtaa tai lisää tuuletin.
  • Moottori ohittaa askeleita: Virta liian pieni (nosta Vref), nopeus liian suuri tai mekaaninen vastus liian kova.
  • Epäsäännöllinen liike: Löysät liitokset, sähköinen häiriö tai puuttuva suodatuskondensaattori VMOT-pinnissä.
  • Ohjain tuhoutui: Puuttuva kondensaattori VMOT:ssa, moottori irrotettu virran ollessa päällä tai käänteinen napaisuus.

Jäähdytys

Ilman jäähdytysripaa A4988 kestää noin 1 A:n jatkuvan virran. Jäähdytysrivalla pääset noin 1,5 A:iin ja aktiivisella tuuletinjäähdytyksellä jopa 2 A:iin. NEMA17-moottoreilla, joiden nimellisvirta on 1,7 A, jäähdytysripa on käytännössä pakollinen.

Päivityspolku: TMC2209

Jos tarvitset hiljaisempaa toimintaa tai korkeampaa mikroaskelresoluutiota, harkitse päivitystä TMC2209-ohjaimeen. Se tarjoaa jopa 1/256-mikroaskeleet, StealthChop-hiljaisen tilan ja UART-konfiguroinnin. TMC2209 on pin-yhteensopiva A4988:n kanssa, joten vaihto on helppoa.

Yhteenveto

A4988 ohjain on erinomainen valinta ensimmäiseen askelmoottoriprojektiin. Se on edullinen, helppo kytkeä ja tarjoaa riittävän suorituskyvyn useimpiin harrastusprojekteihin – 3D-tulostimista CNC-koneisiin ja robotiikkaan. Aloita peruskytkennällä, säädä virranrajoitus huolellisesti ja kokeile eri mikroaskelresoluutioita löytääksesi projektillesi sopivan tasapainon tarkkuuden, nopeuden ja väännön välillä.

Muista nämä kolme tärkeintä asiaa: lisää aina suodatuskondensaattori VMOT-pinniin, säädä Vref-virranrajoitus ennen moottorin käynnistämistä ja älä koskaan irrota moottoria virran ollessa päällä.

Suositellut tuotteet tähän projektiin

Tutustu koko moottori- ja ohjainvalikoimaamme ja löydä oikeat komponentit seuraavaan projektiisi!

Vastaa

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