• Tidak ada hasil yang ditemukan

Pengendalian 8 buah Motor oleh DST-51

N/A
N/A
Protected

Academic year: 2021

Membagikan "Pengendalian 8 buah Motor oleh DST-51"

Copied!
18
0
0

Teks penuh

(1)

Pengendalian 8 buah Motor oleh DST-51

Pada aplikasinya, seringkali suatu sistem mikrokontroler digunakan untuk mengendalikan beberapa buah motor secara bersamaan. Berikut ini adalah pengendalian delapan buah motor DC oleh DST-51, sebuah sistem berbasis AT89C51 di mana proses pengendalian yang dilakukan adalah berupa pengaturan kecepatan dan keaktifan motor dengan arah putar yang searah.

Rangkaian Pengendali

Rangkaian pengendali pada setiap motor terdiri dari dua buah transistor yaitu BD139 yang terhubung dengan motor dan C9014 yang mengatur keaktifan BD139.

I

Motor

I

b2

Gambar 1

Aliran arus pada Transistor BD139

Transistor BD139 mempunyai arus kolektor maksimum (I

Cmax

) sebesar 1A sesuai data sheet, namun pada aplikasinya sebaiknya digunakan 0,5A. Arus kolektor maksimum dari transistor BD139 adalah arus yang mengalir melalui Motor DC oleh karena itu dapat juga disebut sebagai I

Motor

. Dengan arus motor sebesar 0,5A maka maksimal arus motor DC yang dapat dikendalikan oleh rangkaian ini juga 0,5A.

Transistor BD139 mempunyai penguatan (H

FE

) sebesar 40 maka sesuai persamaan berikut:

I

Motor

= I

b1

* H

FE

……….. (1)

0,5A = I

b1

* 40 I

b1

= 12,5 mA

maka arus basis dari Q1 BD139 yang diperlukan untuk mengaktifkan transistor ini adalah sebesar 12,5 mA

Untuk memberikan arus sebesar ini pada basis Q1 BD139 maka harga R2 yang terhubung pada basis transistor ini adalah:

……… (2)

maka akan diperoleh harga R2 adalah 344 ohm atau 330 ohm yang biasa digunakan di

pasaran. Arus sebesar 12,5 mA masih terlalu besar untuk Port AT89C51 yang

mempunyai kemampuan maksimum I

OL

10 mA, oleh karena itu transistor Q2 C9014

perlu ditambahkan sebagai penguat.

(2)

I

b2

I

C2

Gambar 2 Aliran arus pada C9014

Dengan R2 sebesar 330 ohm maka I

C2

yang terjadi saat transistor Q1 C9014 berada pada kondisi aktif (saturasi) adalah:

………... (3)

Dengan persamaan ini, maka diperoleh IC2 adalah 15mA. Dengan H

FE

C9014 sebesar 60 dan digunakannya persamaan 1, maka I

b1

yaitu arus basis Q2 C9014 yang diambil dari Port 1 AT89C51 cukup sebesar 250 uA saja.

Agar Port 1 AT89C51 mengeluarkan arus sebesar 250 uA saat kondisi high maka harga R1 diperoleh dengan persamaan berikut

………. (4)

V

OH

adalah tegangan output Port 1 AT89C51 saat kondisi high yaitu minimal 2,4 Volt. Dengan persamaan ini maka harga R1 yang diperoleh adalah 6,8 K

Dengan rangkaian ini, maka pada saat kondisi P1.0 berlogika high maka transistor Q2 C9014 akan saturasi sehingga arus I

C2

mengalir dari R2 langsung menuju ke ground. Transistor Q1 BD139 tidak mendapat bias arus pada basisnya dan berada pada kondisi cut off. Hal ini menyebabkan arus motor tidak mengalir dan motor tidak berputar., namun bila kondisi P1.0 berlogika low maka transistor Q2 C9014 akan cut off dan arus dari R2 tidak langsung menuju ke ground melainkan mengalir ke basis I

b1

sehingga transistor Q1 BD139 berada pada pada kondisi saturasi.

Arus I

Motor

akan mengalir dan menggerakkan motor DC. Diode D1 IN4001 berfungsi sebagai penahan adanya tegangan balik dari kumparan motor.

Maka dapat disimpulkan bahwa, motor DC akan berputar setiap kali kondisi

P1.0 low dan berhenti berputar setiap kondisi P1.0 high.

(3)

Pengaturan kecepatan

