Servomotor (SG90)

Een servomotor is een soort gelijkstroommotor die, na ontvangst van een signaal met een bepaalde frequentie, zichzelf kan draaien in een hoek van 0-180 graden. De positie van 90 graden wordt over het algemeen de ‘neutrale’ positie genoemd, omdat deze vanaf dat punt gelijkmatig in beide richtingen kan draaien. De servomotor wordt vaak verward met een stappenmotor.

Verschillen in servomotoren en stappenmotoren voor motion control-toepassingen
Het belangrijkste verschil tussen deze motoren is het totale aantal polen dat de motoren hebben. Stappenmotoren hebben een hoog aantal polen, meestal tussen de 50 en 100. Daardoor zijn ze doorgaans heel nauwkeurig. Servomotoren hebben een laag aantal polen, tussen 4 en 12.
Dit verschil in pooltelling betekent dat stappenmotoren incrementeel bewegen met een consistente puls in een gesloten systeem. Servomotoren hebben een (PWM) encoder nodig om pulsen aan te passen voor positieregeling.

De manier waarop een servomotor de informatie leest die wordt verzonden, is door een elektrisch signaal te gebruiken dat PWM wordt genoemd. PWM staat voor “Pulse Width Modulation“. Dat betekent gewoon dat elektrische signalen voor een bepaalde tijd AAN worden gestuurd, gevolgd door een uitschakelperiode, die honderden keren per seconde wordt herhaald. De hoeveelheid tijd dat het signaal aan is, bepaalt de hoek waarin de servomotor zal draaien. Bij de meeste servo’s is de verwachte frequentie 50 Hz of 3000 cycli per minuut. 

Kenmerken Micro Servo SG90:
– Gewicht: 9 gram
– Afmetingen: 22,2 x 11,8 x 31 mm ongeveer.
– Blokkeerkoppel: 1,8 kgf · cm
– Werksnelheid: 0,1 s / 60 graden
– Bedrijfsspanning: 4,8 V (~ 5V)
– Dode bandbreedte: 10 µs
– Temperatuurbereik: 0 ºC – 55 ºC
– Bedrijfsstroom met 5V-voeding (geen mechanische belasting): 220mA (± 50mA)
– Blokkeerstroom met 5V-voeding (hoorn vergrendeld): 650mA (± 80mA)
– Ruststroom met 5V-voeding: 6mA (± 10mA)

WAARSCHUWING
Als de SG90 servomotor niet belast wordt, kan de Raspberry Pi de voeding leveren, maar het advies is om bij servo gebruik ALTIJD een aparte voeding te gebruiken. De kans dat de Raspberry Pi beschadigd raakt door een servo is aanwezig!

Hier vind je het overzicht van de stroomvoorziening van de Raspberry Pi. Tel hier zo’n 700 mA (650mA + ~80mA) bij op en kijk of de adapter van de Raspberry Pi dit kan leveren. Daarnaast kan de Raspberry Pi een maximum stroom doorgeven.

Les 28 van Paul McWhorter
Voor dat je aan dit project begint adviseer ik eerst videoles 28 te volgen van Paul McWhorter. Hij leert je stapsgewijze hoe je eenvoudig de positie van een servo kunt besturen met behulp van de Raspberry Pi GPIO-pinnen en Python. De les duurt zo’n 49 minuten. Daarna weet je alles over PWM, Duty Cycle en servo motor aansturing.

Bewegingsrichtingen
Bij 50Hz (20 ms) zal de servo bij specifieke puls groottes bewegen naar:
– 0 graden, de middenpositie, bij een puls van 1 ms
– plus (+) 90 graden bij een puls van ~ 1.5 ms en
– min (-) 90 graden bij een puls van ~ 2 ms.

Of + of – 90 graden links of rechts is, hangt af van hoe je de servo hebt gemonteerd.

We sturen van de Raspberry Pi PWM-signalen van GPIO 2 (pin 3) en voeden de de servomotor vanaf het GPIO-bord. Er lopen dus drie draden van de servo naar de Pi.

Het enige dat je hoeft te doen, is de drie draden van de servo in het GPIO-bord steken. Raadpleeg het bovenstaande diagram voor de pincodes.

Verbinden met de Raspberry Pi
Om de servomotor met de headerpinnen van de Raspberry Pi te verbinden, kun je het beste een M/F-jumper in elk van de gaten aan het uiteinde van de servokabel steken. Plaats de rode draad in pin2 (5v), de bruine draad komt in pin6 (GND), en oranje draad in pin3 (GPIO 2). Dat is alles wat er is, en als die instructies niet duidelijk genoeg zijn, kijk dan gewoon naar de tabel hieronder.

De servomotor kalibreren
Elke servo is anders, dus moet je deze kalibreren voor de beste prestaties. In het datablad zien we dat een SG90 een frequentie van 50 Hz verwacht op de stuurlijn en de positie waar hij naartoe beweegt hangt af van de pulsbreedte van het signaal.

Voor de Raspberry Pi hebben we geen pulsbreedte methode voor PWM, maar we kunnen de Duty Cycle wijzigen. De formule hiervoor is: Duty Cycle = Pulsbreedte * Frequentie

Bij een frequentie van 50 Hz kunnen we de vereiste duty cycle voor elke pulsbreedte berekenen.

Voorbeeld
We hebben een 50 Hz puls van 1,5 ms nodig om de servo te centreren.
Dit geeft een Duty Cycle van: 0,0015 * 50 = 0,075, ofwel 7,5%.
Een puls van 1 ms (- 90 graden) geeft een Duty Cycle van: 0,001 * 50 = 5%;
een puls van 2 ms (+ 90 graden) geeft een Duty Cycle van: 0,002 * 50 = 10%

Het duty cycle range (inschakelduur bereik) ligt dus tussen de 5 – 10%, hiervan is het midden 7,5%. Straks bepalen we de exacte nummers voor jouw servo.

Python
Ik heb een testprogramma gemaakt waarmee je de servo kunt testen door de hierboven berekende percentages in te voeren.

Het volgende script geeft de servo constant de bovenstaande berekende duty cycle percentages.

Bestand unzippen in de terminal? Kijk hier.

Have A Nice Day!

Geef als eerste een reactie

Laat een reactie achter

Het e-mailadres wordt niet gepubliceerd.


*