Anda di halaman 1dari 18

PRAKTIKUM 3

KONTROL GERAK DDMR

MATERI

1. Kontrol Kecepatan DDMR


2. Kontrol Posisi DDMR
3. Kontrol Posisi + Kontrol Kecepatan DDMR

OBYEKTIF

Dari percobaan 2 ini diharapkan mahasiswa dapat :


Mengimplementasikan kinematika DDMR pada modul mobile robot dengan
Menerapkan metode kontrol posisi, kontrol kecepatan, kontrol posisi + kontrol
kecepatan pada modul DDMR
Menentukan parameter dan memvisualisasikan informasi yang diperlukan dalam
kontrol mobile robot.

PERALATAN

Satu unit komputer/laptop dilengkapi dengan software CVAVR


Modul DDMR
Power Suppy
Downloader USBISP
Aki 12V dua buah

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.

Gambar 0.2 Modul Praktikum DDMR


Gambar 0.3 Board kontroler elektronik DDMR

DILARANG MERUBAH KONFIGURASI APAPUN (MELEPAS MEMASANG


KOMPONEN DAN KABEL) TANPA ARAHAN DOSEN ATAU LABORAN !!!!

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.

Gambar 0.4 Rotary encoder dan piringan rotary

Berikut adalah rangkaian rotary encoder

Gambar 0.5 Skematik rotary encoder


Pada Gambar 0.5 terlihat bahwa sebelum data dari rangkaian sensor yang berupa pulsa
masuk ke pin counter mikrokontroler, data sensor diperbaiki terlebih dahulu dengan
menggunakan IC logic schmitt trigger seperti 74HC132, dapat digunakan IC logic lainnya
seperti 74HC14. Anda dapat membandingkan output data sebelum dan sesudah IC
schmitt trigger menggunakan oscilloscope. Setelah itu output pulsa dari IC schmitt trigger
dihubungkan ke pin counter pada mikrokontroler.

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 + 𝐹𝐹𝐹𝐹ℎ) − ( )
𝑁

TCNT : Nilai timer (Hex)


fCLK : Frekuensi clock Kristal yang digunakan (Hz)
TTimer : Waktu yang diinginkan (sekon)
N : prescaler (tergantung timer yang digunakan)
Persamaan 3.3 digunakan pada timer 16 bit. untuk timer 8 bit maka nilai FFFFh diganti
dengan FFh. Contoh: misalkan kita menginginkan timer bekerja selama 10 mili sekon
dengan menggunakan timer 0, frekuensi clock 11,0592 KHz, dan prescaler 1024, maka:

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.

Gambar 0.6 Pin counter T0 dan T1 pada ATMega8535


4. Sampling time
Sampling time (waktu sampel) merupakan istilah untuk mengetahui berapa pulsa atau
kecepatan putar motor persatuan waktu tertentu. Nilai dari waktu sample ditentukan
dengan mengkonfigurasi timer untuk sampling time seperti contoh diatas. Dalam
pembacaan kecepatan putar motor, sampling time bekerja dengan mengenolkan nilai
perhitungan pulsa yang disimpan pada register TNCT setelah rentang waktu pembacaan
pulsa. Setelah dinolkan maka register TCNT akan menyimpan data perhitungan pulsa
rotary lagi dan dinolkan lagi dengan rentang waktu yang sama. Siklus ini akan terus
berulang sehingga didapatkan data kecepatan putar motor dengan satuan pulse per
waktu, nilai ini perlu diubah ke dalam satuan rpm. Pada praktikum ini, Timer 2 akan
digunakan sebagai time sampling untuk data pulsa encoder yang terbaca.

5. Aktuator – motor vexta


Modul DDMR yang digunakan pada praktikum ini menggunakan motor vexta sebagai
penggerak roda kanan dan kiri. Kita akan mengontrol pergerakan motor vexta dengan
dengan kontrol kecepatan dan kontrol posisi. Tapi sebelumnya perlu dipahami prinsip
kerja dari motor vexta. Gambar motor vexta ditunjukkan pada Gambar 0.7.
Gambar 0.7 Motor vexta dan driver.

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).

Gambar 0.8 Pin konfigurasi driver motor Vexta

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

1. Percobaan 1 – Kontrol posisi


Pada percobaan 1 ini, akan dilakukan percobaan kontrol posisi pada kedua motor sebagai
penggerak utama DDMR berbasis mikrokontroler.

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:

Chip type : ATmega162


Program type : Application
Clock frequency : 11.059200 MHz
Memory model : Small
External SRAM size : 0
Data Stack size : 256
*****************************************************/

// Alphanumeric LCD Module functions