Proses pengaturan kecepatan dilakukan dengan menggunakan Teknik PWM (Pulse Width Modulation) yaitu dengan mengatur lebar pulsa ON (pulsa untuk mengaktifkan motor) dalam periode tertentu. Semakin lebar pulsa ON atau kondisi low pada P1.0 maka kecepatan putar motor akan semakin bertambah hingga pada batas maksimumnya maka kondisi P1.0 akan berlogika low terus, sebaliknya semakin sempit pulsa ON atau kondisi low pada P1.0 maka kecepatan putar motor akan semakin berkurang hingga pada batas maksimumnya maka kondisi P1.0 akan berlogika high terus.

Periode T ON

Motor bertambah cepat

Putaran paling cepat

]

Gambar 3 Bentuk sinyal PWM

8 buah rangkaian driver seperti yang tampak pada gambar 1 terhubung pada

Port 1 AT89C51, oleh karena itu untuk menghasilkan sinyal PWM seperti pada

gambar di atas pada masing-masing port dari Port 1 maka dibuat sebuah program

yang mengeluarkan data dari tabel yang dibentuk dalam memori RAM Internal

AT89C51.

(4)

0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 1 1 1 1 1 0 0 0 1 1 1 1 1 0 0 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1

Kecepatan

Motor 8 7 6 5 4 3 2 1

52H 51H

54H 55H 56H 57H 58H 59H 53H 50H

TABEL KECEPATAN

Motor 1 Motor 2 Motor 3 Motor 4 Motor 5 Motor 6 Motor 7 Motor 8

Gambar 4 Tabel Kecepatan

Gambar 4 menunjukkan hubungan antara tabel kecepatan dan sinyal PWM yang dihasilkan. Seperti telah dijelaskan sebelumnya, bahwa untuk mengaktifkan motor dilakukan dengan memberikan kondisi low pada port yang berhubungan, oleh karena itu semakin lebar kondisi low maka akan semakin banyak logika 0 pada tabel kecepatan tiap motor.

Tabel Kecepatan pada gambar 4 menunjukkan bahwa tiap kolom berisi dengan data kecepatan motor. Tampak pada tabel tersebut bahwa data kecepatan motor berada di tiap-tiap bit dari 10 buah lokasi memori, hal ini menunjukkan bahwa terdapat 10 step perubahan kecepatan untuk tiap-tiap motor. Oleh karena itu dapat disimpulkan sesuai dengan data pada gambar 4 bahwa:

Motor 1 menempati kecepatan pada step 1 Motor 2 menempati kecepatan pada step 4 Motor 3 menempati kecepatan pada step 2 Motor 4 menempati kecepatan pada step 4 Motor 5 berhenti

Motor 6 menempati kecepatan pada step 6

Motor 7 menempati kecepatan pada step 10 (tertinggi) Motor 8 menempati kecepatan pada step 8

Dengan sebuah program looping yang mengambil data-data di tabel tersebut dan mengirimkan ke Port1 secara paralel dengan berurutan maka sinyal-sinyal PWM akan muncul pada Port 1 seperti yang tampak pada sinyal-sinyal PWM pada gambar 4.

Listing 1 Loop2Motor:

Mov R0,#TabelKecepatan ;R0 menuju ke tabel data

;kecepatan motor

Mov R7,#StepKecepatan ;R7 diisi dengan jumlah step

;kecepatan

LoopMotor:

Mov A,@R0 ;Ambil data di tabel keceptan

;motor

Mov B,EnableMotor ;OR kan dengan keaktifan motor Orl A,B ;

Mov P1,A ;Kirim ke P1

Inc R0 ;Tunjuk tabel kecepatan

;berikutnya

(5)

Djnz R7,LoopMotor ;Lakukan hingga sejumlah step

;kecepatan

Ajmp Loop2Motor ;Kembali ke loop2Motor

Perubahan kecepatan dilakukan dengan mengubah isi tabel data kecepatan pada motor yang akan dirubah. Misalkan untuk menambah kecepatan motor 1 ke step berikutnya, dapat dilakukan dengan memberikan logika 0 pada bit 0 alamat 51H, maka kecepatan motor 1 akan berubah menuju ke step 2.

Untuk merubah data-data kecepatan pada tabel maka diperlukan sebuah tabel lain yang berfungsi untuk menyimpan pointer dari data kecepatan tiap motor. Pada tabel gambar 4, saat itu pointer dari motor 1 sedang berada di alamat 51H dan pointer motor 2 di alamat 54H. Pointer-pointer ini disimpan pada sebuah tabel pointer data kecepatan di mana pointer ini digunakan oleh program pada saat akan dilakukan perubahan kecepatan pada motor.

0 1 0 1 0 0 0 1

0 1 0 1 0 1 0 0

0 0 1 0

0 1 0 0

0 0 0 0

0 1 1 0

1 0 1 0

1 0 0 0

Motor 1 2 3 4 5 6 7 8

TABEL POINTER DATA KECEPATAN

0 1 0 1

0 1 0 1

0 1 0 1

