Hoe bestuur je een servo met twee knoppen? Besturing van SG90-servoaandrijving zonder microcontroller. Naaimachine-apparaten

Naast de controller en sensoren zijn actuatoren zonder uitzondering een belangrijk onderdeel van alle robots. Ze draaien de wielen van de robot, waardoor deze door de ruimte kan bewegen, en activeren krachtige manipulatoren , waarmee hij voorwerpen vastpakt.

In deze tutorial gaan we werken met zo'n actuator genaamd servo-aandrijving(of servo). In tegenstelling tot een conventionele elektromotor is een servoaandrijving een complex geheel samengesteld apparaat, bestaande uit een motor gelijkstroom, tandwielreductor, potentiometer en elektronisch circuit. Dit alles zorgt ervoor dat de servoaandrijving de as strikt onder een bepaalde hoek kan draaien en vasthouden. Met dergelijke schijven kunt u bijvoorbeeld de volgende eenvoudige manipulator maken:

1. Verbinding met Arduino

Zoals hierboven vermeld, staat de servoaandrijving dus bekend om zijn vermogen om onder een bepaalde hoek te roteren. Hoe gaan we hem deze hoek laten zien? Ik stel voor om hiervoor een variabele weerstand, ook wel potentiometer genoemd, te gebruiken. We zullen de potentiometerknop draaien en de controller zal de servo opdracht geven om naar de juiste hoek te draaien.

De potentiometer heeft slechts drie aansluitingen. We zullen de extremen verbinden met +5V en aarde, en de centrale met de analoge ingang A0.

De SG90-servo heeft ook drie contacten. Ze zijn meestal als volgt gekleurd:

  • bruin - aarde;
  • rood - voeding +5V;
  • oranje (of geel) - signaal.

We sluiten de signaaldraad aan op digitale uitgang nr. 8. Als resultaat krijgen we het volgende diagram:

Handiger is het om beide apparaten via Arduino Uno op elkaar aan te sluiten broodplank:

2. Programma

Laten we nu een eenvoudig programma schrijven dat alle elementen van ons apparaat met strikte logica verbindt. Het enige wat we van de controller nodig hebben is:

  • lees de waarden van de potentiometer in het bereik van 0 tot 1023;
  • converteer het resulterende getal naar een hoek van 0 tot 180 graden;
  • breng de resulterende hoek over naar de servoaandrijving.

Om een ​​programma te schrijven gebruiken we onze . We gebruiken de servoaandrijfeenheid, de leeseenheid van de analoge poort en de functie van het in kaart brengen van het ene waardebereik naar het andere.

Door op de knop "Arduino" in de ontwerper te klikken, openen we een pagina met broncode programma's voor het milieu Arduino-IDE:

#erbij betrekken Servo-servo's; void setup())( ) void loop())( servos.attach(8); servos.write((map(analogRead(A0), 0, 1024, 0, 180))); vertraging(50); )

Zoals uit het programma blijkt, hebben we de bibliotheek gebruikt om de servoaandrijving te besturen Servo. Deze bibliotheek heeft verschillende functies die voor ons nuttig zijn:

  • Attach(pin_number) — servo-initialisatie;
  • write(angle) - draai de servo onder een bepaalde hoek;
  • read() - Haalt de huidige servohoek op.

Om de reeks getallen 0 - 1023 toe te wijzen aan de reeks 0 - 180, gebruikte de constructor de functie kaart. Dezelfde bewerking kan worden uitgevoerd met behulp van de uitdrukking:

int hoek = (waarde / 1023,0) * 180;

Laad het programma op de Arduino Uno en kijk wat er gebeurt!

Nu weet u wat een servoaandrijving is en kunt u deze eenvoudig bedienen. Vooruit! Op weg naar de creatie van robotarmen en lopende spinrobots!

Servomotoren worden niet alleen gebruikt in vliegtuigmodellering en robotica, ze kunnen ook worden gebruikt in huishoudelijke apparaten. Kleine maten, hoge prestaties, evenals de eenvoudige bediening van de servomotor, maken ze het meest geschikt voor implementatie afstandsbediening verschillende apparaten.