#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>

#define RXB8 1
#define TXB8 0
#define UPE 2
#define OVR 3
#define FE 4
#define UDRE 5
#define RXC 7

#define FRAMING_ERROR (1<<FE)


#define PARITY_ERROR (1<<UPE)
#define DATA_OVERRUN (1<<OVR)
#define DATA_REGISTER_EMPTY (1<<UDRE)
#define RX_COMPLETE (1<<RXC)

// USART1 Receiver buffer


#define RX_BUFFER_SIZE1 8
char rx_buffer1[RX_BUFFER_SIZE1];

#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

// This flag is set on USART1 Receiver buffer overflow


bit rx_buffer_overflow1;

// USART1 Receiver interrupt service routine


interrupt [USART1_RXC] void usart1_rx_isr(void)
{
char status,data;
status=UCSR1A;
data=UDR1;
if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0)
{
rx_buffer1[rx_wr_index1]=data;
if (++rx_wr_index1 == RX_BUFFER_SIZE1) rx_wr_index1=0;
if (++rx_counter1 == RX_BUFFER_SIZE1)
{
rx_counter1=0;
rx_buffer_overflow1=1;
};
};
}

// Get a character from the USART1 Receiver buffer


#pragma used+
char getchar1(void)
{
char data;
while (rx_counter1==0);
data=rx_buffer1[rx_rd_index1];
if (++rx_rd_index1 == RX_BUFFER_SIZE1) rx_rd_index1=0;
#asm("cli")
--rx_counter1;
#asm("sei")
return data;
}
#pragma used-
// Write a character to the USART1 Transmitter
#pragma used+
void putchar1(char c)
{
while ((UCSR1A & DATA_REGISTER_EMPTY)==0);
UDR1=c;
}
#pragma used-

// Timer 2 overflow interrupt service routine


interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
// Place your code here

// Timer 3 overflow interrupt service routine


interrupt [TIM3_OVF] void timer3_ovf_isr(void)
{
// Reinitialize Timer 3 value
TCNT3H=0xFF;
TCNT3L=0x94;

// Declare your global variables here

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

// Crystal Oscillator division factor: 1


#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif

// Input/Output Ports initialization


PORTA=0x00;
DDRA=0x00;

// 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;

// External Interrupt(s) initialization


MCUCR=0x00;
EMCUCR=0x00;

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


TIMSK=0x04;
ETIMSK=0x04;

// USART1 initialization
UCSR1A=0x00;
UCSR1B=0x98;
UCSR1C=0x86;
UBRR1H=0x00;
UBRR1L=0x47;

// Analog Comparator initialization


ACSR=0x80;

// LCD module initialization


lcd_init(16);

// Global enable interrupts


#asm("sei")

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

unsigned char x,rpwm,lpwm;


char
buffrotL[30],buffrotR[30],buffU_L[30],buffU_R[30],buffErr_L[30],buffErr_R[30];

unsigned int Rotary_L,Rotary_R, counter_L, counter_R, theta;

int Error_L, iError_L, dError_L, ErrorSebelumnya_L, KP_L, KD_L, KI_L, Target_L,


U_L;
int Error_R, iError_R, dError_R, ErrorSebelumnya_R, KP_R, KD_R, KI_R, Target_R,
U_R;
float x_L,x_R;

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;}

void mundur(unsigned char maL, unsigned char maR)


{dirL=0; dirR=1; lpwm=maL; rpwm=maR;}

void maju(unsigned char maL, unsigned char maR)


{dirL=1; dirR=0; lpwm=maL; rpwm=maR;}

//---------------------------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);
}

// Timer 2 overflow interrupt service routine


interrupt [TIM2_OVF] void timer2_ovf_isr(void)
{
// Place your code here
x++;
if(x<lpwm){motorL=0;}
else {motorL=1;}
if(x<rpwm){motorR=0;}
else {motorR=1;}
}

// Global enable interrupts


#asm("sei")

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

// Timer 3 overflow interrupt service routine


interrupt [TIM3_OVF] void timer3_ovf_isr(void)
{
// Reinitialize Timer 3 value
TCNT3H=0xFF;
TCNT3L=0x94;

if (TCNT1L>100)
{
TCNT1L = 0;
counter_R++;
}

if (TCNT0>100)
{
TCNT0 = 0;
counter_L++;
}

Rotary_R = counter_R*100 + TCNT1L;


Rotary_L = counter_L*100 + TCNT0;
}

Tambahkan kode program berikut pada while(1) untuk menampilkan data


hitungan rotary pada LCD

while (1)
{
// Place your code here
tampil();
delay_ms(20);
lcd_clear();
};

