Servomotorstyring: En komplet guide
Vigtige lærestof:
Defineret Servomotorstyring: Servomotorstyring gør det muligt at præcist manipulere motorposition, hastighed og acceleration gennem elektroniske signaler.
Feedback-mekanisme: Feedback-systemet, ofte en potentiometer eller encoder, sikrer, at motorens output præcist matcher styringsinputtet.
PWM-signal: Pulsbredde-modulering (PWM) er afgørende for at sætte servos position ved at variere varigheden af de elektriske pulser.
Arduino og servomotorer: Brug af et Arduino-kort er en populær og effektiv måde at programmere og styre servomotorer med minimal hardwareopsætning.
Anvendelser af servomotorer: Servomotorer er afgørende for projekter, der kræver præcis positionskontrol, som robotteknik og automatiserede systemer.
En servomotor er en motor, der er designet til høj præcision og nøjagtighed i rotation. Den adskiller sig fra en typisk DC-motor ved sin evne til at holde en specifik position snarere end at rotere kontinuerligt. Dette gør servomotorer ideelle til robotteknik, automatisering og hobbyprojekter.
Denne artikel forklarer, hvordan servomotorstyring fungerer, de forskellige typer servomotorer, og diverse styringsmetoder og -enheder. Den giver også eksempler på anvendelser og projekter med servomotorer.
Hvad er en servomotor?
En servomotor defineres som en aktuator, der tillader præcis kontrol af position (vinkel), hastighed og acceleration. En typisk servomotor består af tre hovedkomponenter: en DC-motor, en styringskredsløb og en feedback-enhed.
DC-motoren drevet servoen og forbinder til tander, der reducerer hastighed og øger drejningsmomentet på udmeldingen.

Udmeldingen er den del af servoen, der roterer og bevæger lasten.
Styringskredsløbet er ansvarlig for at modtage og behandle inputsignalene fra en ekstern styring. Disse signaler fortæller servoen, hvilken position, hastighed eller retning den skal bevæge sig i. Styringskredsløbet sender også strøm til DC-motoren for at drikke den.
Feedback-enheten er normalt en potentiometer eller en encoder, der måler den aktuelle position af udmeldingen.

Feedback-enheten videregiver positionsdata tilbage til styringskredsløbet, som derefter justerer DC-motorens strøm for at justere den faktiske position med den ønskede position fra inputsignal.
Feedback-løkken mellem styringskredsløbet og feedback-enheten sikrer, at servoen kan præcist flytte sig til og opretholde enhver position inden for dens bevægelsesområde.
Hvordan styrer man en servomotor?
Servomotorer styres ved at sende et PWM (pulsbredde-modulering)-signal til signalledningen af servoen. PWM er en teknik, der skifter et signal hurtigt til og fra for at oprette pulser med varierende bredde. Pulsernes bredde bestemmer udmeldingens position.
For eksempel, når du sender et PWM-signal med en pulsvidde på 1,5 millisekunder (ms), vil servoen bevæge sig til den neutrale position (90 grader).

