13
LAPORAN PRAKTIKUM MIKROPROSESOR LANJUT MODUL 4 “ANTARMUKA MOTOR SERVO DENGAN MIKROKONTROLER ATmega8535 ” dibimbing oleh Ibu Dyah Lestari, S. T., M. Eng. Kelompok 8 Ahmad zuhri wafa 130532506596 Aden kusuma wardana 130532506595 Istanto putra perdana 130532506590 UNIVERSITAS NEGERI MALANG FAKULTAS TEKNIK JURUSAN ELEKTRO PRODI D3 TEKNIK ELEKTRONIKA 2013 A Maret 2015

MODUL IV Modul Servo_ -

Embed Size (px)

DESCRIPTION

um

Citation preview

1 1

LAPORAN PRAKTIKUMMIKROPROSESOR LANJUTMODUL 4ANTARMUKA MOTOR SERVO DENGAN MIKROKONTROLER ATmega8535 dibimbing oleh Ibu Dyah Lestari, S. T., M. Eng.

Kelompok 8

Ahmad zuhri wafa130532506596 Aden kusuma wardana 130532506595 Istanto putra perdana 130532506590

UNIVERSITAS NEGERI MALANGFAKULTAS TEKNIKJURUSAN ELEKTROPRODI D3 TEKNIK ELEKTRONIKA 2013 AMaret 2015

MODUL IV MOTOR SERVO TUJUAN

Mengetahui dan memahami bagaimana cara mengontrol motor servo MOTOR SERVO

Servo merujuk pada error sensing feedback control yang digunakan untuk memperbaiki performa dari sebuah sistem. Servo atau Motor Servo adalah motor DC yang memiliki mekanisme servo untuk mengontor posisi sudut secara presisi. Motor servo umumnya mempunyai batas rotasi dari 90o hingga 360o. Beberapa motor servo juga mempunyai batas 360o atau lebih. Akan tetapi servo tidak berputar terus-menerus. Perputarannya dibatasi antara sudut-sudut yang sudah ditentukan. Motor servo digunakan untuk pemosisian secara akurat misalnya pada lengan atau kaki robot, dan di mainan RC seperti RC helikopter, pesawat terbang dan mobil.

Ada empat pabrikan besar yang memproduksi motor servo : Futaba, Hitec, Airtronics, dan JR Radios. Motor servo dari Futaba dan Hitec adalah yang paling sering digunakan. Motor servo mempunyai tiga kabel atau konektor. Dua dari kabel-kabel tersebut adalah ground dan sumber tegangan positif untuk pencatu Motor Servo DC. Kabel ketiga digunakan untuk sinyal kontrol. Kabel-kabel ini dibedakan dengan warna, kabel merah merupakan supply DC dan harus dihubungkan dengan tegangan positif antara 4,8V 6V. Kabel hitam adalah ground. Untuk kabel ketiga warnanya tergantung pada masing-masing pabrikan. Untuk Hitec berwarna kuning dan putih untuk Futaba. Motor servo Hitec mempunyai 24 gigi pada splines nya sedangkan Futaba mempunyai 25 gigi. Splines yang dibuat untuk satu tipe servo tidak bisa dipakai untuk servo lainnya. Splines adalah tempat untuk menyambungkan lengan servo. Tidak seperti DC motor, membalik konektor ground dan tegangan positif tidak merubah arah perputaran motor servo. Hal ini malah dapat merusak motor servo. Oleh karena itu pemasangan konektor harus diperhatikan dengan seksama. Sebuah motor servo utamanya terdiri dari motor DC, sistem gigi, dan sensor posisi yang kebanyakan berupa potensiometer dan rangkaian kontrol. Motor DC terhubung dengan mekanisme gigi yang memberikan umpan balik ke sensor posisi yang berupa potensiometer. Dari gear box, keluaran motor servo dikirimkan melalui spline servo ke lengan servo. Potensiometer berganti posisi sesuai dengan posisi motor saat itu. Sehingga perubahan resistansi menghasilkan perubahan tegangan yang sebanding dari potensiometer.

Sebuah sinyal PWM diberikan ke kabel kontrol. Lebar pulsanya lalu dikonversi menjadi tegangan yang sesuai yang kemudian dibandingkan dengan sinyal dari potensi di aplifier error. Perbedaan sinyalnya dikuatkan dan diberikan ke motor DC. Jadi sinyal yang diberikan ke Motor Servo DC adalah gelombang redaman yang melemah ketika posisi yang diinginkan dicapai oleh motor. Ketika perbedaan antara posisi yang diinginkan sesuai dengan yang diindikasikan oleh pulsa dan posisi saat itu tinggi maka motor berputar cepat. Ketika perbedaan nya sedikit motor berputar lambat. MENGONTROL MOTOR SERVO