Het gecombineerde gebruik van servomotoren met zend-ontvangstradiomodules levert aan de ontvangerzijde geen problemen op; het volstaat om eenvoudigweg de bijbehorende connector met de voedingsspanning en een stuursignaal op de servomotor aan te sluiten, en de klus is geklaard.

Maar als we de servomotor “handmatig” willen aansturen, bijvoorbeeld met behulp van een potentiometer, hebben we een pulsgenerator nodig. Hieronder vindt u een voldoende eenvoudig circuit gebaseerd op een generator geïntegreerde schakeling 74HC00.

Dit schema maakt het mogelijk handmatige bediening servomotoren door het leveren van stuurpulsen met een breedte van 0,6 tot 2 ms. De schakeling kan bijvoorbeeld worden gebruikt voor het roteren van kleine antennes, buitenschijnwerpers, CCTV-camera's, enz.

Servomotorische controle. Controllerbeschrijving

De basis van de schakeling is de 74HC00-chip (IC1), die bestaat uit 4 NAND-logische elementen. Op de elementen IC1A en IC1B wordt een generator gemaakt, waarvan de uitgang pulsen genereert met een frequentie van 50 Hz. Deze pulsen activeren een RS-trigger bestaande uit logische elementen IC1C en IC1D.

Bij elke puls die van de generator komt, wordt de uitgang van IC1D op “0” gezet en wordt condensator C2 ontladen via weerstand R2 en potentiometer P1. Als de spanning op condensator C2 tot een bepaald niveau daalt, schakelt het RC-circuit het element naar de tegenovergestelde toestand. Dus bij de uitgang krijgen we vierkante pulsen met een periode van 20 ms. De pulsbreedte wordt ingesteld door potentiometer P1.

De servoaandrijving Futaba S3003 verandert bijvoorbeeld de asdraaihoek met 90 graden dankzij stuurpulsen van 1 tot 2 ms. Als we de pulsbreedte veranderen van 0,6 naar 2 ms, zal de rotatiehoek oplopen tot 120°. De componenten in het circuit zijn zo geselecteerd dat de uitgangspuls in het bereik van 0,6 tot 2 ms ligt, en daarom is de installatiehoek 120°. De S3003-servomotor van Futaby heeft een vrij groot koppel en het stroomverbruik kan variëren van tientallen tot honderden mA, afhankelijk van de mechanische belasting.

Ontwerp

Het servomotorbesturingscircuit is dubbelzijdig gemonteerd printplaat afmetingen 29 x 36 mm. De installatie is zeer eenvoudig, waardoor zelfs een beginnende radioamateur het apparaat eenvoudig in elkaar kan zetten.

Een servomotor leren besturen met Arduino.

Eerst zullen we bekijken hoe we ervoor kunnen zorgen dat de uitgaande as van de servomotor naar binnen draait automatische modus"vooruit" en in omgekeerde richting. Hierna zullen we bovendien een potentiometer in het circuit opnemen, die de rotatie van de servoaandrijving regelt.

Vereiste knooppunten

Om de servo-aandrijfbesturingstechnieken die in het artikel worden gegeven onder de knie te krijgen, hebt u het volgende nodig:

1 variabele weerstand (potentiometer) 10 kOhm



1 Arduino-microcontroller Uno



1 condensator van 100 µF (optioneel)


Aansluitschema voor "Sweep" (automatische rotatie)

Voor dit experiment hoef je alleen de servomotor op de Arduino aan te sluiten.


Er zijn 3 contacten op de servomotor. De kleur van de contacten kan variëren afhankelijk van de fabrikant, maar rood is altijd het 5 V-contact. GND-pin(grond) kan zwart of bruin zijn. De resterende derde pin is een signaal dat wordt gebruikt om de positie van de servorotor te regelen. Het is meestal geel of geel van kleur. Deze pin verbinden we met digitale pin 9 op de Arduino.

De servocontacten zijn voorzien van connectoren waarin connectoren (draden) kunnen worden geïnstalleerd en aangesloten ontwikkelingsbord en vervolgens met Arduino.


Servomotor schokt

Soms werken de servo's niet als ze zijn aangesloten gegeven commando's of verkeerd worden verwerkt. Bovendien kan dit alleen gebeuren als je verbinding maakt met bepaalde USB-poorten. De reden is dat servo's behoorlijk veel kracht nodig hebben, vooral aan het begin van de rotorbeweging. Deze plotselinge sprongen in het stroomverbruik kunnen de spanning op de Arduino enorm "uitputten". Het bord kan zelfs opnieuw opstarten.

