Jelajahi eBook
Kategori
Jelajahi Buku audio
Kategori
Jelajahi Majalah
Kategori
Jelajahi Dokumen
Kategori
MATERI
OBYEKTIF
PERALATAN
TEORI
Pada percobaan ini akan diimplementasikan beberapa metode dan persamaan yang
berhubungan dengan kontrol DDMR yaitu berkaitan dengan kontrol kecepatan, kontrol
posisi, dan gabungan kontrol kecepatan dan kontrol posisi, dimana pada metode kontrol
tersebut persamaan-persamaan gerak DDMR dimasukkan ke sebuah kontroler elektronik
(mikrokontroler) dalam bentuk baris-baris program. Oleh karena itu, terlebih dahulu harus
dipaham spesifikasi modul DDMR yang akan digunakan seperti ditunjukkan dalam
Gambar 3.1!
Gambar 0.1 Ilustrasi odometri DDMR
Feedback utama baik pada kontrol posisi dan kontrol kecepatan adalah sensor rotary
encoder yang sudah terpasang pada motor. Untuk dapat mengakses data rotary maka
digunakan Timer yang difungsikan sebagai counter. Dalam percobaan ini Timer 0 dan
Timer 1 digunakan sebagai counter dimana register penyimpan data rotary adalah
TCNT0 dan TCNT1L. Modul DDMR yang digunakan ditunjukkan oleh Gambar 3.2 dan
board kontroler dapat dilihat pada Gambar 3.3. Perlu diperhatikan fungsi-fungsi konektor
atau PIN I/0 board kontroler elektronik DDMR.
1. Rotary encoder
Untuk dapat menghitung putaran motor DC maka pada shaft motor dipasang rotary
encoder. Jika pada sebuah sistem robot seperti mobile robot dimana motor DC
disambungkan dengan transmission system seperti belt, sprocket, gear, atau lainnya ke
roda maka akan lebih mudah dalam perhitungannya jika rotary encoder langsung
dipasang pada roda. Rotary encoder tersebut bisa dibuat sendiri atau memakai produk
yang sudah ada seperti merk omron, koyo, dll. Rotary encoder terdiri dari 2 tipe yaitu
rotary encoder absolute dan rotary encoder incremental. Berikut adalah gambar dari rotary
encoder yang digunakan pada praktikum ini, rotary encoder incremental.
2. Timer
ATMega8535 memiliki empat buah timer, yaitu 2 buah timer 8 bit (timer 0 dan timer 2), 1
buah timer 16 bit (timer 1), dan sebuah watchdog timer. Dalam bekerja timer
membutuhkan clock source yang didapatkan dari XTAL yang dipasang pada minimum
sistem untuk dihitung. Frekuensi clock yang dihitung dapat diatur melalui prescaler yang
dipilih yaitu 1, 8, 64, 256, dan 1024. Nilai prescaler ini tergantung dari timer yang
digunakan.
Perhitungan timer
Misalkan kita memiliki minimum sistem dengan nilai XTAL 11.0592MHz, maka untuk timer
16 bit waktu timer maksimumnya adalah
1 pers 0.1
𝑇𝑀𝐴𝑋 = 𝑥(𝐹𝐹𝐹𝐹ℎ + 1)
𝑓𝐶𝐿𝐾
1
= 𝑥65536 = 0.00593 𝑠
11059200
Jika timer yang digunakan timer 8 bit maka perhitungan timer maksimum adalah
1 pers 0.2
𝑇𝑀𝐴𝑋 = 𝑥(𝐹𝐹ℎ + 1)
𝑓𝐶𝐿𝐾
1
𝑇𝑀𝐴𝑋 = 𝑥256 = 0.000032 𝑠
11059200
Kita juga bisa mengatur waktu timer sesuai kebutuhan dengan menggunakan persamaan
berikut:
𝑇𝑡𝑖𝑚𝑒𝑟 𝑥𝑓𝐶𝐿𝐾 pers 0.3
𝑇𝐶𝑁𝑇 = (1 + 𝐹𝐹𝐹𝐹ℎ) − ( )
𝑁
0,01 𝑥 11059200
𝑇𝐶𝑁𝑇 = (1 + 𝐹𝐹ℎ) − ( )
1024
𝑇𝐶𝑁𝑇 = 100ℎ − 108𝑑
𝑇𝐶𝑁𝑇 = 100ℎ − 6𝐶ℎ
𝑇𝐶𝑁𝑇 = 94ℎ
3. Counter
Counter memiliki arti penghitung. Pada ATMega8535/16/162 dan lainnya disediakan 2
buah pin counter yang dapat digunakan untuk menghitung pulsa, dalam hal ini digunakan
untuk menghitung pulsa rotary. Pin counter itu adalah pin T0 (8 bit) dan pin T1 (16 bit).
Counter ini didapatkan dari fasilitas timer yang dikonfigurasi sebagai counter. Gambar 0.6
menunjukkan pin counter pada ATMega8535. Dalam pembacaan pulsa, counter dapat
disetting pada mode rising edge atau mode falling edge. Hasil perhitungan counter
disimpan pada register TCNT0 untuk counter T0 dan register TCNT1L atau TCNT1H
untuk counter T1.
Motor vexta merupakan produk Oriental Motor yang sudah standar industri. Motor vexta
yang digunakan adalah seri AXH model GFH2G5, GFH2G10, GFH2G20, GFH2G30 yang
sudah dilengkapi dengan driver motor AXHD30K. Kecepatan rotasi motor vexta adalah
100-3000 rotarsi per menit pada poros utama. Kecepatan ini direduksi oleh perbandingan
gear 5, 10, 20, atau 30 sesuai dengan model yang dipilih (lihat datasheet). Motor vexta
sudah terintegrasi dengan incremental rotary encoder tipe half effect. Satu putaran poros
utama motor memberikan output 30 pulse, sehingga pada poros output dalam
memberikan output pulsa tergantung perbandingan gear tiap motor. Untuk mengetahui
cara kerja motor vexta maka perhatikan pin konfigurasi driver AXHD30K (Gambar 0.8).
Dari Gambar 0.8 pin yang digunakan pada motor vexta adalah
Pin 2 untuk pembacaan rotary internal vexta
Pin 3,4,10,11 ke GND
Pin 6 not connected
Pin 5 sebagai pin pengatur kecepatan yang dapat diatur dengan sinyal analog
(DC) nilai 0 – 5 Volt
Pin 9 sebagai pin pengatur arah putar motor yang diatur dengan sinyal digital (0/
1)
PERCOBAAN
Prosedur
Bukalah software Code Vision AVR dan buatlah project baru kemudian lakukan
konfigurasi pada Code Wizard AVR seperti ditunjukkan pada .
Gambar 0.9 Configurasi program DDMR pada CodeWizardAVR
Setelah melakukan konfigurasi klik menu File – Generate, Save, and Exit. Sehingga
hasil konfigurasi akan ditunjukkan seperti pada kolom berikut:
/*****************************************************
This program was produced by the
CodeWizardAVR V1.25.8 Standard
Automatic Program Generator
© Copyright 1998-2007 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com
Project :
Version :
Date : 12/18/2012
Author : F4CG
Company : F4CG
Comments:
#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7
#if RX_BUFFER_SIZE1<256
unsigned char rx_wr_index1,rx_rd_index1,rx_counter1;
#else
unsigned int rx_wr_index1,rx_rd_index1,rx_counter1;
#endif
void main(void)
{
// Declare your local variables here
// Port B initialization
PORTB=0x00;
DDRB=0x00;
// Port C initialization
PORTC=0x00;
DDRC=0x00;
// Port D initialization
PORTD=0x30;
DDRD=0x30;
// Port E initialization
PORTE=0x06;
DDRE=0x06;
// Timer/Counter 0 initialization
TCCR0=0x06;
TCNT0=0x00;
OCR0=0x00;
// Timer/Counter 1 initialization
TCCR1A=0x00;
TCCR1B=0x06;
TCNT1H=0x00;
TCNT1L=0x00;
// Timer/Counter 2 initialization
ASSR=0x00;
TCCR2=0x01;
TCNT2=0x00;
OCR2=0x00;
// Timer/Counter 3 initialization
TCCR3A=0x00;
TCCR3B=0x05;
TCNT3H=0xFF;
TCNT3L=0x94;
// USART1 initialization
UCSR1A=0x00;
UCSR1B=0x98;
UCSR1C=0x86;
UBRR1H=0x00;
UBRR1L=0x47;
while (1)
{
};
}
Tambahkan beberapa kode program untuk pemanggilan header, inisialisasi variabel,
dan definisi-definisi.
#include <mega162.h>
#include <delay.h>
#include <stdio.h>
#include <math.h>
//------------------------------inisialisasi Motor------------------------------
--
#define motorL PORTE.2
#define dirL PORTE.1
#define motorR PORTD.5
#define dirR PORTD.4
void putchar1(char c)
{
while ((UCSR1A & DATA_REGISTER_EMPTY)==0);
UDR1=c;
}
#pragma used-
//--------------------------------------MOTOR--------------------------------
void balikka(unsigned char maL, unsigned char maR, unsigned int sudut)//pivot
{dirL=1; dirR=1; lpwm=maL; rpwm=maR; theta=sudut;}
void balikki(unsigned char maL, unsigned char maR, unsigned int sudut)//pivot
{dirL=0; dirR=0; lpwm=maL; rpwm=maR; theta=sudut;}
void putka(unsigned char maL, unsigned char maR, unsigned int sudut)
{dirL=1; dirR=0; lpwm=maL; rpwm=maR; theta=sudut;}
void putki(unsigned char maL, unsigned char maR, unsigned int sudut)
{dirL=1; dirR=0; lpwm=maL; rpwm=maR; theta=sudut;}
//---------------------------tampilan LCD----------------------
void tampil()
{
lcd_gotoxy(0,0);
sprintf(buffrotL,"%d",Rotary_L);
lcd_puts(buffrotL);
lcd_gotoxy(4,0);
sprintf(buffU_L,"%d",lpwm);
lcd_puts(buffU_L);
lcd_gotoxy(8,0);
sprintf(buffErr_L,"%d",Error_L);
lcd_puts(buffErr_L);
lcd_gotoxy(0,1);
sprintf(buffrotR,"%d",Rotary_R);
lcd_puts(buffrotR);
lcd_gotoxy(4,1);
sprintf(buffU_R,"%d",rpwm);
lcd_puts(buffU_R);
lcd_gotoxy(8,1);
sprintf(buffErr_R,"%d",Error_R);
lcd_puts(buffErr_R);
}
lcd_gotoxy(0,0);
lcd_putsf("Control DDMR");
delay_ms(1000);
lcd_gotoxy(0,1);
lcd_putsf("Read Rotary");
delay_ms(1000);
lcd_clear();
while (1) {}
Pada percobaan pertama ini, kita akan melakukan kontrol posisi DDMR pada sebuah
motor modul DDMR. Untuk itu tambahkan kode program berikut untuk membaca data
rotary
if (TCNT1L>100)
{
TCNT1L = 0;
counter_R++;
}
if (TCNT0>100)
{
TCNT0 = 0;
counter_L++;
}
while (1)
{
// Place your code here
tampil();
delay_ms(20);
lcd_clear();
};
if (TCNT1L>100)
{
TCNT1L = 0;
counter_R++;
}
if (TCNT0>100)
{
TCNT0 = 0;
counter_L++;
}
ErrorSebelumnya_L = Error_L;
ErrorSebelumnya_R = Error_R;
U_L = (int)x_L;
U_R = (int)x_R;
// pembatas dari U
if(U_L > 255)
{ U_L =255;
x_L =255;
}
else if(U_L < 0)
{ U_L =0;
x_L =0;
}
lpwm = U_L;
rpwm = U_R;
}
ErrorSebelumnya_L = 0; iError_L = 0;
ErrorSebelumnya_R = 0; iError_R = 0;
while (1)
{
// Place your code here
tampil();
delay_ms(20);
lcd_clear();
};
Dalam kondisi suplai motor OFF, download program pada minsis ATMega162
Nyalakan minsis ATMega162 dan kondisikan suplai motor ON. Lihatlah hasilnya.
Berapa error yang dihasilkan?
Lakukan setting parameter Kp, Ki, dan Kd yang tepat!
Ulangi lagi langkah 12 dan langkah 13. Lihat hasilnya. Berapa error yang dihasilkan?
Untuk langkah berikutnya, isilah tabel-tabel berikut ini! Catat setiap perubahan
parameter yang Anda lakukan dan dapatkan parameter dengan respon output terbaik
untuk setiap perubahan referensi input posisi yang Anda berikan!
Jawaban pertanyaan 3
4. Jika diameter roda adalah 80 mm, formulasikan agar satuan input referensi posisi
roda kanan/kiri adalah meter atau centimeter (untuk menjawab pertanyaan ini,
perhatikan langkah 9)
Jawaban pertanyaan 4
5. Ubahkan kode program pada percobaan 1 di atas sehingga input Posisi referensi
roda kanan/ kiri adalah centimeter. Tuliskan perubahan kode program di atas pada
tempat yang telah disediakan di bawah ini selanjutkan lengkapilah Tabel 3.2
berikut!
Jawaban pertanyaan 5
6. Ulangi kegiatan pada tugas pada nomor 5 dengan meletakkan robot di atas lantai!