0 1 0 1

0 1 0 1

0 1 0 1

Gambar 5

Tabel Pointer Data Kecepatan berdasar data pada tabel 4

Misalkan akan dilakukan penambahan kecepatan pada motor 1, maka program akan melihat motor 1 pada tabel pointer. Karena pointer pada motor 1 menunjukkan alamat 51H maka bit 0 (urutan bit dari motor 1) pada alamat tersebut diberi logika 0 dan pointer menunjukkan ke alamat 52H serta disimpan kembali ke tabel pointer data kecepatan.

Listing 2:

;Penambahan kecepatan

;- Ambil pointer kecepatan motor di alamat ini ditunjuk oleh kode

; yang diterima (R0)

;- Apabila pointer menunjuk ke akhir tabel maka pointer tidak berubah

;- Apabila pointer belum menunjuk ke akhir tabel maka pointer akan menuju ke

; alamat berikutnya

;- Proses penambahan kecepatan dilakukan dengan meng-clear bit-bit dari motor

; yang diakses di alamat yang ditunjuk oleh pointer data kecepatan

;---

TambahKecepatan:

Mov A,@R0 ;Ambil Pointer data kecepatan di tabel ;pointer

Cjne A,#StepKecepatan+TabelKecepatan,TidakResetAlamat

;Bila alamat

(6)

;terakhir, pointer bertahan Mov @R0,A ;

Ret

TidakResetAlamat:

Push A ;Pointer menunjuk ke alamat berikut Inc A ;dan simpan kembali di tabel pointer Mov @R0,A ;

Pop A ; Ret

;---

;- Ambil pointer data kecepatan dan bila belum mencapai

; alamat awal, tunjuk ke alamat sebelumnya dan simpan kembali ke tabel

;- Bila mencapai alamat awal, maka tetap tahan di alamat tersebut KurangiKecepatan:

Mov A,R0 ;Ambil Kode yang diterima Clr C ;

Subb A,#JumlahMotor ;Kode yg diterima - JumlahMotor = alam ;pointer data kecepatan dari motor ;yang diakses

Mov R0,A ;Ambil pointer data kecepatan dari mot Mov A,@R0 ;

Cjne A,#TabelKecepatan,Tidak2resetAlamat ;Bila alamat bukan ;step awal, maka menuju alamat step ;sebelumnya

LihatCarry2:

Mov A,#TabelKecepatan ;bila alamat awal maka, tahan pointer Mov @R0,A ;tersebut

Ret Tidak2ResetAlamat:

Dec A ;Pointer menuju ke alamat step sebelum-

;nya

Mov @R0,A ;simpan di Tabel Pointer Data

Ret ;Kecepatan

Potongan program di atas berfungsi untuk mengambil data Pointer Data Kecepatan, menunjuk ke alamat selanjutnya dan menyimpannya kembali ke tabel pointer pada saat terjadi penambahan kecepatan atau menunjuk ke alamat sebelumnya dan menyimpan kembali ke tabel pointer pada saat terjadi pengurangan kecepatan.

Setelah pointer yang menunjukkan alamat dari data kecepatan terakhir yang diakses oleh motor yang dipilih diketahui maka selanjutnya bit yang menunjukkan motor yang dipilih saat itu akan di set (untuk mengurangi kecepatan) atau di clear (untuk menambah kecepatan). Hal ini dilakukan dengan melakukan loncatan ke lokasi-lokasi tertentu dari program yang berisi perintah SET atau CLR dari bit-bit berdasarkan motor yang dipilih.

Listing 3:

Mov R0,A ;R0 diisi alamat step kecepatan yang

;akan diubah

Mov DPTR,#AksiMotor ;DPTR ke alamat awal tabel aksi motor Mov A,R5 ;Kode yg diterima - 'A' = Urutan

Clr C ;aksi motor

Subb A,#'A' ;

Mov B,#07 ;Urutan aksi motor * 7 (area yg

;digunakan

Mul AB ;setiap urutan)

Jmp @A+DPTR ;Lompat ke alamat urutan aksi motor

(7)

Kembali:

………

AksiMotor

;Tambah Kecepatan/aktifkan Motor 1 Mov A,@R0

Clr A.0 Mov @R0,A Ljmp Kembali

;Tambah Kecepatan/aktifkan Motor 2 Mov A,@R0

Clr A.1 Mov @R0,A Ljmp Kembali

;Tambah Kecepatan/aktifkan Motor 3 Mov A,@R0

Clr A.2 Mov @R0,A Ljmp Kembali

;Tambah Kecepatan/aktifkan Motor 4 Mov A,@R0

Clr A.3 Mov @R0,A Ljmp Kembali

;Tambah Kecepatan/aktifkan Motor 5 Mov A,@R0