Als dit gebeurt, moet u een condensator (470uF of groter) toevoegen tussen de GND- en 5V-rails op uw breadboard.


De condensator fungeert als een soort reservoir voor elektrische stroom. Wanneer de servomotor begint te draaien, ontvangt deze tegelijkertijd de resterende lading van de condensator en van de Arduino-voeding.

Het lange been van de condensator is de positieve pool en wordt aangesloten op 5V. De negatieve pool is vaak gemarkeerd met een "-" symbool.

Arduino "Sweep" -schets (automatische rotatie)

Downloaden naar Arduino-schets, die hieronder wordt besproken. Na het laden moet de servorotor in de ene richting beginnen te draaien en vervolgens in de tegenovergestelde richting.

Het programma is gebaseerd op de standaard "sweep" -schets, die u kunt vinden in Arduino-menu Voorbeelden in de map "servo".

#include <Servo.h>

int servoPin = 9;

int-hoek = 0; // servohoek in graden

servo.attach(servoPin);

// verhogen van 0 tot 180 graden

for(hoek = 0; hoek < 180; hoek++)

servo.write(hoek);

// nu in de tegenovergestelde richting van 180 naar 0 graden

for(hoek = 180; hoek > 0; hoek--)

servo.write(hoek);

Servomotoren worden bestuurd door een reeks pulsen. Om het beheer van servo's te vereenvoudigen, is een speciale bibliotheek (Arduino-bibliotheek) geschreven. Met deze bibliotheek kunt u de servo aansturen door de werkelijke draaihoek van de as aan de uitgang in te stellen.

De besturingscommando's voor de servo's zijn vergelijkbaar met de commando's die in Arduino zijn ingebouwd, maar omdat je ze niet in alle projecten gebruikt, worden ze in een aparte bibliotheek opgeslagen. Als u opdrachten uit de servomotorbibliotheek wilt gebruiken, moet u de bibliotheek met de volgende regel in uw Arduino IDE-schets opnemen:

#include <Servo.h>

We gebruiken de variabele "servoPin" om de poort te bepalen die de servo bestuurt.

Volgende regel:

initialiseert een nieuwe variabele "servo" van het type "Servo". De bibliotheek biedt ons nieuw type gegevens zoals "int" of "float", die verantwoordelijk zijn voor de server. Op deze manier kunt u acht servo's initialiseren. Als we bijvoorbeeld twee servo's hebben, kunnen we het volgende schrijven:

In de hoofdtekst van de "setup" -functie moeten we de "servo" -variabele toewijzen aan de pin die de servomotor zal besturen met behulp van het commando:

servo.attach(servoPin);

De variabele "angle" wordt gebruikt om de huidige servorotatiehoek in graden aan te geven. In de body van de "loop"-functie gebruiken we twee "for"-lussen. De eerste is om de rotatiehoek in één richting te vergroten en de tweede is om terug te keren als we een bocht van 180 graden hebben gemaakt.

servo.write(hoek);

Vertelt de servo dat hij de rotatiehoek van de servo-uitgangsas moet bijwerken volgens de hoek die als parameter is opgegeven.

Servo-aansluitschema met potentiometer ("Knop")

De volgende stap is het toevoegen van controle aan de positie van de servo-uitgangsas door aan de variabele weerstandsknop te draaien.

Je hoeft alleen maar een potentiometer en een geleider toe te voegen van het signaalcontact van de potentiometer naar pin A0 op de Arduino naar het breadboard.


Arduino "Knob" -schets (een servo besturen met behulp van een potentiometer)

Een programma waarin de positie van de servo-uitgangsas wordt geregeld door de rotatiehoek van de potentiometerknop is nog eenvoudiger dan eerder besproken automatische rotatie en keer terug naar de startpositie.

#include <Servo.h>

int servoPin = 9;

servo.attach(servoPin);

int lezen = analogRead(potPin); // van 0 tot 1023

int hoek = lezen / 6; // van 0 tot 180

servo.write(hoek);

De schets voegde een variabele toe genaamd "potPin".

