Anda di halaman 1dari 3

Kendali Motor Servo Menggnakan Mikrokontroler AVR

1.Pengertian motor servo


Motor servo adalah sebuah motor dengan sistem umpan balik tertutup dimana posisi dari motor akan
diinformasikan kembali ke rangkaian kontrol yang ada di dalam motor servo. Motor ini terdiri dari
sebuah motor DC, serangkaian gear, potensiometer dan rangkaian kontrol. Potensiometer berfungsi
untuk menentukan batas sudut dari putaran servo. Sedangkan sudut dari sumbu motor servo diatur
berdasarkan lebar pulsa yang dikirim melalui kaki sinyal dari kabel motor.
Secara umum terdapat 2 jenis motor servo. Yaitu motor servo standard dan motor servo Continous.
Servo motor tipe standar hanya mampu berputar 180 derajat. Motor servo standard sering dipakai pada
sistim robotika misalnya untuk membuat " Robot Arm" ( Robot Lengan ). sedangkan Servo motor
continuous dapat berputar sebesar 360 derajat. motor servo Continous sering dipakai untuk Mobile
Robot. Pada badan servo tertulis tipe servo yang bersangkutan. Motor servo standar yang kali ini dipakai
memiliki 3 buah kabel yaitu, power, ground dan signal.

2.Prinsip kerja motor servo


Motor servo dikendalikan dengan memberikan sinyal modulasi lebar pulsa (Pulse Wide Modulation /
PWM) melalui kabel kontrol. Lebar pulsa sinyal kontrol yang diberikan akan menentukan posisi sudut
putaran dari poros motor servo. Sebagai contoh, lebar pulsa dengan waktu 1,5 ms (mili detik) akan
memutar poros motor servo ke posisi sudut 90. Bila pulsa lebih pendek dari 1,5 ms maka akan berputar
ke arah posisi 0 atau ke kiri (berlawanan dengan arah jarum jam), sedangkan bila pulsa yang diberikan

lebih lama dari 1,5 ms maka poros motor servo akan berputar ke arah posisi 180 atau ke kanan (searah
jarum jam).
Lebih jelasnya perhatikan gambar dibawah ini.

Ketika lebar pulsa kendali telah diberikan, maka poros motor servo akan bergerak atau berputar ke posisi
yang telah diperintahkan, dan berhenti pada posisi tersebut dan akan tetap bertahan pada posisi tersebut.
Jika ada kekuatan eksternal yang mencoba memutar atau mengubah posisi tersebut, maka motor servo
akan mencoba menahan atau melawan dengan besarnya kekuatan torsi yang dimilikinya (rating torsi
servo). Namun motor servo tidak akan mempertahankan posisinya untuk selamanya, sinyal lebar pulsa
kendali harus diulang setiap 20 ms (mili detik) untuk menginstruksikan agar posisi poros motor servo
tetap bertahan pada posisinya.
3.Motor servo dengan avr
Perhitungan OCR1 untuk menghasilkan lebar pulsa dari 1ms 2ms (sesuai settingan servo) adalah.
OCR1A= (((sudut + 90)/90)*1000)/4;
Dimana nilai 1ms 2ms tersebut akan menghasilkan nilai sudut dari -900 sampai 900. Perhitungan di atas
didapat berdasarkan bahwa couter berjalan dalam interval 250kHz atau 4us sehingga untuk
menghasilkan gelombang 1ms 2ms adalah.
Atau jika kita menggunakan MS-Exel untuk mendapat persamaannya maka setelah membuat table dari
data sumbu x untuk sudut x={-90,90} dan y untuk OCR1A={250,500} maka kita bisa mendapatkan
persamaan linier dengan cara menghitung secara matematik dan di dapat persamaan seperti di bawah ini:
y = 1.388x + 375
dan kita ganti nilai x dan y sehingga menjadi.
OCR1A = (unsigned int)((1.388*(float)sudut) + 375);

Contoh program untuk mengatur sudut servo:


/*****************************************************
Chip type

: ATmega8535

Program type

: Application

Clock frequency

: 16.000000 MHz

Memory model

: Small

External SRAM size

: 0

Data Stack size

: 128

*****************************************************/
#include <mega8535.h>
#include <delay.h>
// Declare your global variables here
void set_servo(int sudut)
{
OCR1A= (((sudut + 90)/90)*1000)/4;
//OCR1A = (unsigned int)((1.388*(float)sudut) + 375);
}
void main(void)
{
PORTD=0x00;
DDRD=0x20;
TCCR1A=0x82;
TCCR1B=0x1B;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x13;
ICR1L=0x87;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
while (1)
{
// Place your code here
set_servo(-90); //set servo ke -90 derajat
delay_ms(1000); //tahan posisi servo selama 1000ms
set_servo(90);

//set servo ke 90 derajat

delay_ms(1000); //tahan posisi servo selama 1000ms


};
}

Anda mungkin juga menyukai