Når du sender et PWM-signal med en pulsvidde på 1 ms, vil servoen bevæge sig til den mindste position (0 grader). Når du sender et PWM-signal med en pulsvidde på 2 ms, vil servoen bevæge sig til den maksimale position (180 grader).
PWM-signalet har en frekvens på 50 Hz, hvilket betyder, at det gentager sig hvert 20 ms. Pulsbredde kan variere fra 1 ms til 2 ms inden for denne periode.
Der findes mange måder at generere og sende PWM-signaler til servomotorer. Nogle af de mest almindelige metoder er:
Brug af et Arduino-kort eller en anden mikrocontroller
Brug af en potentiometer eller en anden analog sensor
Brug af en joystick eller en anden digital input-enhed
Brug af en dedikeret servo-styring eller driver
I de følgende afsnit vil vi udforske hver af disse metoder i detaljer og se nogle eksempler på, hvordan de fungerer.
Kontrol af en servomotor med Arduino
Arduino er en af de mest populære platforme til kontrol af servomotorer. Arduino-kort har indbyggede PWM-udgange, der kan bruges til at sende signaler til servomotorer. Arduino har også en Servo-bibliotek, der gør det nemt at skrive kode til servo-kontrol.
For at kontrollere en servomotor med Arduino, har du brug for:
Et Arduino-kort (som Arduino UNO)
En standard servomotor (som SG90)
Jumper-ledninger
En breadboard (valgfri)
Den røde ledning fra servoen forbinder til 5V på Arduino-kortet. Den sorte ledning fra servoen forbinder til GND på Arduino-kortet. Den hvide ledning fra servoen forbinder til pin 9 på Arduino-kortet.
For at programmere Arduino-kortet, har du brug for at bruge Arduino IDE (online eller offline). Du kan bruge et af eksemplerne fra Servo-biblioteket eller skrive din egen kode.
Følgende kode viser, hvordan man svinger en servomotor frem og tilbage over 180 grader ved hjælp af en for-loop:
#include <Servo.h> // Inkluder Servo-bibliotek
Servo myservo; // Opret Servo-objekt
int pos = 0; // Variabel for position
void setup() {
myservo.attach(9); // Tilslut Servo-objekt til pin 9
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // Loop fra 0 til 180 grader
myservo.write(pos); // Skriv position til Servo-objekt
delay(15); // Vent 15 ms
}
for (pos = 180; pos >= 0; pos -= 1) { // Loop fra 180 til 0 grader
myservo.write(pos); // Skriv position til Servo-objekt
delay(15); // Vent 15 ms
}
}
Denne kode bruger to loops til at inkrementere og dekrementere position-variablen fra 0 til 180 grader og vice versa. Den skriver derefter dette værdi til Servo-objektet ved hjælp af myservo.write(pos). Den tilføjer også en forsinkelse på 15 ms mellem hvert trin for at sænke hastigheden.
Upload denne kode til dit Arduino-kort ved hjælp af IDE's Upload-knap, og se, hvordan din servomotor svinger glat frem og tilbage.
Kontrol af en servomotor med potentiometer
Et potentiometer er en analog sensor, der kan variere sin resistans afhængigt af, hvor meget du drejer dens knap. Du kan bruge et potentiometer som en input-enhed til kontrol af en servomotor.
For at kontrollere en servomotor med et potentiometer, har du brug for:
Et Arduino-kort (som Arduino UNO)
En standard servomotor (som SG90)
Et potentiometer (10k Ohm)
Jumper-ledninger
En breadboard
Opstillingsdiagrammet for at forbinde et potentiometer og en servomotor til et Arduino-kort vises nedenfor:
Den røde ledning fra potentiometeret forbinder til 5V på Arduino-kortet. Den sorte ledning fra potentiometeret forbinder til GND på Arduino-kortet. Den grønne ledning fra potentiometeret forbinder til pin A0 på Arduino-kortet.
Den røde ledning fra servoen forbinder til 5V på en anden række på breadboardet. Den sorte ledning fra servoen forbinder GND på en anden række på breadboardet. Den hvide ledning fra servoen forbinder pin D9 på en anden række på breadboardet.
For at programmere dit Arduino-kort, har du brug for at bruge samme kode som i det foregående eksempel, men ændre nogle linjer:
#include <Servo.h> // Inkluder Servo-bibliotek
Servo myservo; // Opret Servo-objekt
int potpin = A0; // Pin forbundet til potentiometer
int val = 0; // Variabel for at læse potentiometer-værdi
void setup() {
myservo.attach(9); // Tilslut Servo-objekt til pin D9
}
void loop() {
val = analogRead(potpin); // Læs værdi fra potentiometer (0 -1023)
val = map(val,0,1023,0,180); // Map værdi-intervall (0 -180)
myservo.write(val); // Skriv mappet værdi til Servo-objekt
delay(15); // Vent 15 ms
}
Denne kode bruger funktionen analogRead(potpin) til at læse værdien fra potentiometeret, der er forbundet til pin A0. Den bruger derefter funktionen map(val,0,1023,0,180) til at mappe værdi-intervallet fra 0 -1023 til 0 -180 grader. Den skriver derefter den mappede værdi til Servo-objektet ved hjælp af myservo.write(val) funktion. Den tilføjer også en forsinkelse, som i det foregående eksempel.
Du kan uploade denne kode til dit Arduino-kort ved hjælp af Upload-knappen i IDE. Du bør se, hvordan din servomotor bevæger sig i henhold til pindens position på potentiometeret.
Kontrol af en servomotor med joystick
En joystick er en digital input-enhed, der kan registrere retningen og størrelsen af bevægelsen langs to akser. Du kan bruge en joystick til at kontrollere en servomotor ved at mappe x-aksen på joystick til vinklen på servoen.
For at kontrollere en servomotor med en joystick, har du brug for følgende:
Et Arduino-kort (som Arduino UNO)
En standard servomotor (som SG90)
En joystick-module (som KY-023)
Jumper-ledninger
En breadboard
Opstillingsdiagrammet for at forbinde en joystick-module og en servomotor til et Arduino-kort vises nedenfor:
!https://www.makerguides.com/wp-content/uploads/2019/01/Servo-motor-control-with-Arduino-and-joystick-wiring-diagram.png
Den røde ledning fra joystick-modulet forbinder til 5V på Arduino-kortet. Den sorte ledning fra joystick-modulet forbinder til GND på Arduino-kortet. Den grønne ledning fra joystick-modulet forbinder til pin A0 på Arduino-kortet.
Den røde ledning fra servoen forbinder til 5V på en anden række på breadboardet. Den sorte ledning fra servoen forbinder GND på en anden række på breadboardet. Den hvide ledning fra servoen forbinder til pin D9 på en anden række på breadboardet.
For at programmere dit Arduino-kort, har du brug for at bruge samme kode som i det foregående eksempel, men ændre nogle linjer:
#include <Servo.h> // Inkluder Servo-bibliotek
Servo myservo; // Opret Servo-objekt
int joyX = A0; // Pin forbundet til joystick x-aksen
int val = 0; // Variabel for at læse joystick-værdi
void setup() {
myservo.attach(9); // Tilslut Servo-objekt til pin 9
}
void loop() {
val = analogRead(joyX); // Læs værdi fra joystick x-aksen (0 - 1023)
val = map(val, 0, 1023, 0, 180); // Map værdi-intervall (0 - 180)
myservo.write(val); // Skriv mappet værdi til Servo-objekt
delay(15); // Vent 15 ms
}