Om de servo-as in positie te brengen, lezen we de waarde van de Arduino A0-pin. De waarde van deze pin ligt in het bereik tussen 0 en 1023. Omdat de servo slechts 180 graden kan draaien, moeten we de resulterende waarden schalen. Door de waarden van pin A0 door 6 te delen, krijgen we een hoek in het bereik van 0 tot 170, wat redelijk goed bij ons past.

Servomotoren - algemene informatie

Servomotoren zijn een van de soorten motoren die vaak worden gebruikt in robotica, mechatronische projecten en Arduino-projecten.

De positie van de uitgaande as van de servomotor wordt bepaald door de pulslengte. De serva kan elke 20 milliseconden pulsen ontvangen. Als de hoge puls 1 milliseconde duurt, zal de servorotatiehoek gelijk zijn gelijk aan nul. Als het 1,5 milliseconden is, gaat de servo naar de middenpositie, en als het 2 milliseconden is, gaat hij naar een positie die overeenkomt met 180 graden.


De uiterste posities van de servomotoren kunnen verschillen. Bovendien kunnen veel servo's 170 graden worden gedraaid. Er zijn ook ‘continue’ servo’s die 360 ​​graden ronddraaien.

Binnenin de servo

De onderstaande video laat zien wat er in de servomotor gebeurt.

Wees voorzichtig. Als je de servo demonteert op een vergelijkbare manier, bestaat de mogelijkheid dat het niet mogelijk is om het weer in elkaar te zetten.

Verdere experimenten met servo en Arduino

Open de 'sweep'-schets en probeer de vertragingen terug te brengen van 15 milliseconden naar bijvoorbeeld 5 milliseconden. Merk op hoeveel sneller de servo's begonnen te draaien.

Probeer de schets van de "knop" te veranderen. In plaats van te vertrouwen op de waarden van een potentiometer, implementeert u servobesturing met behulp van de waarden die u opgeeft in het Serial Monitor-venster van de Arduino IDE.

Een kleine tip: om ervoor te zorgen dat uw schets hoekwaarden van de seriële monitor kan lezen, kunt u de functie Serial.parseInt() gebruiken. Deze functie parseert (leest) numerieke waarden van de seriële monitor.

Laat uw opmerkingen, vragen achter en deel persoonlijke ervaring onderstaand. Nieuwe ideeën en projecten ontstaan ​​vaak in discussies!

Gepubliceerd op 25/07/2012

Servo's of servoaandrijvingen hebben niet alleen een brede toepassing gevonden in de robotica en modellering, maar ook in verschillende industrieën en instrumentenbouw.

Hoe werkt een servo?

De meeste servo's gebruiken drie draden om te werken. Draad voor stroom, meestal 4,8 V of 6 V, gemeenschappelijke draad (aarde) en signaaldraad. Het stuursignaal verzendt informatie over de gewenste positie van de uitgaande as. De as is verbonden met een potentiometer, die de positie bepaalt. De controller in de servoaandrijving bepaalt op basis van de weerstand van de potentiometer en de waarde van het stuursignaal in welke richting de motor moet worden gedraaid om een gewenste positie uitgaande as. Hoe hoger de voedingsspanning van de servoaandrijving, hoe sneller deze werkt en hoe groter het koppel dat wordt ontwikkeld.

Kenmerken servoaandrijving

Grootte en gewicht

De maten zijn: “micro”, “mini”, “standaard” en “gigant”. Binnen elke klasse kunnen de maten enigszins variëren. Gemiddelde afmetingen van servo's ter referentie:

  • Micro: 24 mm x 12 mm x 24 mm, gewicht: 5-10 g.
  • Mini: 30 mm x 15 mm x 35 mm, gewicht 25 g.
  • Standaard: 40 mm x 20 mm x 37 mm, gewicht: 50-60 g.

Snelheid

De snelheid van servo's wordt gemeten door de tijd dat de servoarm over een hoek van 60 graden draait bij een voedingsspanning van 4,8V en 6V. Een servo met een parameter van 0,22s/60° bij 4,8V roteert de as bijvoorbeeld 60 graden in 0,22s bij een voedingsspanning van 4,8V. Het is niet zo snel als het lijkt. De snelste servo's hebben een looptijd van 0,06 tot 0,09s.

Rotatie hoek

Servoaandrijvingen kunnen een asrotatiehoek hebben van 60, 90, 180 graden. De draaihoek wordt elektronisch en mechanisch begrensd. Er zijn servo's zonder beperking, d.w.z. 360 graden draaiend. Als u een servoaandrijving heeft met een werkbereik van 60 graden, kunt u deze alleen uitbreiden door het ontwerp van de servomachine te wijzigen. Soms kunt u het bereik vergroten door het stuursignaal speciaal te vervormen. Maar dit is een niet-standaard en onbetrouwbare methode.

Askoppel

Het koppel van de servoaandrijving wordt gemeten aan de hand van het gewicht van de last in kg, die de servoaandrijving stil kan houden op een schommelstoel met een schouderbreedte van 1 cm. Er zijn twee cijfers aangegeven, voor een voedingsspanning van 4,8V en 6V. Als er bijvoorbeeld wordt vermeld dat de servoaandrijving 10 kg/cm ontwikkelt, betekent dit dat op een tuimelaar van 1 cm lang de servoaandrijving een kracht van 10 kg kan ontwikkelen voordat deze stopt. Voor een schommelstoel van 2 cm kan zo'n servo een kracht van 5 kg ontwikkelen, en voor een schommelstoel van 5 mm 20 kg.

Digitale en analoge servo's

Digitale en analoge servo's zijn mechanisch hetzelfde. Ze hebben dezelfde behuizingen, motoren, tandwielen en zelfs potentiometers. Het draait allemaal om de manier waarop de motor wordt bestuurd. Digitale servo's zijn nauwkeuriger en hebben over het algemeen snellere responstijden. Maar ze verbruiken meer stroom dan analoge servo's. Het stuursignaal voor analoge en digitale servo's is hetzelfde.

Controle signaal

Het stuursignaal bestaat uit pulsen met variabele breedte. De pulsen worden herhaald met een constante frequentie (meestal 50 Hz). De servopositie wordt bepaald door de pulsbreedte. Voor een typische servo die in RC-modellen wordt gebruikt, betekent een pulsbreedte van 1500 µs dat de servo naar de middenpositie moet bewegen. Door de pulslengte te vergroten of te verkleinen, gaat de servo respectievelijk met de klok mee of tegen de klok in draaien.

Om de servoaandrijving te besturen, zullen we dus moeten vormen PWM met een frequentie van 50 hertz. In dit geval moet de pulsduur voor de “0”-positie 1000 microseconden zijn, en voor de “maximale” positie – 2000 microseconden. De middenpositie is 1500 microseconden.

Het laatste deel van ons onderzoek zal een servotesterbord zijn dat met twee servo's werkt. De LED's geven de servotestermodus aan. Vorm PWM We zullen de hardwaremogelijkheden van de ATMega8-microcontroller gebruiken en we zullen het mastersignaal genereren, rekening houdend met de positie van de potentiometer.
Op de poten worden stuursignalen voor servo's gegenereerd OC1A, OC1B.
Modi worden geschakeld met een knop. Drie LED's geven de bedrijfsmodus van de servotester aan.

  • Modus 1 – de positie van de servo's wordt ingesteld door een potentiometer
  • Mode 2 – de middenpositie van de servo's is ingesteld
  • Modus 3 – het instelsignaal verandert cyclisch van de ene uiterste positie naar de andere.

De servotester wordt gevoed door 6..12V batterijen.

Broncode