Clr A.4 Mov @R0,A Ljmp Kembali

;Tambah Kecepatan/aktifkan Motor 6 Mov A,@R0

Clr A.5 Mov @R0,A Ljmp Kembali

;Tambah Kecepatan/aktifkan Motor 7 Mov A,@R0

Clr A.6 Mov @R0,A Ljmp Kembali

;Tambah Kecepatan/aktifkan Motor 8 Mov A,@R0

Clr A.7 Mov @R0,A Ljmp Kembali

;Kurangi Kecepatan/nonaktifkan Motor 1 Mov A,@R0

Setb A.0 Mov @R0,A Ljmp Kembali

;Kurangi Kecepatan/nonaktifkan Motor 2 Mov A,@R0

Setb A.1 Mov @R0,A Ljmp Kembali

;Kurangi Kecepatan/nonaktifkan Motor 3 Mov A,@R0

Setb A.2 Mov @R0,A Ljmp Kembali

;Kurangi Kecepatan/nonaktifkan Motor 4 Mov A,@R0

(8)

Setb A.3 Mov @R0,A Ljmp Kembali

;Kurangi Kecepatan/nonaktifkan Motor 5 Mov A,@R0

Setb A.4 Mov @R0,A Ljmp Kembali

;Kurangi Kecepatan/nonaktifkan Motor 6 Mov A,@R0

Setb A.5 Mov @R0,A Ljmp Kembali

;Kurangi Kecepatan/nonaktifkan Motor 7 Mov A,@R0

Setb A.6 Mov @R0,A Ljmp Kembali

;Kurangi Kecepatan/nonaktifkan Motor 8 Mov A,@R0

Setb A.7 Mov @R0,A Ljmp Kembali

Pada listing 3 nilai Akumulator A sebelumnya telah terisi dengan pointer data kecepatan yang telah didapatkan setelah listing 2 dijalankan. Nilai akumulator A ini disimpan dalam R0 dan program akan melakukan lompatan ke lokasi tertentu berdasarkan motor yang dipilih dan perintah yang diberikan. Misalkan perintah yang diberikan adalah perintah penambahan kecepatan pada motor 3, maka sesuai tabel di bawah perintah “>C” yang diterima oleh sistem.

Pengaturan Kecepatan Kode Keterangan

>A Tambah Kecepatan Motor 1

>B Tambah Kecepatan Motor 2

>C Tambah Kecepatan Motor 3

>D Tambah Kecepatan Motor 4

>E Tambah Kecepatan Motor 5

>F Tambah Kecepatan Motor 6

>G Tambah Kecepatan Motor 7

>H Tambah Kecepatan Motor 8

>I Kurangi Kecepatan Motor 1

>J Kurangi Kecepatan Motor 2

>K Kurangi Kecepatan Motor 3

>L Kurangi Kecepatan Motor 4

>M Kurangi Kecepatan Motor 5

>N Kurangi Kecepatan Motor 6

>O Kurangi Kecepatan Motor 7

>P Kurangi Kecepatan Motor 8

Pengaturan Keaktifan Kode Keterangan

!A Aktifkan Motor 1

!B Aktifkan Motor 2

!C Aktifkan Motor 3

!D Aktifkan Motor 4

!E Aktifkan Motor 5

!F Aktifkan Motor 6

!G Aktifkan Motor 7

!H Aktifkan Motor 8

!I Nonaktifkan Motor 1

!J Nonaktifkan Motor 2

!K Nonaktifkan Motor 3

!L Nonaktifkan Motor 4

!M Nonaktifkan Motor 5

!N Nonaktifkan Motor 6

!O Nonaktifkan Motor 7

!P Nonaktifkan Motor 8

Tabel 1

Tabel Perintah-perintah Pengendalian Motor

Perintah “>” digunakan untuk membedakan perintah pengaturan kecepatan

dan perintah pengaturan keaktifan (lihat pada listing program lengkap), sedangkan

(9)

perintah “C” yang diterima oleh serial port dalam bentuk hexa adalah 43H, data tersebut dikurangi dengan “A” atau 41H sehingga menjadi 2. Hal ini diperlukan karena program harus melompat ke urutan ketiga (0 adalah urutan pertama) dari tabel aksi motor. Setiap urutan aksi motor menempati 7 byte lokasi memori oleh karena itu, nilai 2 terlebih dahulu harus dikali dengan 7 lompatan dilakukan.

Sedangkan nilai DPTR sebelumnya telah diisi dengan alamat dari Tabel Aksi Motor, maka pada saat instruksi JMP @A+DPTR program akan melompat ke alamat Tabel Aksi Motor + 2*7 yaitu bagian penambahan kecepatan motor 3. Di sini bit ke nol yang merupakan bit pengatur kecepatan motor 3 di clear sehingga kecepatan motorpun bertambah.