Motor servo dapat berputar ke sudut yang diinginkan dengan mengirimkan sinyal PWM (Pulse Width Modulated) ke kabel kontrol. Servo mengerti bahasa dari pulse position modulation. Lebar pulsa bervariasi mulai dari 1 ms hingga 2 ms dikirim secara berulangulang sebanyak sekitat 50 kali dalam 1 detik. Lebar pulsa nya menentukan posisi sudut motor servo. Sebagai contoh, pulsa 1 ms memutar servo ke sudut 0o sedangkan pulsa 2 ms memutar servo ke sudut 180o. Lebar pulsa antara sudut tersebut dapat di interpolasi sesuai keinginan. Misalnya pulsa 1,5 ms akan memutar servo ke sudut 90o. Harus dipahami bahwa nilai ini hanya perkiraan, nilai sebenarnya dari sebuah servo berbeda pada setiap pabrikan. Serangkaian pulsa-pulsa (50 pulsa dalam 1 detik) harus diberikan ke servo untuk mempertahankan posisi sudut tertentu. Saat servo menerima pulsa, motor servo dapat mempertahankan sudutnya untuk 20 ms berikutnya. Hadi sebuah pulsa setiap frame waktu 20ms harus diberikan ke motor Servo. Untuk motor servo Futaba S3003 hubungan antara lebar pulsa dan sudut servo adalah seperti tabel di bawah ini. Motor servo ini hanya dapat berputar antara sudut 0 hingga 180 derajat. Lebar Pulsa Posisi Sudut

0,360 ms 0 derajat

1,260 ms 90 derajat

2,160 ms 180 derajat

Untuk mengontrol motor servo dapat digunakan PWM dari mikrokontroler AVR. Dicontohkan menggunakan AVR Timer 1 yang merupakan timer 16bit dan mempunyai dua channel PWM (A dan B). Frekuensi CPU adalah 16Mhz, frekuensi ini adalah frekuensi maksimum yang dapat digunakan oleh mikrokontroler AVR. Kali ini digunakan prescaller 64 sehingga timer akan mempunyai frekuensi 16Mhz/64 = 250khz (Periode 4uS). Kita menggunakan timer dengan mode Fast PWM Top Value = ICR1. Sehingga timer akan menghitung mulai dari 0 hingga ICR1 (Top Value). Formula untuk menghitung frekuensi dan nilai Top Value adalah sebagai berikut : 64 (1 + ) 1600000050 = 64 (1 + ) = 4999 Selanjutnya set ICR1=4999. Hal ini memberikan kita PWM dengan periode 20ms (50Hz). Lalu set output PWM menjadi Non Inverted. Selanjutnya duty cycle dapat diset melalui register OCR1A dan OCR1B. Karena periode timer nya adalah 4uS (250Kz), kita dapat menghitung nilai yang dibutuhkan untuk memutar motor servo ke sudut tertentu dengan rumus sebagai berikut : Sudut 0o membutuhkan lebar pulsa 0.360ms(360uS) sehingga nilai OCR1A = 360us/4us = 90 Sudut 90 o membutuhkan lebar pulsa 1.260ms(1260uS) sehingga nilai OCR1A = 1260us/4us = 315 Sudut 180 o membutuhkan lebar pulsa 2.160ms(2160uS) sehingga nilai OCR1A = 2160us/4us = 540 ALAT DAN BAHAN YANG DIGUNAKANbb

1 unit PC/Notebook Minimum System ATmega8535 Motor Servo Futaba S3003 1 kabel USB Type B 2 kabel 10 pin Kabel jumper PROSEDUR

1. Hitung nilai TOP dan OCR1A yang diperlukan untuk mengontrol motor servo untuk bergerak ke sudut 0,30,60,90,120,150 dan 180 derajat! (Frekuensi Clock minimum system 4 Mhz).2. 3. Hubungkan kabel 10 pin dari input trainer ke port minimum sistem yang diinginkan. 4. Atur konfigurasi Timer1 mode Fast PWM Top=ICR1 dan port sesuai kebutuhan. 5. Buatlah fungsi yang memutar motor ke posisi sudut tertentu (parameter berupa besar sudut)!. 6. Buatlah fungsi yang memutar motor ke posisi sudut tertentu (parameter berupa lebar pulsa HIGH dalam mikrosekon)!. 7. Buatlah program yang memutar motor servo ke sudut tertentu sesuai masukan dari toggle menggunakan fungsi pada langkah ke-5 dan ke-6 seperti tabel berikut : No. Toggle bit ke- Sudut tujuan (derajat) Fungsi langkah ke-