#erbij betrekken #erbij betrekken #erbij betrekken //===================== ADC ========================== ====================== //Initialiseren van de ADC: void adc_init(void)( ADCSRA = _BV(ADEN) | _BV(ADPS0) | _BV(ADPS1) | _BV(ADPS2); // prescaler = 128 ) // ADC-kanaal lezen: uint32_t adc_read(uint8_t ch)( ADMUX = _BV(REFS0) | (ch & 0x1F); // kanaal instellen (VREF = VCC) ADCSRA &= ~ _BV(ADIF); // wis hardware "conversie voltooid" vlag ADCSRA |= _BV(ADSC); // start conversie while(ADCSRA & _BV(ADSC)); ; ) int main() ( char mode=0; // Modus - standaard 0 int direct=0; uint16_t adc_result; #define ICR_MAX F_CPU/50 // ICR1(TOP) = fclk/(N*f ); &= ~ (1<<4); PORTB |= (1<<4); // Настраиваем порт светодиодов DDRC = (1<<1) | (1<<2) | (1<<3); PORTC |= (1<<(mode+1)); // Настраиваем PWM на таймере 1 (выход на ногах PB1, PB2) TCCR1A = 0; // Отключаем PWM пока будем конфигурировать ICR1 = ICR_MAX; // Частота всегда 50 Гц // Включаем Fast PWM mode via ICR1 на Таймере 1 без делителя частоты TCCR1A = (1<2) ( mode = 0; ) // Schakel de gewenste LED PORTC in &= ~((1<<1) | (1<<2) | (1<<3)); PORTC |= (1<<(mode+1)); } switch (mode){ case 0:{ // Задаем положени сервомеханизма, в зависимости от положения потенциометра adc_result adc_result=adc_read(0); OCR1A = OCR_MIN+(adc_result * (OCR_MAX-OCR_MIN)/1024); OCR1B = OCR1A; break; } case 1:{ // Задаем центральное положение сервомеханизма direct=0; OCR1A = OCR_CENTER; OCR1B = OCR1A; break; } case 2:{ // Циклическое изменение положения сервомашинки if (direct==0){ OCR1A++; OCR1B++; if (OCR1A >= OCR_MAX) ( direct=1; ) ) als (direct==1)( OCR1A--; OCR1B--; als (OCR1A<= OCR_MIN) { direct=0; } } _delay_ms(1); break; } } } }

is een aandrijving waarvan de as in een bepaalde positie kan bewegen of een bepaalde rotatiesnelheid kan handhaven. Met andere woorden: de servo-as kan worden aangestuurd door deze bijvoorbeeld een stand in graden of een bepaald toerental te geven.

Servoaandrijvingen worden op verschillende gebieden gebruikt, bijvoorbeeld in de robotica helpen ze verschillende bewegingen van robots te simuleren. Servoaandrijvingen zijn een effectieve oplossing voor het verplaatsen van mechanismen in de ruimte.


Servo-aandrijfapparaat

Als we het hebben over de belangrijkste elementen van een servoaandrijving, bestaat deze uit een besturingseenheid, een motor en een sensor.

De besturing vindt plaats via een printplaat waarop een gelijkstroommotor en een potentiometer (sensor) zijn aangesloten. De versnellingsbakversnellingen bevinden zich ook in de besturingseenheid.



In feite is de aandrijving zelf een elektromotor met een versnellingsbak; het is de elektromotor die elektriciteit omzet in mechanische actie. Maar het toerental van de motor is niet altijd geschikt om uw doelen te bereiken. Om het mogelijk te maken de rotatie van de motor te regelen, wordt een versnellingsbak gebruikt. Hierdoor wordt de rotatiesnelheid van de uitgaande as teruggebracht tot de gewenste waarde. De potentiometer regelt het uitgangsresultaat.


Er komen ook drie draden uit de servo. Twee ervan voeden de motor, de derde draad wordt gebruikt om een ​​signaal te leveren dat een bepaalde waarde heeft.





Werkingsprincipe

Wanneer de elektromotor wordt ingeschakeld, begint de rotatie van de uitgaande as. U kunt er aan koppelen of koppelen wat u in de toekomst wilt gaan beheren.


De servoaandrijving ontvangt de opgegeven waarde en vergelijkt deze waarde vervolgens met de waarde op de sensor. Bij afwijkingen streeft de besturingseenheid ernaar de ingestelde waarde te bereiken en te behouden, zodat deze zoveel mogelijk overeenkomt met de waarde afkomstig van de sensor.


Belangrijkste technische kenmerken van de servoaandrijving

Koppel (askracht) . Gemeten in kg/cm. Het is het product van kracht en de lengte van de hefboom. In de praktijk is het koppel verantwoordelijk voor de versnelling van de uitgaande as en het vermogen om de rotatieweerstand te overwinnen. Hoe hoger het koppel, hoe meer mogelijkheden de motor heeft om zijn potentieel te realiseren.


Draaisnelheid . Verwijst naar de snelheid waarmee de servo-uitgangsas van positie verandert. De hoek van positieverandering wordt aangegeven in graden.


