Anda di halaman 1dari 4

Kontrol Motor Servo Dengan Bahasa C Berikut Perhitungan Timing-nya

Posted on November 19, 2010 by ruly anggriawan Motor servo adalah motor DC dengan sistem closed feedback sehingga dapat berputar berdasarkan sudut yang dikehendaki. Berdasarkan sudut putarannya, umumnya servo terdiri atas dua jenis yaitu servo continuous dan servo standar. Servo continuous adalah servo yang dapat berputar 360 derajat. Servo standar adalah servo yang hanya dapat berputar 180 derajat. Servo umumnya digunakan di dunia Radio-controlled car, Aeromodelling , Robotika (Big boys toys). Jika kalian melihat orang yang beli servo dalam jumlah banyak, kemungkinan besar untuk bikin robot berkaki.

Gambar Servo Dalam tulisan ini, saya mencoba sharing bagaimana mengontrol servo langsung dari mikrokontroler (tanpa servo controler). Servo yang dipakai adalah servo standar HiTEC HS646MG. Mikrokontroler yang dipakai adalah ATmega 8535 dengan clock 4 mhz.

Trainer ATmega8535 btw, trainer ini adalah produk UKM KOMPOR UPI yang telah di uji coba di SMK. Begini contoh Program untuk mengontrol servo bergerak dari tengah(0 derajat) ke kanan/CW(90 derajat) ke tengah(0 derajat) ke kiri/CCW(-90 derajat) secara berulang ulang. catatan : dalam contoh ini servo terhubung dengan PORTC.7
/***************************************************** Author : RULY ANGGRIAWAN UNIVERSITAS PENDIDIKAN INDONESIA Chip type : ATmega8535 Clock frequency : 4.000000 MHz *****************************************************/ #include #include #define TeganganServo PORTC.7 unsigned int i = 0; unsigned char dataServo=0; interrupt [TIM0_OVF] void timer0_ovf_isr(void) { if (i>312) i=0; else i++; if (i<dataServo) TeganganServo=1; else

TeganganServo=0; } void main(void) { PORTC=0x00; DDRC=0x80; TCCR0=0x01; TCNT0=0x00; OCR0=0x00; MCUCR=0x00; MCUCSR=0x00; TIMSK=0x01; #asm("sei") while (1) { dataServo=23; delay_ms(200); dataServo=33; delay_ms(200); dataServo=23; delay_ms(200); dataServo=14; delay_ms(200); }; }

catatan : nilai maximal pencacah dan dataServo dipengaruhi clock, prescale, tipe interrupt. terus terus, dari mana donk dapat angka 312, 23, 33, 14 itu ? begini penjelasan versi saya Diketahui bahwa : Pulse cicle servo = 50 Hz = 20 ms(mili second), pulse width 90 derajat CCW = 900 us(microsecond ), pulse width 90 derajat CW =2100 us, netral pulse = 1500 us. (lihat data sheet servo).

Grafik Pulsa Netral

begini penjelasan gambar di atas : pulsa 1500 us berarti selama 1500 us data servo dikasih 5 V, setelah itu data servo dikasih 0 V sampai pulsa circle servo habis yaitu 20000 us. Begitu Seterusnya. Pada mikrokontrol keluarga ATmega, waktu yang dibutuhkan untuk mengeksekusi satu perintah adalah satu siklus clock. Hal ini karena arsitekturnya yang sudah RISC (Reduce Instruction Set Computing). Dalam contoh ini digunakan crystal oxcillator dengan frekuensi(f) 4 mhz. jadi waktu satu siklus clock (T) = 1/f = 1/4 mhz = 0,25 us(microsecond). Dalam contoh ini saya menggunakan over flow interrupt 0 (8 bit) dengan prescale 1. Artinya program didalam fungsi interrupt akan diexekusi setiap 1 (prescale)x 256 (jumlah cacahan 8 bit = 2 pangkat 8 ) x 0,25 us (waktu satu clock) = 64 us. Untuk lebih jelas bisa dibaca di Register Timer Counter 0 ATmega. Untuk membentuk pulsa cicle servo = 20 ms, maka fungsi interrupt harus diulangi sekian kali, tepatnya 20 ms / 64 us = 312,5 312. Disini kita mengetahui 312 pengulangan fungsi interrupt waktunya 20 ms. nah kalau sudah tahu 20 ms itu = 312 pengulangan maka : 1,5 ms = 1500*(312/20000) =23,4 23 0,9 ms = 900*(312/20000) = 14,04 14 2,1 ms = 2100*(312/20000) = 32,76 33 inilah perhitungan timing servo versi saya. CMIIW (Call Me If Im Wrong). Dalam praktek, jika hasilnya kurang presisi maka data servonya di tambah/kurangi sedikit sedikit. Contoh jika data servo 33 tidak tidak presisi 90 derajat CW(kurang sedikit) maka coba ganti data servo dengan 34 atau 35. Jika lebih sedikit coba ganti data servo dengan 32 atau 31. Jika posisi yang diinginkan adalah 45 derajat CW maka data servonya = (23+33 )/2 = 28. Untuk posisi lain bisa dicari dengan cara yang sama. Semoga bermanfaat

Anda mungkin juga menyukai