19.01.2026

Koračni motor i driver za koračni motor - potpuni vodič

Qwiic
Inkplate
Arduino
Stepper motor and Stepper Motor Driver - A Full Guide

Table of contents

Uvod Kako radi koračni motor Važne karakteristike koračnih motora Upravljanje motorom Upravljanje motorom pomoću joysticka, projekt
Table of contents
Uvod Kako radi koračni motor Važne karakteristike koračnih motora Upravljanje motorom Upravljanje motorom pomoću joysticka, projekt

Uvod

Danas se koračni motori nalaze u raznim uređajima gdje su potrebni precizna kontrola i rotacija. Koriste se u 3D printerima, CNC strojevima, skenerima, a mogu služiti i za upravljanje automatskim sustavima zavjesa u tvom domu. Ono što ih čini toliko popularnima jest mogućnost kretanja u sitnim, kontroliranim koracima, što inženjerima i hobistima omogućuje vrlo precizno pozicioniranje.

U ovom članku proći ćemo kroz to što su koračni motori, kako rade i zašto su odličan izbor za projekte koji zahtijevaju precizno gibanje. Koračni motor s upravljačkim modulom korišten u ovom članku omogućuje da odmah kreneš s eksperimentiranjem, a driver daje potpunu kontrolu nad motorom pa se možemo usredotočiti na stvaranje glatkog i preciznog kretanja.

Kako radi koračni motor

Koračni motor je bezčetkasti električni motor koji se pomiče u diskretnim koracima, umjesto kontinuirane vrtnje kao kod DC motora, što omogućuje kontrolirano pozicioniranje bez senzora povratne veze. To se postiže slanjem električnih impulsa koji pobuđuju zavojnice motora u određenom redoslijedu. Postoje dvije glavne vrste koračnih motora.

  • Bipolarni koračni motori (tip koji se koristi u ovom članku) imaju dvije zavojnice i zahtijevaju H bridge upravljanje kako bi se promijenio smjer struje u svakoj zavojnici. Za takvu kontrolu mogu se koristiti četiri NPN tranzistora.
  • Unipolarni koračni motori imaju središnji izvod na svakoj zavojnici, što omogućuje jednostavnije upravljanje, ali su manje učinkoviti.

Bipolarni koračni motori nude veći okretni moment, učinkovitost i brzinu, ali zahtijevaju složeniji driver jer im je potrebna promjena smjera struje. U pravilu su bolji izbor za primjene koje traže veći okretni moment i učinkovitost, najčešće u sustavima preciznog upravljanja kretanjem, robotici i preciznim mehanizmima. S druge strane, unipolarni motori su jednostavniji i jeftiniji zbog jednostavnijeg sklopa upravljanja, ali imaju manji okretni moment i učinkovitost jer u jednom trenutku koriste samo polovicu namota. Koriste se u jeftinijim rješenjima i manje zahtjevnim primjenama, poput osnovne automatizacije i pisača.

Ispod je prikaz kako se različite zavojnice aktiviraju redom kako bi se okretala osovina.

Svaka zavojnica u motoru upravlja se NPN tranzistorom, a svaki je tranzistor spojen na jedan od pinova na pločici, IN1 do IN4. U ovom sklopu tranzistori rade kao prekidači. Kada pin primi električni impuls, tranzistor dopušta protok struje kroz odgovarajuću zavojnicu. Uključivanjem i isključivanjem tranzistora u određenom redoslijedu zavojnice se pobuđuju jedna za drugom, što uzrokuje da se koračni motor pomiče korak po korak.

Važne karakteristike koračnih motora

Jedna od važnijih karakteristika koračnog motora je nazivna struja, koja govori koliku struju svaka zavojnica može sigurno podnijeti, a to izravno utječe na okretni moment motora. Još jedna ključna stavka je nazivni napon koji ćeš često vidjeti naveden na koračnim motorima. Driveri obično koriste znatno viši napon napajanja i elektronički reguliraju struju, što motoru omogućuje bolji rad pri različitim brzinama. Treća karakteristika na koju se često gleda je kut koraka, koji pokazuje koliko se motor zakrene pri svakom punom koraku. Koračni motor 28BYJ 48 korišten u ovom primjeru ima ugrađen prijenosnik s omjerom redukcije 64 prema 1 i kut koraka 5.625°, što znači da je potrebno 2048 koraka da izlazna osovina napravi puni krug.

Upravljanje motorom

Sada kada znaš kako koračni motori rade, vrijeme je da jedan počnemo koristiti. Uz koračni motor i driver modul, imamo i namjensku Arduino biblioteku za jednostavno postavljanje i upravljanje. Krenimo.

Primjer: jednostavno kretanje naprijed i natrag

Za početak ćemo jednostavno okrenuti motor naprijed određeni broj koraka, a kada završi okret, okrenut ćemo ga unatrag za isti broj koraka.

#include "Basic-Stepper-Driver-SOLDERED.h"

BasicStepper stepper;

void setup()

{

// Change these to suit your stepper if you want

stepper.setMaxSpeed(500);

stepper.setAcceleration(100);

stepper.moveTo(700);

}


void loop()

{

// If at the end of travel go to the other end

if (stepper.distanceToGo() == 0)

stepper.moveTo(-stepper.currentPosition());


stepper.run();

}

Upravljanje motorom pomoću joysticka, projekt

Kako bismo projektu dodali malo više kontrole, uključit ćemo Joystick modul za upravljanje brzinom i smjerom motora. Također smo dodali prilagođeni 3D printani nosač motora koji je dostupan na ovoj poveznici: https://www.thingiverse.com/thing:3593641

Ovaj projekt omogućuje upravljanje koračnim motorom pomoću joysticka. Pomicanjem joysticka lijevo ili desno po X osi kontroliraš i brzinu i smjer motora. Što dalje gurneš ručicu u jednom smjeru, motor se brže vrti. Sustav uključuje i glatko ubrzavanje i usporavanje. Tipka na joysticku omogućuje uključivanje i isključivanje motora, što cijelo rješenje čini fleksibilnijim.

Korištene komponente:

  • ESP32
  • Joystick modul
  • Koračni motor i driver

Ovo je glavni dio koda koji postavlja smjer i brzinu motora na temelju položaja joysticka.

void loop()

{

// Toggle Run/Stop

if (btn.isPressed)

{

btn.isPressed = false;

runMotor = !runMotor;

}


// Read joystick value -> target_speed

bool inDeadband = false;

if (runMotor)

{

int x = constrain(analogRead(POSX), X_MIN, X_MAX);

if (x > X_CENTER + CENTER_OFFSET)

{

long mag = map(x, X_CENTER + CENTER_OFFSET, X_MAX, 0, (long)MAX_SPEED);

if (mag < 0) mag = 0;

target_speed = (float)mag;

}

else if (x < X_CENTER - CENTER_OFFSET)

{

long mag = map(x, X_CENTER - CENTER_OFFSET, X_MIN, 0, (long)MAX_SPEED);

if (mag < 0) mag = 0;

target_speed = -(float)mag;

}

else

{

// stick centered -> gentle coast to stop

inDeadband = true;

target_speed = 0;

}

}

else

{

target_speed = 0; // disabled -> gentle coast to stop

}


// Time-based smooth stop (deceleration) when not using joystick

unsigned long now = millis();

float dt = (now - last_update_ms) / 1000;

if (dt <= 0) { dt = 0.001; }

last_update_ms = now;


float diff = target_speed - current_speed; // Gap between target and current speed

bool reversing = (current_speed * target_speed) < 0; // Switch from '+' to '-' or '-' to '+'

bool speedingUp = ((diff > 0 && current_speed >= 0) || (diff < 0 && current_speed <= 0)); // If true - accelerate


float accel;

if (!runMotor || inDeadband) { accel = SMOOTH_DECEL; } // If stick centered or motor disabled - SMOOTH DECELERATE

else if (reversing || speedingUp) { accel = ACCEL_UP; } // If accelerating or reversing - ACCEL_UP

else { accel = ACCEL_DOWN; } // ACCEL_DOWN


float maxDelta = accel * dt; // Maximum allowed speed

if (diff > maxDelta) { current_speed += maxDelta; } // Increase speed

else if (diff < -maxDelta) { current_speed -= maxDelta; } // Decrease speed

else { current_speed = target_speed; }


// Avoid "drift", set near zero values to zero

if (current_speed > -0.5f && current_speed < 0.5f && target_speed > -0.5f && target_speed < 0.5f)

{

current_speed = 0;

}


// Drive motor at current speed

stepper.setSpeed(current_speed);

stepper.runSpeed();

}


 

Proizvodi u ovom članku

Povezani članci