Input Perintah

Input perintah untuk pengendalian motor ini diperoleh dari serial port. Proses pengendalian motor dilakukan dengan mengirimkan data di tabel kecepatan ke Port 1 secara terus menerus, oleh karena itu apabila terjadi pengiriman perintah baik untuk merubah kecepatan atau mengatur keaktifan motor, harus dilakukan dengan menggunakan sistem interrupt, sehingga walaupun program sedang sibuk melakukan looping pengiriman data ke Port 1, pada saat terjadi pengiriman perintah melalui serial port, maka program akan berhenti melakukan pengiriman data dan meloncat ke alamat vektor interrupt terlebih dahulu.

Pada alamat tersebut, data perintah yang diterima akan dibedakan antara perintah pengaturan kecepatan “>” dan perintah pengaturan keaktifan motor “!”.

Selanjutnya dilanjutkan dengan data perintah yang menunjukkan motor berapa yang diatur keaktifan ataupun kecepatannya (Lihat tabel 1).

Setelah melayani interrupt, maka program akan kembali ke alamat letak terjadinya interrupt dan melanjutkan pengiriman data ke Port 1.

Pengaturan Keaktifan

Pengaturan keaktifan dilakukan dengan melakukan SET/CLR pada bit-bit yang terdapat pada variabel EnableMotor.

Motor 8 7 6 5 4 3 2 1 Variabel EnableMotor

1 = non aktif 2 = aktif

Gambar 6 Variabel EnableMotor

Variabel ini selanjutnya akan di OR kan dengan data yang akan dikeluarkan

pada Port 1. Sesuai sifat Gerbang OR maka setiap bit yang di OR dengan kondisi 1

(non aktif) maka akan menghasilkan kondisi logika 1 pula, sehingga motor yang

terhubung dengan Port 1 melalui rangkaian driver akan berhenti berputar, namun bila

bit tersebut di OR dengan kondisi 0 (aktif) maka data kecepatan akan terkirim keluar

melalui Port 1.

(10)

Variabel Enable Motor Tabel Data

Kecepatan

1

0 0

0

0 0

0 0

P1.0 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1

Gambar 7

Proses Kerja Variable Enable Motor untuk mengatur keaktifan

(11)

Aktifkan Serial Port Isi Tabel Kecepatan Isi Tabel Alamat Step Kecepatan

R0 = Alamat Awal Tabel Kecepatan R7 = Jumlah Step Kecepatan

Ambil data di Tabel Kecepatan Aktifkan Motor sesuai EnableMotor

Tunjuk Tabel Kecepatan berikut R7 = R7-1

R7 = 0?

No

Gambar 8

Flowchart Main Program

Disable Serial Interrupt Ambil Data Serial

'>'? '!'?

Ambil Data Serial

Data Serial >

H?

Kurangi Kecepatan Tambah Kecepatan

Ambil Data Serial

Aktifkan/

Nonaktifkan Motor sesuai data yg

diterima

Kembali dari Interrupt

SERIAL INTERRUPT

Gambar 9

Flowchart Serial Interrupt

(12)

12VDC VCC

12VDC VCC

12VDC VCC

12VDC VCC

12VDC VCC

12VDC VCC

12VDC VCC

12VDC

VCC

VCC

12VDC P1.0

P1.1

P1.0 P1.1

P1.2 P1.3

P1.4 P1.5

P1.6 P1.7

P1.2

P1.3P1.4P1.5 P1.6P1.7

M2 MOTOR DC

Q3BD139 Q4C9014

R3

33K

D2 IN4001 R4 330R

M3 MOTOR DC

Q5BD139 Q6C9014

R5

33K

D3 IN4001 R6 330R

M4 MOTOR DC

Q7 BD139 Q8

C9014 R7

33K

D4 IN4001 R8 330R

M5 MOTOR DC

Q9 BD139 Q10

C9014 R9

33K

D5 IN4001 R10 330R

M6 MOTOR DC

Q11 BD139 Q12

C9014 R11

33K

D6 IN4001 R12 330R

M7 MOTOR DC

Q13 BD139 Q14

C9014 R13

33K

D7 IN4001 R14 330R

M8 MOTOR DC

Q15 BD139 Q16

C9014 R15

33K

D8 IN4001 R16 330R

JP1

PORT1 DST51

1 2

3 4

5 6

7 8

9 10

J1

12VOLT 5A 1 2 M1

MOTOR DC

Q1BD139 Q2C9014

R1

33K

D1 IN4001 R2 330R

Gambar 10

Skema lengkap Antar Muka Pengendali 8 Motor dengan DST-51

