Servostyrning: En Komplett Guide
Viktiga lärdomar:
Definiering av Servostyrning: Servostyrning tillåter exakt manipulering av motorposition, hastighet och acceleration genom elektroniska signaler.
Feedback-mekanism: Feedback-systemet, ofta en potentiometer eller encoder, säkerställer att motorns utdata matchar styrindata exakt.
PWM-signal: Pulsskiftmodulation (PWM) är viktig för att ställa in servons position genom att variera elektriska pulsers varaktighet.
Arduino och Servomotorer: Att använda en Arduino-platta är ett populärt och effektivt sätt att programmera och styra servomotorer med minimal hårdvaruinstallation.
Tillämpningar av Servomotorer: Servomotorer är nödvändiga för projekt som kräver exakt positionsstyrning, såsom robotteknik och automatiserade system.
En servomotor är en motor designad för hög precision och noggrannhet i rotation. Den skiljer sig från en typisk DC-motor genom sin förmåga att hålla en specifik position snarare än att rotera kontinuerligt. Denna egenskap gör servomotorer ideala för robotteknik, automation och hobbyprojekt.
Denna artikel förklarar hur servostyrning fungerar, de olika typerna av servomotorer och olika styrmetoder och enheter. Den ger också exempel på tillämpningar och projekt med servomotorer.
Vad är en Servomotor?
En servomotor definieras som en aktuator som tillåter exakt styrning av position (vinkel), hastighet och acceleration. En typisk servomotor består av tre huvudkomponenter: en DC-motor, en styrkrets och en feedback-enhet.
DC-motorn drivs servon och ansluts till växlar som minskar hastigheten och ökar momentet på utgångsväxeln.

Utgångsväxeln är den del av servon som roterar och rör lasten.
Styrkretsen är ansvarig för att ta emot och bearbeta indatatecken från en extern styrare. Dessa tecken anger vilken position, hastighet eller riktning servon ska röra sig till. Styrkretsen skickar också ström till DC-motorn för att driva den.
Feedback-enheten är vanligtvis en potentiometer eller en encoder som mäter den aktuella positionen för utgångsväxeln.

Feedback-enheten vidarebefordrar positionsdata tillbaka till styrkretsen, som sedan justerar DC-motorns ström för att justera den faktiska positionen till den önskade positionen från indatatecknet.
Feedback-loopen mellan styrkretsen och feedback-enheten säkerställer att servon kan flytta sig till och bibehålla valfri position inom dess rörelseområde.
Hur styr man en Servomotor?
Servomotorer styr genom att skicka en PWM (pulsskiftmodulation) signal till signalledningen på servon. PWM är en teknik som växlar en signal på och av snabbt för att skapa pulser av varierande bredd. Bredden på pulserna bestämmer utgångsväxlens position.
Till exempel, när du skickar en PWM-signal med en pulsbredd på 1,5 millisekunder (ms), kommer servon att flytta till neutralpositionen (90 grader).

