Hopp til innhold
Bokmål

Emne

Sensorer og aktuatorer

Fagstoff

Trinnmotor

Trinnmotorer (stegmotorer) roterer begge veier og kan stoppe veldig presist på et angitt sted. På engelsk kalles denne typen motor for stepper motor.

Beskrivelse

Trinnmotorer har en unik design som gjør at de kan styres svært nøyaktig uten noen tilbakemeldingsmekanismer fra motoren.

Funksjonsmåte

Akselen i en trinnmotor er kopla til en rotor med magneter. Det kan være magnetiske poler eller magneter. Rotoren styres av elektromagnetiske spoler i statoren som aktiveres i en bestemt rekkefølge. Da dannes det magnetfelt som trekker rotoren framover eller bakover i små, nøyaktige trinn (såkalte indekser).

Rotasjonsretninga bestemmes av rekkefølgen spolene aktiveres i. Ved å endre på rekkefølgen kan vi få motoren til å rotere enten med eller mot klokka.

Indeksering

Hvor mange ulike stopp-posisjoner (indekser) en trinnmotor kan ha, varierer. Vanligvis har trinnmotorer 200 stopp-posisjoner, og vi sier da at motoren har ei indeksering på 200. Med 200 stopp-posisjoner kan vi styre motoren med en nøyaktighet på av en sirkel.

Det fins motorer og styringsmoduler som kan ha inntil 1600 stopp-posisjoner per omdreining. Da kan vi styre motoren i trinn på 0,225 grader.

Unipolare og bipolare trinnmotorer

Det finnes to typer trinnmotorer, unipolare og bipolare. En unipolar trinnmotor har én magnetspole på hvert kontaktpunkt, mens en bipolar trinnmotor har to spoler på hvert kontaktpunkt.

Det er veldig viktig at vi vet hvilken type trinnmotor vi jobber med, for de to motortypene må koples opp med ulike IC-moduler eller motorstyringsskjold.

Valg av trinnmotor avhenger av flere forhold. For det første må vi ta hensyn til krava til dreiemoment og presisjon. I tillegg er kostnader og til systemet er vi må ta hensyn til.

Unipolare trinnmotorer kan passe til enklere der lav kostnad og enklere kretsløsninger er viktige. Bipolare trinnmotorer er bedre egna for applikasjoner som krever høyere presisjon og dreiemoment. Her kan det være nødvendig med mer avansert elektronikk og kabling.

Bruksområder

Trinnmotorer har et bredt bruksområde. Vi finner dem i 3D-printere, på CNC-styrte maskiner, roboter, cd- og dvd-spillere og på nesten alt elektronisk utstyr som trenger kontrollerte, svært nøyaktige bevegelser.

Kopling

Når vi kopler opp en trinnmotor, trenger vi vanligvis ei ekstern strømforsyning som kan drive motoren. Disse motorene er kraftige og trenger større strømstyrke enn hva et arduinokort kan levere. Vi må også bruke en IC-modul (dvs. ei styringsbrikke i koplinga) for å indeksere bevegelsen på motoren.

Både unipolare og bipolare motorer styres med de digitale pinnene 8, 9, 10 og 11. Forskjellen ligger i IC-modulen eller motorskjoldet vi må bruke for å kontrollere motoren. Bruker vi en unipolar motor, kan vi for eksempel kople ei L293D-brikke til Arduinoen, bruker vi en bipolar motor, passer for eksempel en SN754410NE H-Bridge.

Det fins også spesialbygde skjold eller utvidelsesmoduler for å kontrollere trinnmotorer som kan koples direkte på Arduinoen. Bruker vi slike skjold, trenger vi ikke noen IC-modul på koplingsbrettet. I illustrasjonen under er Arduinoen kopla til en unipolar trinnmotor gjennom IC-modulen L293D:

Koplingsskjema

Nedenfor ser du et enkelt koplingsskjema for oppkopling av en trinnmotor. Arduinoen er merka med U1, IC-modulen er merka med U2 og motoren er merka med M1. IC-modulen er kopla til de digitale utgangene D8 til D11. Kjenner du igjen symbolet for batteri?

Programmering

Programmering av en trinnmotor krever at vi henter inn et forhåndsdefinert bibliotek som styrer trinnmotoren. Dette biblioteket heter "Stepper.h".

Vi kan bruke de fleste programmer på begge typer motorer. I eksempelprogrammet under forteller vi Arduinoen at motoren har ei indeksering på 200 punkter.

Eksempelprogrammet roterer en trinnmotor med 11 o/min (omdreininger i minuttet). Vi bestemmer hastigheten ved å justere verdien setSpeed, som indikerer hvor lang pause motoren skal ta mellom hvert trinn den 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);

}

}

Skrevet av Roger Rosmo.
Sist oppdatert 15.04.2026