Program lengkap Pengendali 8 Motor dengan DST-51 melalui Serial Port Program ini menggunakan Built In Routine DST-51 yaitu init_serial yang terletak di alamat 1B8H pada DST-51 Monitor

.DATA Org 70H

EnableMotor Ds 1 ;Variabel pengaktif motor .CODE

Init_Serial EQU 1B8H ;BUILT IN ROUTINE DST-51

ROM EQU 2000H

TabelKecepatan EQU 50H PointerKecepatan EQU 41H JumlahMotor EQU 8 StepKecepatan EQU 10

Org ROM ;Reset Vector

Ajmp Start ;

Org ROM+3H ;External Interrupt 0 Vector

Reti ;

Org ROM+0BH ;Timer 0 Interrupt Vector

Reti ;

Org ROM+13H ;External Interrupt 1 Vector

Reti ;

Org ROM+1BH ;Timer 1 Interrupt Vector

Reti ;

Org ROM+23H ;Serial Interrupt Vector Ajmp Serial_Interrupt

;---

;- Aktifkan Serial Interrupt

;- Isi Tabel Kecepatan dan Tabel Pointer Data Kecepatan

(13)

;- Kirim seluruh isi tabel kecepatan ke P1 berulang-ulang

;- Keaktifan motor atau perubahan motor akan terjadi setiap terjadi serial

; interrupt

;--- Start:

Lcall Init_Serial ;Inisial Serial Port 9600 bps

Setb EA ;Aktifkan Serial Interrupt

Setb ES ;

Mov EnableMotor,#00H ;Aktifkan semua motor

Acall IsiTabel ;Isi Tabel Kecepatan dan Pointer data kecepatan

Loop2Motor:

Mov R0,#TabelKecepatan ;R0 menuju ke tabel data kecepatan motor

Mov R7,#StepKecepatan ;R7 diisi dengan jumlah step kecepatan

LoopMotor:

Mov A,@R0 ;Ambil data di tabel keceptan motor Mov B,EnableMotor ;OR kan dengan keaktifan motor

Orl A,B ;

Mov P1,A ;Kirim ke P1

Inc R0 ;Tunjuk tabel kecepatan berikutnya Djnz R7,LoopMotor ;Lakukan hingga sejumlah step kecepatan Ajmp Loop2Motor ;Kembali ke loop2Motor

;---

;Isi Tabel Kecepatan dengan FF atau tidak ada kecepatan

;Isi Tabel Alamat Step Kecepatan dengan alamat awal dari Tabel Kecepatan

;---

IsiTabel:

Mov R0,#TabelKecepatan ;R0 ke alamat awal tabel ke

;cepatan motor

Mov R7,#StepKecepatan ;R7 diisi dengan jumlah step

;kecepatan

LoopKecepatanAwal:

Mov @R0,#0FFH ;Isi FFH di seluruh data

Inc R0 ;kecepatan motor

Djnz R7,LoopkecepatanAwal ;

Mov R0,#PointerKecepatan ;R0 ke alamat awal tabel alamat

;step kecepatan motor Mov R7,#JumlahMotor ;R7 dengan jumlah motor

IsiAlamatMotor:

Mov @R0,#TabelKecepatan ;Isi tabel pointer data kecepatan

Inc R0 ;dengan alamat awal pointer

kecepatan

Djnz R7,IsiAlamatMotor ; Ret

;---

;Penambahan kecepatan

;- Ambil pointer kecepatan motor di alamat ini ditunjuk oleh kode

; yang diterima (R0)

;- Apabila pointer menunjuk ke akhir tabel maka pointer tidak berubah

(14)

;- Apabila pointer belum menunjuk ke akhir tabel maka pointer akan menuju ke

; alamat berikutnya

TambahKecepatan:

Mov A,@R0 ;Ambil alamat data kecepatan terakhir dari

;motor tersebut

Cjne A,#StepKecepatan+TabelKecepatan,TidakResetAlamat ;Bila alamat

;terakhir, kembali ke alamat awal Mov @R0,A

Ret

TidakResetAlamat:

Push A ;Pointer menunjuk ke alamat berikut

Inc A ;

Mov @R0,A ;

Pop A ;

Ret

;---

;- Ambil alamat step kecepatan yang terakhir dan bila belum mencapai

; alamat awal, tunjuk ke alamat sebelumnya dan simpan kembali ke tabel

;- Bila mencapai alamat awal, maka tetap tahan di alamat tersebut

KurangiKecepatan:

Mov A,R0 ;Ambil Kode yang diterima

Clr C ;

Subb A,#JumlahMotor ;Kode yg diterima - JumlahMotor =

;alamat

;tabel pointer data kecepatan terakhir

;dari motor

;yang diakses

