BAB 3 PERANCANGAN SISTEM Bab ini berisi perancangan sistem

advertisement
BAB 3
PERANCANGAN SISTEM
Bab ini berisi perancangan sistem yang terdiri dari penjelasan
perancangan perangkat keras, perancangan piranti lunak dan rancang bangun
sistem.
Sistem yang dibuat terbagi menjadi dua modul utama yaitu modul
transmitter dan modul receiver. Modul transmitter menggunakan satu buah
sensor ultrasonik sebagai pemancarnya. Sementara untuk modul receiver, jika
menggunakan 2 buah sensor ultrasonik (gambar 3.1a) sangat tidak dimungkinkan
karena hanya mencakup ¼ wilayah dari satu lingkaran. Sedangkan dengan
menggunakan 4 buah sensor ultrasonik (gambar 3.1b) masih terdapat wilayah
yang tidak tercakup oleh ke 4 sensor ultrasonik. Jika menggunakan 8 buah sensor
ultrasonik (gambar 3.1c) maka pada radius tertentu akan mencakup keseluruhan
posisi. Oleh karena pertimbangan tersebut, modul receiver menggunakan 8 buah
sensor ultrasonik sebagai penerima gelombang ultrasonik dari modul transmitter.
(a)
(b)
(c)
: cakupan wilayah
sensor ultrasonik
: sensor ultrasonik
Gambar 3.1 Rancangan jumlah sensor pada modul receiver
41
42
Pada saat terjadi penekanan saklar di modul transmitter, maka gelombang
ultrasonik akan dikirim dari transmitter ultrasonik dan diterima oleh receiver
ultrasonik. Gelombang ultrasonik yang diterima receiver ultrasonik memiliki
karakteristik sinyal AC (referensi bab 2.1.2). Tegangan AC yang diterima
receiver ultrasonik akan dikuatkan sinyalnya oleh rangkaian penguat op-amp.
Kemudian tegangan yang telah dikuatkan tersebut akan diukur tegangan DC-nya
oleh rangkaian peak detector. Tone decoder hanya akan menyeleksi frekuensi
sebesar 40 KHz yang dipancarkan dari modul transmitter. Gambar 3.2
memperlihatkan diagram blok dari sistem secara keseluruhan.
Mikrokontroler dan ADC berada pada satu modul yaitu modul sistem
minimum. Modul ini memiliki peranan penting untuk mengatur reorientasi
pergerakan dari motor stepper. Pertama-tama ADC akan membaca dan merubah
seluruh keluaran dari peak detector menjadi bit-bit digital yang akan disimpan
kedalam suatu variabel data pada mikrokontroler. Mikrokontroler akan membaca
keluaran dari tone decoder dan memprosesnya sebagai referensi untuk
membandingkan antara nilai data digital yang tersimpan pada mikrokontroler.
Perbandingan nilai data digital ini bertujuan untuk mencari nilai data digital yang
terbesar. Nilai data digital terbesar ini menandakan receiver ultrasonik yang
ditunjuk oleh modul transmitter. Kemudian motor stepper akan diberi nilai input
posisi receiver ultrasonik yang memiliki data digital terbesar dan kepala dari
motor stepper akan berputar menuju posisi yang telah ditentukan. Nilai input
posisi tersebut akan disimpan di mikrokontroler untuk dijadikan acuan kepada
motor stepper bila berputar ke arah yang lain.
43
MODUL TRANSMITTER
TRANSMITTER
ULTRASONIK
MODUL RECEIVER
8x MODUL SENSOR
RECEIVER
ULTRASONIK
OPERATIONAL
AMPLIFIER
TONE
DECODER
PEAK
DETECTOR
MODUL SISTEM MINIMUM
MIKROKONTROLER
AT89C52
ADC
0809
MODUL DRIVER MOTOR STEPPER
DRIVER
MOTOR
STEPPER
MOTOR
STEPPER
Gambar 3.2 Diagram blok sistem
44
3.1
Perancangan Perangkat Keras
Perangkat keras yang dirancang dalam sistem ini dibagi menjadi dua
bagian penting yaitu modul transmitter dan modul receiver. Sebelum
membangun kedua modul pada alat bantu ultrasonik untuk mobile robot, terlebih
dahulu telah dilakukan perancangan dan penelitian. Tujuan dari penelitian ini
adalah agar modul transmitter dan modul receiver yang akan dirancang menjadi
berfungsi secara maksimal untuk meningkatkan kinerja sistem dari alat bantu
ultrasonik tersebut. Selain itu untuk memenuhi kriteria yang diinginkan untuk
alat bantu ultrasonik tersebut, diperlukan pula analisa yang mendalam dengan
menguji setiap penelitian tersebut dan menentukan solusi yang terbaik untuk
penggunaan yang optimal.
Modul transmitter berfungsi untuk mengirimkan gelombang ultrasonik ke
arah modul receiver. Sementara itu, modul receiver berfungsi untuk menerima
gelombang ultrasonik dari modul transmitter dan memutar kepala motor stepper
ke arah modul transmitter. Gambar 3.3 memperlihatkan ilustrasi cara kerja dari
kedua modul yang telah dijelaskan.
Pada keadaan awal, kepala motor stepper mengarah pada posisi A. Bila
modul transmitter bergerak dari posisi A ke posisi B, maka kepala motor stepper
juga akan bergerak dari posisi A ke posisi B. Pergerakan kepala motor stepper
selalu mengarah ke tempat dimana modul transmitter berada. Modul receiver
diisi dengan modul-modul yang memiliki fungsi kerja lebih spesifik yaitu 8 buah
modul sensor, modul sistem minimum, modul driver motor stepper dan modul
rangkaian power supply. Dalam bab berikutnya akan dijelaskan masing-masing
modul yang terdapat pada sistem yang telah dibuat.
45
B
Modul
receiver
Modul
transmitter
A
Mengirimkan
gelombang
ultrasonik
Keterangan :
: sensor ultrasonik
: motor stepper
Gambar 3.3 Gambaran cara kerja sistem
3.1.1
Modul transmitter
Modul transmitter pada gambar 3.4 memiliki kegunaan sebagai remote
control yang digunakan untuk mengirimkan gelombang ultrasonik sebesar 40
KHz kearah modul receiver. Modul transmitter terdapat dalam satu tempat dan
merupakan modul yang tidak dibagi menjadi modul-modul lainnya.
Catu daya yang digunakan untuk modul transmitter berupa dua buah
baterai 9 volt yang tersusun seri sehingga total masukannya menjadi 18 volt DC.
Dengan melewati regulator 12 volt, maka tegangannya akan diturunkan menjadi
46
12 volt DC. Melalui suatu rangkaian yang dapat menaikkan taraf tegangan yang
distabilkan, maka tegangan 12 volt tersebut dinaikkan kembali menjadi 16 volt
dan dijadikan catu tegangan untuk timer NE555 dan penguat op-amp CA3130.
Persamaan (3-1) menunjukkan rumus perhitungan untuk menaikkan taraf
tegangan yang distabilkan (Wasito, 2001, p47).
Vstab 

Vo = Vstab +  Iq +
 . Rb
Ra 

Vstab . Rb 

Vo = Vstab +  Iq . Rb +

Ra 

Vstab . Rb 

Vo = Vstab +
 + ( Iq . Rb)
Ra 

 Ra + Rb 
Vo = Vstab
 + ( Iq . Rb)
 Ra 
