Component · Actuator

SG90-servomotor

De SG90 is de 9-gram servo achter de meeste robotgewrichten en besturingen voor beginners. Hoe een servo hoek vasthoudt, wat hij tilt en hoe je hem aanstuurt.

Wat het is

De SG90 is een microservo: een zelfstandige kleine actuator. Een servo stuurt hem naar een ingestelde hoek en houdt die hoek vast; geef hem “90 graden”, dan draait hij naar 90 graden en houdt die stand ook vast wanneer je hem wegduwt. Daarmee is hij de natuurlijke keuze voor alles dat naar een bekende positie moet bewegen: een robotarmgewricht, een grijper die opent en sluit, een pan-tiltmontage voor een camera of de besturing van een kleine rover.

Met negen gram en een paar euro is dit de servo waarmee vrijwel iedereen begint. Hij is niet sterk of nauwkeurig genoeg voor serieus werk, maar wel de snelste manier om te begrijpen hoe positieregeling in de praktijk werkt.

Servobesturingsdiagram: een 50 Hz PWM-signaal waarvan de pulsbreedte de servohoek bepaalt. Een puls van 1 milliseconde geeft 0 graden aan, 1,5 milliseconde geeft 90 graden aan en 2 milliseconden geven 180 graden aan, weergegeven op gradenbogen.
Een servo leest de pulsbreedte, niet de spanning: 1 ms is 0°, 1,5 ms is het midden en 2 ms is de volle slag — dit patroon wordt 50 keer per seconde herhaald. SVG downloaden

Hoe het werkt

Open er een en je vindt vier dingen: een kleine gelijkstroommotor, een tandwieloverbrenging die snelheid inruilt voor koppel, een potentiometer die op de uitgangsas is aangedreven en een besturingscircuit. De potentiometer is de truc—hij meldt voortdurend de werkelijke hoek van de as. Het circuit vergelijkt die gemeten hoek met de hoek die je opgeeft en stuurt de motor aan in de richting die het verschil verkleint. Het is een volledige terugkoppellus in het klein, en juist daarom kan de robotarm met inverse kinematica erop vertrouwen dat een servo de gewenste doelstand bereikt.

Je geeft de hoek op met een 50 Hz PWM-signaal, en de pulsbreedte draagt de boodschap: ongeveer 1 ms voor het ene uiteinde van de slag, 1,5 ms voor het midden en 2 ms voor het andere uiteinde. Dit is PWM als positiecode in plaats van snelheidscode. In de praktijk verbergt de Servo-bibliotheek van Arduino de timing en schrijf je alleen een hoek.

Wanneer je hem gebruikt

Gebruik een SG90 wanneer een robotonderdeel naar een specifieke hoek moet bewegen en die vasthouden bij lichte belasting: vingers van een grijper, kleine armgewrichten, sensorgimbals of de besturingsmechaniek van een licht autootje. Het bereik van ongeveer 180° en de directe besturing “ga naar deze hoek” zijn ideaal om kinematica te leren en expressieve mechanismen te bouwen.

Kies iets anders wanneer het gewricht echt gewicht draagt (gebruik een servo met metalen tandwielen of een servo van standaardformaat), wanneer je continue rotatie voor een wiel nodig hebt (gebruik een gelijkstroommotor met een L298N of een servomotor met continue rotatie), of wanneer je veel graden nauwkeurige beweging met veel koppel nodig hebt (gebruik een stappenmotor).

Aansluiting en aandachtspunten

  • Voed hem apart. Een vastgelopen SG90 kan 500–700 mA vragen—veel meer dan een microcontrollerpin aan 5 V kan leveren. Gebruik een aparte voeding van 5 V en verbind de ground ervan met de ground van het bord; anders zakt de spanning en herstart het bord.
  • Hij draait niet continu. Een gewone SG90 heeft een bereik van ongeveer 180° en stopt. “Draai voor altijd” commanderen doet niets; voor een aandrijfwiel heb je een andere actuator nodig.
  • Forceer of laat hem niet vastlopen. Nylon tandwielen slijten onder overbelasting of een scherpe klap. Houd de belasting licht, of stap over op metalen tandwielen.
  • Verwacht wat wiebelen. Goedkope servo’s trillen licht rond de streefhoek. Een stabiele, schone voeding en het onderbreken van het signaal wanneer het gewricht niet vastgehouden hoeft te worden, verminderen dat.

Aansluiting

Drie draden, en de kleuren zijn op hobbyservo’s vrijwel universeel:

Draad Kleur (SG90) Wat het is
1 Bruin Ground
2 Rood Voeding, 4,8–6 V
3 Oranje Signaal — de 50 Hz PWM

Sommige servo’s gebruiken zwart/rood/wit of zwart/rood/geel. De regel die altijd geldt: de rode draad is de middelste van de drie, en de ground is de donkerste.

SG90 Arduino Uno Opmerking
Bruin GND Moet gemeenschappelijk zijn met de ground van de servovoeding
Rood Niet de 5 V van de Arduino Een aparte 5 V-voeding — zie hieronder
Oranje Elke digitale pin De Servo-bibliotheek werkt op elke pin

Waarom niet de 5 V-pin van de Arduino

Een SG90 trekt ongeveer 10 mA in rust, 150–250 mA tijdens beweging en 650 mA bij vastlopen. De USB-voeding waarop een Uno draait, is voor het hele bord begrensd op 500 mA, en de ingebouwde regulator heeft bij voeding via de cilindrische voedingsaansluiting zijn eigen thermische grens.

Eén servo die zachtjes beweegt werkt vaak wel, en juist dat is het probleem: op de werkbank doet hij het goed en zodra de servo weerstand ondervindt, zakt de spanning en herstart het bord. Het symptoom is een bord dat herstart zodra de arm een bepaalde positie bereikt—en dat lijkt op een softwarefout.

Geef hem een aparte 5 V-voeding, verbind de grounds en plaats een condensator van 470 µF over de servovoeding, dicht bij de connector.

Verhouding tussen pulsbreedte en hoek

Een servo leest geen spanning. Hij leest hoe lang de puls duurt, vijftig keer per seconde.

Pulsbreedte Nominale hoek Wat de SG90 werkelijk doet
1,0 ms 0° Stopt vaak ongeveer 10–15° te vroeg
1,5 ms 90° Midden, en meestal nauwkeurig
2,0 ms 180° Stopt vaak ongeveer 10–15° te vroeg
< 0,5 ms of > 2,5 ms — Zoemt tegen een eindstop en trekt vastloopstroom

Het bereik van 1–2 ms is een afspraak en geen standaard: veel SG90’s bereiken hun werkelijke eindstops dichter bij 0,6 ms en 2,4 ms. Daarom biedt de Servo-bibliotheek van Arduino de functie attach() met optionele minimale en maximale pulsbreedtes:

servo.attach(9, 600, 2400);   // instead of the 544/2400 defaults

Kalibreer dit voor elke servo afzonderlijk: zo haalt de arm zijn werkbereik en blijft hij niet aan beide kanten 20° te kort.

Minimaal werkende code

#include <Servo.h>

Servo joint;
const int PIN = 9;

void setup() {
  joint.attach(PIN, 600, 2400);   // calibrate these two numbers per servo
  joint.write(90);                 // centre before doing anything else
  delay(500);
}

// Move gently instead of jumping — a servo commanded to jump goes at full speed.
void sweepTo(int target, int stepDelayMs) {
  int current = joint.read();
  int step = (target > current) ? 1 : -1;
  while (current != target) {
    current += step;
    joint.write(current);
    delay(stepDelayMs);
  }
}

void loop() {
  sweepTo(20, 15);
  delay(400);
  sweepTo(160, 15);
  delay(400);
}

joint.write(160) en de langzame sweepTo-beweging eindigen allebei op 160°, maar elektrisch zijn het totaal verschillende gebeurtenissen. De sprong geeft volle snelheid op, wat op een belast gewricht een piek van 650 mA en een mechanische schok door de nylon tandwielen veroorzaakt. De langzame sweepTo-beweging verdeelt dezelfde verplaatsing over twee seconden en verbruikt daardoor veel minder stroom. Op een arm met meerdere gewrichten is dat het verschil tussen een voeding die het aankan en een die dat niet kan.

