Kamis, 22 Juli 2010

Pengendalian Motor DC dengan Mikrokontroler ATmega8535


Setelah sebelumnya saya posting cara membuat sistem minimum ATmega8535, sekarang saatnya kita bereksperimen menggunakan sistem minimum ini. Dipostingan ini saya mencoba berbagi ilmu yang sesungguhnya masih sangat sedikit ilmu tentang mikrokontroler yang saya ketahui, yaitu kita akan mengontrol motor DC dengan mikrokontroler ATmega8535. Pengontrolan disini maksudnya kita akan mengontrol motor DC antara lain arah putarannya dan kecepatan berputar motor DC tersebut.

Motor DC dapat berputar karena adanya induksi ketika motor tersebut dihubungkan ke sumber tegangan DC. Pengontrolan motor DC jika dilakukan dengan mikrokontroler lebih mudah dibandingkan tanpa mikrokontroler. Kita dapat merubah arah putaran motor DC secara langsung dengan mengubah polaritas sumber tegangan. Untuk mengubah kecepatan motor DC dapat dilakukan dengan merubah-rubah besarnya sumber tegangan. Pengontrolan dengan mikrokontroler juga berprinsip seperti tersebut, tetapi dengan sistem yang otomatis. Kita tidak perlu merubah kabel dari motor ke baterai jika ingin merubah arah putarannya, kita cukup memberikan logika 0 atau 1 ke mikrokontroler yang dilakukan pada program di mikrokontroler tersebut. Untuk merubah kecepatannya juga lebih mudah karena kita cukup menggunakan fitur PWM yang ada pada mikrokontroler tersebut. Mungkin masih banyak yang belum tahu apa itu PWM

PWM (Pulse Width Modulation) adalah teknik mendapatkan efek sinyal analog dari sebuah sinyal digital yang terputus-putus. PWM dapat dibangkitkan hanya dengan menggunakan digital i/o yang difungsikan sebagai output.
Pada contoh gelombang diatas, perbandingan waktu antara sinyal high (1) dan sinyal low (0) adalah sama. Gelombang diatas dikatakan memiliki duty cycle 50%. Duty cycle adalah perbandingan antara lebar sinyal high (1) dengan lebar keseluruhan siklus (cycle). Jika amplitudo gelombang PWM adalah 5 volt, maka tegangan rata rata (seolah olah analog) yang kita dapatkan adalah 2,5 volt. Berikut contoh gelombang PWM dengan duty cycle 10%, jika amplitudo gelombang 5 volt maka akan didapatkan tegangan rata rata analog 0,5 volt.

Pada ATMEGA8535 ada 2 cara membangkitkan PWM, yang pertama PWM dapat dibangkitkan dari port input/outputnya yang difungsikan sebagai output. Yang kedua adalah dengan memanfaatkan fasilitas PWM dari fungsi timer/counter yang telah disediakan. Dengan adanya fasilitas ini proses pengaturan waktu high/low sinyal digital tidak akan mengganggu urutan program lain yang sedang dieksekusi oleh processor. Selain itu, dengan menggunakan fasilitas ini kita tinggal memasukkan berapa porsi periode waktu on dan off gelombang PWM pada sebuah register. OCR1A, OCR1B dan OCR2 adalah register tempat mengatur duty cycle PWM.

Berikut ini skematik Pengendalian Motor DC dengan Mikrokontroler ATmega8535 yang saya buat sendiri, silahkan trace sendiri, atau jika ingin saya buatkan silahkan request di bagian komen dibawah ini.Klik gambar untuk memperbesar


Rangkaian saya pisahkan menjadi tiga bagian utama agar kita mudah dalam memahami serta menganalisi rangkaian kita ini, yaitu bagian sistem minimum, Driver motor, dan motor (sebagai beban utama). Sistem minimum sama seperti pada postingan saya sebelumnya, bagian selanjutnya yaitu driver. sebenarnya kita dapat langsung menghubungkan mikrokontroler ke motor tanpa driver, hal ini bisa dilakukan jika motor yang kita gunakan merupakan motor kecil. untuk motor besar kita memerlukan  driver, driver ini bisa dibuat juga dengan mosfet (sering disebut H-Bridge), kita gunakan saja yang lebih praktis yaitu ic driver L298, driver ijenis ni mampu mengendalikan 2 buah motor dan juga dilengkapi kaki-kaki untuk mengendalikan PWM.

Untuk percobaan kita ini kita hanya menggunakan satu motor dc saja, berikut ini foto dari rangkaian yang saya buat.
Untuk programnya anda bisa lihat di bawah ini. Gunakan software AVR studio (setelah AVR studio terinstal instal juga WinAVR agar AVRstudio-nya mendukung bahasa C, sebab AVRstudio standarnya menggunakan bahasa assembly). Untuk mendownload program anda bisa menggunakan downloader serial atapun downloader USB yang juga sudah saya posting. Berikut programnya

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