Rotatie hoek. Dit is de maximale hoek die de uitgaande as kan draaien. De meest voorkomende waarden voor deze eigenschap zijn 180° en 360°.


Afmetingen servoaandrijving . Servo's zijn er in kleine, standaard en grote maten. Standaardservo's zijn het minst duur. Indien afmetingen afwijken van de standaardwaarden, verandert de prijs in de regel evenredig met deze afwijking.


Materiaal uitrusting . Reductietandwielen zijn gemaakt van plastic, koolstof en metaal. Kunststof tandwielen zijn licht van gewicht, maar niet ontworpen voor zware lasten. Carbon tandwielen zijn sterker, maar ook duurder. Metalen tandwielen zijn het zwaarst en ideaal voor maximale belastingen.




Soorten servo's

Servoaandrijvingen kunnen digitaal of analoog zijn.

Qua uiterlijk zijn ze bijna niet van elkaar te onderscheiden. Het belangrijkste verschil is het motorbesturingsprincipe. Analoge servo's worden bestuurd met behulp van een speciale microschakeling; digitale servo's hebben een microprocessor. De microschakeling en microprocessor zijn in staat stuurpulsen te ontvangen en te analyseren. Alleen arriveren ze meestal bij de microschakeling met een frequentie van 50 Hz, en bij de microprocessor met een frequentie van 200 Hz of meer. Hierdoor is de digitale servoaandrijving mobieler en reageert duidelijker op het stuursignaal.



Digitale servo's zijn een nieuwe stap in de technologische ontwikkeling en worden gekenmerkt door een aantal voordelen. Deze voordelen zijn onder meer: ​​hoge positioneringsnauwkeurigheid, de mogelijkheid om de aandrijving sneller te besturen en de mogelijkheid om een ​​constant koppel te behouden.


Verbinding maken met Arduino

Een servoaandrijving kan worden aangesloten op een Arduino-programmeerbare controller om een ​​breed scala aan robotica-doelen te bereiken. De verbinding wordt gemaakt via kabels die uit de servo komen. Meestal zijn er drie kabels: rood; bruin of zwart; geel, oranje of wit.





De rode kabel is verantwoordelijk voor het voeden van de servo. Bruin - voor aarding. Geel – maakt rechtstreeks verbinding met het Arduino-bord en is ontworpen om een ​​stuursignaal te verzenden.

De servoaandrijving is via PWM-pinnen met het Arduino-bord verbonden.



De zwarte draad is dus verbonden met elke GND-pin.

Rode voedingskabel (VTG) - naar de overeenkomstige aansluiting voor het aansluiten van stroom.

Witte signaalkabel - naar de PWM-uitgang.


Servo-voeding

De meeste Arduino-borden hebben een vermogen van 500 mA. Op basis hiervan is de servoaandrijving een vrij energie-intensief onderdeel, aangezien deze meer dan 100 mA verbruikt. Als het project het gebruik van een krachtige servoaandrijving of meerdere servo's vereist, dan is het noodzakelijk om voor hun extra stroomvoorziening te zorgen. Het probleem van extra voeding voor servo's kan als volgt worden opgelost:

Voorzie de servoaandrijving van stroom via een extra aangeschafte voeding, bijvoorbeeld 5 of 6 V;

Als er geen voeding met de vereiste spanning is, kunt u een stabilisator gebruiken.

Alleen een servo met laag vermogen kan rechtstreeks op de Arduino worden aangesloten. Anders kan de gebruiker verschillende bijwerkingen verwachten: van het opnieuw opstarten van het bord tot het doorbranden van afzonderlijke componenten.


Aantal servo's

Het aantal servo's dat op het Arduino-bord is aangesloten, is beperkt. De meeste Arduino-modellen bieden de mogelijkheid om 12 servo's aan te sluiten, met Arduino Mega kunt u maximaal 48 servo's aansluiten.





Servo-besturing


Servobibliotheek

De bibliotheek voor de servoaandrijving bevat een reeks extra opdrachten waarmee u het programma in vereenvoudigde vorm kunt invoeren.

Tot op heden zijn er al programma's geschreven voor verschillende doeleinden. Bibliotheken zijn te vinden via de link.

