Pengontrolan motor DC secara sederhana dibagi menjadi dua. Pertama yaitu dengan mengatur arah putaran dan besarnya kecepatan dari putaran motor. Arah putaran motor secara prinsip di atur dengan membalikan polaritas tegangan yang masuk ke motor. Sedangkan besarnya kecepatan putaran motor diatur dengan mengatur tegangannya. Mekanisme pengaturan ini ditangani oleh driver motor.
Driver motor yang digunakan banyak jenisnya. Yang paling sederhana dan mudah dijumpai adalah driver dengan tipe IC L293D dan L298. Driver ini masing-masing memiliki kemampuan memberikan arus maksimal motor sebesar 1A dan 4A. Untuk motor-motor kecil yang memiliki rating arus rendah sangat cocok menggunakan driver motor ini.
Selain jenis IC di atas untuk driver motor, banyak lagi tipe lainnya. Biasanya tipe yang digunakan disesuaikan dengan motor yang dikontrol. Semakin besar rating arus motor, maka driver motor yang digunakan juga semakin mahal. Untuk mengatasinya maka driver motor dirancang sendiri dengan komponen MOSFET. Prinsip kerja rangkaian driver MOSFET ini menggunakan konsep H-Bridge. Berikut adalah salah satu contoh rangkaian driver MOSFET.
Input masukkan ke driver diperoleh dari mikrokontroler. Pada artikel ini akan dibahas contoh sederhana pengontrolan motor DC dengan PWM. Dengan membuat rangkaian sederhana berikut ini dengan Proteus, kita dapat mensimulasikan pengontrolan motor DC secara mudah
Untuk mengatur arah putaran motor 1 (atas) yaitu dengan memberikan sinyal 1 atau 0 ke pin IN1 dan IN2. Sedangkan untuk motor 2 (bawah) yaitu pada IN3 dan IN4. Sedangkan untuk mengatur kecepatan motor yaitu pada EN1 dan EN2 untuk ke motor 1 dan motor 2. Sinyal 0 atau 1 ini dapat dihasilkan dari port mikrokontroler dengan mengaturnya sebagai output, yang dapat langsung mengatur arah putaran. Sedangkan EN1 dan EN2 masukkannya berupa sinyal PWM. PWM atau Pulse Width Modulation adalah suatu teknik modulasi sinyal dengan memvariasikan lebar pulsanya. Berikut adalah contoh sinyal PWM,
Salah satu parameter yang perlu diatur pada sinyal PWM ini adalah periode sinyal dan lebar pulsanya. Lebar pulsa dinyatakan dengan duty cycle yang merupakan persentase dari perbandingan pulsa on (Ton) dengan Ttotal, sehingga %duty_cycle = Ton/Ttotal*100 (%). Untuk mencoba membuat programnya dengan mikrokontroler AVR maka dapat dengan mudah dilakukan menggunakan CodeVisionAVR. Contoh yang digunakan dibawah ini adalah dengan menggunakan ATmega16 yang dipasang frekuensi clock 11.05920 MHz.
Berikut adalah setting penggunaan Timer untuk menghasilkan sinyal PWM
Yang perlu diubah adalah parameter Clock Value 10.800 kHz, Mode Fast PWM top = 00FFh, Out. A dan Out. B Non. Inverting. Dengan mengatur Clock Value 10.800 kHz maka periode timer adalah 1/10.800 kHz = 92.6 uS. Maksudnya adalah kenaikan register Timer1 yaitu TCNT1 akan increment (naik satu kali) setiap 92.6 uS. Karena dipilih nilai top dari timer adalah 00FFh atau 255 maka periode PWM total adalah sebesar 255*92.6 uS = 23.61 mS. Untuk mengatur duty cycle yaitu dengan memasukan nilai ke register OCR (OCR1A atau OCR1B) yang nilainya 0 – 255. Dimana Ton yang akan dihasilkan memiliki waktu sebesar OCR*92.6 uS. Maka jika nilai OCR = 128, Ton adalah 128*92.6 uS = 11.85 ms. Untuk membuktikannya dapat dilihat dengan menggunakan Osiloskop pada simulasi dengan Proteus. Dimana prinsip kerjanya dapat dilihat pada gambar berikut
Kode yang dihasilkan adalah sebagai berikut (dengan menghapus beberapa bagian baris program yang tidak digunakan)
#include// Declare your global variables here void main(void) { // Port D initialization // Func7=In Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0xFF; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 10.800 kHz // Mode: Fast PWM top=00FFh // OC1A output: Non-Inv. // OC1B output: Non-Inv. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0xA1; TCCR1B=0x0D; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; while (1) { PORTD.0 = 1; PORTD.1 = 0; OCR1B = 128; }; }
Dengan menjalankannya pada Proteus dan melihat tampilan sinyal pada osiloskop yaitu sebagai berikut
Terlihat bahwa hasil yang diperoleh sesuai perhitungan yang dijelaskan pada paragraf sebelumnya. Pada program ini motor bergerak pada kecepatan setengahnya karena duty cycle yang diberikan adalah 50%. Agar kedua motor bergerak maka pada while(1) tinggal ditambahkan kode sebagai berikut
while (1) { PORTD.0 = 1; PORTD.1 = 0; OCR1B = 128; PORTD.2 = 1; PORTD.3 = 0; OCR1A = 128; };
Dari tutorial ini sudah dijelaskan bagaimana cara pengendalian motor DC dengan mengatur arah dan kecepatannya dari mikrokontroler AVR. Pengendalian motor DC ini sebagai dasar dalam pengontrolan robot-robot jenis beroda seperti Line Follower atau Robot Pemadam Api. Hal yang sangat perlu diperhatikan adalah pemilihan frekuensi PWM yang tepat ke driver motor yang masuk ke dalam motor DC. Namun, pada tutorial ini tidak dibahas pemilihan frekuensi PWM yang tepat untuk pengendalian motor DC. Pembahasan lengkap akan dijelaskan pada tulisan berikutnya.
Download Link Simulasi dan Program
Semoga Bermanfaat.
22 comments:
makasih gan the best lah
saya mau mas tanya kalau motor dcnya cuman satu tapi motornya dapat bolak-balik yang perlu ditambahi programnya apa mas?
terima kasih
Mas saya perlu mengatur putaran motor dc (mirip motor wiper), skr hanya pakai adaptor biasa sehingga pada putaran rendah kurang tenaga dan tidak stabil. Apakah dengan vwm ini bisa mengatasi hal tsb, dimana saya bisa beli jadi ?. Soalnya saya awam elektronik. Terimakasih atas bantuannya.
Gunanya PWM sebenarnya untuk melakukan variasi tegangan yang diberikan ke motor. Aplikasinya adalah pengontrolan dapat dilakukan oleh sistem digital. Secara mudah dengan potensiometer pun kita dapat melakukan variasi tegangan.
Jika membutuhkan variasi tegangan yang paling mudah adalah dengan menggunakan adaptor variabel yang tegangan keluarannya bisa kita atur. Namun perhatikan juga arus maksimal keluarannya. Jika spek motor 5 A, maka gunakan adaptor minimal 5 A juga supaya kecepatan dan torsi motor maksimal
Baik terimakasih mas penjelasannya.
mas, saya minta tolong bikin program cv avr buat putaran motor ketika push button ditekan, putar ke kanan bgtu pula kekiri sampai push button ditekan langsung STOP.. gimana mas ? mohon bantuannya mas, terima kasih
mas mau tanya nih..
kalo saya menggunakan xtal 12Mhz apakah saya tetap menggunakan setingan yang sama seperti yang anda jelaskan diatas
terimakasih sebelumnya
gan mau nanya nh, OCR1B it mksudx ap gan?
thanks sob,
Mas Q punya robot line follower denga ic atmega 16 trus arus yg dari board atmega ke driver dibagi 2 yg 1 ke board atmega 16 yg 1 nya ke relay. Tp knpa pas dijalankan motor driver nya agak melambat mas, tolong penjelasannya mas.
Mas Q punya robot line follower denga ic atmega 16 trus arus yg dari board atmega ke driver dibagi 2 yg 1 ke board atmega 16 yg 1 nya ke relay. Tp knpa pas dijalankan motor driver nya agak melambat mas, tolong penjelasannya mas.
Maaf saya belum terlalu paham masalahnya, untuk drivernya menggunakan pengendalian tegangan melalui PWM atau pengaturan arah saja dengan relay?
Maaf sebelumnya saya belum terlalu paham juga mau tanya ini sayan mau bikin stirrer magnetik tpi bingung gimana programya itu motornya makek motor dc itu gimana mas ya ?
Maaf sebelumnya saya belum terlalu paham juga mau tanya ini sayan mau bikin stirrer magnetik tpi bingung gimana programya itu motornya makek motor dc itu gimana mas ya ?
Yang ditambhakan program di mikronya
apakah ini bisa di applikasikan pada motor servo?
kak kalau program untuk mengontrol motor dc menggunakan arduino uno kayak mana ya?
@winda wulan, untuk pengontrolan motor DC dengan Arduino bisa dilihat di tutorial ini https://learn.adafruit.com/adafruit-arduino-lesson-13-dc-motors/arduino-code
@fery kurniawan, untuk pengendalian motor servo bisa berkunjung ke postingan blog saya yang lain, http://pudintekel.blogspot.co.id/2011/09/kendali-motor-servo-dengan-pulse-width.html
Gan outputnya bisa diganti ga di port a misalkan?
mohon pencerahannya
Kalo menggunakan Mikrontroler AVR, port untuk timer disediakan khusus, jadi tidak bisa menggunakan PORT A. Kecuali anda menggunakan Arduino, anda bisa mengatur sendiri port yang anda inginkan sesuai program
mas sampean belajarnya gimana sih, saya udah satu semester gkk paham paham mohon pencerahannya
Post a Comment