#define    DDR_motor    DDRD    //DDR untuk Motor
#define    PORT_motor    PORTD    //PORT untuk Motor

#define en_ka         5        // Enable L298 untuk motor kanan
#define dirA_ka     2        // Direction A untuk motor kanan
#define dirB_ka     3        // Direction B untuk motor kanan
#define pwm_kanan    OCR1A

void delay_ms(int ms)
{for (int i=0;i<ms;i++){_delay_ms(1);}}

void maju(unsigned int pwm)
{
PORT_motor |=(1<<dirA_ka);        //motor maju
PORT_motor &=~(1<<dirB_ka);
pwm_kanan=pwm;                    //pwm motor kanan
}

void mundur(unsigned int pwm)
{
PORT_motor |=(1<<dirB_ka);        //motor maju
PORT_motor &=~(1<<dirA_ka);
pwm_kanan=pwm;                    //pwm motor kanan
}


int main (void)
{

DDR_motor=0xFF;
PORT_motor=0x00;


    TCCR1A= (1<<WGM11)|(1<<WGM10)|
            (1<<COM1A1)|(0<<COM1A0)|
            (1<<COM1B1)|(0<<COM1B0);
           
    TCCR1B= (0<<WGM13)|(1<<WGM12)|
            (0<<CS12)|(0<<CS11)|(1<<CS10);
    TCNT1=0x0000;
    OCR1A=0;
    OCR1B=0;
    sei( );


while(1)
{
mundur(1000);
delay_ms(5000);
maju(700);
delay_ms(3000);

}
}



lihat program utama, motor akan mundur dengan PWM 1000 selama 5000ms (5 detik) kemudian motor akan maju denan PWM 700 selama 3000ms (3 detik). dan program akan berulang-ulang.Kecepatan maksimal dari motor terjadi jika kita beri nilai PWM 1000 dan minimum (motor berhenti) jika nilai PWM 0, lihat di program utama, yaitu mundur(1000) maksudnya motor akan berputar mundur dengan kecepatan maksimal karena PWM nya1000