Op Arduino-borden, met uitzondering van het Arduino Mega-model, schakelt het aanroepen van de bibliotheek de analogWrite (PWM) -functie op pin 9 en 10 uit. De aan- of afwezigheid van een servoverbinding doet er niet toe. Op Arduino Mega-kaarten kunt u maximaal 12 servomotoren aansluiten zonder de PWM-functie uit te schakelen.


Om de servoaandrijving te besturen, is de Servo.h-bibliotheek beschikbaar.



Het wordt aangeroepen via #include . Nadat u de bibliotheek hebt aangesloten, wordt het mogelijk om de lijst met functies die deze bevat te gebruiken. De functies van de bibliotheek zijn te vinden via het menu “Bestand/Voorbeelden”. Voor elke servo wordt een eigen “object” (servo) gemaakt, dat aan de bijbehorende digitale pin wordt bevestigd. Hierna is de Arduino programmeerbare controller klaar om besturingssignalen naar een specifieke servo te sturen. Er worden continu signalen verzonden, zelfs als de servoaandrijving inactief is. Om de signalering te pauzeren, moet u handmatig een commando verzenden.


Controle signaal

Om de servoaandrijving te besturen, wordt het stuursignaal kritisch. Het is een puls die de gewenste breedte heeft en op de juiste frequentie wordt verzonden. De pulsbreedte kan handmatig in de programmacode worden ingevoerd, met behulp van de selectiemethode om de exacte hoek te bereiken, of u kunt bibliotheekopdrachten gebruiken, die de gewenste hoek in graden aangeven. Voor verschillende merken servoaandrijvingen kan de pulsbreedte voor het draaien van de uitgaande as onder een bepaalde hoek verschillen.

De pulsen zijn verantwoordelijk voor zowel de beweging van de servo als de stationaire positie ervan. De servoaandrijving werkt in een gesloten cyclische cirkel van verzonden pulsen.


Managementteams

Servobesturing via de bibliotheek is gebaseerd op de volgende opdrachten:

Als er storingen optreden in de werking van de servoaandrijving, wordt dit in de regel aangegeven door overeenkomstige geluiden: zoemen, knetteren, enz. Hieronder zullen we de belangrijkste oorzaken van dergelijk geluid bekijken.


Onvermogen om onder een bepaalde hoek te draaien

Er zijn gevallen waarin het onmogelijk is om de servoaandrijving in een bepaalde hoek te draaien. Er komt bijvoorbeeld een obstakel op zijn weg. Dit obstakel kan een apparaat of een deel daarvan zijn dat op de servoaandrijving is aangesloten. Wanneer hij een obstakel raakt, begint de servoaandrijving karakteristiek te zoemen. Om dit probleem op te lossen, worden er commando's in het programma ingevoerd om de beweging van de servo te beperken door de bewegingshoek te veranderen.


Begin- en eindpositie-instellingen

Soms is het nodig om de coördinaten van de start- of eindpositie aan te passen. Dit is nodig wanneer de waarden van de sensor en de werkelijke positie van de uitgaande as divergeren ten opzichte van de uiteindelijke positie van deze laatste. De uitgaande as bevindt zich bijvoorbeeld op de eindpositie, maar de sensor denkt dat hij deze nog niet heeft bereikt en probeert de uitgaande as te dwingen verder te bewegen. Er verschijnt een karakteristiek geluid. In dit geval hoeft de startpositie niet te beginnen bij 0°C, en hoeft de eindpositie niet te eindigen bij 180°C. Deze grenswaarden kunnen lichtjes worden verschoven met 5-10°C, en het probleem zal worden opgelost.




Conclusie

Tegenwoordig is een servoaandrijving een noodzakelijk element in de robotica, met behulp waarvan veel creatieve projecten worden geïmplementeerd. Deze slim aangestuurde motor is ontworpen om beweging te simuleren. Het gebruik van de functies is vrij eenvoudig; er zijn al veel programma's geschreven die als stencil kunnen worden gebruikt om uw eigen ideeën te realiseren. De servoaandrijving is verbonden met de programmeerbare Arduino-controller. Alle fijne kneepjes van dit proces worden gedetailleerd besproken, zowel in dit artikel als in andere artikelen die op internet zijn geplaatst.

Moderne winkels bieden een grote selectie servo's. Als u de vereiste kenmerken kent, kunt u eenvoudig het juiste model kiezen.