Remote Control Pengatur Kecepatan Motor DC
Remote Control Pengatur Kecepatan Motor DC
Dalam artikel ini dibahas rangkaian dan cara kerja dari 12V dc motor controller berdasarkan PWM (Pulse Width Modulation.) Motor dikontrol kecepatannya secara remote, menggunakan LCD Epson SED1200 sebagai sistem tampilan kecepatan.
Kecepatan yang ditampilkan pada LCD dinyatakan dengan satuan RPS (rotation per second). Dipakai remote control buatan Sony yang biasa dipakai untuk TV, tombol volume plus pada remote control Sony digunakan untuk menaikkan kecepatan dari motor dc sedangkan tombol volume minus untuk menurunkan kecepatan.
Blok Diagram Remote Control Pengatur Kecepatan Motor DC
Makalah ini dibagi menjadi 4 bagian yaitu bagian remote control, memutar kipas, menghitung kecepatan serta menampilkan ke LCD.
Remote Control
Pada remote control terdapat dua bagian yang utama yaitu : bagian transmiter dan bagian receiver. Bagian transmitter dalam hal ini menggunakan remote yang sudah jadi, yaitu remote untuk TV. Sedangkan bagian penerimanya dibangun dari dioda infra merah, filter, dan penguat sinyal/amplifier.
Rangkaian Receiver
Untuk dapat mengambil data yang dipancarkan oleh remote maka harus dibuat rangkaian penerima yang terdiri dari op-amp, IC 74LS04 (inverter), multiturn variable resistor, IR diode (receiver) dan beberapa komponen penunjang. Rangkaian receivernya dapat dilihat pada gambar 2. Penggunaan dari op-amp ini untuk mengatur penguatan dari sinyal yang diterima oleh IR diode. Sinyal yang diterima oleh IR diode ini akan dimasukkan rangkaian high pass filter (C dan R). Kombinasi nilai dari C dan R ini diperoleh dengan menggunkanan rumus :
Sinyal yang keluar dari rangkaian high pass filter dikuatkan dua kali. Rangkaian penguat 1 adalah non-inverting amplifier dengan menggunakan op-amp LM358. Kemudian output dari rangkaian penguat 1 dikuatkan sekali lagi dengan penguatan non inverting amplifier juga dengan op-amp LM358. Sinyal yang keluar dari rangkaian penguat 2 ini masih mengandung sinyal carrier. Untuk itu sinyal carriernya perlu dihilangkan dengan cara menambahkan rangkaian low pass filter (R dan C).
Penggunaan rangkaian high pass filter dan low pass filter ini untuk membatasi frekuensi yang diterima, sinyal yang berada di bawah 159.23 Hz dan di atas 7.24 kHz tidak dilewatkan. Dengan rangkaian low pass filter tersebut maka sinyal carrier dari remote TV Sony tidak akan dilewatkan Kemudian sinyal itu disempurnakan dengan menambahkan rangkaian comparator dengan mengunakan op-amp tipe LM339. Komparator ini berfungsi jika tegangan yang masuk kurang dari tegangan referensinya maka outputnya akan low sebaliknya jika tegangan yang masuk melebihi tegangan referensi maka outputnya akan high. Output dari LM339 ini akan dimasukkan IC 74LS04 sebagai inverter.
Remote Control TV Sony
Remote Control dibagi menjadi 3 menurut jenis pengkodeannya :
- Pulses coded
Jenis ini mengatur panjang pulsanya, sehingga pulsanya divariasi untuk menunjukkan data itu berlogic high atau low. Yang dijadikan variasi adalah pulsa highnya. Metode ini dipakai oleh remote Sony. - Space coded
Metode ini juga mengatur panjang pulsanya untuk menunjukkan data tersebut berlogic low atau high. Tetapi yang diatur adalah lebar pulsa lownya. Jenis ini diterapkan oleh remote Panasonic - Shift coded
Metode ini yang paling berbeda diantara kedua metode di atas. Metode ini menggunakan prinsip perbedaan fase untuk menunjukkan data yang dikirim berlogic low atau high. Metode pengiriman data ini diterapkan oleh remote Philips.
Penggunaan infra red sangat bagus dalam komunikasi dan kontrol suatu sistem. Infra red adalah frekuensi radiasi yang bekerja di bawah tingkat sensitivitas mata manusia. Jadi manusia tidak dapat melihat sinar tersebut. Gambaran sinyal yang dikirimkan oleh transmitter dan diterima oleh IR demodulator dapat dilihat pada gambar 3 sebagai contoh yang dikirimkan adalah header:
Jika transmitter mengirimkan sinyal on dan off maka pada receiver juga menerima sinyal on dan off. Tetapi receiver hanya mendeteksi ada carrier atau tidak. Jika ada data carrier maka pulsa yang dikirimkan adalah high sebaliknya jika tidak ada carrier maka pulsa yang dikirimkan adalah low. Sinyal carrier sebesar 40 kHz yang diterima oleh receiver akan hilang, karena pada receiver sudah dibatasi dengan menggunakan rangkaian high pass filter dan low pass filter, frekuensi yang kurang dari 159.23 Hz dan lebih dari 7.24 kHz tidak dilewatkan. Sedangkan sinyal informasi sebesar 4T=2200ms (454.54 Hz) akan diterima begitu juga pulsa lownya sebesar 1T=550ms (1.82 kHz) akan diterima untuk diolah sebagai data header. Salah satu contoh aplikasi dari penggunaan infra red adalah pada TV/VCR remote control. Infra red ini bekerja pada range frekuensi antara 30-60 kHz.
Dengan melihat karakteristik ini maka remote control menggunakan frekuensi carrier sekitar 36-40kHz. Untuk membangkitkan sinyal dengan frekuensi 40kHz tidak sulit tetapi untuk menerima sinyal dengan frekuensi 40 kHZ itu membutuhkan filters, penguatan sinyal, dan menghilangkan sinyal carrier sehingga data yang diterima benar-benar valid.
Remote yang digunakan dalam hal ini adalah remote TV Sony. Format data dari remote Sony terdiri dari 12 bits data. Data yang dikirimkan pertama kali adalah header selanjutnya baru data.
Remote Sony ini memiliki karakteristik yaitu memiliki periode (1T)=550 ms dan carrier 40Khz. Untuk remote Sony memiliki header high 4T dan low 1T, untuk logic 1 memiliki pulsa high sepanjang 2T dan low 1T, dan untuk logic 0 memiliki pulsa high 1T dan low 1T. Ini merupakan format aslinya sedangkan jika mengamati sinyal yang dikirimkan remote melalui IR modul kebalikannya karena padda IR modul ada inverternya. Berikut contoh bentuk gambar pulsa dari header, logic 1 dan logic 0 dari remote TV Sony yang sebenarnya (belum melalui gerbang inverter).
Untuk dapat mengamati bentuk sinyal yang dipancarkan oleh remote maka diperlukan osiloskop. Dengan osiloskop akan diketahui bentuk sinyal dari masing-masing tombol pada remote.
Berikut ini adalah bentuk-bentuk sinyal dari remote Sony setelah keluar dari titik B pada gambar 2 (setelah melalui gerbang inverter).
Untuk membaca berapa besarnya header, logika1 dan logika 0, maka digunakan timer untuk menghitungnya jadi yang dibaca high dan lownya.
Potongan Program 1: Program Untuk Membaca Remote
1: .DATA
2: TMP DS 15
3:
4: .CODE
5: CLR EX0 ;MATIKAN INTERUPT
6: MOV R0,#TMP ;Isi R0 dengan alamat TMP
7: MOV TH1,#0 ;TH1 DIISI 0
8: MOV TL1,#0 ;TL1 DIISI 0
9: SETB TR1 ;JALANKAN TIMER 1
10: LOP1:
11: JNB 2,* ;CEK P3.2 LOW TETAP KE LOP1
12: LOP2:
13: JNB 2,LOP3 ;P3.2, APAKAH SUDAH LOW ? JIKA SUDAH KE LOP3
14: MOV A,TH1 ;TH1 DIISIKAN KE A
15: CJNE A,#$0C,LOP2 ;TUNGGU SAMPAI OVERFLOW
16: SJMP EXIT ;DATA SELESAI DITERIMA SEMUA,
17: ;LOMPAT KE EXIT
18: LOP3: CLR TR1 ;MATIKAN TIMER 1
19: MOV @R0,TH1 ;TH1 DIMASUKKAN KE ALAMAT DARI R0
20: INC R0 ;NAIKKAN R0
21: SJMP IR ;KEMBALI AMBIL DATA
22: EXIT:
Setelah datanya diambil maka dilihat apakah datanya berupa header, logic 1, logic 0. Dengan menggunakan timer maka dapat diketahui nilai dari headernya sebesar 0A, untuk logika 1 sebesar 06, sedangkan data highnya sebesar 06 dan untuk data lownya sebesar 04. Kemudian data yang masuk dikurangi oleh 05 jika ada carry berarti data low sebaliknya jika tidak ada carry berarti data high. Kemudian carrynya dikomplemen dan selanjutnya digeser dengan perintah RRC(rotate right dengan carry). Proses ini akan dilakukan sebanyak 8 kali pergeseran. Berikut ini program untuk mengolah data yang masuk. Proses ini akan dilakukan sebanyak 8 kali pergeseran.
Potongan Program 2 :
1: EXIT:
2: CLR TR1 ;MATIKAN TIMER
3: MOV R0,#TMP ;ALAMAT TEMP DIISIKAN KE R0
4: MOV A,@R0 ;ISINYA R0 DIISIKAN KE A
5: CLR C ;CLEAR CARRY
6: SUBB A,#9 ;CEK APAKAH HEADERNYA SONY
7: ;DENGAN DIKURANGI 9(HEADERNYA SONY=0A)
8: JNC SONY ;TIDAK ADA CARRY,BERARTI SONY
9: SETB EX0 ;ADA CARRY AKTIFKAN EXTERNAL INTERUPT
10: SJMP COBA
11: SONY:
12: INC R0 ;R0 DIINCREMENT
13: DATA:
14: MOV R7,#8 ;DIAMBIL 8 BIT DATA
15: MOV R6,#0 ;NILAI AWAL R6 DIISI 0
16: LDATA:
17: MOV A,@R0 ;ALAMAT DARI R1 DISIKAN KE A
18: CEKBIT:
19: CLR C ;CLEAR CARRY
20: SUBB A,#5 ;DIKURANGI 5(DATA HIGH SONY=06
21: ;DATA LOW SONY=04)
22: CPL C ;CARRY DIKOMPLEMEN
23: MOV A,R6 ;R6 DIISIKAN KE A
24: RRC A ;A DIGESER BERSAMA CARRY
25: MOV R6,A ;DISIMPAN DI R6
26: INC R0
27: DJNZ R7,LDATA ;TERUS SAMPAI 8 BIT DATA
Pengaturan Kecepatan Putar Kipas
Untuk menjalankan kipas digunakan rangkaian transistor yang disusun secara Darlington. Transistor yang dipakai adalah transistor jenis NPN tipe BC 547 yang memiliki faktor penguatan dc (hfe) sebesar 125 dan mampu mengalirkan sampai arus 100 mA DC. Rangkaian untuk menjalankan transistor dapat dilihat pada gambar 9:
Untuk mengatur kecepatan kipas digunakan teknik PWM( Pulse Width Modulation), yakni mengatur besarnya dutycycle, frekuensinya tetap tetapi lebar pulsa high dan lownya dapat diatur. Untuk itu digunakan timer untuk mengatur pulsa high dan pulsa lownya. Jadi dutycyclenya akan dimulai dari 20%,30%,40%,50%,60%,70%,80%,90%. Semakin besar dutycyclenya maka semakin cepat pula putaran dari motor. Berikut ini merupakan potongan program untuk menjalankan kipas dengan prinsip PWM:
Potongan Program 3 :Pengaturan Kecepatan Kipas
1: PWM:
2: MOV A,R4 ;NILAI AWAL R4 DIISIKAN KE A
3: MOV DPTR,#TABELH1 ;ALAMAT TABELH1 DIISIKAN KE DPTR
4: MOVC A,@A+DPTR ;A SEBAGAI PENUNJUK TABELH1 KEMUDIAN DIISIKAN KE A
5: MOV TABH,A ;TABH DIISI A
6: MOV A,R4
7: MOV DPTR,#TABELH2 ;ALAMAT TABELH2 DIISIKAN KE DPTR
8: MOVC A,@A+DPTR ;A SEBAGAI PENUNJUK TABELH2 KEMUDIAN DIISIKAN KE A
9: MOV TABH+1,A ;A DIISIKAN KE TABH+1
10: CLR TR0
11: CJNE R3,#0,LOW ;BANDINGKAN R3 DENGAN 0 TIDAK SAMA KE LOW
12: SETB 1
13: MOV TH0,TABH ;TABH DIISIKAN KE TH0
14: MOV TL0,TABH+1 ;TABH+1 DIISIKAN KE TL0
15: MOV R3,#1 ;R3 DIISI 1
16: SETB TR0 ;JALANKAN TIMER
17: SJMP SELESAI
18: LOW:
19: MOV A,R4
20: MOV DPTR,#TABELL1
21: MOVC A,@A+DPTR
22: MOV TABL,A
23: MOV A,R4
24: MOV DPTR,#TABELL2
25: MOVC A,@A+DPTR
26: MOV TABL+1,A
27: CLR 1
28: MOV TH0,TABL
29: MOV TL0,TABL+1
30: SETB TR0
31: RET
32: TABELH1 DB $FF,$FF,$FE,$FE,$FE,$FD,$FD,$FC,$FC,$FC
33: TABELH2 DB $FF,$38,$D4,$70,$0C,$A8,$44,$E0,$7C,$19
34: TABELL1 DB $FC,$FC,$FD,$FD,$FE,$FE,$FE,$FF,$FF,$FF
35: TABELL2 DB $19,$E0,$44,$A8,$0C,$70,$D4,$38,$9C,$FF
Penghitungan Kecepatan Putar Kipas
Untuk menghitung kecepatan dari motor maka digunakan rangkaian photo transistor. Prinsip dari photo transistor ini adalah mirip dengan transistor lainnya. Wujud dari rangkaian photo transistor ini dapat dilihat pada gambar 10:
Prinsip dari rangkaian ini adalah :
- Jika antara transistor dan LED dihalangi maka transistor akan off sehingga output dari kolektor akan berlogic high
- Sebaliknya jika antara transistor dan LED tidak dihalangi maka transistor akan on sehingga outputnya akan berlogic low.
Dengan mengetahui prinsip dari photo transistor ini maka harus dibuat penghalang antara transistor dan LED, pada penghalang itu diberi lobang sedikit. Penghalang itu harus dibuat seporos dengan kipas dc tersebut. Sehingga ketika berputar output dari transistor akan mengalami high dan low. Agar output dari rangkaian ini menjadi lebih akurat maka ditambahkan schmitt trigger (74LS14). Program untuk menghitung kecepatan dapat dilihat sebagai berikut:
Potongan Program 3 : Menghitung kecepatan Putar Kipas
1: LOOP:
2: JB 4,*
3: JNB 4,*
4: INC COUNT
5: SJMP LOOP
Tampilan-SED1200
Tampilan yang dipakai adalah LCD Epson SED1200. LCD ini digunakan untuk menampilkan kecepatan putaran dari kipas dalam satuan RPS (Rotation per second). LCD Epson SED1200 ini dilengkapi dengan 4 jalur data (DB0…DB3) yang dipakai untuk menampilkan kode ASCII maupun perintah untuk mengatur kerjamya SED1200. Kode ASCII maupun perintah tersebut semuanya merupakan kode 8 bit maka kode-kode itu dikirimkan dua kali, yang pertama dikirimkan adalah 4 bit yang bernilai besar (D4..D7). baru kemudian 4 bit sisanya(D0..D3). Selain dilengkapi dengan jalur data maka LCD Epson SED1200 ini dilengkapi dengan CS,WR, dan A0. A0 digunakan untuk membedakan data yang dikirimkan berupa perintah atau kode ASCII. Jika A0=0 maka data yang dikirimkan adalah perintah untuk mengatur kerja SED1200 sebaliknya jika A0=1 maka data yang dikirim adalah kode ASCII yang ingin ditampilkan.
- Sinyal CS digunakan untuk mengaktifkan proses pengiriman data, selama proses ini berlangsung CS diaktifkan pada level tegangan ‘0’
- Data yang dikirimkan ke SED1200 disiapkan di DB0..DB3, seperti yang telah dibicarakan dipecah menjadi 2 kali pengiriman yaitu pengiriman D4..D7 dan selanjutnya D0..D3.
- Sinyal WR dijadikan sebagai sinyal ’komando’, pengambilan data terjadi pada saat WR berubah dari ‘0’ menjadi ‘1’
Pada potongan program 4 ini akan ditunjukkan bagaimana mengendalikan SED1200.
- Subrutin KirimPerintah bekerja pada saat A0=’0’ berarti data yang dikirimkan AT89C2051 ke SED1200 berupa perintah untuk mengatur tata kerja SED1200. Subrutin KirimASCII bekerja pada saat A0=’1’ berarti data yang dikirimkan AT89C2051 sebagai kode ASCII yang akan ditampilkan.
- Selama proses pengiriman data CS diaktifkan pada level tegangan ‘0’.
- Data pada Akumulator A dikirimkan sebanyak dua kali yaitu 4 bit pertama A4..A7 dan 4 bit kedua A0..A3.
- Karena AT89C2051 tidak mempunyai sinyal ALE maka dibuat 16 pulsa clock yang dibutuhkan oleh SED1200
Potongan Program 4 : Mengatur Tampilan LCD
1: ;****DAFTAR PERINTAH PENGATUR SED1200*****
2: RESETSED1200 EQU %00010000
3: TAMPILAN1BARIS EQU %00010010
4: TAMPILAN2BARIS EQU %00010011
5: DISPLAYOFF EQU %00001100
6: DISPLAYON EQU %00001101
7: TANPACURSOR EQU %00001110
8: PAKAICURSOR EQU %00001111
9: GARISBAWAH EQU %00001000
10: BLOK EQU %00001001
11: TIDAKKEDIP EQU %00001010
12: BERKEDIP EQU %00001011
13: CURSORKEKANAN EQU %00000100
14: CURSORKEKIRI EQU %00000101
15: KEBARISSATU EQU %10000000
16: KEBARISDUA EQU %11000000
17:
18: ;****Konfigurasi PIN LCD****
19: WRITE BIT 4
20: A0 BIT 5
21: CS BIT 6
22: CLK BIT P1.7
23: LCD:
24: ACALL SIAPKANSED1200
25: ACALL HAPUSTAMPILAN
26: MOV A,#KEBARISSATU
27: ACALL KIRIMPERINTAH
28: MOV A,R1
29: MOV B,#100
30: DIV AB
31: ADD A,#$30
32: ACALL TAMPILKANHURUF
33: MOV A,B
34: MOV B,#10
35: DIV AB
36: ADD A,#$30
37: ACALL TAMPILKANHURUF
38: MOV A,B
39: ADD A,#$30
40: ACALL TAMPILKANHURUF
41: MOV A,#$52
42: ACALL TAMPILKANHURUF
43: MOV A,#$50
44: ACALL TAMPILKANHURUF
45: MOV A,#$53
46: ACALL TAMPILKANHURUF
47: MOV A,R4
48: ADD A,#$30
49: ACALL TAMPILKANHURUF
50: MOV A,#KEBARISDUA
51: ACALL KIRIMPERINTAH
52: RET
53:
54: ;****MEMPERSIAPKAN TATA KERJA SED1200*****
55: SIAPKANSED1200:
56: SETB Write ;LEVEL TEGANGAN BAKU
57: SETB CLK
58: CLR CS
59: MOV A,#RESETSED1200
60: ACALL KIRIMPERINTAH
61: MOV A,#TAMPILAN2BARIS
62: ACALL KIRIMPERINTAH
63: MOV A,#KEBARISSATU
64: ACALL KIRIMPERINTAH
65: MOV A,#GARISBAWAH
66: ACALL KIRIMPERINTAH
67: MOV A,#PAKAICURSOR
68: ACALL KIRIMPERINTAH
69: MOV A,#BERKEDIP
70: ACALL KIRIMPERINTAH
71: MOV A,#DISPLAYON
72: ACALL KIRIMPERINTAH
73: MOV A,#KEBARISDUA
74: ACALL KIRIMPERINTAH
75: MOV A,#GARISBAWAH
76: ACALL KIRIMPERINTAH
77: MOV A,#PAKAICURSOR
78: ACALL KIRIMPERINTAH
79: MOV A,#BERKEDIP
80: ACALL KIRIMPERINTAH
81: MOV A,#DISPLAYON
82: ACALL KIRIMPERINTAH
83: RET
84:
85: ; ***** Menghapus Tampilan SED1200 *****
86: HapusTampilan:
87: MOV A,#KeBarisSatu ;BARIS SATU DIHAPUS
88: ACALL HapusBaris
89: MOV A,#KEBARISDUA
90: ACALL HAPUSBARIS
91: HapusBaris:
92: ACALL KirimPerintah ;UNTUK PINDAH BARIS
93: MOV R7,#10 ;10 HURUF PER BARIS
94: HapusLagi:
95: MOV A,#’ ‘ ;MENAMPILKAN SPASI
96: ACALL TAMPILKANHURUF ;TAMPILKAN SPASI
97: DJNZ R7,HapusLagi
98: RET
99:
100: ;***** Tampilkan String yang ada di Memori Program *****
101: TAMPILKANHURUF:
102: ACALL KIRIMASCII
103: RET
104:
105: ;*****SUBRUTIN SED1200****
106: KirimPerintah:
107: CLR A0 ; A0=0 : COMMAND MODE
108: SJMP OutByte
109: KirimASCII:
110: SETB A0 ; A0=1 : CHARACTER MODE
111: OutByte:
112: CLR CS
113: PUSH A ; SIMPAN DULU
114: SWAP A ; A0..A3 DAN A4..A7 TUKAR TEMPAT
115: ACALL OutNibble ; OUTPUTKAN A4..A7
116: POP A ; AMBIL KEMBALI SIMPANAN
117: ACALL OutNibble ; OUTPUTKAN A0..A3
118: SETB CS
119:
120: ;***** Membuat 16 pulsa CLK ****
121: MOV R6,#32
122: Buat16CLK:
123: CPL CLK ; CLK DIBALIK, ‘0’->’1′ DAN ‘1’->’0′
124: DJNZ R6,Buat16CLK ; SEBANYAK 32 KALI
125: RET
126: OutNibble:
127: ANL A,#$0F ; HANYA A.0..A.3 YANG DIPAKAI
128: MOV R6,A ; SIMPAN DULU
129: MOV A,P1 ; AMBIL NILAI YANG SUDAH ADA DI P1
130: ANL A,#$F0 ; PERTAHANKAN NILAI A.4..A.7
131: ORL A,R6 ; GABUNGKAN DENGAN SIMPANAN A.0..A.3
132: MOV P1,A ; SIAPKAN KE SED1200
133: CLR Write ; ‘0’-KAN DULU KAKI WR SEED1200
134: SETB Write ; DATA DIAMBIL SED1200
135: RET