Servomootorite juhtimine Arduinoga07. Jun '14

Sissejuhatus

Robootikas ning mudelismis kasutatavad servomootorid ehk servod on disainitud töötama 5V toitepingel ning sisendina kasutavad pulsilaiusmoduleeritud signaali 2. Servomootorist on tavaliselt välja toodud kolmejuhtmeline ühenduspesa:

  • Must või pruun on ühendatud maha ehk pingenivoole 0V.

  • Punane on ette nähtud 5V toitepinge jaoks.

  • Kollane või valge on pulsilaiusmoduleeritud signaali jaoks.

Näide servomootorist:

img/servo.jpg

Servomootor

Servomootor koosneb alalisvoolumootorist, aeglustavast ülekannest ning kontrollerist, mis on suletud korpusesse:

img/servo-disassembled.jpg

Servomootor lahtivõetuna

Odavamate servomootorite ülekanne on plastikust hammasratastega, kallimate puhul kasutatakse metallist hammasrattaid. Servomootoreid on laias laastus kahte tüüpi: pildil näidatud kiirusekontrolliga servomootor ning positsioonikontrolliga servomootor, mis tavaliselt sisaldab potensiomeetrit mikrokontrolleri tagasideks.

Arduino puhul saab kasutada Servo teeki 1, mis hõlbustab pesade seadistamist ning korrektse pulsilaiuse arvutamist kraadide järgi. Servo teek vajab taimereid mida kasutatakse pulsilaiusmodulatsiooni võimekuse jaoks Arduino Uno pesadel 9, 10 ning Arduino Mega 2560 puhul pesadel 11, 12. Servo teegi kasutamisel ei ole võimalik nimetatud pesadel kasutada klassikalist pulsslaiusmodulatsiooni analogWrite() funktsiooni kaudu isegi siis, kui servo nende pesade külge ühendatud ei ole. Kui Servo teek on laetud, saab servosid ühendada praktiliselt kõikide pesade külge.

Positsioonikontrolliga servomootorite omapäraks on nende puhul kasutatav pulsilaiusmodulatsiooniga signaal. Kandesageduseks on 50Hz, millele vastab 20ms võnkeperiood. Ühe mootori pulsilaius varieerub 1ms ning 2ms vahel. Positsioonikontrolliga servomootori puhul on pulsilaius tavaliselt korreleeritud järgnevalt:

  • 1ms - 90 kraadi vastupäeva

  • 1.5ms - 0 kraadi

  • 2ms - 90 kraadi päripäeva

Positsioonikontrolliga servomootor

Positsioonikontrolliga servomootoreid kasutatakse lennumudelismis kaldtüüride, kõrgustüüride ning pöördetüüride liigutamiseks. Positsioonikontrolliga servomootor püüab etteantud pulsilaiusmodulatsiooni signaalile hoida servomootori võlli teatud nurga all.

Käesolev näide eeldab, et on tutvust tehtud analoogsisendi lugemisega. Tegu on kõige lihtsama anduri (sensor) ning täituri (actuator) kooslusega. Potensiomeetrit kasutatakse servomootorile nurga ette andmiseks.

