"Orang berilmu binasa kecuali orang yang mengamalkan ilmunya. Orang yang mengamalkan ilmunya binasa kecuali orang yang ikhlas". (Ibnu Qudamah)

Sabtu, 29 November 2014

PWM ATmega 8 menggunakan AVR Studio 4

PWM diperlukan untuk beberapa aplikasi diantaranya:
  • Kontrol kecepatan Motor DC
  • Kontrol Intesitas LED
  • Kontrol katub (valve), pompa, hidrolik dan lain-lain.
Terus bagaimana cara menggunakan PWM ATmega menggunakan software programming AVR Studio 4? Berikut ini caranya.


  1. Anda harus punya datasheet ATMega 8 untuk referensi yang valid dalam penggunaan.
  2. Membaca datasheet tersebut.
Berikut ini letak Pin PWM pada ATMega 8.

Ada dua tipe PWM  pada AVR ATmega yang sering digunakan yaitu Fast PWM dan PhaseCorrect PWM.
Fast PWM lebih cocok untuk penghasil tegangan analog dikarenakan ripple-nya. Sedangkan PhaseCorrect PWM lebih cocok untuk mengatur kecepatan putaran motor DC karena sinyalnya simetris.
Berikut ini hal-hal penting dalam penggunaan PWM pada ATmega 8.

-------------PIN Keluaran PWM ATMega8 ada 3------------
1. OC1A pada PORTB 1 --> Aktif melalui Timer1
2. OC1B pada PORTB 2 --> Aktif melalui Timer1
3. OC2 pada PORTB  3 --> Aktif melalui Timer2

-------------Register Pengatur Duty Cycle PWM--------------
1. OC1A --> Diatur Oleh Register OCR1A
2. OC1B --> Diatur Oleh Register OCR1B
3. OC2  --> Diatur Oleh Register OCR2

/*------------------------Register TCCR1A-------------------------------------------*/
//COM1A1 COM1A0 COM1B1 COM1B0 FOC1A FOC1B WGM11 WGM10

/*------------------------Register TCCR1B-------------------------------------------*/
//ICNC1 ICES1 WGM13 WGM12 CS12 CS11 CS10

/*----------------------------------------------------------------------------------*/
//COM1A1/COM1B1        COM1A0/COM1B0                PIN OC1A/OC1B
/*----------------------------------------------------------------------------------*/
//        0                    0                Normal(sbg input output)
//        0                    1                Toggle
//        1                    0                Non-inverting
//        1                    1                Inverting
/*----------------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------------*/
//Mode            WGM13-WGM10                Mode Timer                      TOP
/*----------------------------------------------------------------------------------*/
//0                    0000                Normal, sbg overflow                               0xFFFF
//1                    0001                PhaseCorrect PWM 8-bit                        0xFF
//2                    0010                PhaseCorrect PWM 9-bit                        0x1FF
//3                    0011                PhaseCorrect PWM 10-bit                      0x3FF
//4                    0100                CTC                                                       OCR1A
//5                    0101                Fast PWM 8-bit                                      0xFF
//6                    0110                Fast PWM 9-bit                                      0x1FF
//7                    0111                Fast PWM 10-bit                                    0x3FF
//8                    1000                PhaseFrequencyCorrect PWM                ICR1
//9                    1001                PhaseFrequencyCorrect PWM                OCR1A
//10                  1010                PhaseCorrect PWM                                ICR1
//11                  1011                PhaseCorrect PWM                                OCR1A
//12                  1100                CTC                                                        ICR1
//13                  1101                Tidak Digunakan                                      -
//14                  1110                Fast PWM                                               ICR1
//15                  1111                Fast PWM                                               OCR1A
/*----------------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------------*/
//CS12-CS10            Frekuensi Counter
/*----------------------------------------------------------------------------------*/
//000                0 atau clock dihentikan
//001                F_CPU/1
//010                F_CPU/8       
//011                F_CPU/64
//100                F_CPU/256
//101                F_CPU/1024
//110                Dari pin T1, aktif tepi turun
//111                Dari pin T1, aktif tepi naik
/*----------------------------------------------------------------------------------*/

Adapun perhitungan frekuensi PWM adalah sebagai berikut:

  • Fast PWM
     
  • PhaseCorrect PWM
Dimana:
         fclk I/O  = Frekuensi ATMega 8
             N            = variabel pembagi prescaler (1, 8, 64, 256, or 1024).
             TOP       = nilai maksimal tipe PWM yang dipilih

Adapun perhitungan duty cycle PWM adalah dapat diatur menggunakan register berikut:
1. OC1A --> Diatur Oleh Register OCR1A
2. OC1B --> Diatur Oleh Register OCR1B
3. OC2  --> Diatur Oleh Register OCR2

contoh: Fast PWM  8 bit nilai TOP = 0xFF = 255.
jika OCR1A diatur = 127.5 maka duty cycle = (127,5 / 255 ) x 100% = 50%.
Untuk lebih memahaminya, anda harus mencoba sendiri. Berikut ini video tutorialnya.




Tidak ada komentar: