Selasa, 26 Juni 2007

Pengaturan Kecepatan Motor Dengan PC

PENGATURAN KECEPATAN MOTOR DENGAN PC OLEH DST-52

Penggunaan motor DC dewasa ini sudah sangatlah umum, salah satu kelebihan motor DC adalah relatif gampang didapat dan mudah diatur kecepatan putarnya. Secara umum pengaturan kecepatan motor DC adalah dengan menggunakan cara analog. Pada artikel kali ini akan dibahas contoh cara mengatur kecepatan motor DC dengan menggunakan mikrokontroller.

Mikrokontroler yang digunakan adalah AT8952 yang tergabung pada modul minimum system DST-52. Sebuah keyboard PC yang terhubung dengan PC digunakan sebagai inputan kecepatan yan diinginkan oleh pengguna. Sedangkan PC terhubung dengan modul DST-52 menggunakan koneksi serial RS-232. Informasi kecepatan dan arah putaran motor akan ditampilkan pada layar PC dan pada modul LCD HD4480. Sedangkan sebagai driver motor menggunakan modul driver motor.

Cara pengaturan kecepatan yang digunakan adalah dengan menggunakan teknik PWM (Pulse Width Modulation), salah satu teknik untuk mengatur kecepatan motor DC yang umum digunakan. Dengan menggunakan PWM kita dapat mengatur kecepatan yang diinginkan dengan mudah. Teknik PWM untuk pengaturan kecepatan motor adalah, pengaturan kecepatan motor dengan cara merubah-rubah besarnya duty cycle pulsa. Pulsa yang yang berubah ubah duty cyclenya inilah yang menentukan kecepatan motor. Besarnya amplitudo dan frekuensi pulsa adalah tetap, sedangkan besarnya duty cycle berubah-ubah sesuai dengan kecepatan yang diinginkan, semakin besar duty cylce maka semakin cepat pula kecepatan motor, dan sebaliknya semakin kecil duty cycle maka semakin pelan pula kecepatan motor. Sebagai contoh bentuk pulsa yang dikirimkan adalah seperti pada gambar 1, pulsa kotak dengan duty cycle pulsa 50%. Sedangkan sebagai contoh bentuk pulsa PWM adalah seperti pada gambar 2.

Gambar 1

Gambar 2

Seperti pada gambar 1, semakin besar duty cycle pulsa kotak, maka semakin lama pula posisi logika high. Jika motor diatur agar berjalan ketika diberi logika high, maka jika memberi pulsa seperti pada gambar 1 diatas, maka motor akan berada pada kondisi “nyala-mati-nyala-mati” sesuai dengan bentuk pulsa tersesebut. Semakin lama motor berada pada kondisi “nyala” maka semakin cepat pula kecepatan motor tersebut. Motor akan berputar dengan kecepatan maksimum jika mendapat pulsa dengan duty cycle 100%. Dengan kata lain motor mendapat logika high terus menerus.

Dengan mengatur besarnya duty cycle pulsa kotak yang dikirimkan, kita dapat mengatur banyaknya logika high yang diberikan pada motor, dengan kata lain mengatur lamanya waktu motor untuk berputar dalam satu periode pulsa. Jika lamanya waktu motor untuk berputar dalam satu periode pulsa ini berubah maka kecepatan purtaran motor juga akan berubah, sesuai dengan duty cycle atau waktu motor untuk berputar dalam satu periode pulsa.

Pada artikel kali ini akan dibahas bagaimana cara mengatur kecepatan motor dengan teknik PWM menggunakan modul DST-52. Inputan kecepatan diterima melalui keyboard PC. Tombol “A” untuk menaikkan kecepatan 1 tingkat, tombol “B” untuk menurunkan kecepatan 1 tingkat. Terdapat 8 tingkat kecepatan, dengan tombol “0,1,2,3,4,5,6,7,8” sebagai pemilih tingkat kecepatan. Tombol “>”,”<” digunakan untuk mengatur arah putaran motor. Informasi penekanan tombol ini akan diteruskan PC ke DST-52. Contoh program untuk menerima inputan tombol keyboard dan pengaturan kecepatan motor adalah seperti pada potongan Listing 1. Contoh program untuk menghasilkan pulsa PWM adalah seperti pada potongan Listing 2.

Gambar 3

Modul DST-52

