Kendali Motor DC dengan Metode PWM Berbasis Mikrokontroler ATMEGA16

Tiap tahun PSMK memberikan soal untuk Uji Kompetensi Keahlian (UKK). Untuk Kompetensi Keahlian Teknik Elektronika Industri diberi 4 buah Paket Soal yang pada tahun-tahun sebelumnya ada 2 kelompok, yaitu kelompok mikrokontroler dan kelompok Elektropneumatik dan PLC. Kelompok mikrokontroler ada 2 paket soal, yaitu Kendali Motor DC dan Kendali Lampu, sedangkan kelompok Elektropneumatik dan PLC ada 2 paket soal juga, yaitu Kendali Elektropneumatik berbasis PLC dengan metoda waktu dan Kendali Elektropneumatik berbasis PLC dengan metoda limit switch.

Masing sekolah diharapkan mengadakan UKK sesuai paket soal dengan spesifikasi komponen yang ada dalam paket soal tersebut, tetapi kadang-kadang sekolah sedikit modifikasi dari soal yang ada dan yang penting temanya sama dengan soal yang diberikan yaitu tentang Kendali Motor DC berbasis mikrokontroler.

Pada jejak kali ini membahas salah salah satu paket soal kelompok mikrokontroler, yaitu Kendali Motor DC Berbasis mikrokontroler seperti paket soal dari PSMK seperti di bawah ini.

Kendali Motor DC Berbasis Mikrokontroler AT89C51

Dari rangkaian di atas jelas untuk kendali motor DC dengan menggunakan metode PWM (Pulse Width Modulation) atau dengan cara mengubah prosentase Duty Cycle atau tegangan listrik rata-rata untuk memutar motor DC. 

Karena Downloder yang dimiliki khusus untuk mikrokontroler Atmega16, untuk itu pada jejak ini menggunakan mikrokontroler Atmega16 sebagai basisnya. Berikut ini rangkaian hasil modifikasi dari paket soal yang diberikan tetapi memiliki tema yang sama yaitu Pengendali Motor DC Bergarak Bolak Balik dengan PWM Berbasis Mikrokontroler ATMEGA 16.

Dari rangkaian simulasi di atas jika dibuat rangkaian pengawatan pada mikrokontroler Atmega 16 akan seperti gambar di bawah ini.

Rangkaian Pengawatan Kendali Motor DC dengan Metode PWM Berbasis Mikrokontroler Atmega16

Sebelum membuat program pengendali sesuai rangkaian di atas dengan menggunakan aplikasi CodeVision AVR , dibuatlah Diagram Alir sebagai berikut ini.

Dari diagram alir di atas ada 2 moda untuk mengubah arah putaran motor DC yaitu arah Clockwise (CW) dan Counter Clockwise (CCW). Untuk langkah awal pengoperasian pilih atau tekan salah satu Moda, misalkan tekan saklar moda CCW, kemudian tekan tombol Low maka motor dc akan berputar Lambat, jika ingin berhenti tekan tombol Stop. Tekan tombol Mid untuk kecepatan sedang, lalu tekan tombol High untuk kecepatan sedang.

JEJAK TERKAIT :  Kendali Numerik (Numerical Control)

Jika ingin mengubah arah putaran, tekan tombol Stop terlebih dahulu kemudian pilih atau tekan saklar Moda yang lainnya, kemudian tekan tombol Low kemudian tombol Mid lalu tombol High apabila ingin mendapatkan kecepatan putaran penuh.

List Program sesuai rancangan rangkaian pengendali motor dc dengan PWM berbasis mikrokontroler di atas seperti berikut.

#include <mega16.h>
#include <delay.h>

int i=0;

#define CW      PINA.0
#define CCW     PINA.1
#define STOP    PINA.2
#define LOW     PINA.3
#define MID     PINA.4
#define HIGH    PINA.5
#define LOCKCW  PORTC.0
#define LOCKCCW PORTC.1
#define LED1    PORTC.2
#define LED2    PORTC.3

#define ON  1
#define OFF 0

