Kontrol Motor Dengan PWM

Written by Iccank. Posted in Programming

Pengontrolan motor dalam dunia robotika merupakan hal yang wajib untuk diketahui bagi para designer robot. Pengontrolan motor ini terbagi atas dua jenis yaitu kontrol arah putaran motor dan kontrol kecepatan putaran motor. Pengontrol arah putaran motor tentunya menggunakan sebuah rangkaian driver motor yang biasanya terdiri dari transistor dan relay atau hanya menggunakan transistor yang biasa disebut dengan Rangkaian H-Bridge seperti yang telah saya posting sebelumnya.

Sedangkan untuk pengontrolan kecepatan motor biasanya menggunakan teknik yang dinamakan PWM (Pulse Width Modulation). Yaitu memodulasi lebar sinyal pulsa dari mikrokontroler yang dimana semakin lebar pulsa yang diberikan mikrokontroler ke rangkaian driver maka kecepatan motor akan bertambah begitu pula sebaliknya.

Rangkaian driver motor kali ini menggunakan IC khusus yang mampu mengontrol dua motor serta dilengkapi dengan dua PIN Enable untuk PWM. Sedangkan untuk Chip pengontrol menggunakan ATmega8 seperti yang terlihat pada gambar dibawah ini.

kontrol motor dengan pwm

Seperti yang terlihat pada gambar diatas dapat dengan jelas kita lihat jalur hubungan kaki-kaki antara ATmega8 dan L293D

Selanjutnyan Script Program untuk pengontrolan motor menggunakan PWM

/*****************************************************
Project : PWM Control 
Version : 1.0
Date    : 01/02/2012
Author  : Iccank Devilz
Website : http://www.zer07even.com
Chip type           : ATmega8
Program type        : Application
Clock frequency     : 11,059200 MHz
Memory model        : Small
External RAM size   : 0
Data Stack size     : 256
*****************************************************/
#include <mega8.h>
#define PWMkanan OCR1A
#define PWMkiri OCR1B
void motor (unsigned char GASkanan, unsigned char GASkiri);
void main(void)
{
PORTB=0x00;DDRB=0xFF;
PORTC=0x00;DDRC=0x00;
PORTD=0x00;DDRD=0x00;
TCCR1A=0xA1;
TCCR1B=0x02;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
while (1)
      {
            motor (100,100);  // input nilai PWM motor dari 0-255
      };
}
void motor (unsigned char GASkanan, unsigned char GASkiri)
{
PORTB.0=1;PORTB.3=0;
PORTB.4=1;PORTB.5=0;
PWMkanan=GASkanan;
PWMkiri=GASkiri;
} 

Jika ada yang kurang jelas mengenai pembahasan kontrol motor PWM diatas silahkan berkomentar

File Skematik dan Program dapat kamu download pada link dibawah:

Download

Semoga berguna!

Comments (27)

700 characters remaining

