Dalam proyek ini kita akan menggunakan salah satu fitur ATmega32A untuk mengatur kecerahan LED 1 Watt. Metode yang digunakan untuk mengatur kecepatan LED adalah PWM (Pulse Width Modulation). Tutorial PWM Mikrokontroler AVR ini menjelaskan konsep PWM dan pembangkitan PWM secara detail (Anda juga dapat memeriksa rangkaian generator PWM sederhana ini). Pertimbangkan rangkaian sederhana seperti yang ditunjukkan pada gambar.
Sekarang jika sakelar pada gambar di atas ditutup terus menerus selama jangka waktu tertentu maka bola lampu akan terus menyala selama waktu itu. Jika sakelar ditutup selama 8 md dan dibuka selama 2 md selama siklus 10 md, maka bohlam akan ON hanya dalam waktu 8 md. Sekarang rata-rata terminal selama periode 10ms = Turn ON time / (Turn ON time + Turn OFF time), ini disebut duty cycle dan 80% (8 / (8 + 2)), jadi rata-rata tegangan keluaran akan menjadi 80% dari tegangan baterai.
Dalam kasus kedua, sakelar ditutup selama 5ms dan dibuka selama 5ms selama 10ms, sehingga tegangan terminal rata-rata pada output akan menjadi 50% dari tegangan baterai. Katakanlah jika tegangan baterai adalah 5V dan duty cycle adalah 50% dan tegangan terminal rata-rata akan menjadi 2.5V.
Dalam kasus ketiga, duty cycle 20% dan tegangan terminal rata-rata 20% dari tegangan baterai.
Di ATMEGA32A kami memiliki empat channel PWM, yaitu OC0, OC1A, OC1B, dan OC2. Di sini kita akan menggunakan saluran OC0 PWM untuk memvariasikan kecerahan LED.
Komponen Diperlukan
Perangkat keras:
Mikrokontroler ATmega32
Catu daya (5v)
AVR-ISP Programmer
Kapasitor 100uF, 1 Watt LED
Transistor TIP127
Tombol (2 buah)
100nF (104) kapasitor (2 buah), Resistor 100Ω dan 1kΩ (2 buah).
Perangkat lunak:
Atmel studio 6.1.2
Progisp atau flash magic
Diagram Sirkuit dan Penjelasan Kerja
Gambar di atas menunjukkan diagram rangkaian dimmer LED dengan Mikrokontroler AVR (Anda juga dapat memeriksa rangkaian dimmer LED sederhana ini).
Di ATmega, untuk empat saluran PWM, kami telah menetapkan empat pin. Kita hanya bisa mengambil keluaran PWM pada pin tersebut saja. Karena kita menggunakan PWM0 kita harus mengambil sinyal PWM pada pin OC0 (PORTB 3 rd PIN). Seperti yang ditunjukkan pada gambar, kami menghubungkan basis transistor ke pin OC0 untuk menggerakkan LED daya. Di sini hal lain adalah lebih dari empat saluran PWM, dua adalah saluran PWM 8-bit. Kami akan menggunakan saluran PWM 8-bit di sini.
Kapasitor dihubungkan ke masing-masing tombol untuk menghindari terpental. Setiap kali tombol ditekan, akan ada suara berisik di pin. Meskipun kebisingan ini stabil dalam milidetik. Untuk pengontrol, puncak tajam sebelum stabilisasi bertindak sebagai pemicu. Efek ini dapat dihilangkan baik oleh perangkat lunak atau perangkat keras, agar program menjadi sederhana. Kami menggunakan metode perangkat keras dengan menambahkan kapasitor debouncing.
Kapasitor meniadakan efek pantulan tombol.
Di ATMEGA ada beberapa cara untuk menghasilkan PWM, yaitu:
1. Fase PWM yang benar
2. PWM Cepat
Di sini kita akan membuat semuanya sederhana, Jadi kita akan menggunakan metode FAST PWM untuk menghasilkan sinyal PWM.
Pertama untuk memilih frekuensi PWM, Ini tergantung pada aplikasi biasanya, untuk LED frekuensi apa pun yang lebih besar dari 50Hz akan dilakukan. Untuk alasan ini kami memilih jam penghitung 1MHZ. Jadi kami tidak memilih prescalar. Prescalar adalah angka yang dipilih untuk mendapatkan jam penghitung yang lebih rendah. Misalnya jika jam osilator adalah 8Mhz, kita dapat memilih preskalar '8' untuk mendapatkan jam 1MHz sebagai penghitung. Prescalar dipilih berdasarkan frekuensi. Jika kita ingin pulsa periode waktu lebih banyak kita harus memilih prescalar yang lebih tinggi.
Sekarang untuk mendapatkan PWM CEPAT clock 50Hz dari ATMEGA, kita perlu mengaktifkan bit yang sesuai di register “ TCCR0 ”. Ini adalah satu-satunya register yang perlu kita repot, untuk mendapatkan PWM CEPAT 8bit.
Sini, 1. CS00, CS01, CS02 (KUNING) - pilih prescalar untuk memilih jam penghitung. Tabel untuk prescalar yang sesuai ditunjukkan pada tabel di bawah ini. Jadi untuk prescaling satu (osilator clock = counter clock).
jadi CS00 = 1, dua bit lainnya adalah nol.
2. WGM01 dan WGM00 diubah untuk memilih mode pembangkitan bentuk gelombang, berdasarkan tabel di bawah, untuk PWM cepat. Kami memiliki WGM00 = 1 dan WGM01 = 1;
3. Sekarang kita tahu bahwa PWM adalah sinyal dengan duty ratio yang berbeda atau waktu turn ON yang berbeda. Sampai saat ini kami telah memilih frekuensi dan jenis PWM. Tema utama proyek ini terletak pada bagian ini. Untuk mendapatkan rasio tugas yang berbeda, kita akan memilih nilai antara 0 dan 255 (2 ^ 8 karena 8 bit). Katakanlah kita memilih nilai 180, saat penghitung mulai menghitung dari 0 dan mencapai nilai 180, respons keluaran dapat dipicu. Pemicu ini mungkin bersifat inverting atau non inverting. Artinya output dapat dikatakan ditarik saat mencapai hitungan, atau dapat dikatakan ditarik ke bawah saat mencapai hitungan.
Pilihan penarikan ke atas atau ke bawah dipilih oleh bit CM00 dan CM01.
Seperti yang ditunjukkan pada tabel, agar output menjadi tinggi saat dibandingkan dan output akan tetap tinggi hingga nilai maks (seperti yang ditunjukkan pada gambar di bawah). Kita harus memilih mode pembalik untuk melakukannya, jadi COM00 = 1; COM01 = 1.
Seperti yang ditunjukkan pada gambar di bawah ini, OCR0 (Output Compare Register 0) adalah byte yang menyimpan nilai yang dipilih pengguna. Jadi jika kita mengubah OCR0 = 180, pengontrol memicu perubahan (tinggi) saat penghitung mencapai 180 dari 0.
Sekarang untuk memvariasikan kecerahan LED kita harus mengubah RASIO TUGAS dari sinyal PWM. Untuk mengubah rasio tugas, kita perlu mengubah nilai OCR0. Ketika kita mengubah nilai OCR0 ini, penghitung membutuhkan waktu yang berbeda, untuk mencapai OCR0. Jadi pengontrol menarik keluaran tinggi pada waktu yang berbeda.
Jadi untuk PWM siklus tugas yang berbeda, kita perlu mengubah nilai OCR0.
Di sirkuit kami memiliki dua tombol. Satu tombol untuk meningkatkan nilai OCR0 dan juga TUGAS RASIO sinyal PWM, tombol lainnya untuk menurunkan nilai OCR0 dan juga RASIO TUGAS dari sinyal PWM.