Servomotorstyring: En fullstendig guide
Hovedlærdommer:
Definisjon av servomotorstyring: Servomotorstyring tillater nøyaktig manipulering av motorens posisjon, hastighet og akselerasjon gjennom elektroniske signaler.
Tilbakemeldingsmekanisme: Tilbakemeldingssystemet, ofte en potensiometer eller enkoder, sikrer at motorens utdata stemmer nøyaktig overens med kontrollinndata.
PWM-signal: Pulsbredde-modulasjon (PWM) er viktig for å sette servos posisjon ved å variere varigheten av elektriske pulser.
Arduino og servomotorer: Bruk av en Arduino-brett er en populær og effektiv måte å programmere og styre servomotorer med minimalt hardwaresett.
Anvendelser av servomotorer: Servomotorer er nødvendige for prosjekter som krever nøyaktig posisjonskontroll, som robotikk og automatiserte systemer.
En servomotor er en motor designet for høy presisjon og nøyaktighet i rotasjon. Den skiller seg fra en typisk DC-motor ved sin evne til å holde en spesifikk posisjon snarere enn å rotere kontinuerlig. Dette trekket gjør servomotorer ideelle for robotikk, automatisering og hobbyprosjekter.
Denne artikkelen forklarer hvordan servomotorstyring fungerer, de ulike typene servomotorer, og ulike kontrollmetoder og enheter. Den gir også eksempler på anvendelser og prosjekter med servomotorer.
Hva er en servomotor?
En servomotor defineres som en aktuator som tillater nøyaktig kontroll av posisjon (vinkel), hastighet og akselerasjon. En typisk servomotor består av tre hovedkomponenter: en DC-motor, en styringskrets og en tilbakemeldingsenhet.
DC-motoren gir servoen kraft og kobles til girer som reduserer hastighet og øker dreiemoment på utgangsaksen.

Utgangsaksen er delen av servoen som roterer og beveger lasten.
Styringskretsen er ansvarlig for å motta og behandle inngangssignaler fra en ekstern kontroller. Disse signalene forteller servoen hvilken posisjon, hastighet eller retning den skal bevege seg til. Styringskretsen sender også strøm til DC-motoren for å drive den.
Tilbakemeldingsenheten er vanligvis en potensiometer eller en enkoder som måler den nåværende posisjonen til utgangsaksen.

Tilbakemeldingsenheten sender posisjonsdata tilbake til styringskretsen, som deretter justerer DC-motorens strøm for å justere den faktiske posisjonen i henhold til ønsket posisjon fra inngangssignalet.
Tilbakemeldingsløkka mellom styringskretsen og tilbakemeldingsenheten sikrer at servoen kan nøyaktig bevege seg til og opprettholde enhver posisjon innenfor dens bevegelsesområde.
Hvordan styrer man en servomotor?
Servomotorer styres ved å sende et PWM (pulsbredde-modulasjon)-signal til signallinjen til servoen. PWM er en teknikk som skifter et signal raskt av og på for å lage pulser med ulik bredde. Bredden på pulsene bestemmer posisjonen til utgangsaksen.
For eksempel, når du sender et PWM-signal med en pulsbredde på 1,5 millisekunder (ms), vil servoen bevege seg til den neutrale posisjonen (90 grader).

