PWM Arduino Uno

Dalam melakukan pengaturan kecepatan motor dc diperlukan penyetelan Pulse Width Modulation (PWM) pada mikrokontroler papan Arduino yaitu penyetelan perbandingan atau rasio high dan low (duty cycle) dari gelombang persegi.


Kenapa PWM dapat mengatur kecepatan motor dc ?
Akan lebih mudah menjawab pertanyaan di atas jika menggunakan analogi nyala LED. Jika Anda memiliki saklar atau switch yang digunakan untuk menyambung dan memutus arus pada LED, saat Anda menyambung dan memutus saklar secara cepat dengan perbandingan waktu sambung atau nyala lebih lama dibanding waktu memutus saklar maka LED akan terlihat lebih terang. Sebaliknya saat waktu putus lebih panjang dibanding waktu sambung maka LED akan terlihat lebih redup. Hal tersebut juga berlaku pada motor DC dimana saat sinyal persegi memiliki mondisi high lebih panjang atau lebih lama dibanding kondisi low maka motor dc akan berputar lebih cepat dibanding PWM sinyal persegi memiliki kondisi low lebih panjang dibanding high.

Frekuensi PWM yang digunakan pada grid line follower pada pembahasan ini adalah berdasar trial and error (uji coba) karena penulis menggunakan motor dc tamiya  dan tidak mengetahui spesifikasi detil tentang motor dc tamiya tersebut. Dengan frekuensi yang disebutkan pada halaman ini, Anda dapat membangun grid line follower  dengan kecepatan yang ditunjukan pada Video 1 dimana grid line follower berjalan cukup halus.

Berikut adalah penjelasan teknis mengenai penyetelan PWM Arduino melalui penyetelan register Timer/Counter.

Penyetelan Timer/Counter 1 Fast PWM 10 bit.
Merancang grid line follower pada halaman ini difokuskan pada penggunakaan register timer/counter 1 dimana timer/counter tersebut merupakan register timer yang dapat menghitung dari 0 hingga 16 bit dan mampu digunakan sebagai fast PWM atau Phase Correct PWM 8, 9 atau 10 bit.

Anda diharapkan mampu memahami tentang bagaimana melakukan penyetelan PWM, bagaimana caranya mengubah duty cycle sehingga kecepatan putar motor dc dapat berubah sehingga grid line follower dapat berjalan lebih halus dengan kecepatan yang dapat dikontrol sesuai keinginan. Materi dan gambar di bawah ini diambil dari materi datasheet IC mikrokontroler ATmega328P.
Gambar 1. Timing diagram mode Fast PWM
Keterangan Gambar 1 :
  1. TCNTn : merupakan register Timer/Counter yang digunakan untuk menghitung dari 0 hingga maksimum (tergantung bit counter yang digunakan) lalu dari maksimum menghitung ke bawah hingga 0 secara terus menerus dan berulang-ulang. Hal ini terjadi saat timer diaktifkan.
  2. OCRnx : Merupakan register yang digunakan untuk mengubah duty cycle, nilai pada register ini dibandingkan dengan nilai TCNTn yang hasilnya akan mengubah duty cycle pada keluaran atau output pada pin atau terminal OCnx.
  3. OCnx : Output Compare Register yang berhubungan dengan hasil perbandingan antara register TCNTn dan OCRnx. OCnx berhubungan langsung dengan pin atau terminal PWM (PWM output).
Pin atau terminal PWM output yang digunakan pada rangkaian grid line follower ini menggunakan pin 9, dan 10 pada Arduino Uno karena pin tersebut bisa bekerja pada mode 8, 9, dan 10 bit PWM. Dengan menggunakan pin tersebut dapat memilliki banyak pilihan jika ingin mengubah mode PWM yang digunakan. Timer/Counter 1 register memiliki beberapa mode dalam penggunaan PWM sebagai berikut :
  1. Phase Correct PWM 8, 9 atau 10 bit
  2. Fast PWM 8,9, atau 10 bit
  3. Phase and Frequency Correct PWM
  4. Phase Correct PWM
  5. Fast PWM
PWM yang digunakan pada proyek pembuatan grid line follower ini adalah menggunakan fast PWM 10 bit. Mungkin jika Anda dapat menggunakan mode berbeda sesuai dengan kecocokan motor dc yang Anda gunakan.

Dalam menggunakan mode fast PWM10 bit dapat menggunakan data yang ditunjukan pada Tabel1 yang diambil dari datasheet ATMega328P.