57 komentar:

  1. Rumit juga..., setidaknya pernah sekolah di stm kalau ingin memahami.
    Harusnya pemerintah juga memperhatikan lebih pada orang2 yang handal dalam mengkaji bidang keilmuan ini. maju terus........

    BalasHapus
  2. lanjutkan terus bro, saya juga suka elektronika. tapi saya lebih cenderung ke pembangkit. oh, ya link-nya dah tak add, sory bro sibuk jd baru bisa add skrg.

    BalasHapus
  3. Wah klo liat ini jadi ingat wakrtu SMA senang utak atik :)

    BalasHapus
  4. LApor gan, link sudha terpasang. Pasang balik ya :)

    BalasHapus
  5. salam kenal thanks ya dah follow, sorry ga bisa follow balik..laptopnya lagi ngaco ga bisa akses tuk follow, ya udah comment aja ya..tapi mau ngomong apa ya..sumpah ga ngerti teknik sama sekali..but it is nice post in nice blog..hehe :)

    BalasHapus
  6. mau tanya gimana kalo tanpa driver L298?? Dari mikrokontroler ke motor DC bagaimana menghubungkannya??? terima kasih...

    BalasHapus
  7. @anaonim: bisa dari mikro langsung ke motor tapi hanya bisa mengendalikan motor dengan arus kecil, karena pin mikrokontroler itu hanya mampu mengeluarkan arus sebesar 200mA, untuk caranya tinggal konekin aja kaki motor langsung ke pin uKontroler, dan tinggal dibri logika high untuk menghidupkan dan sebaliknya

    BalasHapus
  8. skematiknya kurang jelas.. bisa minta yang lebih jelas ga?

    BalasHapus
  9. terima kasih bahasannya,karena bisa diterapkan untuk banyak hal yang berkaitan dengan sistem yang berjalan otomatis

    BalasHapus
  10. mau nanya mas,sy make l293b sbg driver motornya, bisa tdk langsung dihubngkan ke mikrokntrolernya (tanpa komponen daya tmbahan) trus apa programny beda lagi?

    BalasHapus
  11. driver l293b komponen tambahannya relatif sedikit. jadi tambahin aja ...kalo nggak ditambahin sy jg kurang tahu tuh...

    BalasHapus
  12. kalo tanda |= dan &= di
    PORT_motor |=(1<<dirA_ka); //motor maju
    PORT_motor &=~(1<<dirB_ka);
    maksudnay apa ya ?
    hehe maklum jarang pake bahasa c

    BalasHapus
  13. PORT_motor |=(1<<dirA_ka); //motor maju
    artiny port_motor dikasih logika 1 (high),

    sedangkan
    PORT_motor &=~(1<<dirB_ka);
    artinya port_motor dikasih logika 0 (low)

    begitu emang penulisannya, kalau bingung bisa dengan biner misalnya 0b00000000 atau hexa misalnya 0x00; itu sama aja cuma beda formanya...

    ok happy ber-elektronika

    BalasHapus
  14. oh,, ini motornya gerak maju mundur ya bang,, kalo program buat ngatur kecepatan,,
    misalkan motor berputar cepat, normal, dan lambat bisa ga gan...??
    gmn tuh prog nya,, ??
    hehe.. maap newbie ;)

    BalasHapus
  15. maaf,, mau tanya ni tentang vcc nya,,
    itu vcc L298 nya kok 12 volt yah? sedangkan VCC mikro nya 9 volt dgn ic 7805 jd nya 5 volt,,
    apa itu dengan 2 vcc yg terpisah antara 5 volt dengan 12 volt?
    makasih mas.. :)

    BalasHapus
  16. berarti harus 2 vcc yak??
    o iya mas,, ada fb gag?? pgn belajar materi di atas ni,,hehe

    BalasHapus
  17. add aja fb: ttp://www.facebook.com/bayusasongko609

    BalasHapus
  18. mas,, bisa minta file layout dan PCB nya ngga??
    terimakasihh..

    BalasHapus
  19. slm knal mas bayu.,.
    mas pny program bhs c atw bsic untuk kombinasi lcd 4x16, keypad4x4 sm motor dc g.,
    klo ad krim ke e-mail sy y,.

    ramudias.3@gmail.com

    BalasHapus
  20. mas,,mau nanya nih.. kecepatan dari motor dc bisa kita ubah2 gag dengan inputannya keypad 4x4....

    BalasHapus
  21. #include
    #include
    #include yang itu eror gan. headersnya dapet dari mana. hmm.

    BalasHapus
  22. mas kalo sensor jarak ping dan motor di gabukan gimana ya??
    sebab kemaren untuk sensor pingnya sukses untuk di coba yang di berikan mas.
    tolong bantuannya.

    BalasHapus
  23. mas,,,, aku pake CV AVR
    aku coba test programnya,,, kok bnyak errornya yah????

    BalasHapus
  24. ada yang mau ngjarin gak buat program dengan ATmega 8535 untuk menggerakkan motor stepper, motor DC, dan sensor warna TCS320????

    yang bisa silahkan hubungi eddy.yudianto@yahoo.co.id

    ada ongkosnya juga kok... hehehehe

    BalasHapus
  25. bukan pake cvar tapi pake avrstudio ....

    BalasHapus
  26. BLOG yg bagus. tp sayang, pesan javascript spt "Klik Salah Satu Iklan Yang Anda Suka Untuk Menutup Jendela ini..blaa blaaa"
    mengesankan sodara kurang iklas posting ilmunya. karna tanpa anda minta pun pasti di klik (iklan yg bermutu) ko...
    jd ngapain user di gangggu dg pesan yg letaknya ditengah persis?

    BalasHapus
  27. terimakasih masukannya....bukannya kurang ikhlas atau apa..sy masih belajar ttng mendapat revenue dari blog....mohon maaf klo menggangu

    BalasHapus
  28. Salam Mas, tulisannya sangat bermanfaat. Ada yg ingin sy tanyakan :
    1 Apa bedanya bbrp sistem kontroler berikut ini :
    - PWM (http://skemarangkaianpcb.com/rangkaian-kontrol-kecerahan-lampu-dc/)
    - Transistor (http://skemarangkaianpcb.com/rangkaian-pengatur-kecepatan-fan-kipas-dc-dengan-transistor/)
    - IC LM2941CT (http://skemarangkaianpcb.com/rangkaian-kontrol-fan-kipas-12v/#comment-51)
    - Microkontroler

    2. Saya ingin mengontrol peltier (keping panas dingin) 12 VDC, 6 A. Sistem kontroler mana yg lebih sesuai ?

    Thx

    BalasHapus
    Balasan
    1. 1. bgini mas adenin pwm merupakan teknik mendapatkan tegangan analog dari pulsa digital. jadi kita misalnya perlu tegangan 2,4 v dengan teknik PWM bisa kita dapatkan. selanjutnya kita lihat apakah 2,4 v itu mampu mendrive aktuator yang kita gunakan. jika belum mampu maka kita memerlukan driver. maka perlu melihat rangkaian aktuator yang kita pakai.
      2. Itu untuk kontrol apanya mas...? sy belum paham mksud pertanyaannya...

      Hapus
  29. kalau mngendalikan motor 3 phasa bisa gak mas?

    BalasHapus
    Balasan
    1. kalao motor AC saya kira teknik mengatur kecepatan bukan dari PWM melainan dengan frekuensi. jadi belum bisa mas. kecuali jika maksudnya hanya untuk starting motor 3 phasa seperti hubung delta atau Y cukup menggunakan relay untuk on off nya dan dikopel dengan kontaktor

      Hapus
  30. mas kalo portnya di ganti ke PORT B bisa ndak,,,????

    BalasHapus
    Balasan
    1. ndak bisa mas....port yang PWM hanya di PORTD.

      Hapus
    2. gan, kalo tegangan yang 12 volt diganti dengan 9volt bisa pa ndak,,,
      ngaruh pa ndak di motornya ?

      Hapus
    3. bisa mas ...itu untuk power supply motornya....disesuaikan aja dengan voltase motor dc nya...

      Hapus
  31. mas ku tanya tentang pwm itu seperti cara efeknya itu seperti ini ta
    misal duty nya dikasih 50 % maka yang keluar di mk 2,5 volt
    terus kalau keluar itu di masukkan ke driver yang di catu 12 volt, maka motor jadi dapat 6 volt?
    seperti itu kah?

    BalasHapus
    Balasan
    1. sippp..kurang lebih begitu mas...mikro ngendaliin driver motornya

      Hapus
  32. Salam sukses
    ♏αš bisa sy minta dibuatkan driver motor dc 24v.driver tsb bs menggerakan 3 motor.dari ketiga motor itu kita bisa mengatur arah dan kecepatan motor.untuk kontrol speed motor mengunakan manual,3 potensio sesuai jumlah motornya.. Sedangkan untuk arah putaran ketiga motor menggunakan stik/joy stik.terimakasih..

    BalasHapus
  33. Mas, mau nanya nih, bisa gak sisminnya make ATMega16? Kalo bisa apakah rangkaiannya berubah? Terima kasih mas.......

    BalasHapus
    Balasan
    1. bs mas sm aja..krena pin2 kakinya juga sama ...cuma di programnya yang beda

      Hapus
    2. mau nanya lagi mas, pacar saya kan dapet tugas akhir pake atmega16, nah saya mau nanya, kalo misal ditambahin seven segment, rangkaiannya jadi kayak gimana mas? makasih mas sebelumnnya...

      Hapus
  34. mas sya mau tnya,,
    sy skrng ini kan sdang mnyusun tgas akhir yg berjudul pembuatan pengharum ruangan otomatis menggunakan sismin atmega8535 dengan program timer bhsa c avr,,,,
    mslah sy bgni mas..
    knpa ya motor dc yg sy gunakn tdk bs menekan tombol btol penghrum,,
    apa kah perlu menggunkan driver lg untuk mngendlikan motor trsbut??
    mksh mas,,

    BalasHapus
    Balasan
    1. coba pake' driver ja ndo. ikut sidng brapa ndo?

      Hapus
  35. mas saya mau bikin counter down 5 ke 0 dengan microcontroler avr 8535. tapi saya bingung mau mulai dari mana

    pengennya ada tombol input buat nguranginya

    misaal udah di set 5,mk 7 segment menampilkn angka 5

    terus tombol di pencet menjadi 4 ,, di pencet lg jadi 3, pencet lagi lagi dan lagi akhirnya jadi 0

    lalu ada tombol yang membuat tampilan 7 segment jadi 5 lagi
    help yaa gan kalau bisa

    BalasHapus
  36. mas boleh minta layout pcb buat driver motor dc yang ada di atas.....?

    BalasHapus
  37. pake swit aja ,lebih simpel juga murah kalo cuma pengen gerakin maju ato mundur yu motor DC.dan utuk mengatur kecepatanya pake PWM.beres gak ribet

    BalasHapus
  38. mas rangkaian itu untuk 2 motor dc atau 1 motor steper dengan 4 kabel?

    BalasHapus
  39. Mas,,,trimakasih infonya,,

    Owh ya mas, saya pake BASCOM mas,ada program BASCOM nya mas,,,trimakasih.

    BalasHapus
  40. Mas,,,trimakasih infonya,,

    Owh ya mas, saya pake BASCOM mas,ada program BASCOM nya mas,,,trimakasih.

    BalasHapus
  41. misi gan untuk bahan yang deperlkan apa saja yang selain sperti
    usb downloader salsmin ATMega 8535 Motor dc dan driver l298

    BalasHapus
  42. Berapa motor DC yang dapat kita kontrol PMW nya mas dengan satu mikrokontroler?

    BalasHapus
  43. Terima kasih mas atas tutorial tentang salah satu aplikasi pulse width modulation pada mikrokontroler, sangat bermanfaat

    BalasHapus
  44. Boleh minta Mentahan File project Proteus nya Gan?

    BalasHapus

Silahkan isi komentar yang dapat membangun blog ini. Atas komentarnya saya ucapkan terimakasih

Related Posts Plugin for WordPress, Blogger...