Hopp til innhald
Nynorsk

Emne

Sensorer og aktuatorer

Fagstoff

Trinnmotor

Trinnmotorar (stegmotorar) roterer begge vegar og kan stoppe veldig presist på ein angitt stad. På engelsk blir denne typen moror kalla for stepper motor.

Beskriving

Trinnmotorar har eit unikt design som gjer at dei kan styrast svært nøyaktig utan nokre tilbakemeldingsmekanismar frå motoren.

Funksjonsmåte

Akselen i ein trinnmotor er kopla til ein rotor med magnetar. Dei kan vere magnetiske polar eller magnetar. Rotoren blir styrt av elektromagnetiske spolar i statoren som blir aktiverte i ei bestemd rekkefølge. Då blir det danna magnetfelt som trekker rotoren framover eller bakover i små, nøyaktige trinn (såkalla indeksar).

Rotasjonsretninga blir bestemd av rekkefølga spolane blir aktiverte i. Ved å endre på rekkefølga kan vi få motoren til å rotere anten med eller mot klokka.

Indeksering

Kor mange ulike stopp-posisjonar (indeksar) ein trinnmotor kan ha, varierer. Vanlegvis har trinnmotorar 200 stopp-posisjonar, og vi seier då at motoren har ei indeksering på 200. Med 200 stopp-posisjonar kan vi styre motoren med ei nøyaktigheit på av ein sirkel.

Det finst motorar og styringsmodular som kan ha inntil 1600 stopp-posisjonar per omdreiing. Då kan vi styre motoren i trinn på 0,225 gradar.

Unipolare og bipolare trinnmotorar

Det finst to typar trinnmotorar, unipolare og bipolare. Ein unipolar trinnmotor har éin magnetspole på kvart kontaktpunkt, mens ein bipolar trinnmotor har to spolar på kvart kontaktpunkt.

Det er veldig viktig at vi veit kva type trinnmotor vi jobbar med, for dei to motortypane må koplast opp med ulike IC-modular eller motorstyringsskjold.

Val av trinnmotor avheng av fleire forhold. For det første må vi ta omsyn til krava til dreiemoment og presisjon. I tillegg er kostnader og til systemet er vi må ta omsyn til.

Unipolare trinnmotorar kan passe til enklare der låg kostnad og enklare kretsløysingar er viktige. Bipolare trinnmotorar er betre eigna for applikasjonar som krev høgare presisjon og dreiemoment. Her kan det vere nødvendig med meir avansert elektronikk og kabling.

Bruksområde

Trinnmotorar har eit breitt bruksområde. Vi finn dei i 3D-printerar, på CNC-styrte maskiner, robotar, cd- og dvd-spelarar og på nesten alt elektronisk utstyr som treng kontrollerte, svært nøyaktige rørsler.

Kopling

Når vi koplar opp ein trinnmotor, treng vi vanlegvis ei ekstern straumforsyning som kan drive motoren. Desse motorane er kraftige og treng større straumstyrke enn det eit arduinokort kan levere. Vi må òg bruke ein IC-modul (dvs. ei styringsbrikke i koplinga) for å indeksere rørsla på motoren.

Både unipolare og bipolare motorar blir styrte med dei digitale pinnane 8, 9, 10 og 11. Forskjellen ligg i IC-modulen eller motorskjoldet vi må bruke for å kontrollere motoren. Bruker vi ein unipolar motor, kan vi til dømes kople ei L293D-brikke til Arduinoen, bruker vi ein bipolar motor, passar til dømes ein SN754410NE H-bridge.

Det finst òg spesialbygde skjold eller utvidingsmodular for å kontrollere trinnmotorar som kan koplast direkte på Arduinoen. Bruker vi slike skjold, treng vi ikkje nokon IC-modul på koplingsbrettet. I illustrasjonen under er Arduinoen kopla til ein unipolar trinnmotor gjennom IC-modulen L293D:

Koplingsskjema

Nedanfor ser du eit enkelt koplingsskjema for oppkopling av ein trinnmotor. Arduinoen er merkt med U1, IC-modulen er merkt med U2 og motoren er merkt med M1. IC-modulen er kopla til dei digitale utgangane D8 til D11. Kjenner du igjen symbolet for batteri?

Programmering

Programmering av ein trinnmotor krev at vi hentar inn eit førehandsdefinert bibliotek som styrer trinnmotoren. Dette biblioteket heiter "Stepper.h".

Vi kan bruke dei fleste programma på begge typar motorar. I dømeprogrammet under fortel vi Arduinoen at motoren har ei indeksering på 200 punkt.

Dømeprogrammet roterer ein trinnmotor med 11 o/min (omdreiingar i minuttet). Vi bestemmer farten ved å justere verdien setSpeed, som indikerer kor lang pause motoren skal ta mellom kvart trinn han beveger seg.

#include <Stepper.h>:

const int stepsPerRevolution = 200;

Stepper myStepper(stepsPerRevolution, 8, 9, 10, 11);

int stepCount = 0;

void setup() {}

void loop() {

int sensorReading = analogRead(A0);

int motorSpeed = map(sensorReading, 0, 1023, 0, 250);

if (motorSpeed > 0) {

myStepper.setSpeed(motorSpeed);

myStepper.step(stepsPerRevolution / 100);

}

}

Skrive av Roger Rosmo.
Sist oppdatert 15.04.2026