Mov R0,A ;Ambil pointer data kecepatan terakhir Mov A,@R0 ;tersebut

Cjne A,#TabelKecepatan,Tidak2resetAlamat ;Bila alamat bukan

;pointer awal, maka menuju alamat step

;sebelumnya LihatCarry2:

Mov A,#TabelKecepatan ;bila alamat awal maka, tahan di alamat Mov @R0,A ;tersebut

Ret

Tidak2ResetAlamat:

Dec A ;Menuju ke alamat step sebelumnya Mov @R0,A ;simpan di tabel alamat step Ret

;---

;INTERRUPT SERVICE ROUTINE

;---

Serial_Interrupt:

Clr ES ;Disable Interrupt

Mov P1,#0FFH ;Matikan semua motor sejenak Mov A,SBUF ;Simpan perintah di R5

;---

;Terjemahkan perintah yang diterima dari serial

;- Perintah '>' untuk pengaturan kecepatan

(15)

; A...H = Motor 1...Motor 8 ditambah kecepatan

; I...P = Motor 1...Motor 8 dikurangi kecepatan

; Contoh:

; - Menaikkan kecepatan motor 1: >A

; - Mengurangi kecepatan motor 8: >P

;

; Bila kecepatan mencapai maksimal atau minimal maka kecepatan akan bertahan

; di sana

;- Perintah '!' untuk mengatur keaktifan motor

; A...H = Motor 1...Motor 8 aktif

; I...P = Motor 1...Motor 8 non aktif

; Contoh:

; - Mengaktifkan motor 7: !G

; - Menonaktifkan motor 3: !K

;---

Cjne A,#'>',Bukan_Kecepatan ; Ajmp Kecepatan

Bukan_Kecepatan:

Cjne A,#'!',Kembali

;---

;Mengatur keaktifkan Motor

;Keaktifan motor diatur oleh variabel EnableMotor

;Variabel ini terdiri dari 8 bit di mana bit 0 adalah Motor 1 hingga bit 8 adalah

;motor 8. Bit 1 menandakan motor non aktif dan bit 0 menandakan motor aktif

;---

Clr RI ;Ambil kode keaktifan motor

Jnb RI,* ;

Mov A,SBUF ;

Clr C ;

Subb A,#'A' ;Kode keaktifan - 'A' = urutan aksi

;motor

Mov DPTR,#AksiMotor ;DPTR menunjuk ke alamat awal aksi

;motor

Mov R0,#EnableMotor ;R0 menunjuk alamat variabel

;keaktifan

Mov B,#07 ;Urutan aksi motor * 7 (ukuran area yg Mul AB ;dipakai utk tiap urutan aksi motor) Jmp @A+DPTR ;Lompat ke alamat urutan aksi motor

Kecepatan:

Clr RI Jnb RI,*

Mov R5,SBUF

;---

;- Periksa apakah perintah pengurangan atau penambahan kecepatan

;---

Mov R0,05H ;Kode Motor yang diakses -> R0

Cjne R0,#PointerKecepatan+JumlahMotor,LihatCarry ;Kode yang

;diterima

;> dari 'H' maka pengurangan kecepatan

LihatCarry: ;

Jnc PerintahPengurangan ;

;Bila tidak maka penambahan kecepatan Acall TambahKecepatan ;

;---

(16)

;- Proses penambahan kecepatan/mengaktifkan motor dilakukan dengan

; meng-clear bit-bit dari motor yang diakses di alamat yang ditunjuk

; oleh pointer data kecepatan

;- Proses pengurangan kecepatan/menonaktifkan motor dilakukan dengan men-set

; bit-bit dari motor yang diakses di alamat yang ditunjuk oleh pointer data

; kecepatan

;--- AksiMotor2:

Mov R0,A ;R0 diisi alamat step kecepatan yang

;akan diubah

Mov DPTR,#AksiMotor ;DPTR ke alamat awal tabel aksi motor Mov A,R5 ;Kode yg diterima - 'A' = Urutan

Clr C ;aksi motor

Subb A,#'A' ;

Mov B,#07 ;Urutan aksi motor * 7 (area yg

;digunakan

Mul AB ;setiap urutan)

Jmp @A+DPTR ;Lompat ke alamat urutan aksi motor

PerintahPengurangan:

Acall KurangiKecepatan Ajmp AksiMotor2

Kembali:

Clr RI ;Hapus Flag Receive Clr TI ;Hapus Flag Transmit Setb ES ;Enable Serial Interrupt Reti ;Kembali dari interrupt

;---

;Lakukan set atau clear bit di alamat yang ditunjuk oleh R0

;- Untuk mengatur kecepatan

; - R0 diisi alamat step kecepatan

; - Set/clear di bit yang tergantung dari motor yang diakses pada alamat yg

