Anda di halaman 1dari 15

Praktikum Robotika ACC :

Kontrol Motor Servo dengan AVR


16 Maret 2017
Yudha Birawa N ( 1110151008 )
Pinta L Gemilang ( 1110141014 )

1. TUJUAN
Mahasiswa dapat memahami prinsip kerja dari motor servo.
Mahasiswa dapat mengetahui definisi tentang motor servo.
Dapat mengontrol motor servo menggunakan mikrokontroller.

2. ALAT DAN BAHAN

1) PC : 1 unit
2) Modul mikrokontroller ATMEGA 8535 : 1 unit
3) Software CV AVR
4) Motor Servo : 1 unit
5) Power Supply : 1 unit
6) Modul ISP : 1 unit
7) Kabel USB : 1 unit
8) Kabel Power : 1 unit
9) Kabel Jumper : 3 unit

3. SETTING PERCOBAAN

( sudah terlampir pada LAMPIRAN )


4. PROSEDUR

a. Menyiapkan alat dan bahan


b. Menyiapkan PC yang telah tersedia software CV AVR
c. Membuka Virtual Box, kemudian me-running WindowsXP
d. Membuka software CV AVR
e. Menyiapkan power supply kemudian setting power supply dengan tegangan sebesar 5
volt, dengan langkah - langkah dan aturan sebagai berikut :
Tidak menghubungkan terlebih dahulu power supply dengan modul mikrokontroller
Mengatur current source hingga menunjukkan setengah dari nilai maksimal
Mengatur voltage source hingga menunjukkan nilai mendekati 5 volt.
Mematikan power supply apabila power supply telah ter set mendekati nilai 5 volt.

f. Menghubungkan modul mikrokontroller dengan downloader menggunakan connector


ISP, kemudian menghubungkan downloader dengan PC menggunakan kabel USB.
g. Memastikan lampu pada downloader menyala (lampu indikator power) berwarna
merah, apabila tidak menyala maka melakukan pemeriksaan terhadap kabel USB dan
ISP.
h. Menghubungkan kabel power pada board mikrokontroller dengan (+) dan (-) power
supply.
i. Menyalakan power supply yang telah diset tegangannya mendekati 5 volt, kemudian
memastikan bahwa LED indikator power board mikrokontroller menyala berwarna
hijau Apabila indikator LED belum berwarna hijau maka downloader masih belum siap
digunakan, oleh karena itu perlu memeriksa kembali koneksi USB dan ISP nya.
.
j. Membuka program CV AVR pada PC dan melakukan langkah - langkah sebagai berikut
:
Mengklik file mengklik new project mengklik OK

Memilih AVR type chip : ATMEGA OK

Mengklik chip Pilih ATMEGA 8535 mengatur clock sebesar


4MHz(4000.000Hz)

Mengklik LCD mengubah LCD Port menjadi Port B.


Mengklik timers mengklik timer1 pada clock source memilih system clock
memilih clock value sebesar 4000.000 KHz memilih mode : fast PWM top
ICR1

Memilih mode untuk output A dengan mengklik non - inverted PWM


Mengisikan FFFF h pada box input capture

Memilih program pada menu bar mengklik generate, save and exit yes
simpan file dengan nama yang dikehendaki.
Kemudian muncul workspace yang digunakan untuk menulis program untuk
ATMEGA 8535
Sebelum memprogram, memeriksa terlebik dahulu pada bagian timer dengan
ketentuan :
- TCCR1A = 0X82
- TCCR1B = 0X19
- ICR1H = 0XFF
- ICR1L = 0XFF

Jika sudah sesuai kemudian menulis program pada bagian paling bawah dengan
format :
if (PINC. 0 == 0) OCR1A-=10;
if (PINC. 1 == 0) OCR1A+=10;
sprintf(vr,OCR1A = %d , OCR1A);
lcd_gotoxy (0,0);
lcd_puts(vr);
Ton=OCR1A;
Ton=Ton/65535*16.384;
Sprint.f(vr,Ton=%2.3f,Ton);
lcd_gotoxy(0,1);
lcd_puts(vr);
delay_ms(50);
Kemudian meng compile project, dengan mengklik button compile the project

Jika masih terdapat error, menambahkan library pada bagian paling atas yaitu
#include <lcd.h>
#include <stdio.h>
#include <delay.h>

Kemudian compile kembali project, apabila masih error maka perlu melakukan
deklarasi pada globa variables, menambahkan :
char vr [16];
float Ton;
Menglklik setting programmer klik OK kemudian muncul kotak dialog
memiloh ATmel mk II(USB) mengklik OK