layer 21012345678910111213text:0A0text:1A1text:2A2text:3A3text:4A4text:5A5text:66text:7A7text:8A8text:9A9text:10A10text:11A11text:12A12text:13A13text:14A14text:15A15text:2222text:2424text:2626text:2828text:3030text:3131text:3232text:3333text:3434text:3535text:3636text:3737text:3838text:3939text:4141text:4040text:4343text:4242text:4545text:4747text:4949text:5151text:4444text:4646text:5050text:4848text:5353text:5252element:C1package:C0603-ROUNDelement:C2package:C0603-ROUNDelement:C3package:C0603-ROUNDelement:C4package:C0603-ROUNDelement:C5package:C0603-ROUNDelement:C6package:C0603-ROUNDelement:C7package:C0603-ROUNDelement:C8package:C0603-ROUNDelement:C9package:C0603-ROUNDelement:C10package:C0603-ROUNDelement:C11package:C0603-ROUNDelement:C12package:C0603-ROUNDelement:C13package:C0603-ROUNDelement:C14package:C0603-ROUNDelement:C15package:C0603-ROUNDelement:F1package:L1812element:FD1package:FIDUCIA-MOUNTelement:FD2package:FIDUCIA-MOUNTelement:FD3package:FIDUCIA-MOUNTelement:FD4package:FIDUCIA-MOUNTelement:GROUNDpackage:SJelement:Ltext:LLelement:R1package:R0603-ROUNDelement:R2package:R0603-ROUNDelement:RN1package:CAT16element:RN2package:CAY16element:RN3package:CAY16element:RN4package:CAY16element:RN5package:CAT16element:RXtext:RXRXelement:TXtext:TXTXelement:Z1package:CT/CN0603element:Z2package:CT/CN0603layer 25text:ANALOG INANALOG INCOMMUNICATIONtext:ANALOG INPOWERAREFGNDTX0RX0RESET3V35Vtext:VINVINtext:GNDGNDtext:GNDGNDSDA 20SCL 21TX2 16RX2 17RX3 15text:TX3TX3 14RX1 19TX1 18text:MADE INMADE INtext:ITALYITALYPWMtext:5V5Vtext:GNDGNDtext:DIGITALDIGITALtext:MEGA 2560MEGAtext:M.Banzitext:D.Cuartiellestext:D.Mellistext:G.Martinotext:T.IgoeIOREFtext:SDAtext:SCLelement:C1package:C0603-ROUNDelement:C2package:C0603-ROUNDelement:C3package:C0603-ROUNDelement:C4package:C0603-ROUNDelement:C5package:C0603-ROUNDelement:C6package:C0603-ROUNDelement:C7package:C0603-ROUNDelement:C8package:C0603-ROUNDelement:C9package:C0603-ROUNDelement:C10package:C0603-ROUNDelement:C11package:C0603-ROUNDelement:C12package:C0603-ROUNDelement:C13package:C0603-ROUNDelement:C14package:C0603-ROUNDelement:C15package:C0603-ROUNDelement:D1package:SMBelement:D2package:MINIMELFelement:D3package:MINIMELFelement:F1package:L1812element:FD1package:FIDUCIA-MOUNTelement:FD2package:FIDUCIA-MOUNTelement:FD3package:FIDUCIA-MOUNTelement:FD4package:FIDUCIA-MOUNTelement:GROUNDpackage:SJelement:IC3package:TQFP100element:IC4package:MLF32element:IC6package:SOT23-DBVelement:IC7package:MSOP08element:Lpackage:CHIP-LED0805element:L1package:0805element:ONtext:ONONelement:R1package:R0603-ROUNDelement:R2package:R0603-ROUNDelement:RN1package:CAT16element:RN2package:CAY16element:RN3package:CAY16element:RN4package:CAY16element:RN5package:CAT16element:RXpackage:CHIP-LED0805element:T1package:SOT-23element:TXpackage:CHIP-LED0805element:XIOpackage:2X18text:XIOelement:Y1package:RESONATORelement:Y2package:QSelement:Z1package:CT/CN0603element:Z2package:CT/CN0603

Arduinosse võib algatuseks üles laadida järgneva koodijupi:

#include <Servo.h>

Servo servo1;
int servoPin = 13;
int potentiometerPin = A0;

void setup () {
    servo1.attach(servoPin); // Seadista servo taimerid
}

void loop() {
    int value = analogRead(potentiometerPin); // Loe potensiomeetri väärtus
    int degree = map(value, 0, 1023, 0, 180); // Teisenda analoogsisendi näit ümber nurgaks
    servo1.write(degree);                     // Keera servo õigesse asendisse
    delay(5);
}

Kiirusekontrolliga servomootor

Kiirusekontrolliga servomootor püüab hoida etteantud kiirust. Pulsilaiused on seostatud järgnevalt:

  • 1ms - 100% kiirusega ühes suunas

  • 1.5ms - Mootor seisab

  • 2ms - 100% kiirusega teises suunas

Tüüpilisel sumorobotil on kaks kiirusekontrolliga servomootorit roboti rataste ringi ajamiseks 3:

img/arduino-sumorobot.jpg

Sumorobot

1

Arduino - Servo

2

Servomootor - Vikipeedia, vaba entsüklopeedia

3

Sumoino shield

Arduino Tiigriülikool Estonian IT College