Koppel: wat 1,8 kg·cm werkelijk betekent

De specificatie is 1,8 kg·cm bij 4,8 V—dat betekent dat de servo 1,8 kg op 1 cm van de as kan vasthouden, of 1.8/L kg bij L centimeter. Dat laatste is wat mensen misleidt.

Armlengte vanaf de as Maximale belasting (vastlopen) Veilige werbelasting (~30%)
1 cm 1800 g 540 g
5 cm 360 g 108 g
10 cm 180 g 54 g
15 cm 120 g 36 g

Er zijn twee dingen om hieruit te halen. Ten eerste neemt het koppel lineair af naarmate de arm- of hefboomlengte toeneemt, dus een armsegment van 15 cm kan bij volledig vastlopen maar 120 g tillen. Ten tweede ontwerp nooit op de grenswaarde bij vastlopen. Een servo die vastloopt trekt volle stroom, veroorzaakt geen beweging en wordt warm; een derde van het vastloopkoppel is een verstandige bovengrens voor een gewricht dat enige tijd op een positie moet blijft.

Het getal geldt ook bij 4,8 V. Bij 6 V levert dezelfde servo ongeveer 2,2 kg·cm, een van de weinige eenvoudige verbeteringen in hobbyrobotica—mits je voeding de overeenkomstig hogere stroom kan leveren.

Trillingen verminderen

Goedkope servo’s trillen licht rond hun streefhoek en er zijn vier afzonderlijke oorzaken die je moet onderscheiden:

  • Voedingsruis. De meest voorkomende oorzaak. Een servo deelt een rail met motoren en ziet elke stroompiek als een regelverstoring. Scheid de voeding en plaats een condensator bij de servo.
  • Trillingen in de signaaltiming. De Servo-bibliotheek genereert pulsen in software, en een drukke lus of een andere interrupt verschuift hun flanken. Ga naar een PCA9685 en dit is volledig opgelost—die genereert de pulsen in hardware.
  • Dode zone. De eigen besturing van de servo negeert fouten onder ongeveer 5 µs pulsbreedte, oftewel ongeveer 1°. Onder die resolutie reageert hij niet en oproepen om fijnere stappen levert niets op.
  • Vasthouden tegen een belasting. Een servo die aan de grens van zijn koppel tegen de zwaartekracht vecht, zoemt onafgebroken. Gebruik detach() als het gewricht niet vastgehouden hoeft te worden, of balanceer het mechanisch.

Problemen oplossen

Klacht Waarschijnlijke oorzaak Oplossing
Bord herstart wanneer de servo beweegt Servostroom loopt via de Arduino Eigen 5 V-voeding, gezamenlijke ground, condensator van 470 µF
Zoemt voortdurend en wordt warm Aangestuurd voorbij de eindstop Beperk de pulsbreedtes in attach()
Beweegt slechts ongeveer 150° De standaardinstellingen van de bibliotheek bereiken de werkelijke eindstanden niet attach(pin, 600, 2400) en afstellen
Beweegt volledig naar de verkeerde hoek Hoorn in een willekeurige stand geplaatst Elk gewricht heeft een kalibratiecorrectie nodig—en misschien een tekenomkering
Trilt of wiebelt in rust Voedingsruis of softwaregetimede pulsen Eerst een condensator; een PCA9685 als het blijft
Uitgesleten tandwielen slippen nu Nylon tandwielen bezweken door een schok of overbelasting MG90S met metalen tandwielen; verminder belasting of snelheid
Wordt met de tijd langzamer en zwakker Voeding zakt in terwijl de accu leeg is Het koppel is evenredig met de spanning — meet de rail onder belasting
Draait niet continu Het is een positieservo Gebruik een servomotor met continue rotatie of een gelijkstroommotor met tandwieloverbrenging

SG90 of iets anders?

Onderdeel Koppel @ 4,8 V Tandwielen Kies het wanneer
SG90 1,8 kg·cm Nylon Leren, lichte grijpers, sensorgimbals
MG90S 2,2 kg·cm Metaal Zelfde formaat, overleeft schokken — een direct te vervangen servomotor, zonder wijzigingen
MG996R 9,4 kg·cm Metaal Gewrichten van standaardformaat die echt gewicht dragen
SG90 met continue rotatie — Nylon Een aandrijfwiel waarop snelheid in plaats van hoek wordt gewenst
NEMA 17-stappenmotor ~40 N·cm — Nauwkeurige, herhaalbare positionering zonder dode zone