1 0 0 5

2 1 30 5

3 2 60 5

4 3 90 5

5 4 120 6

6 5 150 6

7 6 180 6

8 7 200 5 atau 6

8. Pindahkan kabel putih motor servo ke PD3 (Pin nomor 6 pada minimum sistem). Lalu set pin tersebut sebagai output! 9. Buatlah program yang memutar motor servo ke sudut 0, 90, dan 180 sesuai input toggle dengan memanipulasi level logika pin PD3 dengan algoritma sebagai berikut : a. Set pin PD3 (HIGH) b. Berikan delay sesuai sudut yang dibutuhkan c. Clear pin PD3 (LOW) d. Berikan delay (periode sinyal adalah 20ms). DATA HASIL PERCOBAAN

1. Hasil perhitungan prosedur nomor 1.

Diketahui:

Frekwensi CPU = 4MhzPrescaller (N) = 64F PWM = 50

Frekwensi Timer = = 62.500 Khz

T (Periode)= = = 6s

F PWM= 50= 3.200 (1+TOP)= 4.000.0003.200 + 3200TOP= 4.000.000TOP=

TOP= 1249

periode timer adalah 16s , nilai yang dibutuhkan untuk memutar motor servo ke sudut tertentu dihitung dengan rumus:

Sudut 0o, lebar pulsa 0.360ms (360S) OCR1A = 360us/16s = 23Sudut 30 o,lebar pulsa 0.660ms (660S) OCR1A = 660us/16s = 41Sudut 60 o, lebar pulsa 0.960ms (960S) OCR1A = 960us/16s = 60Sudut 90 o, lebar pulsa 1.260ms (1260S) OCR1A = 1260us/16s = 79Sudut 120 o,lebar pulsa 1.560ms (1560S) OCR1A = 1560us/16s = 98Sudut 150 o, lebar pulsa 1.860ms (1860S) OCR1A = 1860us/16s = 116Sudut 180 o, lebar pulsa 2.160ms (2160S) OCR1A = 2160us/16s = 135

2. Source code program prosedur nomor 5 (blok fungsinya saja).

#include Void set_servo(int sudut){OCR1A=(360+(sudut*10))/16;

3. Source code program prosedur nomor 6 (blok fungsinya saja).

Void ms (int ms){OCR1A=(ms/16);} 4. Source code program prosedur nomor 5 (main program yang di dalam while saja).

While (1)while (1){If (PINA. 0==1) {set_servo (0) ;}Else if (PINA.1==1) {set_servo (30) ;}Else if (PINA.2==1) {set_servo (60) ;}Else if (PINA.3==1) {set_servo (90) ;}Else if (PINA.4==1) {set_servo (120) ;}Else if (PINA.5==1) {set_servo (150) ;}Else if (PINA.6==1) {set_servo (180) ;}Else if (PINA.7==1) {set_servo (200) ;} else {set_servo (0) ;} }

{

5. Source code program prosedur nomor 6 (main program yang di dalam while saja). While (1)While (1){If (PINA.0==1) {MS(360) ;}ELSE IF (PINA.1==1) {MS (660) ;}ELSE IF (PINA.2==1) {MS (960) ;}ELSE IF (PINA.3==1) {MS (1260) ;}ELSE IF (PINA.4==1) {MS (1560) ;}ELSE IF (PINA.5==1) {MS (1860) ;}ELSE IF (PINA.6==1) {MS (2160) ;}ELSE IF (PINA.7==1) {MS (2360) ;}ELSE {MS (360) ;}}

{

ANALISA DATA

Berdasarkan hasil praktikum yang dilakukan dapat di analisa apabila kita akan mengendalikan motor servo hal yang perlu diperhatikan yaitu menentukan nilai frekuensi cpu, frekuansi timer, periode, serta menghitung nilai ocr.Untuk menghitung nilai ocr dapat di hitung dengan rumus :

Setelah mendapatkan nilai OCR motor servo dapat kita digerakkan