Modul Pratikum 2
Modul II
PWM, ADC, dan Interupt
1. Pendahuluan [Kembali]
Pada sehari-hari banyak motor dan sensor yang digunakan untuak banyak kegunaan, oleh karena itu kita harus memahi cara penggunaannya pada arduino uno. cara penggunaannya berfokus pada Pulse Width Modulation (PWM) dan Analog to Digital Converter (ADC). Dimana PWM berfungsi untuk penggunaan motor sedangkan ADC digunakan untuk sensor.
2. Tujuan [Kembali]
- Memahami prinsip kerja PWM pada mikrokontroler
- Memahami prinsip kerja ADC pada mikrokontroler
- Menggunakan PWM dan ADC pada Arduino
4. Dasar Teori [Kembali]
A. PWM
Pulse Width Modulation (PWM) secara umum adalah sebuah cara memanipulasi lebar sinyal yang dinyatakan dengan pulsa dalam suatu perioda, untuk mendapatkan tegangan ratarata yang berbeda. Beberapa Contoh aplikasi PWM adalah pemodulasian data untuk telekomunikasi, pengontrolan daya atau tegangan yang masuk ke beban, regulator tegangan, audio effect dan penguatan, serta aplikasi-aplikasi lainnya.
Aplikasi PWM berbasis mikrokontroler biasanya berupa, pengendalian kecepatan motor DC, Pengendalian Motor Servo, Pengaturan nyala terang LED. JENIS PWM 1. PWM Analog Pembangkitan sinyal PWM yang paling sederhana adalah dengan cara membandingkan sinyal gigi gergaji sebagai tegangan carrier dengan tegangan referensi menggunakan rangkaian op-amp comparator.
Cara kerja dari komparator analog ini adalah membandingkan gelombang tegangan gigi gergaji dengan tegangan referensi seperti yang terlihat pada Gambar dibawah
Saat nilai tegangan referensi lebih besar dari tegangan carrier (gigi gergaji) maka output comparator akan bernilai high. Namun saat tegangan referensi bernilai lebih kecil dari tegangan carrier, maka output comparator akan bernilai low. Dengan memanfaatkan prinsip kerja dari komparator inilah, untuk mengubah duty cycle dari sinyal output cukup dengan mengubahubah besar tegangan referensi. Besarnya duty-cycle rangkaian PWM ini :
2. PWM Digital Gambar
ADC atau disebut juga dengan Analog to Digital Converter merupakan fitur yang di miliki oleh arduino sebagai mikrokontroler guna membaca sinyal analog kemudian di konversikan menjadi sinyal digital.
Sinyal Analog merupakan jenis sinyal kontinyu, biasanya digambarkan dengan bentuk sinyal sinus, karena menggambarkan bahwasanya setiap waktu memiliki nilai sendiri. ilustrasinya pada cahaya lampu, sinyal analog akan mengenal lampu mati, redup, agak terang, terang, terang sekali dan seterus nya.
Sinyal Digital merupakan jenis sinyal diskrit, karena tidak setiap waktu memiliki nilai yang berbeda, pada sinyal digital digambarkan seperti sinyal kotak, sinyal digital hanya mengenal dua keadaan yaitu 0 atau 1, hidup atau mati.kembali pada pembahasan judul artikel, yaitu membuat simulasi arduino membaca ADC. kita akan menggunakan potensiometer yang berfungsi sebagai pembagi tegangan sehingga tegangan yang masuk ke pin Analog Arduino dapat kita atur dan dapat di rubah. data yang masuk dari potensiometer berupa tegangan akan tetapi data yang di proses oleh arduino sendiri yaitu bilangan ADC. rumus untuk menentukan nilai ADC berdasarkan tegangan yang masuk sebagai berikut :
ADC = (Vin / Vreff) x 1023
Vin = tegangan yang masuk ke Arduino
Vreff = tegangan referensi pembacaan ADC pada Arduino (Default 5V)
1023 = arduino menggunakan 10 bit ADC
C. Timer
Sebuah pewaktu, timer, merupakan bagian dari microcontroller yang berperan sebagai clock internal untuk mengukur waktu suatu event. Untuk timer dapat diatur dengan menggunakan beberapa register khusus. Pada firmware Arduino semua timer memiliki konfigurasi frekuensi 1 kHz dengan enable interrupt. Berikut ini timer khusus untuk Arduino.
- Timer0, 8 bit, digunakan untuk function seperti delay(), millis(), dan micros(), dengan mengubah konfigurasi Timer0 akan mempengaruhi function lainnya
- Timer1, 16 bit, biasa digunakan untuk aplikasi terkait motor servo
- Timer2, 8 bit, function tone() menggunakan Timer2
Selain tiga pewaktu tersebut, terdapat juga Timer3, Timer4, dan Timer5, semuanya 16 bit, untuk board Arduino Mega.
- delay(), digunakan untuk tundaan eksekusi baris program selanjutnya dalam millisecond
- delayMicroseconds(), digunakan untuk tundaan eksekusi baris program selanjutnya dalam microseconds
- millis(), digunakan sebagai pewaktu internal yang (bila tanpa terminate bersyarat) akan terus berjalan hingga terjadi overflow (kembali ke nilai 0) dengan unit dalam millisecond, untuk board Arduino Uno nilai millis() akan terus berjalan hingga sekitar 50 hari
- micros(), digunakan sebagai pewaktu internal yang (bila tanpa terminate bersyarat) akan terus berjalan hingga terjadi overflow (kembali ke nilai 0) dengan unit dalam microsecond, untuk board Arduino Uno nilai millis() akan terus berjalan hingga sekitar 70 jam
Timer Register
Untuk dapat melakukan manipulasi timer pada Arduino terlebih dahulu harus mengetahui fungsi dari masing-masing register yang terkait timer. Salah satu register timer yang paling penting ialah
- TCCRx (Timer/Conter Control Register), dengan x adalah nomor, berikut ini adalah register apa saja yang digunakan untuk timer.
- TCCRx (Timer/Conter Control Register), dimana prescaler dapat dikonfigurasi disini sekaligus mode operasi timer
- TCNTx (Timer/Counter Register), dimana nilai timer disimpan, merupakan register pencacah mulai dari 0 hingga nilai maximum
- OCRx (Output Compare Register), untuk membandingkan OCR yag diberikan dengan nilai TCNT
- ICRx (Input Capture Register), hanya tersedia untuk timer 16 bit, menerima data timer
- TIMSKx (Timer/Counter Interrupt Mask Register), digunakan untuk menjalankan atau mematikan timer interrupt
- TIFRx (Timer/Counter Interrupt Flag Register), menandakan timer interrupt hasil operasi timer
Timer Frekuensi
Untuk menghitung frekuensi timer dengan frekuensi yang ditentukan dapat dilakukan dengan cara sebagai berikut.
- Menentukan frekuensi pembagi, misal 2 Hz
- Mengetahui frekuensi kerja Arduino, yakni 16 MHz
- Mengetahui prescaler timer, 256 untuk 8 bit, 65536 untuk 16 bit
- Membagi nilai frekuensi kerja Arduino (16 MHz) dengan prescaler (256), hingga diperoleh hasil 62500
- Membagi hasil tersebut (62500) dengan frekuensi ditentukan (2 Hz), hingga diperoleh hasil 31250
- Memastikan bahwa hasil tersebut dapat digunakan dengan membandingkannya nilai maximum prescaler, bila nilai tersebut lebih kecil (dalam hal ini 31250 lebih kecil dari 65536), maka hasilnya tersebut valid, bila tidak valid gunakan nilai prescaler yang lebih besar
PWM dan Timer
Terdapat hubungan antara timer dengan output PWM. Dalam data sheet atau pin out microcontroller (Arduino) terdapat PWM pin dengan nama seperti OCRxA, OCRxB, atau OCRxC, dimana x adalah nomor timer. Untuk fungsi pin PWM sering digunakan bersama dengan fungsi lainnya. Untuk board Arduino Uno memiliki 3 timer dan 6 pin output PWM. Kaitan antara timer dengan output PWM sebagai berikut.
- Arduino pin 5 dan 6, dikendalikan oleh Timer0
- Arduino pin 9 dan 10, dikendalikan oleh Timer1
- Arduino pin 3 dan 11, dikendalikan oleh Timer2
Sementara itu untuk board Arduino Mega terdapat 6 timer dengan output 15 PWM, dengan konfigurasi sebagai berikut.
Komentar
Posting Komentar