(3-1)
Vo adalah tegangan yang akan dinaikkan, sementara Vstab adalah
tegangan yang distabilkan atau tegangan yang dijadikan acuan yaitu 12 volt.
Nilai Ra pada rangkaian modul transmitter adalah resistor 1 KΩ (R8) dan nilai
Rb adalah trimpot (trimmer potensio) sebesar 5 KΩ (TP2). Arus yang melewati
Ra ditambah dengan arus Iq adalah sama dengan arus yang melewati Rb. Nilai
Vo akan berubah-ubah sesuai dengan pengaturan dari trimpot. Bila nilai Rb
mendekati maksimum, maka Vo akan semakin besar dan begitu pula sebaliknya.
Dengan memberikan tegangan kerja operational amplifier (op-amp)
sebesar 16 volt, maka akan didapatkan penguatan maksimum dari op-amp
sebesar 16 volt peak to peak (Vpp). Jika penguatan yang diberikan besar sekali
maka bentuk sinyal keluaran dari sinyal masukan akan berbentuk sinyal kotak.
Walaupun sinyal keluaran yang dipancarkan dari transmitter ultrasonik
berbentuk kotak akan tetapi receiver ultrasonik akan menghasilkan sinyal
47
keluaran sinusoidal yang baik. Hal ini dapat terjadi karena adanya teori yang
mengatakan gabungan dari beberapa sinyal sinusoidal dapat membentuk sinyal
kotak ( lihat referensi bab 2.9).
Vcc
18V
LED
Regulator
12V
R8
S1
TP2
R1
Regulator 16Volt
PT1
R2
S2
C1
R3
1
1
2
C2
2
3
4
3
4
1
R4
8
2
5
8
a1
b1
b2
7
a3
b3
6
a4
b4
5
a2
NE 555
R6
6
R5
7
8
6
CA3130
4
3
7
5
8
TP1
R7
C3
C5
C4
Daftar komponen modul transmitter
Resistor
Nilai
Kapasitor
Nilai
R
R
1
2
1K2Ω
4K7Ω
C
C
1
2
47pF
100nF
R
R
R
3
4
5
10KΩ
1K5Ω
20KΩ
C
C
C
3
4
5
0,01µF
680pF
0,1µF
R
6
10KΩ
R
7
10KΩ
Potensio
Nilai
R
8
1KΩ
PT
10K
1
Trimpot
TP
TP
1
2
Gambar 3.4 Rangkaian skematik modul transmitter
Nilai
5KΩ
5KΩ
transmitter
ultrasonik
48
Dalam rangkaian modul transmitter terdapat dua buah saklar yang
kegunaannya adalah; saklar pertama (S1) digunakan sebagai tombol untuk
menyalakan atau mematikan modul transmitter, sementara saklar kedua (S2)
digunakan sebagai tombol untuk mengirimkan gelombang ultrasonik. Pada saat
gelombang ultrasonik dikirimkan, lampu (LED) akan menyala dan menandakan
proses pengiriman sedang berlangsung. Kegunaan timer NE555 pada modul
transmitter adalah untuk membangkitkan frekuensi sebesar 40 KHz (40.000 Hz).
Frekuensi tersebut dibangkitkan dengan cara memberikan nilai resistor (R4, R5,
TP1) dan nilai kapasitor (C4) yang tepat.
Waktu pada saat kapasitor mulai mengisi dirumuskan dengan T1 dan
waktu pada saat kapasitor membuang dirumuskan dengan T2. Oleh karena itu
total periode (T) adalah penjumlahan T1 dengan T2. Bila nilai periode telah
didapat, maka dapat dicari nilai frekuensinya ( f ). Persamaan (3-2)
memperlihatkan rumus untuk mencari nilai frekuensi.
T1 = 0.693( Ra + Rb).C
T2 = 0.693( Rb.C )
T = T1 + T2
(3-2)
T = 0,693( Ra + 2 Rb).C
f =
1
1,44
=
T ( Ra + 2 Rb).C
Nilai Ra disini adalah sama dengan nilai R4 1,5 KΩ (1.500 Ω) dan nilai C
adalah sama dengan nilai C4 yaitu 680 pF (680x10-12 F). Dengan dua komponen
tersebut, maka dapat dicari nilai Rb dengan persamaan (3-3) berikut :
49
1,44
( Ra + 2 Rb).C
1,44
Ra + 2 Rb =
f .C
1,44
2 Rb =
− Ra
f .C
1,44
2 Rb =
− 1500
3
(40 x10 )(680 x10 −12 )
2 Rb = 51441,17
Rb = 25720,58
f =
(3-3)
Karena nilai Rb yang tidak bulat, maka untuk Rb digunakan dua buah
resistor yang tersusun seri yaitu resistor 10 KΩ(R5) dan trimpot 5 KΩ(TP1).
Dengan bantuan osiloskop, nilai trimpot dapat diatur agar mendapatkan nilai
frekuensi sebesar 40 KHz.
Jenis penguat yang digunakan pada modul transmitter adalah penguat opamp membalik (inverting). Penguat op-amp inverting dapat digunakan untuk
memperkuat atau memperlemah sinyal yang dipancarkan dari transmitter
ultrasonik. Sinyal ini berupa tegangan AC yang timbul bersama-sama dengan
frekuensi. Persamaan (3-4) memperlihatkan rumus untuk mencari berapa besar
penguatan dari op-amp inverting.
Av = −
Rf
Ri
(3-4)
Nilai dari Rf pada rangkaian skematik gambar 3.4 adalah hasil
penjumlahan antara 4,7 KΩ(R2) dengan potensio 10 KΩ(PT1) dan nilai Ri
adalah 10 KΩ(R3). Fungsi potensio adalah sama dengan trimpot, dimana nilai
hambatannya dapat diatur dari 0 sampai 10 KΩ. Angka minus dalam rumus
50
penguat op-amp inverting diartikan sebagai pembalikan fasa pada keluarannnya.
Rumus untuk menghitung penguatan op-amp inverting adalah sebagai berikut:
Rf max = 14,7 KΩ
Rf max 4,7 KΩ + 10 KΩ
= 1,47
=
Ri
10 KΩ
= 4,7 KΩ
Av = −
Rf min
Av = −
(3-5)
Rf min 4,7 KΩ + 0
= 0,47
=
Ri
10 KΩ
Dari persamaan (3-5), dapat diketahui nilai maksimum dan minimum
penguatan. Bila nilai PT1 diatur menjadi minimum, maka penguatan dari sinyal
akan berkurang oleh karena penguatan tersebut dibawah satu. Akan tetapi bila
PT1 diatur menjadi maksimum, maka akan terjadi penguatan sinyal.
Modul receiver
Modul receiver berisikan 8 buah modul sensor, modul sistem minimum,
modul driver motor stepper dan modul rangkaian power supply. Gambar 3.5
memperlihatkan isi dari modul-modul yang ada dalam modul receiver. Modul
receiver adalah kumpulan dari berbagai modul yang memiliki fungsi spesifik.
RX 7
6
RX
RX
8
Modul sistem
minimum
R
X
R
X
5
RX
1
Modul
driver motor
stepper
2
Modul rangkaian
power supply
4
R
X
3.1.2
RX 3
Rx1-8 : Modul Sensor
Gambar 3.5 Modul-modul dalam modul receiver
51
Modul Rangkaian Power Supply
Modul
Driver
Motor
Stepper
Port 0
Modul
Sensor 1
Modul
Sensor 2
Mikrokontroler
AT89C52
Port 2
Modul
Sensor 3
Modul
Sensor 4
Modul
Sensor 5
3 bit address
Modul
Sensor 6
Out.
digital
Modul
Sensor 7
ADC 0809
In. analog
8 channel
Modul
Sensor 8
Input catu tegangan
Output ADC
Output Peak Detector
Output Tone Decoder
Input driver motor
3 bit alamat ADC
Modul Sensor
1
2
3
4
5
6
7
8
3 bit address
LLL
LLH
LHL
LHH
HLL
HLH
HHL
HHH
Gambar 3.6 Rangkaian di dalam modul receiver
Contoh kerja spesifik tersebut antara lain pada modul rangkaian power
supply yang akan memberikan memberikan catu tegangan kepada semua modul
52
yang berada dalam modul receiver. Kemudian pada modul sistem minimum
berisi mikrokontroler dan ADC, yang keduanya berfungsi sebagai pengolah data
dari modul sensor dan mengatur arah dari pergerakan motor stepper. Dua modul
lainnya yaitu modul driver motor stepper yang bekerja sebagai driver kepada
motor stepper dan modul sensor bekerja sebagai penerima dan pengolah
gelombang ultrasonik.
Modul-modul dalam modul receiver juga memiliki hubungan satu sama
lainnya. Misalnya masukan modul sensor berasal dari gelombang ultrasonik yang
dikirim oleh modul transmitter. Data yang masuk akan dikuatkan tegangannya
oleh penguat op-amp non-inverting dan disaring frekuensinya oleh tone decoder.
Modul sensor memiliki dua buah keluaran yang masing-masing menuju ADC
dan mikrokontroler. Oleh karena ADC dan mikrokontroler berada pada satu
modul yang dinamakan modul sistem minimum, maka dapat dikatakan bahwa
masukan modul sistem minimum berasal dari keluaran 8 buah modul sensor.
Antara mikrokontroler dengan ADC juga saling memiliki keterhubungan.
Mikrokontroler memberikan inisialisasi kepada ADC berupa 3 bit alamat dan
perintah untuk melakukan konversi data. Disamping itu, ADC akan
mengeluarkan hasil konversi ke mikrokontroler. Keluaran mikrokontroler akan
terhubung dengan masukan IC L297 pada modul driver motor stepper yang akan
menggerakkan motor stepper. Gambar 3.6 di halaman 51 memperlihatkan
rangkaian dalam modul receiver. Penjelasan lebih rinci mengenai modul-modul
dalam modul receiver adalah pada sub bab 3.1.3 sampai dengan 3.1.6.
53
3.1.3
Modul Sensor
Modul sensor berisi rangkaian-rangkaian yang menerima frekuensi dan
tegangan yang berasal dari transmitter ultrasonik. Terdapat delapan buah modul
sensor dalam modul receiver. Bagian-bagian dari setiap modul sensor adalah satu
receiver ultrasonik, dua penguat non-inverting, rangkaian tone decoder dan
rangkaian peak detector. Gambar 3.7 menunjukkan gambar rangkaian pada
modul sensor dan daftar komponen yang digunakan.
Dua buah penguat op-amp CA3130 pada modul sensor digunakan sebagai
penguat tak membalik (non-inverting) yang menguatkan sinyal ultrasonik dari
transmitter. Setiap op-amp diberi catu tegangan sebesar 12 volt. Rumus dari
penguatan non-inverting adalah dituliskan pada persamaan (3-6) sebagai berikut:
Av =
Rf
+1
Rin
(3-6)
Nilai Rf yang digunakan adalah 20 KΩ dan 10 KΩ. Nilai Rin yang
digunakan adalah 1 KΩ. Nilai Rf pada penguat op-amp pertama dilambangkan
dengan R3 dan TP1. Nilai Rf pada penguat op-amp kedua dilambangkan dengan
R8 dan TP2. Nilai Rin pada penguat op-amp pertama dilambangkan dengan R7
dan nilai Rin pada penguat op-amp kedua dilambangkan dengan R9 (Gambar
3.7). Perhitungan untuk penguatan op-amp non-inverting dituliskan pada
persamaan (3-7).
Rf max = 22 KΩ
20 KΩ + 10 KΩ
+ 1 = 31x
1KΩ
Rf min = 10 KΩ
A=
A=
10 KΩ
+ 1 = 11 x
1KΩ
(3-7)
54
Dengan mengatur nilai dari trimpot 20 KΩ, maka penguatan maksimum
adalah dari setiap penguat op-amp adalah 31 kali. Dengan dua kali penguatan,
maka tegangan AC yang dikuatkan akan menjadi 31x31 = 961 kali. Output dari
dua penguat op-amp akan menuju ke tone decoder dan peak detector. Tone
decoder akan menyeleksi frekuensi 40 KHz sedangkan peak detector akan
mengukur tegangan DC.
Rangkaian tone decoder digunakan untuk menyeleksi sinyal yang
dikirimkan dari transmitter ultrasonik sebesar 40 KHz. IC tone decoder adalah
LM567 dengan menggunakan catu tegangan sebesar 5 volt (lebih jelasnya lihat
bab 3.1.6 tentang modul rangkaian power supply). Untuk melewatkan frekuensi
( fo ) 40 KHz, maka perlu diatur nilai resistor dan kapasitor pada rangkaian tone
decoder. Nilai kapasitor (C15 pada gambar 3.7) yang digunakan adalah 1 nF
(10-9 F) dan nilai resistor dihitung dengan rumus sebagai berikut:
fo =
1
1,1RC
1
R=
= 22727,27
1,1(40000)(10 −9 )
(3-8)
Dari persamaan (3-8) karena nilai resistor yang tidak bulat, maka
digunakan nilai resistor sebesar 20 KΩ (R12) dan trimpot 5 KΩ (TP3). Dengan
bantuan osiloskop, trimpot 5 KΩ dapat diatur agar frekuensi yang diinginkan
adalah 40 KHz. Bila frekuensi yang diterima adalah 40 KHz maka tone decoder
akan mengeluarkan logika 0 dan bila frekuensi yang diterima bukan 40 KHz
maka tone decoder akan mengeluarkan logika 1. Keluaran logika 0 dan 1 ini
akan dijadikan masukan ke port 0 pada mikrokontroler.
55
Vcc
12V
Vcc
12V
C1
C3
8
C2
1
8
1
CA3130
6
4
7
6
+3
2
Receiver
ultrasonik
C4
R1
CA3130
4
R2
TP1
7
+3
-
R4
R5
2
C5
R3
R6
TP2
C7
R8
C6
R7
R10
C9
R9
C10
C8
Ke Port 0
AT89C52
(pin 32 -39)
C11
RANGKAIAN PEAK DETECTOR
R11
IN4148
Vcc
5V
Vcc
5V
Zener
diode
C16
8
4
6
LM567
3
1
2
5
7
R12
R13
TP3
C15
C12
C13
C14
Daftar komponen modul sensor
Resistor
Nilai
Kapasitor
Nilai
Trimpot
Nilai
R
1
1MΩ
C
1
47pF
TP
1
R
2
10KΩ
C
2
10nF
TP
2
20KΩ
R
3
10kΩ
C
3
47pF
TP
3
5KΩ
R
4
1MΩ
C
4
10nF
R
5
10KΩ
C
5
10pF
R
6
10KΩ
C
6
10nF
R
7
1KΩ
C
7
10pF
R
8
10KΩ
C
8
100nF
R
9
1KΩ
C
9
10nF
R
10
10KΩ
C
10
100nF
R
11
1KΩ
C
11
100nF
R
12
20KΩ
C
12
10nF
R
13
100KΩ
C
13
20nF
C
14
10nF
C
15
1nF
C
16
1nF
Gambar 3.7 Rangkaian skematik modul sensor
20KΩ
Ke IN0 - IN7
ADC0809
(pin 1-5,pin 26-28)
56
Kegunaan dari peak detector (gambar 3.7) adalah untuk mengukur
tegangan DC yang dikuatkan oleh op-amp. Tegangan DC ini mengambil nilai
tegangan maksimum AC dan digunakan sebagai input kepada ADC. Rangkaian
dasar dari peak detector ini terdiri dari satu dioda IN4148 dan satu kapasitor
(C16). Pada saat arus melewati dioda, maka Dioda IN4148 akan melewatkan
tegangan positif dari sinyal sinus dan kemudian digunakan kapasitor untuk
membentuk tegangan DC (lebih jelasnya pada bab 4.4.2 tentang pengujian peak
detector). Karena tegangan offset dari sinyal input adalah 6 volt, maka
diperlukan penurunan tegangan (back-off voltage) sebesar nilai tersebut. Untuk
itu diode zener bernilai 6,2 volt yang akan menurunkan posisi sinyal tersebut
sebanyak 6,2 volt agar sejajar dengan ground dan kemudian dikirim ke ADC.
Keluaran dari rangkaian peak detector akan berada pada latch di ADC yang siap
untuk diambil oleh mikrokontroler.
3.1.4
Modul Sistem Minimum
Pada modul sistem minimum terdapat dua bagian utama yaitu rangkaian
IC AT89C52 dan rangkaian IC ADC0809. Dua rangkaian saling terkoneksi dan
mendapatkan input dari modul sensor. Modul ini memiliki tugas sebagai
pengatur dari seluruh kerja sistem yang berada pada modul receiver. Gambar 3.8
menunjukkan rangkaian skematik dari modul sistem minimum dan daftar
komponen yang digunakan.
Pada sistem ini, mikrokontroler AT89C52 memiliki beberapa fungsi.
Fungsi pertama dari AT89C52 adalah membaca input dari delapan tone decoder
dalam bentuk bit 0 dan 1. Fungsi lainnya AT89C52 juga berguna untuk
57
melakukan proses perbandingan tegangan digital hasil konversi dari ADC0809
serta sebagai pengatur dari jumlah pergerakan motor stepper.
Mikrokontroler akan menerima input dari delapan tone decoder melalui
port 0 (pin32 s.d. 39) berupa logika 0 (high) atau 1 (low). Logika low memiliki
arti bahwa frekuensi yang diterima receiver ultrasonik adalah 40 KHz sedangkan
logika high berarti frekuensi yang diterima receiver ultrasonik bukan 40 KHz.
Dalam satu proses, dapat terjadi kemungkinan lebih dari satu receiver ultrasonik
yang menerima frekuensi 40 KHz atau mendapat logika 0. Karena itu deret
logika 0 dan 1 dari receiver-receiver ultrasonik akan dijadikan acuan untuk
membandingkan 8 buah data digital yang telah dikonversi oleh ADC.
Hasil konversi ADC akan diterima mikrokontroler pada port 2 (pin 21
s.d. 28). Didalam mikrokontroler itu sendiri telah disediakan tempat untuk
menampung 8 data digital dari 8 receiver ultrasonik. Melalui program dalam
mikrokontroler, 8 data digital tersebut akan disaring untuk mendapatkan data
yang terbesar.
Proses penyaringan tersebut adalah dengan mengambil data dari receiverreceiver ultrasonik yang berlogika 0 dan membandingkan data-data digitalnya
untuk mendapatkan data terbesar. Data terbesar adalah data dari receiver
ultrasonik yang menerima tegangan terbesar. Tegangan terbesar didapatkan saat
transmitter ultrasonik dan receiver ultrasonik berada pada jarak minimum dan
terarah secara point to point (referensi bab 2.1.2). Kemudian mikrokontroler akan
mengeluarkan output berupa clock (pin 1, 2, 3) kepada driver motor stepper IC
L297 untuk berputar ke arah receiver ultrasonik yang memiliki tegangan
58
terbesar. Pin-pin lainnya pada mikrokontroler digunakan sebagai inisialisasi
untuk ADC, rangkaian reset, kristal, catu tegangan dan ground.
Rangkaian reset (gambar 3.8) berfungsi untuk membersihkan isi register
dan port pada mikrokontroler dengan menekan tombol (S1) pada rangkaian reset.
Tegangan 5 volt dimasukkan ke dalam rangkaian ini sebagai catu tegangan untuk
rangkaian reset. Oleh karena muatan dari kapasitor 1 µF (C5) masih kosong
maka terjadi kondisi dimana rangkaian ini seolah-olah terhubung singkat. Bila
pin RESET (pin 9) di mikrokontroler diberi logika high maka kapasitor akan
terisi penuh dan mikrokontroler akan di-reset.
Rangkaian pembangkit pulsa clock atau rangkaian kristal (gambar 3.8)
pada mikrokontroler menggunakan sebuah kristal 11 Mhz dan 2 buah kapasitor
yang masing-masing bernilai 33 pF (C3 dan C4). Fungsi dari kristal ini untuk
memberikan frekuensi sebesar 11 Mhz. Frekuensi tersebut dibangkitkan untuk
menggerakkan mikrokontroler dan fungsi dari kapasitor untuk menstabilkan nilai
frekuensi tersebut.
ADC0809 yang digunakan menggunakan 8 channel input analog (IN0
s.d. IN7) dan 8 channel output digital (2-1 s.d. 2-8). Untuk mengaktifkan proses
konversi analog ke digital, terlebih dahulu ADC harus diberi 3 bit address (pin
22, 23, 24) dari mikrokontroler. Pin-pin seperti ALE
(Address latch enable),
START, EOC (End of Conversion) dan OE (Output Enable) juga digunakan
dalam konversi data analog ke digital.
Pada perancangan ini, tegangan referensi yang digunakan untuk ADC
adalah 5 volt DC. Jadi untuk satu bit digital dari ADC mempunyai tegangan
sebesar 0,019 volt. Nilai ini didapatkan dari tegangan referensi dibagi dengan
59
Vcc 5V
OUTPUT KE
IC L297
(pin 10,17,18)
Vcc 5V
S1
R5
C5
Vcc 5V
Rangkaian Reset
R6
R4
C3
11MHz
1
(T2) P1.0
2
(T2 EX) P1.1
P0.0 (AD0) 39
VCC 40
3
P1.2
P0.1 (AD1) 38
4
P1.3
P0.2 (AD2) 37
5
P1.4
P0.3 (AD3) 36
6
P1.5
P0.4 (AD4) 35
7
P1.6
P0.5 (AD5) 34
8
P1.7
P0.6 (AD6) 33
9
RST
P0.7 (AD7) 32
10 (RXD) P3.0
EA/VPP 31
11 (TXD) P3.1
ALE/PROG 30
12 (INT0) P3.2
PSEN 29
13 (INT1) P3.3
P2.7 (A15) 28
14 (T0) P3.4
P2.6 (A14) 27
15 (T1) P3.5
P2.5 (A13) 26
16 (WR) P3.6
P2.4 (A12) 25
17 (RD) P3.7
P2.3 (A11) 24
18 XTAL2
P2.2 (A10) 23
19 XTAL1
C4
INPUT DARI 8
TONE DECODER LM67
P2.1 (A9) 22
AT89C52 P2.0 (A8) 21
20 GND
Rangkaian Kristal
INPUT DARI 8
RANGKAIAN
PEAK DETECTOR
1 IN3
IN2 28
2 IN4
IN1 27
3 IN5
IN0 26
4 IN6
ADD A 25
5 IN7
ADD B 24
6 START
ADD C 23
ALE 22
7 EOC
Vcc 5V
8
2
7
3
Timer
NE555
1
4
6
5
2-1 MSB 21
8 2-5
9 OUTPUT ENABLE
2-2 20
10 CLOCK
2-3 19
2-4 18
11 VCC
R1
2 -8 LSB 17
12 VRE F(+)
R2
V RE F (-) 16
13 GND
14 2-7
ADC0809
2-6 15
R3
C1
C2
Daftar komponen modul sistem minimum
Resistor
Nilai
Kapasitor
Nilai
R
R
R
R
1
2
3
4
1KΩ
1KΩ
20KΩ
1KΩ
C
C
C
C
1
2
3
4
10nF
680pF
33pF
33pF
R
5
2KΩ
C
5
1uF
R
6
10KΩ
Gambar 3.8 Rangkaian skematik modul sistem minimum
60
resolusi ADC (28 = 256). Mengenai perhitungan ini digunakan pada bab 4.4.3
tentang pengujian debugger pada saat tegangan input yang diberikan sebesar
2,86 volt.
Clock yang digunakan ADC dibangkitkan frekuensinya dengan
menggunakan timer NE555. Frekuensi yang digunakan adalah 500 KHz karena
frekuensi tersebut digunakan untuk kecepatan proses konversi dari data analog
ke data digital. Untuk membangkitkan frekuensi sebesar 500 KHz maka
digunakan rumus yang dituliskan pada persamaan (3-9) berikut :
Ra + 2 Rb =
1,44
f .C
1,44
− Ra
f .C
1,44
− 1000 = 4234,3
2 Rb =
(500000)(680 x10 −12 )
Rb = 2117,15Ω
2 Rb =
(3-9)
Nilai resistor Ra yang digunakan adalah 1 KΩ (R1), kapasitor C yang
digunakan adalah 680 pF (C2) dan resistor Rb sebesar 1 KΩ (R2) ditambah
trimpot 20 KΩ (R3). Trimpot tersebut dapat diatur agar mencapai nilai hambatan
yang sesuai untuk frekuensi sebesar 500 KHz.
3.1.5
Modul Driver Motor Stepper
Motor stepper yang digunakan disini adalah motor stepper jenis 2 kutub.
Untuk menggerakkan motor ini diperlukan driver motor stepper yang sesuai
dengan kebutuhan. Dalam membangun modul ini diperlukan IC L297 dan IC
L298
yang dapat memberikan eksitasi untuk motor stepper. Gambar 3.9
61
memperlihatkan rangkaian skematik dari modul driver motor stepper dan
komponen-komponen yang digunakan untuk membangun modul tersebut.
Input dari
Power Supply
Dari
AT89C52
(pin 1-3)
Vcc
5V
A
D12
D1
B
D3
C3
C4
R1
17
12
VS
CLK
A 4
5
RST
B 6
7
CW/CCW
C 7
10
HALF/FULL
D 9
12
CONTROL
L297
SYNC
15
VREF
INH1 5
14
SENSE 1
INH2 8
13
SENSE 2
10 ENABLE
6
11
9
VSS
D10
D9
D8
D4
D5
D6
D7
OUT 1 2
INPUT1
OUT 2 3
INPUT2
OUT 3 13
INPUT3
INPUT4
D11
4
VS
Motor Stepper
2 kutub
18
L298
OUT 4 14
SENSE A 1
ENABLE A
SENSE B 15
ENABLE B
GND
8
HOME
OSC 16
GND
2
C1
R2
R3
C2
R4
D2
Daftar komponen modul driver motor stepper
Dioda
D1
D2
D3
D4
D5
D6
D7
D8
D9
D10
D11
D12
Type
IN4001
IN4001
IN4001
Fast Diode
Fast Diode
Fast Diode
Fast Diode
Fast Diode
Fast Diode
Fast Diode
Fast Diode
IN4001
Resistor
R1
R2
R3
R4
Nilai
1KΩ
22KΩ
0,33Ω /2W
0,33Ω /2W
Kapasitor
C1
C2
C3
C4
Nilai
33nF
0,1uF
470 uF /25V
0,1uF
Gambar 3.9 Rangkaian skematik modul driver motor stepper
Driver motor mempunyai cara kerja yang dapat memudahkan
penggunaan motor steper 2 kutub ini. Kegunaan driver motor IC L297 adalah
mengatur pergerakan motor beserta mode langkah stepper. IC L297 menerima
input dari mikrokontroler. Pin 1 mikrokontroler terhubung dengan pin 18 (CLK)
62
L297 yang fungsinya untuk mengatur jumlah step dari motor stepper. Pin 2
mikrokontroler terhubung dengan pin 17 (CW/CCW) L297 yang berfungsi untuk
mengatur arah dari motor stepper untuk berputar searah jarum jam atau
sebaliknya. Pin 3 mikrokontroler terhubung dengan pin 10 (ENB) L297 yang
berfungsi untuk mengaktifkan motor stepper agar dapat dioperasikan. Sebagai
langkah dari motor stepper, digunakan mode half step yang memiliki pergerakan
lebih halus dibandingkan mode full step. Pada rangkaian skematik (Gambar 3.9)
pengaturan mode langkah stepper diatur ambang, yang berarti mode langkah
stepper menggunakan mode half step (Lihat data sheet L297 Lampiran L9 hal.
4/11). Cara kerja dari IC L297 ini menggunakan clock yang akan memberikan
trigger keluaran A,B,C dan D dari IC L297 menjadi high dan low. Pulsa clock
yang diterima oleh IC L297 dibangkitkan secara manual dari program yang ada
di dalam mikrokontroler (Listing program bab 3.2.2). Keluaran dari IC L297 ini
akan bervariasi sesuai dengan clock yang diberikan oleh mikrokontroler. Dengan
IC L297, pergerakan motor dapat diatur dari mikrokontroler melalui IC L297.
IC L298 adalah IC Driver yang umumnya digunakan untuk motor
stepper. L298 mempunyai input yang berasal dari keluaran L297. Input tersebut
adalah sinyal fase motor dan kontrolnya (pin 4 s.d. 9 dari L297). Pin input L298
(5,7,10,12) akan mengolah sinyal tersebut untuk menggerakkan motor stepper.
Tanpa menggunakan IC L297, motor stepper tetap dapat berfungsi sebagaimana
harusnya. Hal ini dapat terjadi dengan ketentuan bahwa masukan yang diberikan
pada IC L298 sudah disesuaikan. Kegunaan dari IC L298 ini antara lain sebagai
interfacing kepada motor stepper yang menggunakan jenis 2 kutub. Kelebihan
lainnya dapat membuat motor stepper menjadi tidak mudah terpengaruh terhadap
63
gangguan eksternal, contohnya perubahan posisi secara paksa oleh manusia. Bila
modul receiver tersambung dengan listrik maka IC L298 menggunakan tegangan
dari sebesar 23,4 volt dan bila modul receiver menggunakan baterai NiCd maka
tegangan yang digunakan sebesar 12 volt. IC L298 dapat menggunakan tegangan
maksimal yang mencapai 36 volt DC (Data Sheet L298 lampiran L10 hal. 1/13).
3.1.6
Modul Rangkaian Power Supply
Rangkaian power supply menggunakan pencatu daya teregulasi dengan
input 220VAC/50Hz dari PLN yang bertujuan menghasilkan tegangan DC untuk
mengisi baterai NiCd 12 volt. Dengan menggunakan baterai NiCd, modul
receiver dapat tetap digunakan walaupun tidak dihubungkan dengan listrik.
Transformator step down akan merubah tegangan 220VAC/50Hz menjadi
18VAC/50Hz. Kemudian jembatan dioda akan menyearahkan tegangan 18 volt
AC tersebut menjadi 23,4 volt DC. Persamaan (3-10) digunakan untuk
menghitung perubahan tegangan AC menjadi DC (Wasito, 2001, p 36).
Vo ≈1,3 × Vs
(3-10)
Vo adalah nilai tegangan keluaran searah dan Vs adalah tegangan
keluaran dari transformator. Angka 1,3 adalah konstanta dalam perhitungan ini.
Dengan nilai Vs sebesar 18 volt AC, maka nilai Vo yang didapatkan setara
dengan 23,4 volt DC. Setelah tegangan DC diperoleh selanjutnya tegangan
ditapis oleh kapasitor elektrolit untuk membuang ripple yang tersisa pada
tegangan DC. Keluaran 23,4 volt tersebut akan digunakan untuk :
- Mengisi baterai 12 volt yang terdapat didalam modul rangkaian power supply.
65
Sebagai sumber tegangan untuk sistem yang dirancang ini digunakan
baterai 12 volt yang berjenis Nikel-Cadmium (NiCd). Keunggulan dari baterai
ini adalah memiliki tegangan nominal 1,5 volt tiap sel serta mampu di isi ulang
sebanyak lebih dari 500x untuk pengisian dan pembuangan.
3.2
Perancangan Piranti Lunak
Perancangan
piranti
lunak
untuk
sistem
alat
bantu
ultrasonik
menggunakan bahasa pemrograman MCS-52. Dalam perancangan piranti lunak
terdapat satu program yang dapat mengatur semua perintah di mikrokontroler
AT89C52. Program tersebut berisikan rangkaian perintah yang mengatur
keseluruhan kerja dari sistem yang dibuat. Penjelasan dari perancangan piranti
lunak terbagi menjadi penjelasan diagram alir dari program dan penjelasan untuk
listing program.
3.2.1
Diagram alir program MCS-52
Diagram alir (gambar 3.11) berisi urutan instruksi dari program yang
mengatur semua tugas dalam sistem secara keseluruhan. Program dimulai
dengan proses untuk inisialisasi dari sistem seperti mendeklarasi variabel, menset nilai awal variabel dan mendefinisikan jenis interrupt yang akan dipakai.
Kemudian ADC akan men-konversi tegangan analog dari 8 receiver ultrasonik
menjadi 8 data digital dan menyimpannya di mikrokontroler. Proses selanjutnya
pada program adalah membaca port 0 mikrokontroler yang berisi keluaran dari 8
tone decoder. Masukan tone decoder berasal dari frekuensi yang diterima
receiver ultrasonik. Bila frekuensi yang diterima salah satu receiver adalah 40
66
KHz, maka data digitalnya akan digunakan dalam proses pencarian data terbesar.
Proses pencarian data terbesar adalah membandingkan data-data digital dari
receiver ultrasonik yang mendapat frekuensi 40 KHz. Bila data terbesar sudah
didapatkan maka posisi receiver ultrasonik dapat diketahui. Nilai posisi tersebut
akan diberikan kepada IC dari motor stepper. IC tersebut akan menggerakkan
kepala motor stepper ke posisi yang telah ditentukan. Nilai posisi terakhir akan
disimpan pada mikrokontroler dan dijadikan acuan untuk pergerakan motor
selanjutnya. Program kemudian berada dalam keadaan standby dan menunggu
apabila ada pemanggilan dari modul transmitter. Untuk melihat diagram alir
yang lebih rinci dapat dilihat pada lampiran halaman L2 halaman 1/4 – 4/4.
3.2.2
Penjelasan Listing Program
Pada awal program didefinisikan pin-pin keluaran dan variabel yang
digunakan didalam program.
Pada baris program 56 sampai baris program 58 (lihat L1 halaman 2)
didefinisikan pin-pin yang digunakan untuk modul pengontrol motor stepper.
Variabel CLKPLS merupakan pulsa clock untuk pengontrol motor, karena
pengontrol motor yang digunakan ialah IC L297 dan L298. Pada IC L297, untuk
menggerakkan motor stepper sebanyak satu step maka harus diberikan pulsa
clock sebanyak satu kali. Pulsa clock tersebut dibangkitkan dari program pada
mikrokontroler, yaitu dengan cara men-set bit CLKPLS kemudian selang
beberapa waktu bit CLKPLS di-clear kembali. Sedangkan variabel CWCCW
berfungsi untuk menentukan arah perputaran dari motor stepper. Jika variabel
CWCCW di-set bit maka arah perputaran motor akan searah jarum jam.
67
Sebaliknya jika variabel CWCCW di-clear bit maka arah perputan motor akan
berlawanan dengan arah jarum jam. Motor stepper bergerak secara half step
karena pada perancangan perangkat kerasnya pin HALF/FULL pada IC L297
tidak dihubungkan (posisi ambang), jadi pin tersebut akan selalu high.
Pin enable berfungsi untuk mengaktifkan IC L297, pin enable ini harus
diatur high jika motor stepper ingin bergerak. Jika pin ini sudah diberi logika
high maka motor stepper akan berada dalam keadaan standby atau tidak dapat
digerakkan lagi secara manual oleh tangan manusia.
ADC yang digunakan adalah tipe 0809 yang mempunyai 8 channel
analog input yang bisa diakses setiap channel-nya dengan memberikan 3 bit
address-nya. Variabel ADDRS merupakan 3 bit address yang digunakan untuk
ADC. Untuk lebih jelasnya bisa dilihat pada baris program 87 (Lampiran L1
halaman 2). Untuk mengkonversi input analog, pertama-tama harus diberikan 3
bit address untuk menentukan input mana yang akan dikonversi. Contohnya mau
mengkonversi input analog ke-5 jadi diberikan 3 bit address (101), kemudian
harus diaktifkan ALE (Address Latch Enable) pada ADC dan kemudian di nonaktifkan lagi.
Pin ALE untuk ADC bisa dilihat pada baris program 59 (Lampiran L1
halaman 2). Setelah ALE pada ADC di non-aktifkan kemudian diikuti dengan
mengaktifkan bit STR (Start of conversion) dan selang beberapa waktu dinonaktifkan lagi. Pin STR untuk ADC ini bisa dilihat pada baris program 55
(Lampiran L1 halaman 2). Cara pengaktifan bit ALEADC dan STR mengikuti
aturan pada diagram waktu dari data sheet ADC 0809.
64
- Sebagai catu tegangan untuk IC L298 pada modul driver motor stepper.
- Untuk diregulasikan menjadi tegangan 5 volt dan 12 volt.
Regulator 12 volt digunakan untuk penguat CA3130 pada modul receiver
dan kipas pendingin. Dari data Sheet IC LM567 dan IC ADC0809, kedua IC
tersebut dapat menggunakan catu tegangan sebesar 9 volt. Namun data sheet dari
tone decoder LM567 juga menuliskan bahwa tone decoder akan high (5 volt)
jika frekuensi yang diterima bukan 40KHz dan ADC0809 juga masih dapat
berjalan dengan catu tegangan 5 volt. Dengan demikian untuk mempermudah
perancangan hardware tersebut maka catu tegangan untuk IC LM567 dan
ADC0809 diberikan tegangan sumber sebesar 5 volt. Regulator 5 volt digunakan
sebagai catu tegangan untuk tone decoder LM567, AT89C52, ADC0809, timer
NE555 dan IC L297. Gambar 3.10 adalah rangkaian skematik modul rangkaian
power supply beserta komponen-komponen yang digunakan.
Ke pin Vs
ICL298
A
Dioda-dioda Rectifier
220V AC
Header
4 Pin
G 12 5
Baterai 12V
B
D1
5V
Output
D3
Fuse
1A
D2
T1
I: 220V
O: 18V
S1
C1
12V
Output
Regulator
12V
C3
C4
LED1
C2
R1
Daftar komponen modul rangkaian power supply
Kapasitor
C1
C2
C3
C4
Regulator
5V
Nilai
4700uF / 35V
100uF / 50V
470uF / 50V
100uF / 50V
Resistor
R1
Nilai
1K2Ω
Dioda
D1
D2
D3
Tipe
IN4001
IN4001
IN4001
Gambar 3.10 Skematik modul rangkaian power supply
68
START
INISIALISASI SISTEM
-> Deklarasi variabel
-> Set nilai awal variabel
->Defini jenis intrrupt
Konversi semua
data analog ADC
YA
Simpan hasil konversi
sesuai dengan nilai
addressnya
Baca input
dari tone
decoder di P0
TIDAK
Cek bit input tone
decoder = 0FFh ?
YA
TIDAK
Cari data yang terbesar
dari data-data hasil
konversi ADC
Sudah ada data yang
terbesar ?
YA
Tentukan nilai
pergerakan dari
motor stepper
Simpan status
posisi dari motor
stepper
Ada penekanan
tombol lagi ?
TIDAK
END
Gambar 3.11 Diagram alir program MCS-52
69
Pada saat mengaktifkan dan kemudian dinon-aktifkan bit STR itu, proses
konversi mulai berjalan dan jika proses konversi sudah selesai maka ADC akan
memberikan logika high pada bit EOC (End of conversion). Pin EOC untuk
ADC bisa dilihat pada baris program 60 (lihat lampiran L1 halaman 2). Pin EOC
pada ADC dihubungkan ke mikrokontroler pada interrupt 1 eksternal, jadi bila
proses konversi pada ADC sudah selesai maka program pada mikrokontroler
akan di interrupt. Setelah interrupt terjadi maka data hasil konversi ADC
disimpan kedalam variabel dataAdc yang dijelaskan pada baris program 100
(lihat lampiran L1 halaman 2).
Setelah dikonversi, data 8 bit digital yang tersimpan di dalam variabel
dataAdc dipindahkan kedalam sebuah variabel DAT yang sesuai dengan alamat
address-nya. Contoh: jika yang dikonversi input analog ke-5 maka data hasil
konversinya akan disimpan kedalam variabel DAT4. Jadi data hasil konversinya
disimpan sesuai dengan address yang diberikan. Variabel DAT dijelaskan pada
baris program 89 sampai 96 (lihat lampiran L1 halaman 2).
Variabel PINT merupakan variabel yang menentukan data digital hasil
konversi yang paling terbesar. Variabel PINT merupakan bit addressable yang
dapat diakses per bit. Variabel PINT0 hingga PINT7 merupakan nama variabel
dari bit-bit yang termasuk pada variabel PINT. Variabel PINT dijelaskan pada
baris program 63 sampai 71 (lihat lampiran L1 halaman 2). Contoh: data yang
terbesar merupakan data ke-5 jadi PINT4 akan high, maka bit lainnya akan low.
Setelah konversi pada ADC selesai, maka ADC akan memberikan logika
high pada pin EOC. Kemudian flag fDataAdc berguna untuk menandakan
bahwa proses konversi telah usai. Jika proses konversi sudah selesai maka flag
70
tersebut akan aktif. Penjelasan tentang flag terdapat pada baris program 73 (lihat
lampiran L1 halaman 2).
Pada perancangan perangkat keras, digunakannya tone decoder adalah
untuk menyeleksi frekuensi yang diterima receiver ultrasonik. Jika frekuensi
yang diterima oleh tone decoder itu bernilai 40 KHz maka tone decoder akan
mengeluarkan logika low. Apabila tone decoder menerima frekuensi di bawah
atau di atas frekuensi 40 KHz maka tone decoder akan mengeluarkan logika
high. Variabel TD merupakan tempat penampungan output dari tone decoder. Di
dalam perancangan perangkat kerasnya digunakan 8 buah receiver ultrasonik
maka output dari tone decoder berjumlah 8 bit. Variabel TD merupakan bit
addressable yang bisa diakses setiap bit-nya. Variabel TD0 hingga TD7
merupakan nama variabel dari bit-bit yang termasuk pada variabel TD.
Penjelasan tentang variabel TD terdapat pada baris program 75 sampai 83 (lihat
lampiran L1 halaman 2).
Selanjutnya untuk mendefinisikan posisi dari motor maka digunakan
variabel degree. Variabel degree merupakan posisi motor stepper pada keadaan
awal. Sedangkan variabel setdeg merupakan posisi motor yang harus dituju oleh
motor stepper dari posisi keadaan awal. Variabel degree dan setdeg dijelaskan
pada baris program 85 dan 86 (lihat lampiran L1 halaman 2).
Gambar 3.12 menjelaskan posisi motor pada setiap receiver ultrasonik.
Pada perancangan perangkat keras, sudut antara setiap receiver ultrasonik 45
dejarat. Sedangkan karakteristik dari motor stepper yang digunakan untuk setiap
1 step-nya itu memiliki sudut 1,8 derajat. Jadi motor stepper harus bergerak
71
sebanyak 25 step untuk menempuh ke posisi receiver berikutnya. Oleh sebab itu
posisi motor diatas mempunyai nilai degree dengan selisih 25.
8
EC
R
RECEIVER
7
DEGREE
75
5
REVI E CE R
R
DEGREE
50
R
R
VE
EI
EC 6
45O
E
CE
4 IV E
R
DEGREE
125
RECEIVER
3
DEGREE
150
DEGREE
25
R
VE
EI
EC 2
RECEIVER
1
R
DEGREE
175
EI
VE
R
DEGREE
200
DEGREE
100
Gambar 3.12 Posisi motor pada setiap receiver ultrasonik
Prinsip dari pencarian data terbesar untuk semua data hasil konversi ADC
adalah dengan cara mengurangkan setiap data dengan data lainnya. Dengan
mengacu pada carry flag, jika carry flag tersebut aktif setelah operasi
pengurangan maka hasil pengurangan tersebut bernilai minus. Apabila carry flag
tidak aktif maka hasil pengurangan tersebut bernilai positif. Variabel hslkrng
merupakan tempat hasil operasi pengurangan. Kemudian variabel PRGK
merupakan tempat nilai dari jumlah pergerakan motor stepper. Contoh: PRGK =
25, maka motor stepper akan bergerak sebanyak 25 step. Penjelasan variabel
PRGK dan hslkrng terdapat pada baris 98 dan 99 (lampiran L1 halaman 2).
Pada modul utama dari program ini diinisialisasi tipe dari interrupt yang
digunakan. Pertama-tama di-set bit IT1 untuk menandakan bahwa jenis interrupt
yang digunakan merupakan aktif low. Kemudian di-set bit EX1 untuk
menandakan bahwa digunakan interrupt 1 eksternal dan selanjutnya men-set bit
72
EA untuk mengaktifkan penggunaan interrupt. Pin IT1, EX1 dan EA dijelaskan
pada baris program 112 sampai 114 (lihat lampiran L1 halaman 3).
Pertama-tama didefinisikan alamat stack pointer pada alamat 60h, jadi
bila terjadi interrupt di dalam program maka stack pointer akan menyimpan
status lokasi terakhir program berada. Setelah proses di dalam interrupt selesai,
maka program akan melanjutkan kembali di lokasi sebelum diberi interrupt.
Variabel SP dijelaskan pada baris program 115 (lihat lampiran L1 halaman 3).
Di dalam program utama, digunakan macro untuk mempermudah dalam
penulisan source code yang berulang-ulang. Macro initADC merupakan proses
inisialisasi dari ADC. Macro initADC dijelaskan pada baris program 9 sampai
19 (lihat lampiran L1 halaman 1).
Penjelasan dari macro initADC dijelaskan sebagai berikut ini. Pada awal
macro di-set bit outenb ini menandakan bahwa output enable pada ADC
diaktifkan. Berikutnya di-clear bit STR yaitu start konversi dan kemudian diclear bit ALEADC untuk mematikan ALE pada ADC. Selanjutnya
mengaktifkan bit EOC (akhir dari konversi) dan men-set bit flag fDataAdc.
Untuk lebih memastikan bahwa address yang pertama kali diberikan ke ADC itu
address 0 maka port P1 diberi nilai 11000111b.
Kemudian dalam menentukan posisi awal dari motor stepper diberikan
nilai degree-nya sama dengan 200. Karena sebelum program dijalankan, posisi
motor stepper diarahkan ke modul sensor 1 secara manual. (lihat lampiran L1
halaman 3 pada baris program 129). Pada saat program baru dijalankan, nilai dari
DAT0 sampai DAT7 diberi nilai nol. Variabel DAT0 sampai DAT7 dijelaskan
pada baris program 132 sampai 139 (lihat lampiran L1 halaman 3).
73
Setelah semua proses inisialisasi dan definisi nilai awal, maka program
akan mulai mengirimkan 3 bit address untuk ADC agar mulai mengkonversi
input analog. Karena penekanan tombol pada modul transmitter yang hanya
sesaat, dapat terjadi kemungkinan nilai tegangan pada input analog ADC akan
hilang terlebih dahulu sebelum dikonversi. Jadi untuk lebih memastikan maka
proses konversi ADC dilakukan terlebih dahulu sebelum penyaringan frekuensi.
Di dalam program terdapat instruksi untuk mengirimkan 3 bit address mulai dari
address 0 hingga address 7. Hal ini berarti ADC akan mengkonversi seluruh
input analognya dengan berurutan seperti yang dijelaskan pada baris program
143 sampai 412 (lihat lampiran L1 halaman 3 sampai 8).
Pada proses pengiriman 3 bit address ADC terdapat perintah adc addrs
yang merupakan macro untuk proses pengiriman 3 bit addres ADC. Pada
awalnya macro di push ACC dan register B kedalam stack. Karena akumulator
dan register B digunakan juga di dalam macro ini. Kemudian flag fDataAdc diclear, kemudian nilai pada variabel addrs di AND dengan 00000111b ini
berfungsi agar nilai address itu berada pada bit ke-0 sampai bit ke-3. Kemudian
digeser ke kiri tiga kali ini bertujuan karena pada perancangan perangkat
kerasnya 3 pin address untuk ADC itu berada pada P1.3, P1.4 dan P1.5.
Kemudian hasil penggeseran ini dikeluarkan pada port 1. Macro ADC ini
dijelaskan pada baris program 21 sampai 51 (lihat lampiran L1 halaman 1).
Kemudian selanjutnya proses konversi dimulai, di-set bit ALE pada
ADC. Perintah NOP (No Operation) bertujuan untuk menunda beberapa saat
kemudian men-clear kembali bit ALE pada ADC. Kemudian dilakukan perintah
74
NOP untuk menunda beberapa saat, lalu men-set bit STR (Start Of Conversion)
kemudian NOP lagi kemudian meng-clear kembali bit STR.
Berikutnya diperiksa status dari flag fDataAdc ini jika flag ini low maka
program akan memeriksa kembali status dari flag ini begitu seterusnya. Flag
fDataAdc akan aktif bila proses konversi ADC sudah selesai dan program utama
sudah ter-interrupt. Jika status dari flag fDataAdc ini high maka data hasil
konversi yang ada di port P2 disimpan kedalam sebuah variabel dataAdc.
Kemudian
dipanggil
prosedur
simpanData,
di
dalam prosedur
simpandata ini data yang tersimpan di variabel dataAdc akan disimpan lagi
kedalam sebuah variabel DAT0 sampai DAT7 sesuai dengan nilai address-nya.
Jika prosedur simpanData itu sudah selesai dikerjakan maka program akan
kembali lagi dan mengeksekusi baris berikutnya yaitu POP register B dan
Akumulator dan macro selesai.
Prosedur dari simpan data ini pada awalnya push akumulator ke dalam
stack, kemudian nilai address disimpan ke dalam akumulator. Kemudian nilai
pada akumulator ini di periksa nilai. Setelah nilai pada variabel dataAdc itu
disimpan kedalam salah satu variabel DAT maka program akan pop akumulator
kembali dilanjutkan dengan return, yaitu program akan kembali ke baris program
sesudah perintah acall terjadi. Prosedur simpanData ini dijelaskan pada baris
program 740 sampai 778 (lihat lampiran L1 halaman 13 dan 14).
Kemudian setelah semua data dikonversi dan sudah tersimpan di variabel
DAT0 sampai DAT7 maka program selanjutnya akan membaca nilai input dari
tone decoder pada port P0. Keluaran dari tone decoder ini bisa terjadi pulse atau
terjadi perubahan output dari high ke low maupun sebaliknya dengan sangat
75
cepat. Jika menggunakan LED sebagai indikatornya maka LED tersebut akan
mengedip (blinking). Jadi setelah prosedur simpandata ini selesai dikerjakan
maka variabel DAT0 sampai DAT7 akan berisi nilai hasil konversi input analog
sesuai dengan nilai address-nya.
Karena keluaran dari tone decoder yang masuk ke dalam mikrokontroler
itu bisa merupakan pulse, maka di dalam program harus diatasi dengan membaca
input tone decoder sebanyak 4 kali. Kemudian dari keempat input tone decoder
ini akan di OR-kan satu sama lain. Hasil dari operasi OR ini disimpan kedalam
suatu variabel TD. Untuk menampung input tone decoder yang dibaca sebanyak
4 kali, digunakan register R0, R1, R2 dan R7. Pada awalnya nilai register ini
diberi nilai nol.
Digunakan gerbang logika OR untuk mem-filter input tone decoder
karena prinsip dasar dari gerbang OR yaitu bila salah satu input-nya bernilai
high, maka output-nya akan high. Sebab dari digunakannya gerbang logika OR
adalah input tone decoder ini sering mengeluarkan pulsa pada saat dibaca oleh
mikrokontroler. Bila Input tone decoder memiliki frekuensinya benar, maka
output-nya akan mengeluarkan logika low dan bila terjadi pulsa maka output dari
tone decoder akan berubah secara terus menerus dari high ke low. Jika logika
low di OR-kan dengan logika high, maka hasilnya akan high kemudian bila di
OR-kan lagi dengan logika high maka hasil outputnya akan high juga. Ini
dijelaskan pada baris program 416 sampai 446 (lihat lampiran L1 halaman 8).
Kemudian hasil dari operasi gerbang OR itu disimpan kedalam variabel
TD yang kemudian di periksa apakah nilai pada variabel TD itu bernilai 0FFh.
Jika sama dengan 0FFh maka program akan kembali lagi dari awal ini
76
menandakan bahwa belum terjadi penekanan tombol pada transmitter ultrasonik.
Jika tidak sama dengan 0FFh maka program akan lanjut ke baris program
berikutnya. Pengecekan variabel TD ini dijelaskan pada baris program 448
sampai 451 (lihat lampiran L1 halaman 8).
Jika nilai pada variabel TD itu tidak sama dengan 0FFh maka program
akan masuk kedalam modul pencarian data yang terbesar. Prinsip yang
digunakan di dalam program ini untuk mencari data yang paling terbesar ialah
dengan operasi SUBB (pengurangan). Dalam operasi pengurangan , carry flag
akan aktif atau high bila hasil pengurangan adalah minus. Bila status dari carry
flag itu sedang high sebelum operasi pengurangan terjadi maka bilangan yang
digunakan dalam operasi tersebut dianggap bilangan minus. Oleh sebab itu,
sebelum operasi pengurangan berlangsung, harus di-clear terlebih dahulu status
dari carry flag-nya. Penggunaan register R5 ini untuk tempat tampung sementara
nilai dari data yang paling terbesar. Variabel PINT ini berfungsi sebagai variabel
penunjuk yang setiap bitnya mewakili DAT0 sampai DAT7. Variabel PINT ini
merupakan variabel yang bisa diakses setiap bitnya. Variabel PINT0 hingga
PINT7 ini merupakan nama variabel dari bit-bit yang termasuk di dalam variabel
PINT. Pada awal modul proses ini nilai variabel PINT diberi nilai 0FFh. Yang
dijelaskan pada baris program 455 sampai 458 (lampiran L1 halaman 8).
Input tone decoder yang sebelumnya di OR sebanyak 4 kali akan di
periksa setiap bitnya. Kemudian di periksa bit td0 sama dengan high. Jika sama
dengan high maka program lompat ke modul prs0s yang akan memeriksa bit
berikutnya yaitu td1. Jika sama dengan nol maka variabel PINT di clear
kemudian bit pint0 di set high. Nilai hasil konversi DAT0 dimasukkan kedalam
77
register R5, ini menandakan nilai DAT0 itu paling besar sementara karena
proses perbandingannya baru hanya satu data. Dijelaskan pada baris program 461
sampai 464 (lampiran L1 halaman 9).
Di dalam modul ini bit td1 akan diperiksa sama dengan high. Jika sama
dengan high maka program akan lompat ke modul prs1t. Jika td1 sama dengan
nol maka nilai hasil konversi DAT1 akan dibandingkan dengan nilai yang ada di
register R5. Proses perbandingan ini dengan cara menguranginya. Jadi nilai
DAT1 dikurangi dengan nilai yang ada di register R5 kemudian hasil
pengurangan ini diperiksa apakah carry flag-nya aktif. Jika carry flag-nya aktif
maka program akan lompat ke modul prs1t. Jika carry flag-nya tidak aktif maka
program akan lompat ke modul prs0bs. Dijelaskan pada baris program 467
sampai 474 (lihat lampiran L1 halaman 9).
Jika carry flag-nya tidak aktif maka program akan lompat modul prs0bs.
Maka variabel PINT di clear kemudian di set bit pint1, ini menandakan bahwa
data yang terbesar sementara ialah data ke-1 hasil konversi ADC. Dijelaskan
pada baris program 477 sampai 479 (lihat lampiran L1 halaman 9).
Jika carry flagnya aktif maka program akan lompat ke modul prs1t, yaitu
memeriksa status bit tone decoder berikutnya. Jika status bit td2 itu sama dengan
high maka program akan lompat ke modul prs2t. Jika status bit td2 itu sama
dengan low maka nilai hasil konversi ADC DAT2 akan dibandingkan dengan
nilai yang ada di register R5. Caranya sama dengan yang sebelumnya. Nilai
DAT2 dikurangi dengan nilai R5 selanjutnya setelah operasi pengurangan ini di
periksa status dari carry flagnya. Jika carry flagnya aktif maka program akan
lompat ke modul prs2t. Jika carry flag-nya tidak aktif maka program akan
78
lompat ke modul prs1bs. Dijelaskan pada baris program 482 sampai 489 (lihat
lampiran L1 halaman 9).
Setelah operasi pengurangan tersebut, jika status dari carry flagnya tidak
aktif maka program akan lompat ke modul prs1bs. Kemudian variabel PINT di
clear kemudian di set bit pint2, ini menandakan bahwa data yang terbesar
sementara ialah data ke-2 hasil konversi ADC. Dijelaskan pada baris program
492 sampai 494 (lihat lampiran L1 halaman 9).
Jika carry flagnya aktif maka program akan lompat ke modul prs2t, yaitu
memeriksa status bit tone decoder berikutnya. Jika status bit td3 itu sama dengan
high maka program akan lompat ke modul prs3t. Jika status bit td3 itu sama
dengan low maka nilai hasil konversi ADC DAT3 akan dibandingkan dengan
nilai yang ada di register R5. Caranya sama dengan yang sebelumnya. Nilai
DAT3 dikurangi dengan nilai R5 selanjutnya setelah operasi pengurangan ini di
periksa status dari carry flag-nya. Jika carry flag-nya aktif maka program akan
lompat ke modul prs3t. Jika carry flag-nya tidak aktif maka program akan
lompat ke modul prs2bs. Dijelaskan pada baris program 497 sampai 504
(lampiran L1 halaman 9).
Setelah operasi pengurangan tersebut, jika status dari carry flag-nya tidak
aktif maka program akan lompat ke modul prs2bs. Kemudian variabel PINT di
clear kemudian di set bit pint3, ini menandakan bahwa data yang terbesar
sementara ialah data ke-3 hasil konversi ADC. Dijelaskan pada baris program
507 sampai 509 (lihat lampiran L1 halaman 9).
Jika carry flag-nya aktif maka program akan lompat ke modul prs3t,
yaitu memeriksa status bit tone decoder berikutnya. Jika status bit td4 itu sama
79
dengan high maka program akan lompat ke modul prs4t. Jika status bit td4 itu
sama dengan low maka nilai hasil konversi ADC DAT4 akan dibandingkan
dengan nilai yang ada di register R5. Caranya sama dengan yang sebelumnya.
Nilai DAT4 dikurangi dengan nilai R5 selanjutnya setelah operasi pengurangan
ini di periksa status dari carry flag-nya. Jika carry flag-nya aktif maka program
akan lompat ke modul prs4t. Jika carry flag-nya tidak aktif maka program akan
lompat ke modul prs3bs. Dijelaskan pada baris program 512 sampai 519 (lihat
lampiran L1 halaman 9 dan 10).
Setelah operasi pengurangan tersebut, jika status dari carry flag-nya tidak
aktif maka program akan lompat ke modul prs3bs. Kemudian variabel PINT di
clear kemudian di set bit pint4, ini menandakan bahwa data yang terbesar
sementara ialah data ke-4 hasil konversi ADC. Dijelaskan pada baris program
522 sampai 524 (lihat lampiran L1 halaman 10).
Jika carry flag-nya aktif maka program akan lompat ke modul prs4t,
yaitu memeriksa status bit tone decoder berikutnya. Jika status bit td5 tersebut
sama dengan high maka program akan lompat ke modul prs5t. Jika status bit td5
itu sama dengan low maka nilai hasil konversi ADC DAT5 akan dibandingkan
dengan nilai yang ada di register R5. Caranya sama dengan yang sebelumnya.
Nilai DAT5 dikurangi dengan nilai R5 selanjutnya setelah operasi pengurangan
ini di periksa status dari carry flag-nya. Jika carry flag-nya aktif maka program
akan lompat ke modul prs5t. Jika carry flag-nya tidak aktif maka program akan
lompat ke modul prs4bs. Dijelaskan pada baris program 527 sampai 534 (lihat
lampiran L1 halaman 10).
80
Setelah operasi pengurangan tersebut, jika status dari carry flag-nya tidak
aktif maka program akan lompat ke modul prs4bs. Kemudian variabel PINT di
clear kemudian di set bit pint5, ini menandakan bahwa data yang terbesar
sementara ialah data ke-5 hasil konversi ADC. Dijelaskan pada baris program
537sampai 539 (lihat lampiran L1 halaman 10).
Jika carry flag-nya aktif maka program akan lompat ke modul prs5t,
yaitu memeriksa status bit tone decoder berikutnya. Jika status bit td6 itu sama
dengan high maka program akan lompat ke modul prs6t. Jika status bit td6 itu
sama dengan low maka nilai hasil konversi ADC DAT6 akan dibandingkan
dengan nilai yang ada di register R5. Caranya sama dengan yang sebelumnya.
Nilai DAT6 dikurangi dengan nilai R5 selanjutnya setelah operasi pengurangan
ini di periksa status dari carry flag-nya. Jika carry flag-nya aktif maka program
akan lompat ke modul prs6t. Jika carry flag-nya tidak aktif maka program akan
lompat ke modul prs5bs. Dijelaskan pada baris program 542 sampai 549 (lihat
lampiran L1 halaman 10).
Setelah operasi pengurangan tersebut, jika status dari carry flag-nya tidak
aktif maka program akan lompat ke modul prs5bs. Kemudian variabel PINT di
clear kemudian di set bit pint6, ini menandakan bahwa data yang terbesar
sementara ialah data ke-6 hasil konversi ADC. Dijelaskan pada baris program
552 sampai 554 (lihat lampiran L1 halaman 10).
Jika carry flag-nya aktif maka program akan lompat ke modul prs6t,
yaitu memeriksa status bit tone decoder berikutnya. Jika status bit td7 itu sama
dengan high maka program akan lompat ke modul prs7t. Jika status bit td7 itu
sama dengan low maka nilai hasil konversi ADC dat7 akan dibandingkan dengan
81
nilai yang ada di register R5. Caranya sama dengan yang sebelumnya. Nilai
DAT7 dikurangi dengan nilai R5 selanjutnya setelah operasi pengurangan ini di
periksa status dari carry flag-nya. Jika carry flag-nya aktif maka program akan
lompat ke modul prs7t. Jika carry flag-nya tidak aktif maka program akan
lompat ke modul prs6bs. Dijelaskan pada baris program 557 sampai 564 (lihat
lampiran L1 halaman 10).
Setelah operasi pengurangan tersebut, jika status dari carry flag-nya tidak
aktif maka program akan lompat ke modul prs6bs. Kemudian variabel PINT di
clear kemudian di set bit pint7, ini menandakan bahwa data yang terbesar
sementara ialah data ke-7 hasil konversi ADC. Dijelaskan pada baris program
567 sampai 569 (lihat lampiran L1 halaman 10).
Jika carry flag-nya aktif maka program akan lompat ke modul prs7t, di
dalam modul ini di periksa nilai dari variabel PINT itu sama dengan 0FFh. Jika
nilai dari variabel PINT itu sama dengan 0FFh maka program akan kembali ke
awal baris program, karena jika varibel PINT itu bernilai 0FFh itu menandakan
bahwa tidak ada data terbesar dari data hasil konversi. Pada awal modul proses
ini sudah di definisikan bahwa nilai awal dari variabel PINT ini 0FFh. Jika nilai
dari variabel PINT itu tidak sama dengan 0FFh maka program akan lompat ke
modul pros2 yang ada pada baris program 572 - 574(lampiran L1 halaman 10).
Pada modul pros2 ini akan di periksa setiap bit dari varibel PINT. Jika
status bit dari pint0 itu high maka program akan lompat ke modul komp0. Jika
status bit dari pint0 itu low maka program akan memeriksa status bit PINT
berikutnya sampai status bit pint7. Jika program sudah lompat ke salah satu
modul komp0 hingga komp7 maka program tidak akan kembali ke modul pros2
82
ini lagi. Jika nilai dari variabel PINT ini bernilai 00h maka program tidak akan
lompat ke salah satu modul antara komp0 hingga komp7 sedangkan akan lompat
ke modul mulai yaitu kembali ke baris awal program. Di jelaskan pada baris
program 578 sampai 585 (lihat lampiran L1 halaman 11).
Jika program lompat ke salah satu modul antara komp0 hingga komp7
maka di dalam modul tersebut akan diberikan nilai acuan untuk variabel setdeg.
Variabel setdeg ini merupakan nilai posisi untuk setiap receiver yang dijelaskan
pada gambar 3.11 (lihat halaman 71).
Pada semua modul antara komp0 hingga komp7 itu setelah di
definisikan nilai untuk variabel setdeg kemudian program akan lompat ke modul
action semuanya. Modul komp0 sampai komp7 dijelaskan pada baris program
590 sampai 620 (lihat lampiran L1 halaman 11). Modul action berisi proses
perhitungan untuk menentukan jumlah pergerakan dari motor stepper untuk
menuju ke posisi sesuai dengan nilai yang ada pada variabel setdeg.
Pada awal modul ini di-set bit variabel CWCCW. Variabel CWCCW ini
yang menentukan arah pergerakan dari motor stepper. Jika status dari variabel
CWCCW ini high maka motor stepper akan bergerak sesuai dengan arah
perputaran jarum jam. Jika status dari variabel CWCCW ini low maka motor
stepper akan bergerak berlawanan dengan arah perputaran jarum jam.
Selanjutnya nilai yang ada pada variabel setdeg dikurangi dengan nilai
yang ada pada variabel degree. Nilai yang ada pada variabel degree ini
merupakan nilai aktual posisi motor stepper pada saat ini. Pada awal program
nilai variabel degree ini di-set awal dengan 200d, arah motor stepper-nya
menunjuk pada receiver ultrasonik ke-1 (untuk lebih jelas lihat gambar 3.11
83
halaman 71). Kemudian hasil pengurangan ini disimpan ke dalam variabel
hslkrng. Selanjutnya status dari carry flag di periksa, jika status carry flag-nya
sama dengan high maka program akan lompat ke modul label1. jika status carry
flag-nya sama dengan low maka program akan lompat ke modul label7 yang
terdapat pada baris 622 sampai 631 (lihat lampiran L1 halaman 11 dan 12).
Jika status dari carry flag-nya sama dengan high maka program akan
lompat ke modul label1. Didalam modul label1 ini nilai yang ada pada variabel
hslkrng itu dikalikan dengan bilangan (-1) dan hasil perkalian tersebut itu di
simpan ke dalam variabel hslkrng lagi. Kemudian nilai yang ada pada variabel
hslkrng ini dikurangi dengan bilangan 100, jika status carry flag-nya sama
dengan low maka program akan lompat ke modul label2. jika status carry flagnya sama dengan high maka program akan lompat ke modul label4. Dijelaskan
pada baris program 633 sampai 643 (lihat lampiran L1 halaman 12).
Jika status dari carry flag-nya sama dengan low maka program akan
lompat ke modul label7. Didalam modul label7 ini nilai yang ada pada variabel
hslkrng itu dikurangi dengan bilangan 100 dan setelah operasi pengurangan
tersebut diperiksa status dari carry flag-nya. Jika status dari carry flag-nya sama
dengan low maka program akan lompat ke modul label8. Jika status dari carry
flag sama dengan high maka nilai yang ada pada variabel hslkrng dimasukkan
ke variabel prgk dimana nilai pada variabel prgk ini merupakan jumlah
pergerakan step pada motor stepper. Kemudian dipanggil prosedur mtrmov
untuk membangkitkan pulsa clock untuk menjalankan motor stepper. Setelah
prosedur mtrmov ini selesai dijalankan maka nilai yang ada pada variabel setdeg
dimasukkan ke variabel degree. Jadi posisi motor sekarang ini ada pada posisi
84
sesuai dengan nilai yang ada pada variabel degree. Kemudian setelah disimpan
ke variabel degree maka program akan lompat ke modul selesai. Dijelaskan pada
baris program 665 sampai 677 (lihat lampiran L1 halaman 12).
Pada modul label1, jika hasil pengurangan antara variabel hslkrng
dengan bilangan 100 itu status carry flag-nya sama dengan low maka program
akan lompat ke modul label2. Jika status dari carry flag-nya sama dengan high
maka program akan lompat ke modul label4.
Jika status dari carry flag-nya sama dengan low maka program akan
lompat ke modul label2 ini. Pada awal modul ini bilangan 200d dikurangi
dengan nilai yang ada pada variabel hslkrng. Kemudian nilai dari hasil
pengurangan ini di simpan kembali ke variabel hslkrng dan nilai dari variabel
hslkrng ini juga disimpan ke dalam variabel prgk. Kemudian dipanggil prosedur
mtrmov untuk menggerakkan motor stepper dan jika prosedur mtrmov sudah
dijalankan selanjutnya program akan lompat ke modul selesai. Dijelaskan pada
baris program 644 sampai 655 (lihat lampiran L1 halaman 12).
Jika status dari carry flag-nya sama dengan high maka program akan
lompat ke modul label4 ini. Pada awal modul ini di clear bit CWCCW (arah
perputaran motor stepper berlawanan arah jarum jam) kemudian nilai yang ada di
variabel hslkrng dimasukkan ke dalam variabel prgk. Jadi, motor stepper akan
bergerak sebanyak jumlah nilai (step) yang ada pada variabel prgk. Setelah
dipanggil prosedur mtrmov maka nilai yang ada pada variabel setdeg
dimasukkan ke dalam variabel degree, ini menandakan bahwa posisi motor
stepper pada saat sekarang ini sedang berada pada posisi yang ditunjuk oleh
85
variabel degree. Dijelaskan pada baris program 657 sampai 663 (lampiran L1
halaman 12).
Pada modul label7, bila hasil pengurangan antara variabel hslkrng
dengan bilangan 100 menghasilkan status carry flag-nya sama dengan low maka
program akan lompat ke modul label8 ini. Didalam modul ini pertama kali di
clear bit CWCCW kemudian bilangan 200 dikurangi nilai yang ada pada
variabel hslkrng. Hasil dari pengurangan ini dimasukkan ke dalam variabel
hslkrng yang kemudian di simpan lagi ke variabel prgk untuk menggerakkan
motor stepper sebanyak jumlah nilai yang ada pada variabel prgk. Setelah di
panggil prosedur mtrmov maka nilai yang ada pada variabel setdeg dimasukkan
ke dalam variabel degree. Kemudian program akan lompat ke modul selesai,
dengan kata lain modul selesai ini program akan lompat kembali dari modul
mulai. Dijelaskan pada baris program 679 sampai 694 (lihat lampiran L1
halaman 12 dan 13).
Secara garis besar, program sudah menjalankan motor stepper dan
menyimpan status posisi terakhir dari motor stepper. Prosedur mtrmov sering di
panggil di dalam program yang dikarenakan modul mtrmov ini yang
mengendalikan pergerakan motor stepper dan juga pembangkit pulsa clock untuk
menjalankan motor stepper.
Pada awal modul mtrmov ini di set bit enable untuk IC L297, bit ini
harus di-set dengan tujuan agar motor stepper dapat bergerak. Jika bit enable ini
belum di-set maka motor stepper tidak dapat bergerak walaupun sudah diberikan
pulsa clock yang dibangkitkan dari program pada mikrokontroler. Sebelumnya,
jumlah pergerakan step untuk motor stepper ditentukan dengan nilai yang ada
86
pada variabel prgk. Pada perancangan hardwarenya jenis pergerakan motor yang
digunakan ialah half step. Jadi, nilai yang ada pada variabel prgk harus dikalikan
dengan bilangan 2 untuk mendapatkan posisi motor stepper dengan tepat.
Kemudian jika nilai pada variabel prgk ini sama dengan nol (motor stepper tidak
bergerak), maka program akan keluar dari prosedur mtrmov ini. Jika nilai pada
variabel prgk tidak sama dengan nol, maka akan dibangkitkan pulsa clock untuk
menggerakkan motor stepper sesuai dengan nilai yang ada pada variabel prgk
yang sudah dikalikan dengan bilangan 2. Jika motor stepper sudah bergerak ke
posisi yang dituju maka program akan keluar dari prosedur mtrmov ini dan
kembali ke baris program sesudah prosedur mtrmov ini di panggil. Prosedur
mtrmov ini dijelaskan pada baris program 697 sampai 721 (lampiran L1
halaman 13).
Di dalam program ini menggunakan satu interrupt eksternal yaitu intr1.
jika program ini ter-interrupt maka program akan secara langsung akan lompat
ke modul intr1. Di dalam modul intr1 ini bit outenb di clear terlebih dahulu
kemudian ada perintah nop (No Operation), jadi pada saat program di baris nop
ini maka program tidak melakukan apa-apa hanya untuk memberi jeda waktu
sedikit kemudian di set kembali bit outenb. Ini bertujuan untuk mengeluarkan
hasil konversi data ADC ke port 2 pada mikrokontroler. Kemudian flag
fDataAdc di set setelah modul interrupt ini selesai dijalankan maka program
akan kembali lagi ke program utama sebelum program ini ter-interrupt.
Dijelaskan pada baris program 724 sampai 730 (lampiran L1 halaman 13).
Di dalam program utama ini digunakan delay, modul delay yang dibuat
dengan macro ini bertujuan untuk mempermudah dalam pemanggilan prosedur
87
delay ini. Contoh: pada program ada perintah delay 1, ini berarti program akan
tertunda selama 0ffh yang dikurangi satu hingga mencapai nilainya sama dengan
nol. Jadi delay 1 itu berarti satu kali 0ffh. Jika delay 25 ini menandakan program
akan tertunda selama 25 kali 0ffh. Jadi untuk memanggil delay hanya dengan
perintah delay xxxh sesuai dengan kebutuhan. Untuk penjelasan dari macro
delay dan prosedur DLY1 dijelaskan pada baris program 734 sampai 737 (lihat
lampiran L1 halaman 14) dan untuk penjelasan dari macro delay dijelaskan pada
baris program 4 sampai 7 (lihat lampiran L1 halaman 1).
3.3
Rancang bangun sistem
Alat bantu ultrasonik untuk mobile robot terbagi menjadi dua bagian
yaitu tempat untuk modul transmitter dan tempat untuk modul receiver.
Pada modul transmitter terdapat dua buah baterai 9 volt, IC op-amp
CA3130, IC timer NE555 dan satu buah transmitter ultrasonik. Gambar 3.13
menunjukkan rancang bangun dari tempat untuk modul transmitter.
10,5 cm
3,8 cm
9,9 cm
Gambar 3.13 Ukuran tempat modul transmitter
88
Tempat modul transmitter tersebut memiliki tinggi 3,8 cm dengan lebar
9,9 cm dan panjang 10,5 cm. Dalam kotak tersebut terdapat rangkaian untuk
modul transmitter yang memiliki tata letak komponen pada gambar 3.14.
Tx adalah transmitter ultrasonik dan generator 40 KHz dimaksudkan
untuk rangkaian dari timer NE555. Regulator 16 volt dimaksudkan untuk
menaikkan tegangan dari IC regulator 12 volt menjadi 16 volt. Perbedaan dua
saklar S1 dan S2 adalah saklar S1 digunakan sebagai tombol on/off dari modul
transmitter sementara saklar S2 untuk memancarkan gelombang ultrasonik.
TX
S1
LED
Inverting
Operational
Amplifier
Generator
40KHz
S2
Regulator 16V
Baterai 9V
Baterai 9V
Gambar 3.14 Tata letak komponen pada modul transmitter
Di dalam tempat untuk modul receiver terdapat 8 buah modul sensor,
modul sistem minimum, modul driver motor stepper, modul rangkaian power
supply dan sebuah kipas pendingin. Gambar 3.15 menunjukkan rancang bangun
dari tempat untuk modul receiver.
89
13,5 cm
11,5 cm
Gambar 3.15 Ukuran tempat modul receiver
Modul receiver berbentuk oktagon dengan diameter 28,5 cm. Tinggi dari
oktagon ini adalah 13,5 cm dan lebarnya adalah 11,5 cm. Dalam ruang oktagon
tersebut terdapat rangkaian-rangkaian lainnya yang ditunjukkan pada gambar
3.16 berikut ini.
RX
6
RX 7
8
Trafo
Baterai
Stepper Motor
Fan
RX
4
Power
Supply
1
Motor Driver
2
5
R
X
R
X
R
X
R
X
ADC &
MCS-52
RX 3
Gambar 3.16 Tata letak komponen pada modul receiver
Modul-modul dalam receiver adalah modul sensor, modul sistem
minimum, modul rangkaian power supply dan modul driver motor stepper. Tata
90
letak komponen-komponen didalam modul-modul tersebut adalah sebagai
berikut:
Peak
Detektor
Non Inverting
Operational
Amplifier Level 2
Non Inverting
Operational
Amplifier Level 1
RX
Tone Decoder
40KHz
Gambar 3.17 Tata letak komponen pada modul sensor
H5
H
4
ADC
0809
H2
H1
MCS
52
H
3
Timer
500KHz
Gambar 3.18 Tata letak komponen pada modul sistem minimum
Pada modul sensor (gambar 3.17), Rx menunjukkan receiver ultrasonik.
Dua buah penguat op-amp akan memiliki keluaran ke peak detector dan tone
decoder. Di modul sistem minimum, H1-H5 menunjukkan header yang
digunakan. Sementara itu timer 500 KHz adalah rangkaian timer eksternal yang
digunakan untuk ADC 0809.
91
Fast
diode
L298
L297
Gambar 3.19 Tata letak komponen pada modul driver motor stepper
Jembatan
Dioda
Tapis
Regulator
H1
Gambar 3.20 Tata letak komponen pada modul rangkaian power supply
Pada modul driver motor stepper, terdapat rangkaian fast diode yang
menguhubungkan motor stepper dengan IC L298. Di modul rangkaian power
supply, header H1 akan memberikan supply terhadap seluruh komponenkomponen di dalam modul receiver.
92
Gambar 3.21a Modul transmitter
Gambar 3.21b Modul receiver
Gambar 3.21c Alat bantu ultrasonik untuk reorientasi mobile robot
Download