Hubungkan downloader USBASP ke minsis ATMega162 dan download-lah program-


program tersebut.
Nyalakan motor dengan mengarahkan switch ON/OFF motor kondisi ON.
Putarlah roda secara manual dengan tangan, kemudian lihatlah tampilan pada LCD.
Untuk mereset data dari nol (0), tekanlah tombol reset.
Hitunglah berapa hitungan rotary dalam satu kali putaran roda
Rotary Left Wheel = _____pulsa/rotation
Rotary Right Wheel = _____ pulsa/rotation
Hitunglah berapa jarak yang ditempuh roda per satu kali hitungan rotary jika diameter
roda 80 mm
Distance per click rotary = _____ cm

Kode program tersebut digunakan untuk mengkalibrasi robot untuk mengetahui


parameter-parameter yang digunakan pada kontrol DDMR. Berikutnya akan dibuat kode
program untuk menggerakkan robot. Langkah 11 hanya dapat dikerjakan setelah Anda
menyelesaikan hingga langkah 10.

Tambahkan kode program berikut pada interrupt timer 3


// Timer 3 overflow interrupt service routine
interrupt [TIM3_OVF] void timer3_ovf_isr(void)
{
// Reinitialize Timer 3 value
TCNT3H=0xFF;
TCNT3L=0x94;

if (TCNT1L>100)
{
TCNT1L = 0;
counter_R++;
}

if (TCNT0>100)
{
TCNT0 = 0;
counter_L++;
}

Rotary_R = counter_R*100 + TCNT1L;


Rotary_L = counter_L*100 + TCNT0;

Error_L = Target_L - Rotary_L;


Error_R = Target_R - Rotary_R;

dError_L= Error_L - ErrorSebelumnya_L; //DIFFERENTIALO ERROR


dError_R= Error_R - ErrorSebelumnya_R; //DIFFERENTIALO ERROR

iError_L = iError_L + (float)(Error_L + ErrorSebelumnya_L) * 0.005; // INTEGRAL


ERROR
iError_R = iError_R + (float)(Error_R + ErrorSebelumnya_R) * 0.005; // INTEGRAL
ERROR

ErrorSebelumnya_L = Error_L;
ErrorSebelumnya_R = Error_R;

x_L = KP_L * Error_L + KI_L * iError_L + KD_L * dError_L;


x_R = KP_R * Error_R + KI_R * iError_R + KD_R * dError_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;
}

if(U_R > 255)


{ U_R =255;
x_R =255;
}
else if(U_R < 0)
{ U_R =0;
x_R =0;
}

lpwm = U_L;
rpwm = U_R;
}

// Global enable interrupts


#asm("sei")
Target_L = 1000; //referensi posisi roda kiri -> unit pulsa
Target_R = 1000; //referensi posisi roda kanan -> unit pulsa
KP_L = 1; KD_L = 0; KI_L = 0;
KP_R = 1; KD_R = 0; KI_R = 0;

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!

Tabel 0.1 Pengujian kontrol posisi DDMR


Posisi referensi roda kanan/ Posisi aktual roda Error respon roda
Kp,Ki,Kd
kiri (pulse) kanan/kiri (pulse) kanan/kiri (pulse)
800 / 800 / /
700 / 700 / /
600 / 600 / /
600 / 1000 / /
700 / 1000 / /
800 / 1000 / /
1000 / 600 / /
1000 / 700 / /
1000 / 800 / /

TUGAS DAN PERTANYAAN PERCOBAAN 1


1. Berapa time sample pada percobaan 1?
2. Hitunglah nilai TCNT jika diinginkan nilai time sample 1 second menggunakan
timer 8 bit dan 16 bit?
3. Setelah menjawab pertanyaan 4, formulasikan agar satuan input referensi roda
kanan/roda kiri adalah 𝑟𝑎𝑑𝑖𝑎𝑛 atau 𝑑𝑒𝑔𝑟𝑒𝑒𝑠 (untuk menjawab pertanyaan ini,
perhatikan langkah 9).

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

Tabel 0.2 Pengujian kontrol posisi DDMR input referensi centimeter


Posisi referensi roda kanan/ Posisi aktual roda Error respon roda
Kp,Ki,Kd
kiri (cm) kanan/kiri (cm) kanan/kiri (cm)
50 / 50 / /
35 / 35 / /
25 / 25 / /
25 / 50 / /
35 / 50 / /
50 / 35 / /
50 / 25 / /
100 / 100 / /

6. Ulangi kegiatan pada tugas pada nomor 5 dengan meletakkan robot di atas lantai!

Anda mungkin juga menyukai