Potongan Listing 1
  1. Serial_Interrupt:
  2. Clr EA
  3. Clr ES ;Disable Interrupt
  4. Mov A,SBUF ;
  5. Acall Numerik?
  6. Jc BukanNumerik
  7. Push A
  8. Clr C
  9. Subb A,#30H ;Simpan di variabel kecepatan
  10. Mov Kecepatan,A ;
  11. Pop B

  1. BukanNumerik:
  2. Mov DPTR,#TabelPerintah
  3. Acall CariPerintah1B
  4. Jc Kembali
  5. Jmp @A+DPTR
  6. Numerik?:
  7. Cjne A,#'0',$+3
  8. Jc N1
  9. Cjne A,#'9',$+3
  10. Jnc N2
  11. Clr C
  12. Ret
  13. N2:
  14. Mov B,A
  15. Setb C
  16. N1:
  17. Ret
  18. Kembali:
  19. Clr RI ;Hapus Flag Receive
  20. Clr TI ;Hapus Flag Transmit
  21. Setb ES ;Enable Serial Interrupt
  22. Setb EA
  23. Reti ;Kembali dari interrupt
  24. HapusBufferKecepatan:
  25. Mov R0,#TabelKecepatan
  26. Mov R7,#StepKecepatan
  27. LoopHapus:
  28. Mov @R0,#0FFH
  29. Inc R0
  30. Djnz R7,LoopHapus
  31. Ret
  32. Step:
  33. Acall SetTabelKecepatan
  34. Ljmp Kembali
  35. ******** PENGATURAN KECEPATAN ******
  36. SetTabelKecepatan:
  37. Lcall Hapustabel
  38. Mov A,Kecepatan
  39. Jz TidakSet
  40. Mov R0,#TabelKecepatan
  41. LoopSetTabel:
  42. Mov @R0,#00
  43. Inc R0
  44. Djnz A,LoopSetTabel
  45. TidakSet:
  46. Ret

  1. TambahKecepatan:
  2. Push A
  3. Mov A,Kecepatan
  4. Cjne A,Step,$+3
  5. Jnc TidakInc
  6. Inc Kecepatan
  7. TidakInc:
  8. Pop A
  9. Ajmp Step
  10. KurangiKecepatan:
  11. Push A
  12. Mov A,Kecepatan
  13. Jz TidakDec
  14. Dec Kecepatan
  15. TidakDec:
  16. Pop A
  17. Ajmp Step
  18. Forward:
  19. Clr P1.0
  20. Ljmp Kembali
  21. Reverse:
  22. Setb P1.0
  23. Ljmp Kembali

Jika inputan tombol bukanlah tombol-tombol yang telah ditentukan, maka penekanan tombol akan diabaikan.

Pulsa PWM dibangkitkan dengan menabelkan pulsa-pulsa yang akan dikirimkan tersebut. Isi dari tabel ini menentukan besarnya duty cycle pulsa. Pulsa-pulsa PWM dikirimkan ke motor secara kontinyu dengan periode pulsa yang tetap, sedangkan besarnya duty cycle berubah sesaui dengan kecepatan yang diinginkan. Contoh program untuk menghasilkan pulsa PWM adalah seperti pada potongan listing 2.

Inpformasi kecepatan motor akan ditampilkan pada LCD, seperti pada contoh pada potongan listing 3

Potongan Listing 2
  1. Timer0Interrupt:
  2. Clr ET0
  3. Mov TH0,#0EEH
  4. Mov TL0,#00
  5. Mov A,@R0 ;Ambil data di tabel kecepatan motor
  6. Mov C,A.0
  7. Mov Motor,C
  8. Inc R0 ;Tunjuk tabel kecepatan berikutnya
  9. Djnz R7,TidakResetTabel
  10. Mov R0,#TabelKecepatan
  11. Mov R7,#StepKecepatan
  12. TidakResetTabel:
  13. Setb ET0
  14. Reti

Potongan Listing 3
  1. Tampilan_LCD:
  2. Lcall PosisiAwal_LCD
  3. Mov DPTR,#Tampilan
  4. Lcall KirimPesan_LCD
  5. Mov A,Kecepatan
  6. Anl A,#0FH
  7. Add A,#30H
  8. Lcall Kirim_Karakter
  9. Ret
  10. Tampilan_Arah_Forward:
  11. Lcall PosisiAwal_LCD
  12. Lcall Baris2_LCD
  13. Mov DPTR,#Tampilan_Forward
  14. Lcall KirimPesan_LCD
  15. Ret
  16. Tampilan_Arah_Reverse:
  17. Lcall PosisiAwal_LCD
  18. Lcall Baris2_LCD
  19. Mov DPTR,#Tampilan_Reverse
  20. Lcall KirimPesan_LCD
  21. Ret