Når du sender et PWM-signal med en pulsbredde på 1 ms, vil servoen bevege seg til den minste posisjonen (0 grader). Når du sender et PWM-signal med en pulsbredde på 2 ms, vil servoen bevege seg til den største posisjonen (180 grader).
PWM-signalet har en frekvens på 50 Hz, noe som betyr at det repeterer hvert 20 ms. Pulsbredden kan variere fra 1 ms til 2 ms innenfor denne perioden.
Det finnes mange måter å generere og sende PWM-signaler til servomotorer. Noen av de mest vanlige metodene er:
Bruk av et Arduino-brett eller en annen mikrokontroller
Bruk av en potensiometer eller en annen analog sensor
Bruk av en joystick eller en annen digital inndataenhet
Bruk av en dedikert servokontroller eller driver
I de følgende seksjonene vil vi utforske hver av disse metodene i detalj og se noen eksempler på hvordan de fungerer.
Kontroll av en servomotor med Arduino
Arduino er en av de mest populære plattformene for å styre servomotorer. Arduino-brett har innebygde PWM-utdata som kan brukes til å sende signaler til servohjelper. Arduino har også en Servo-bibliotek som gjør det enkelt å skrive kode for servo-kontroll.
For å styre en servomotor med Arduino, trenger du:
Et Arduino-brett (som Arduino UNO)
En standard servomotor (som SG90)
Jumper-tråder
Et brødskivebrett (valgfritt)
Den røde tråden fra servoen kobles til 5V på Arduino-brettet. Den svarte tråden fra servoen kobles til GND på Arduino-brettet. Den hvite tråden fra servoen kobles til pin 9 på Arduino-brettet.
For å programmer Arduino-brettet, trenger du å bruke Arduino IDE (online eller offline). Du kan bruke ett av eksemplene fra Servo-biblioteket eller skrive din egen kode.
Følgende kode viser hvordan du sveiper en servomotor frem og tilbake over 180 grader ved hjelp av en for-løkke:
#include <Servo.h> // Inkluder Servo-bibliotek
Servo myservo; // Opprett Servo-objekt
int pos = 0; // Variabel for posisjon
void setup() {
myservo.attach(9); // Koble Servo-objekt til pin 9
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // Løkke fra 0 til 180 grader
myservo.write(pos); // Skriv posisjon til Servo-objekt
delay(15); // Vent 15 ms
}
for (pos = 180; pos >= 0; pos -= 1) { // Løkke fra 180 til 0 grader
myservo.write(pos); // Skriv posisjon til Servo-objekt
delay(15); // Vent 15 ms
}
}
Denne koden bruker to løkker for å inkrementere og dekrementere posisjonsvariabelen fra 0 til 180 grader og motsatt. Den skriver så denne verdien til Servo-objektet ved hjelp av myservo.write(pos). Det legger også til en forsinkelse på 15 ms mellom hvert steg for å sakte ned bevegelsen.
Last opp denne koden til ditt Arduino-brett ved hjelp av IDEs Last opp-knapp, og se hvordan din servomotor sveiper frem og tilbake jevnt.
Kontroll av en servomotor med potensiometer
Et potensiometer er en analog sensor som kan variere sin motstand avhengig av hvor mye du dreier dens knapp. Du kan bruke et potensiometer som en inndataenhet for å styre en servomotor.
For å styre en servomotor med et potensiometer, trenger du:
Et Arduino-brett (som Arduino UNO)
En standard servomotor (som SG90)
Et potensiometer (10k Ohm)
Jumper-tråder
Et brødskivebrett
Oppkoblingsskjemaet for å koble et potensiometer og en servomotor til et Arduino-brett vises nedenfor:
Den røde tråden fra potensiometeret kobles til 5V på Arduino-brettet. Den svarte tråden fra potensiometeret kobles til GND på Arduino-brettet. Den grønne tråden fra potensiometeret kobles til pin A0 på Arduino-brettet.
Den røde tråden fra servoen kobles til 5V på en annen rad på brødskivebrettet. Den svarte tråden fra servoen kobles til GND på en annen rad på brødskivebrettet. Den hvite tråden fra servoen kobles til pin D9 på en annen rad på brødskivebrettet.
For å programmere ditt Arduino-brett, trenger du å bruke samme kode som i det forrige eksemplet, men endre noen linjer:
#include <Servo.h> // Inkluder Servo-bibliotek
Servo myservo; // Opprett Servo-objekt
int potpin = A0; // Pin koblet til potensiometer
int val = 0; // Variabel for å lese potensiometer-verdi
void setup() {
myservo.attach(9); // Koble Servo-objekt til pin D9
}
void loop() {
val = analogRead(potpin); // Les verdi fra potensiometer (0 -1023)
val = map(val,0,1023,0,180); // Kartlegge verdiområde (0 -180)
myservo.write(val); // Skriv kartlagt verdi til Servo-objekt
delay(15); // Vent 15 ms
}
Denne koden bruker funksjonen analogRead(potpin) for å lese verdien fra potensiometeret koblet til pin A0. Den bruker deretter funksjonen map(val,0,1023,0,180) for å kartlegge verdiområdet fra 0 -1023 grader. Den skriver deretter den kartlagte verdien til Servo-objektet ved hjelp av funksjonen myservo.write(val). Den legger også til en forsinkelse, som i det forrige eksemplet.
Du kan laste opp denne koden til ditt Arduino-brett ved hjelp av Last opp-knappen i IDE. Du burde se at din servomotor beveger seg i henhold til potensiometerets knapp-posisjon.
Kontroll av en servomotor med joystick
En joystick er en digital inndataenhet som kan oppdage retningen og størrelsen på bevegelsen langs to akser. Du kan bruke en joystick til å styre en servomotor ved å kartlegge x-aksen av joysticken til vinkelen til servoen.
For å styre en servomotor med en joystick, trenger du følgende:
Et Arduino-brett (som Arduino UNO)
En standard servomotor (som SG90)
En joystick-modul (som KY-023)
Jumper-tråder
Et brødskivebrett
Oppkoblingsskjemaet for å koble en joystick-modul og en servomotor til et Arduino-brett vises nedenfor:
!https://www.makerguides.com/wp-content/uploads/2019/01/Servo-motor-control-with-Arduino-and-joystick-wiring-diagram.png
Den røde tråden fra joystick-modulen kobles til 5V på Arduino-brettet. Den svarte tråden fra joystick-modulen kobles til GND på Arduino-brettet. Den grønne tråden fra joystick-modulen kobles til pin A0 på Arduino-brettet.
Den røde tråden fra servoen kobles til 5V på en annen rad på brødskivebrettet. Den svarte tråden fra servoen kobles til GND på en annen rad på brødskivebrettet. Den hvite tråden fra servoen kobles til pin D9 på en annen rad på brødskivebrettet.
For å programmere ditt Arduino-brett, trenger du å bruke samme kode som i det forrige eksemplet, men endre noen linjer:
#include <Servo.h> // Inkluder Servo-bibliotek
Servo myservo; // Opprett Servo-objekt
int joyX = A0; // Pin koblet til joystick x-akse
int val = 0; // Variabel for å lese joystick-verdi
void setup() {
myservo.attach(9); // Koble Servo-objekt til pin 9
}
void loop() {
val = analogRead(joyX); // Les verdi fra joystick x-akse (0 - 1023)
val = map(val, 0, 1023, 0, 180); // Kartlegge verdiområde (0 - 180)
myservo.write(val); // Skriv kartlagt verdi til Servo-objekt