Tabel 1. Diskripsi mode PWMDiskripsi mode PWM

Untuk menyetal PWM sesuai data pada Tabel 1 perlu melakukan penyetelan register TCCR1 seperti ditunjukan pada Gambar 2 dan 3 di bawah : 

Register TCCR1A
Gambar 2. Register TCCR1A

Register TCCR1B
Gambar 3. Register TCCR1B

Data Tabel 2 di bawah digunakan untuk mengubah register TCCR1A pada bit COM1A atau COM1B yang bertujuan untuk memilih mode PWM apakah invertingnon inverting atau memutus port OCA1A  atau OC1B sehingga gelombang PWM tidak keluar dari pin PWM Arduino.

Tabel 2. Konfigurasi Output Mode Fast PWM
Konfigurasi Output Mode Fast PWM

Tabel 3. Clock select bit
Tabel Clock select bit

Untuk melakukan konfigurasi fast PWM 10 bit Anda harus melakukan penyetelan register TCCR1A dan register TCCR1B. Untuk itu Anda perlu mengubah bit-bit pada setiap register tersebut sesuai dengan opsi data pada Tabel 1, 2, 3 termasuk Gambar 2 dan Gambar 3 di atas.

Contoh nilai setiap bit pada register TCCR1A :
  • bit 0 : WGM10 bernilai 1
  • bit 1 : WGM11 bernilai 1
  • bit 2 : Bernilai 0
  • bit 3 : Bernilai 0
  • bit 4 : COM1B0 bernilai 0
  • bit 5 : COM1B1 bernilai 1
  • bit 6 : COM1A0 bernilai 0
  • bit 7 : COM1A1 bernilai 1
Sehingga nilai TCCR1A dapat ditulis menjadi :
TCCR1A = 0b10100011 atau TCCR1A = 0xA3

Contoh nilai setiap bit pada register TCCR1B :
  • bit 0 : CS10 bernilai 0
  • bit 1 : CS11 bernilai 0
  • bit 2 : CS12 bernilai 1
  • bit 3 : WGM12 bernilai 1
  • bit 4 : WGM13 bernilai 0
  • bit 5 : Bernilai 0
  • bit 6 : ICES1 bernilai 0
  • bit 7 : ICNC1 bernilai 1
Sehingga nilai TCCR1B dapat ditulis sebagai berikut :
TCCR1B = 0b00001100 atau TCCR1B = 0x0C

Maksud dari penyetelan register TCCR1A dan TCCR1B di atas adalah :
  1. Nilai bit WGM10, WGM11 bernilai 1 dan WGM12 bernilai 1 dan WGM13 bernilai 0 berarti menggunakan mode Fast PWM 10 bit.
  2. Nilai bit COM1B1, COM1A1 bernilai 1dan COM1B0, COM1A0 bernilai 0 berarti menggunakan mode non inverting. Jika Anda menggunakan inverting, Anda akan mendapatkan kecepatan motor yang berkebalikan dimana jika Anda menginginkan cepat justru malah lambat, dan sebaliknya.
  3. Pada register TCCR1B, bit CS10, CS11, CS12 bernilai 0, 0 dan 1yang berarti bahwa frekuensi PWM adalah frekuensi kecepatan clock crystal Oscilator dibagi dengan 256 (clkio/256).
Karena penyetelan menggunakan fast PWM 10 bit maka frekuensi PWM adalah : 


Menggunakan frekuensi sekitar 61 Hz, motor dc tamiya dapat bekerja dengan baik seperti ditunjukan pada Video 1.

Setelah mengetahui konfigurasi fast PWM 10 bit, hal yang perlu dilakukan adalah memberikan kecepatan awal pada line follower dengan memberikan nilai pada OCR1A dan OCR1B dengan rentang nilai 0 hingga 1023 (10 bit).

Dengan penjelasan agak sedikit rumit di atas, sebenarnya kode yang perlu dituliskan untuk mengaktifkan fast PWM cukup menuliskan nilai dari register TCCR1A dan TCCR1B seperti contoh sebagai berikut :

void main ()
{
 // Faast PWM 10 bit
TCCR1A = 0b10100011 ;
TCCR1B = 0b00001100 ;
OCR1A = 500 ; // duty cycle dibawah hampir 50% (Motor DC berputar lambat)
OCR1B = 500 ; // duty cycle dibawah hampir 50% (Motor dc berputar lambat)
}


EoF

Posting Komentar

0 Komentar