void main(void)
{
   DDRA    = 0x00 ;    /*Port A sebagai Input*/
   PORTA   = 0x3f ;
   DDRC    = 0xff ;    /*Port C sebagai Output*/
   PORTC   = 0x03 ;   

while (1)
{      if ( CW == 0)       /*Mode CW*/
       {
       while (i<1)
       {
       LOCKCW  = OFF;
       LOCKCCW = ON;
      if ( CCW == 0 ){break;}
      if ( LOW == 0 )     /*Jika tombol LOW ditekan*/
       {

        while (i<1)
           {
           LED1 = ON ;
           LED2 = OFF ;
           if ( STOP == 0 ){LED1=OFF;LED2=OFF;break;}     
           delay_ms ( 25 ) ;    /*Duty Cycle 25%*/
           LED1 = OFF ;
           LED2 = OFF ;
           if ( STOP == 0 ){LED1=OFF;LED2=OFF;break;}
           delay_ms ( 75 ) ;    /*Duty Cycle 100%-25%*/

           if ( MID == 0 )     /*Jika tombol MID ditekan*/
           {
           while (i<1)
               {
               LED1 = ON ;
               LED2 = OFF ;
               if ( STOP == 0 ){LED1=OFF;LED2=OFF;break;}     
               delay_ms ( 50 ) ;    /*Duty Cycle 50%*/
               LED1 = OFF ;
               LED2 = OFF ;
               if ( STOP == 0 ){LED1=OFF;LED2=OFF;break;}
               delay_ms ( 50 ) ;    /*Duty Cycle 50%-50%*/

               if ( HIGH == 0 )     /*Jika tombol HIGH ditekan*/
               {
               while (i<1)
                   {
                   LED1 = ON ;
                   LED2 = OFF ;
                   if ( STOP == 0 ){LED1=OFF;LED2=OFF;break;}     
                   delay_ms ( 100 ) ;    /*Duty Cycle 100%*/
                   LED1 = OFF ;
                   LED2 = OFF ;
                   if ( STOP == 0 ){LED1=OFF;LED2=OFF;break;}
                   delay_ms ( 0 ) ;    /*Duty Cycle 100%-100%*/
                   }   
               }
               }   
           }
           }   
       }
       }
       }

       if ( CCW == 0 )     /*Moda CCW*/
       {
        while (i<1)
       {
       LOCKCW  = ON;
       LOCKCCW = OFF;
      if ( CW == 0 ){break;}
       if ( LOW == 0 )     /*Jika tombol LOW ditekan*/
       {
       while (i<1)
           {
           LED1 = OFF ;
           LED2 = ON ;
           if ( STOP == 0 ){LED1=OFF;LED2=OFF;break;}     
           delay_ms ( 25 ) ;    /*Duty Cycle 25%*/
           LED1 = OFF ;
           LED2 = OFF ;
           if ( STOP == 0 ){LED1=OFF;LED2=OFF;break;}
           delay_ms ( 75 ) ;    /*Duty Cycle 100%-25%*/

            if ( MID == 0 )     /*Jika tombol MID ditekan*/
           {
               while (i<1)
               {
               LED1 = OFF ;
               LED2 = ON ;
               if ( STOP == 0 ){LED1=OFF;LED2=OFF;break;}     
               delay_ms ( 50 ) ;    /*Duty Cycle 50%*/
               LED1 = OFF ;
               LED2 = OFF ;
               if ( STOP == 0 ){LED1=OFF;LED2=OFF;break;}
               delay_ms ( 50 ) ;    /*Duty Cycle 50%-50%*/

                if ( HIGH == 0 )     /*Jika tombol HIGH ditekan*/
               {
                   while (i<1)
                   {
                   LED1 = OFF ;
                   LED2 = ON ;
                   if ( STOP == 0 ){LED1=OFF;LED2=OFF;break;}     
                   delay_ms ( 100 ) ;    /*Duty Cycle 100%*/
                   LED1 = OFF ;
                   LED2 = OFF ;
                   if ( STOP == 0 ){LED1=OFF;LED2=OFF;break;}
                   delay_ms ( 0 ) ;    /*Duty Cycle 100%-100%*/
                   }   
               }  
               }   
           }  
           }   
       }
       } 
       }
}
}

 

JEJAK TERKAIT :  Kendali Elektronik Motor DC dengan Metode PWM Berbasis Mikrokontroler Atmega16

Bentuk layout PCB yang sesuai dengan rangkaian mengunakan program Eagle dapat diunduh pada link berikut. Unduh

 

Hasil simulasi seperti video di bawah ini.

 

One thought on “Kendali Motor DC dengan Metode PWM Berbasis Mikrokontroler ATMEGA16”

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *