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.