Cancel or

  • fatur
    mau nanya soal listing yang ini:
    TCCR1A=0xA1;
    TCCR1B=0x02;

    maksudnya gimana mas?
  • Iccank Devilz
    @fatur TCCR1A=0xA1 adalah inisialisasi mode pwm non inverting, artinya semakin besar nilai PWM yang diberikan maka putaran motor akan semakin kencang sedangkan TTCR1B=0x02 merupakan jumlah frekuensi clock pulsa pwm sebesar 1382,400 KHz
  • slash
    mas menentukan nilai frekuensi clock pulsa pwm sebesar 1382,400 KHz darimana ?
    apakah script ini berlaku buat motor servo mas ?
    makasih sblmnya
  • Iccank Devilz
    @slash kita diskusikan di forum aja mas...
    penjelasannya panjang..
    hehe..
  • Ramat
    Mas klo mo ngontrol kepecatan motor DC pake PWM tu pake pin yang mana? Saya kan pake driver L298, pake mikrokontroler ATmega8535, kaki driver yang ke mikro kan ada 6 yaitu In1, In2, EnA, In3, In4, dan EnB. Yang dipake untuk PWMnya kaki yang mana aja ya. Trus kaki mikrokontroler yang dipake untuk ngeluarin PWM kaki yg mana aj? Thanks
  • Iccank Devilz
    @Ramat untuk L298 sebenarnya inputnya sama dengan l293 diatas cuman beda nama aja pada port PWMnya.. l293 pwmnya pake pin En1 & En2 sedang pada L298 pake pin EnA & EnB. Terus port yang dipake untuk pwm pada ATmega8535 yaitu PORTD.4 dan PORTD.5
  • satrio
    mas, kalo buat 6 sinyal pwm gmn?
  • Iccank Devilz
    @satrio maksudnya gimana mas?? 6 sinyal pwm dalam satu mikrokontroler??
  • satrio
    @Iccank Devilz iya mas buat 6 sinyal PWM pakek 1 mikrokontroller. itu nanti buat ngontrol motor induksi 3 fasa..
  • Iccank Devilz
    @satrio Untuk buat 6 sinyal PWM dalam satu mikro saya ngak pernah coba mas, karena setahu saya pada datasheetnya untuk ATmega16 cuman punya 4 channel PWM terus ATmega8 punya 3 channel namun untuk penggunaan keduanya yang saya tahu & sering saya pake cuman 2 channel (OC1A & OC1B)..

    Saran saya untuk mas satrio pake 4 mikro aja mas.. 3 buah mikro sebagai SLAVE pembangkit sinyal PWM sekaligus sebagai pengontrol motor terus yang satunya lg berfungsi sebagai MASTER yang saling komunikasi pake PORT serial.. CMIIW..
  • Yosef
    numpang tanya mas..
    untuk coding PWM ATMega 16 itu beda nya dmn yah sama yg ATMega 8 di atas?
  • Iccank Devilz
    @Yosef tinggal ganti aja file headernya jadi #include <mega16.h>
  • Yosef
    @Iccank Devilz dalem nya ga perlu d rubah yah?
    tp klo pakai sekema Robot LF http://www.zer07even.com/blog/articles/electronic/104-rangkaian-skematik-line-follower-ver-10 dia kan output PWM dari ATMega 16 dari Port D kan?
    dari script di atas yg d rubah yg

    void motor (unsigned char GASkanan, unsigned char GASkiri)
    {
    PORTB.0=1;PORTB.3=0;
    PORTB.4=1;PORTB.5=0;
    PWMkanan=GASkanan;
    PWMkiri=GASkiri;
    }
    atau bukan mas?
  • Iccank Devilz
    @Yosef Iy selain itu sama kok mas programnya..

    Pada rangkaian robot line follower yang mas sebut diatas menggunakan ATmega16 yang dimana port OC1A dan OC1B untuk pwm berada pada port D jadi programnya disesuaikan aja mas sama rangkaiannya..
    pada script diatas tinggal ubah portnya aja jika disesuaikan dengan rangkaian robot line follower seperti dibawah:

    void motor (unsigned char GASkanan, unsigned char GASkiri)
    {
    PORTD.2=1;PORTD.3=0;
    PORTD.6=1;PORTD.7=0;
    PWMkanan=GASkanan;
    PWMkiri=GASkiri;
    }
    semoga membantu mas.. ;)
  • lekgun
    klo untuk kontrol motor variabel 3pahse dgn atmega8 gan mohon petunjuk
  • Iccank Devilz
    @lekgun maksudnya kontrol kecepatan atau arah putaran sob?
  • joan
    mas bro, kan ada dua jenis pengendalian motor yt kendali arah putaran dan kendali kecepatan putaran.
    klo kendali servo misal nentuin posisi 30derajat trus putar ke 120derajat dan kembali lagi ke posisi 30drajat. apakah itu termasuk k jenis kendali arah putar ya, menggunakan teknik pwm jg g'?
    "Gimana memprogram servo misal kita input posisi yg d kehendaki maka servo akan bergerak k posisi tsb."
    mohon penjelasannya n trimakasih ..!!
  • Ridwan
    mas, mo nanya,,
    maksud dari PORTB=0x00;DDRB=0xFF; apa mas???
  • Iccank Devilz
    @Ridwan PORTB=0x00 artinya semua PORTB kondisi default tegangannya = 0, sedang DDRB=0xFF artinya PORTB disetting jadi output.. demikian juga sebaliknya.. :)