; ditunjuk R0

;- Untuk mengatur keaktifan

; - R0 diisi alamat variabel keaktifan motor (EnableMotor)

; - Set/clear di bit yang tergantung dari motor yang diakses

;---

AksiMotor:

;Tambah Kecepatan/aktifkan Motor 1 Mov A,@R0

Clr A.0 Mov @R0,A Ljmp Kembali

;Tambah Kecepatan/aktifkan Motor 2 Mov A,@R0

Clr A.1 Mov @R0,A Ljmp Kembali

;Tambah Kecepatan/aktifkan Motor 3 Mov A,@R0

Clr A.2 Mov @R0,A Ljmp Kembali

;Tambah Kecepatan/aktifkan Motor 4 Mov A,@R0

(17)

Clr A.3 Mov @R0,A Ljmp Kembali

;Tambah Kecepatan/aktifkan Motor 5 Mov A,@R0

Clr A.4 Mov @R0,A Ljmp Kembali

;Tambah Kecepatan/aktifkan Motor 6 Mov A,@R0

Clr A.5 Mov @R0,A Ljmp Kembali

;Tambah Kecepatan/aktifkan Motor 7 Mov A,@R0

Clr A.6 Mov @R0,A Ljmp Kembali

;Tambah Kecepatan/aktifkan Motor 8 Mov A,@R0

Clr A.7 Mov @R0,A Ljmp Kembali

;Kurangi Kecepatan/nonaktifkan Motor 1 Mov A,@R0

Setb A.0 Mov @R0,A Ljmp Kembali

;Kurangi Kecepatan/nonaktifkan Motor 2 Mov A,@R0

Setb A.1 Mov @R0,A Ljmp Kembali

;Kurangi Kecepatan/nonaktifkan Motor 3 Mov A,@R0

Setb A.2 Mov @R0,A Ljmp Kembali

;Kurangi Kecepatan/nonaktifkan Motor 4 Mov A,@R0

Setb A.3 Mov @R0,A Ljmp Kembali

;Kurangi Kecepatan/nonaktifkan Motor 5 Mov A,@R0

Setb A.4 Mov @R0,A Ljmp Kembali

;Kurangi Kecepatan/nonaktifkan Motor 6 Mov A,@R0

Setb A.5 Mov @R0,A Ljmp Kembali

;Kurangi Kecepatan/nonaktifkan Motor 7 Mov A,@R0

Setb A.6 Mov @R0,A Ljmp Kembali

;Kurangi Kecepatan/nonaktifkan Motor 8 Mov A,@R0

(18)

Setb A.7 Mov @R0,A Ljmp Kembali

Gambar

Gambar 2  Aliran arus pada C9014
Gambar 3  Bentuk sinyal PWM
Gambar 4 menunjukkan hubungan antara tabel kecepatan dan sinyal PWM  yang dihasilkan. Seperti telah dijelaskan sebelumnya, bahwa untuk mengaktifkan  motor dilakukan dengan memberikan kondisi low pada port yang berhubungan, oleh  karena itu semakin lebar ko
Tabel Perintah-perintah Pengendalian Motor

Referensi

Dokumen terkait

Kedua, seperti yang dikatakan oleh Siprianus Sogen 3 dan George Mella 4 , Soe adalah sebuah kota kecil sehingga organisasi tukang ojek yang dibentuk tidak hanya

Puji Syukur Kepada Tuhan penguasa ruang waktu atas restu yang telah diberikan sehingga dapat menyelesaikan tugas akhir penciptaan karya seni ini

17 Bab III pada tesis ini akan membahas mengenai arsitektur keamanan regional di Asia Tenggara pada masa pasca Perang Dingin dengan melihat beberapa konflik antar

Dari hasil data metode CSAMT sebelumnya penulis beranggapan bahwa zona daerah yang memiliki nilai resistivitas yang sangat tinggi yaitu sekitar 500 – 7000 Ohm-meter merupakan

Ciri-ciri masyarakat majemuk menurut van Den Berghe adalah: (1) mengalami segmentasi ke dalam kelompok-kelompok dengan subkultur saling berbeda, (2) memiliki struktur yang terbagi

Pada kajian ini aksesibilitas informasi repository Undip , indikator yang diamati adalah (1) jumlah pengunjung pertama yang mengakses repository penelitian Undip, (2)

- Berasal dari peternakan dan atau daerah yang tidak ditutup karena berjangkit penyakit unggas menular yang dinyatakan dengan surat keterangan asal unggas dan SKKH

Berdasarkan pada dapatan kajian, beberapa langkah perlu dilakukan dalam meningktkan penguasaan aspek pedagogi dan isi kandungan pengajaran dalam kalangan tenaga pengajar di