Pada menu bar mengklik project configure after build program the chip
OK execute program OK
Mengklik build all program execute program the chip.

k. Menghubungkan motor servo pada port D, dimana pada motor servo terdapat 3 kabel
yaitu kabel merah, hitam dan kuning. menghubungkan kabel merah yang merupakan
VCC dengan port D no 2, lalu menghubungkan kabel hitam yang merupakan Ground
dengan port D no 1, dan kemudian menghubungkan kabel kuning yang merupakan data
dengan port D no 8 pada mikrokontroller.
Mengatur nilai OCR1A pada mikrokontroller dengan menekan push button yang ada
pada board modul mikrokontroller, dimana telah diset pada program. Nilai OCR1A
digunakan untuk mengontrol kecepatan dan gerak motor servo
PB1 = turun (-10)
PB2 = naik (+10)
l. Mengatur nilai OCR1A pada modul mikrokontroller dengan menekan push button yang
ada pada board mikrokontroller.
m. Mengatur nilai OCR1A pada modul mikrokontroller hingga motor servo bergerak untuk
pertama kalinya atau sudut 0
n. Mencatat nilai OCR1A dan nilai Ton pada modul yang ditampilkan pada LCD untuk
nilai 0
o. Mengatur nilai OCR1A pada modul mikrokontroller bertujuan untuk mengontrol motor
servo pada sudut 0 sampai dengan 90
p. Mencatat nilai OCR1A dan nilai Ton pada modul yang ditampilkan pada LCD untuk
nilai 0 sampai dengan 90
q. Mengatur nilai OCR1A pada modul mikrokontroller untuk mengontrol motor servo
pada sudut 90 sampai dengan 180
r. Mencatat nilai OCR1A dan nilai Ton pada modul yang ditampilkan pada LCD untuk
nilai 90 sampai dengan 180
5. DATA PERCOBAAN
(Program percobaan terlampir pada lampiran )

SUDUT OCR1A Ton (ms) Gambar Percobaan

0 3000 0,770 ( Gambar percobaan 1 terlampir pada


LAMPIRAN )

90 6020 1,517 ( Gambar percobaan 2 terlampir pada


LAMPIRAN )

170 8960 2,366 ( Gambar percobaan 3 terlampir pada


LAMPIRAN )

Perhitungan :

T = 1/4.10x2 = 16,384 ms
Ton = Sudut/180 x 1,5 ms + 1 ms
Ton = OCR1A/65535 x 16,384 ms

T1on= 3000/65535*16,384 ms = 0,7500114443 ms


T2on=6020/65535*16,384 ms = 1,5050229648 ms
T3on= 8960/65535*16,384 ms = 2,240034802 ms
6. LAMPIRAN

Gambar Setting Percobaan

PROGRAM PERCOBAAN
#include <mega8535.h>
#include <stdio.h>
#include <delay.h>

// Alphanumeric LCD Module functions


#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>

// Declare your global variables here


char var[16];
float Ton,hasil;

void main(void)
{
// Declare your local variables here

// Input/Output Ports initialization


// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTB=0x00;
DDRB=0x00;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=Out Func4=In Func3=In Func2=In Func1=In
Func0=In
// State7=T State6=T State5=0 State4=T State3=T State2=T State1=T State0=T
PORTD=0x00;
DDRD=0x20;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=FFh
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 4000.000 kHz
// Mode: Fast PWM top=ICR1
// OC1A output: Non-Inv.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer 1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x82;
TCCR1B=0x19;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0xFF;
ICR1L=0xFF;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer 2 Stopped
// Mode: Normal top=FFh
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization


// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization


TIMSK=0x00;

// Analog Comparator initialization


// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// LCD module initialization


lcd_init(16);

while (1)
{
// Place your code here
if(PINC.0==0)
OCR1A-=20;
if(PINC.1==0)
OCR1A+=20;
hasil=OCR1A;
sprintf(var,"OCR1A=%d ",OCR1A);
lcd_gotoxy(0,0);
lcd_puts(var);
Ton=hasil/65535*16.384;
sprintf(var,"Ton=%2.3f ",Ton);
lcd_gotoxy(0,1);
lcd_puts(var);
delay_ms(50);
};
}

Gambar percobaan 1 sudut 0 derajat.


Gambar percobaan 2 sudut 90 derajat.

Gambar percobaan 3 sudut 170 derajat.

Anda mungkin juga menyukai