Eén waarschuwing over “lichte grijpers” in de eerste rij. Een grijper is de toepassing waarin een SG90 zijn hele leven vastloopt—een object vasthouden is geen beweging, dus de motorwikkeling trekt ongeveer 0,5 A zonder iets om te koelen, en dat is de gebruikelijke manier waarop deze servo’s sterven. Daarom wordt de grijpkracht bepaald door de hefboom en niet door het koppel op de doos: 0,176 N·m over een vinger van 30 mm is 5,87 N bij vastlopen en ongeveer 4,11 N die je echt kunt vasthouden. Een servogrijper dimensioneren behandelt beide, en de grijpersimulator rekent met jouw eigen vinger.

De eerlijke samenvatting: de SG90 is een actuator voor leerprojecten. Hij is de snelste manier om te begrijpen hoe positieregeling voelt, en is niet sterk genoeg en niet herhaalbaar nauwkeurig genoeg voor een gewricht dat er echt toe doet. Als een project stopt te werken omdat de servo niet goed genoeg is, is de MG90S meestal het antwoord—zelfde formaat, zelfde bedrading, metalen tandwielen.

Verken de graaf

Gebruikt in deze bouwprojecten

Projecten, leerroutes en simulators waarin de SG90-servomotor voorkomt.

Vergelijken

Alternatieven

Vragen

FAQ over de SG90-servomotor

Wat is de SG90-servomotor?

De SG90 is een hobbyservo van 9 gram—een kleine tandwielmotor die naar een ingestelde hoek wordt gestuurd, naar die hoek draait en die hoek vasthoudt in plaats van vrij te draaien. Het is de goedkoopste en meest voorkomende servo voor beginrobotica, gebruikt voor armgewrichten, grijpers, pan-tiltmontages voor camera's en stuurmechanismen.

Hoe werkt een servomotor?

Binnenin zitten een gelijkstroommotor, een tandwieloverbrenging, een potentiometer en een besturingscircuit. De potentiometer meet de werkelijke hoek; het circuit vergelijkt die met de gewenste hoek en stuurt de motor aan totdat beide overeenkomen. Die ingebouwde terugkoppellus laat een servo een nauwkeurige positie vasthouden.

Hoe bestuur je een SG90 met een Arduino?

Je stuurt een 50 Hz PWM-signaal waarin de pulsbreedte de hoek bepaalt: ongeveer 1 ms betekent 0°, 1,5 ms betekent 90° en 2 ms betekent 180°. In de praktijk gebruik je de Servo-bibliotheek van Arduino en roep je servo.write(angle) aan—die genereert de timing voor je.

Hoeveel gewicht kan een SG90 tillen?

Het vastloopkoppel van de SG90 is ongeveer 1,8 kg·cm, wat betekent dat hij op 1 cm arm 1,8 kg kan vasthouden, of ongeveer 180 g op 10 cm. De bruikbare aanhoudende belasting ligt ver lager. Gebruik voor zwaardere objecten of een langere arm een servo met metalen tandwielen zoals de MG90S of een servo van standaardformaat.

SG90 versus MG90S—welke is beter?

Ze zijn even groot en worden op dezelfde manier bestuurd, maar de MG90S heeft metalen tandwielen en iets meer koppel, waardoor hij blokkades en belasting overleeft die de nylon tandwielen van de SG90 zouden afbreken. Gebruik de SG90 om te leren en voor lichte belasting; kies de MG90S wanneer het gewricht echt gewicht draagt of schokken te verduren krijgt.

Hoeveel stroom trekt een SG90?

Een SG90 trekt in rust slechts enkele milliampères, maar kan bij vastlopen of tijdens beweging onder belasting pieken tot 500–700 mA. Dat is te veel om van de 5 V-pin van een Arduino te halen, dus gebruik een aparte 5 V-voeding met een gezamenlijke ground; anders zakt de spanning en herstart het bord.

Verder lezen

Bronnen