När du skickar en PWM-signal med en pulsbredd på 1 ms, kommer servon att flytta till minimipositionen (0 grader). När du skickar en PWM-signal med en pulsbredd på 2 ms, kommer servon att flytta till maximipositionen (180 grader).
PWM-signalen har en frekvens på 50 Hz, vilket betyder att den upprepas var 20 ms. Pulsbredden kan variera från 1 ms till 2 ms inom denna period.
Det finns många sätt att generera och skicka PWM-signaler till servomotorer. Några av de vanligaste metoderna är:
Använda en Arduino-platta eller annan mikrokontroller
Använda en potentiometer eller annan analog sensor
Använda en joystick eller annan digital ingångsenhet
Använda en dedikerad servostyrare eller drivrutin
I följande avsnitt kommer vi att utforska var och en av dessa metoder i detalj och se några exempel på hur de fungerar.
Styrning av en Servomotor med Arduino
Arduino är en av de mest populära plattformarna för att styra servomotorer. Arduino-plattor har inbyggda PWM-utgångar som kan användas för att skicka signaler till servon. Arduino har också en Servo-bibliotek som gör det enkelt att skriva kod för servostyrning.
För att styra en servomotor med Arduino behöver du:
En Arduino-platta (t.ex. Arduino UNO)
En standard servomotor (t.ex. SG90)
Springkontakter
Ett brödplatta (valfritt)
Den röda ledningen från servon ansluter till 5V på Arduino-plattan. Den svarta ledningen från servon ansluter till GND på Arduino-plattan. Den vita ledningen från servon ansluter till pin 9 på Arduino-plattan.
För att programmera Arduino-plattan behöver du använda Arduino IDE (online eller offline). Du kan använda ett av exemplen från Servo-biblioteket eller skriva din egen kod.
Följande kod visar hur du sveper en servomotor fram och tillbaka över 180 grader med hjälp av en for-loop:
#include <Servo.h> // Inkludera Servo-biblioteket
Servo myservo; // Skapa Servo-objekt
int pos = 0; // Variabel för position
void setup() {
myservo.attach(9); // Anslut Servo-objekt till pin 9
}
void loop() {
for (pos = 0; pos <= 180; pos += 1) { // Loop från 0 till 180 grader
myservo.write(pos); // Skriv position till Servo-objekt
delay(15); // Vänta 15 ms
}
for (pos = 180; pos >= 0; pos -= 1) { // Loop från 180 till 0 grader
myservo.write(pos); // Skriv position till Servo-objekt
delay(15); // Vänta 15 ms
}
}
Denna kod använder två loopar för att öka och minska positionvariabeln från 0 till 180 grader och vice versa. Den skriver sedan detta värde till Servo-objektet med myservo.write(pos). Den lägger också till en fördröjning på 15 ms mellan varje steg för att sakta ner rörelsen.
Ladda upp denna kod till din Arduino-platta med hjälp av IDE:s Ladda upp-knapp, och titta på hur din servomotor sveper fram och tillbaka smidigt.
Styrning av en Servomotor med Potentiometer
Ett potentiometer är en analog sensor som kan variera sin resistans beroende på hur mycket du vrider dess knapp. Du kan använda ett potentiometer som inmatningsenhet för att styra en servomotor.
För att styra en servomotor med ett potentiometer behöver du:
En Arduino-platta (t.ex. Arduino UNO)
En standard servomotor (t.ex. SG90)
Ett potentiometer (10k Ohm)
Springkontakter
Ett brödplatta
Ledningsdiagrammet för att ansluta ett potentiometer och en servomotor till en Arduino-platta visas nedan:
Den röda ledningen från potentiometern ansluter till 5V på Arduino-plattan. Den svarta ledningen från potentiometern ansluter till GND på Arduino-plattan. Den gröna ledningen från potentiometern ansluter till pin A0 på Arduino-plattan.
Den röda ledningen från servon ansluter till 5V på en annan rad på brödplattan. Den svarta ledningen från servon ansluter till GND på en annan rad på brödplattan. Den vita ledningen från servon ansluter till pin D9 på en annan rad på brödplattan.
För att programmera din Arduino-platta behöver du använda samma kod som i det föregående exemplet men ändra några rader:
#include <Servo.h> // Inkludera Servo-biblioteket
Servo myservo; // Skapa Servo-objekt
int potpin = A0; // Pin ansluten till potentiometer
int val = 0; // Variabel för att läsa potentiometer-värde
void setup() {
myservo.attach(9); // Anslut Servo-objekt till pin D9
}
void loop() {
val = analogRead(potpin); // Läs värde från potentiometer (0 -1023)
val = map(val,0,1023,0,180); // Mappa värdebereiche (0 -180)
myservo.write(val); // Skriv mappat värde till Servo-objekt
delay(15); // Vänta 15 ms
}
Denna kod använder funktionen analogRead(potpin) för att läsa värdet från potentiometern ansluten till pin A0. Den använder sedan funktionen map(val,0,1023,0,180) för att mappa värdebereiche från 0 -1023 till 0 -180 grader. Den skriver sedan det mappade värdet till Servo-objektet med myservo.write(val) funktion. Den lägger också till en fördröjning, precis som i det föregående exemplet.
Du kan ladda upp denna kod till din Arduino-platta med hjälp av Ladda upp-knappen i IDE. Du bör se din servomotor röra sig enligt potentiometers knapps position.
Styrning av en Servomotor med Joystick
En joystick är en digital inmatningsenhet som kan upptäcka riktning och magnitud av rörelse längs två axlar. Du kan använda en joystick för att styra en servomotor genom att mappa joystickens x-axel till servons vinkel.
För att styra en servomotor med en joystick behöver du följande:
En Arduino-platta (t.ex. Arduino UNO)
En standard servomotor (t.ex. SG90)
En joystick-modul (t.ex. KY-023)
Springkontakter
Ett brödplatta
Ledningsdiagrammet för att ansluta en joystick-modul och en servomotor till en Arduino-platta visas nedan:
!https://www.makerguides.com/wp-content/uploads/2019/01/Servo-motor-control-with-Arduino-and-joystick-wiring-diagram.png
Den röda ledningen från joystick-modulen ansluter till 5V på Arduino-plattan. Den svarta ledningen från joystick-modulen ansluter till GND på Arduino-plattan. Den gröna ledningen från joystick-modulen ansluter till pin A0 på Arduino-plattan.
Den röda ledningen från servon ansluter till 5V på en annan rad på brödplattan. Den svarta ledningen från servon ansluter till GND på en annan rad på brödplattan. Den vita ledningen från servon ansluter till pin D9 på en annan rad på brödplattan.
För att programmera din Arduino-platta behöver du använda samma kod som i det föregående exemplet men ändra några rader:
#include <Servo.h> // Inkludera Servo-biblioteket
Servo myservo; // Skapa Servo-objekt
int joyX = A0; // Pin ansluten till joystick x-axel
int val = 0; // Variabel för att läsa joystick-värde
void setup() {
myservo.attach(9); // Anslut Servo-objekt till pin 9
}
void loop() {
val = analogRead(joyX); // Läs värde från joystick x-axel (0 - 1023)
val = map(val, 0, 1023, 0, 180); // Mappa värdebereiche (0 - 180)
myservo.write(val); // Skriv mappat värde till Servo-objekt
delay(15); // Vänta 15 ms
}