Kendali Motor DC dengan Metode PWM Berbasis Mikrokontroler ATMEGA16

Tiap tahun PSMK memberikan soal untuk Uji Kompetensi Keahlian (UKK). Untuk Teknik Elektronika Industri diberi 4 buah Paket Soal yang salah satunya tentang Pengendalian Motor DC Berbasis mikrokontroler.

Masing sekolah diharapkan mengadakan UKK sesuai soal dan spesifikasi komponen yang ada dalam 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.

Berikut ini rangkaian hasil modifikasi dari 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.

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.

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%*/

                    }   

                }  

                }   

            }  

            }   

        }

        } 

        }

}

}

 

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 *