Dalam projek ini kita akan menggunakan salah satu ciri ATmega32A untuk menyesuaikan kecerahan LED 1 Watt. Kaedah yang digunakan untuk menyesuaikan kelajuan LED adalah PWM (Pulse Width Modulation). Ini tutorial AVR mikropengawal PWM menerangkan konsep PWM dan penjanaan PWM secara terperinci (Anda juga boleh menyemak PWM litar penjana mudah ini). Pertimbangkan litar sederhana seperti yang ditunjukkan dalam gambar.
Sekarang jika suis angka di atas ditutup secara berterusan dalam jangka masa tertentu, maka mentol akan terus menyala selama masa itu. Sekiranya suis ditutup selama 8ms dan dibuka selama 2ms selama satu kitaran 10ms, maka mentol akan menyala hanya dalam masa 8ms. Sekarang terminal rata-rata melebihi jangka masa 10ms = Waktu AKTIF / (Waktu AKTIF + masa Mati), ini dipanggil kitaran tugas dan 80% (8 / (8 + 2)), jadi rata-rata voltan output akan menjadi 80% daripada voltan bateri.
Dalam kes kedua, suis ditutup selama 5ms dan dibuka selama 5ms dalam jangka masa 10ms, jadi voltan terminal rata-rata pada output akan menjadi 50% dari voltan bateri. Katakan jika voltan bateri 5V dan kitaran tugas adalah 50% dan voltan terminal purata akan menjadi 2.5V.
Dalam kes ketiga kitaran tugas adalah 20% dan voltan terminal purata adalah 20% daripada voltan bateri.
Di ATMEGA32A kami mempunyai empat saluran PWM, iaitu OC0, OC1A, OC1B, dan OC2. Di sini kita akan menggunakan saluran PWM OC0 untuk mengubah kecerahan LED.
Komponen Diperlukan
Perkakasan:
Mikrokontroler ATmega32
Bekalan kuasa (5v)
Pengaturcara AVR-ISP
Kapasitor 100uF, LED 1Watt
Transistor TIP127
Butang (2 keping)
Kapasitor 100nF (104) (2 keping), Perintang 100Ω dan 1kΩ (2 keping).
Perisian:
Studio atmel 6.1
Progisp atau sihir kilat
Diagram Litar dan Penjelasan Kerja
Gambar di atas menunjukkan gambarajah litar dimmer LED dengan Mikrokontroler AVR (Anda juga boleh memeriksa litar dimmer LED sederhana ini).
Di ATmega, untuk empat saluran PWM, kami telah menetapkan empat pin. Kami hanya dapat mengambil output PWM pada pin ini sahaja. Oleh kerana kita menggunakan PWM0 kita harus mengambil isyarat PWM pada pin OC0 (PORTB 3 rd PIN). Seperti yang ditunjukkan dalam gambar, kita menghubungkan dasar transistor ke pin OC0 untuk menggerakkan LED kuasa. Di sini perkara lain adalah lebih daripada empat saluran PWM, dua saluran PWM 8-bit. Kami akan menggunakan saluran PWM 8-bit di sini.
Kapasitor disambungkan ke setiap butang untuk mengelakkan melantun. Setiap kali butang ditekan akan ada sedikit bunyi di pin. Walaupun bunyi ini stabil dalam milisaat. Untuk pengawal puncak tajam sebelum penstabilan bertindak sebagai pencetus. Kesan ini dapat dihilangkan sama ada dengan perisian atau perkakasan, agar programnya mudah. Kami menggunakan kaedah perkakasan dengan menambahkan pemuat debouncing.
Kapasitor membatalkan kesan memantul butang.
Di ATMEGA terdapat beberapa cara untuk menghasilkan PWM, antaranya adalah:
1. Fasa PWM yang betul
2. PWM pantas
Di sini kita akan memastikan semuanya mudah, Oleh itu, kita akan menggunakan kaedah FAST PWM untuk menghasilkan isyarat PWM.
Pertama untuk memilih frekuensi PWM, Ini bergantung pada aplikasi biasanya, untuk LED frekuensi lebih besar daripada 50Hz akan berlaku. Atas sebab ini kami memilih jam kaunter 1MHZ. Oleh itu, kami tidak memilih preskalar. Prescalar adalah nombor yang dipilih sedemikian rupa untuk mendapatkan jam kaunter yang lebih rendah. Sebagai contoh jika jam pengayun adalah 8Mhz, kita dapat memilih preskalar '8' untuk mendapatkan jam 1MHz untuk pembilang. Preskalar dipilih berdasarkan kekerapan. Sekiranya kita mahukan lebih banyak denyutan jangka masa, kita harus memilih prescalar yang lebih tinggi.
Sekarang untuk mengeluarkan PWM CEPAT 50Hz dari ATMEGA, kita perlu mengaktifkan bit yang sesuai dalam daftar " TCCR0 ". Ini adalah satu-satunya daftar yang perlu kita ganggu, kerana mendapat PWM 8bit CEPAT.
Di sini, 1. CS00, CS01, CS02 (KUNING) - pilih preskalar untuk memilih jam kaunter. Jadual untuk prescalar yang sesuai ditunjukkan dalam jadual di bawah. Jadi untuk prescaling satu (jam pengayun = jam kaunter).
jadi CS00 = 1, dua bit lain adalah sifar.
2. WGM01 dan WGM00 diubah untuk memilih mod penjanaan bentuk gelombang, berdasarkan jadual di bawah, untuk PWM pantas. Kami mempunyai WGM00 = 1 dan WGM01 = 1;
3. Sekarang kita tahu bahawa PWM adalah isyarat dengan nisbah tugas yang berbeza atau masa Pusing AKTIF yang berbeza. Sehingga kini kami telah memilih frekuensi dan jenis PWM. Tema utama projek ini terdapat di bahagian ini. Untuk mendapatkan nisbah tugas yang berbeza, kita akan memilih nilai antara 0 dan 255 (2 ^ 8 kerana 8 bit). Katakan kita memilih nilai 180, kerana penghitung mula menghitung dari 0 dan mencapai nilai 180, tindak balas output mungkin akan dipicu. Pencetus ini mungkin terbalik atau tidak terbalik. Itu adalah output yang dapat diberitahu untuk berhenti ketika mencapai hitungan, atau dapat dikatakan untuk menarik ketika mencapai hitungan.
Pilihan menarik atau turun ini dipilih oleh bit CM00 dan CM01.
Seperti ditunjukkan dalam jadual, untuk output menjadi tinggi dibandingkan dan output akan tetap tinggi sehingga nilai maksimum (seperti yang ditunjukkan pada gambar di bawah). Kita mesti memilih mod terbalik untuk melakukannya, jadi COM00 = 1; COM01 = 1.
Seperti yang ditunjukkan dalam gambar di bawah, OCR0 (Daftar Perbandingan Hasil 0) adalah bait yang menyimpan nilai yang dipilih pengguna. Oleh itu, jika kita menukar OCR0 = 180, pengawal mencetuskan perubahan (tinggi) apabila pembilang mencapai 180 dari 0.
Sekarang untuk mengubah kecerahan LED, kita mesti menukar DUTY RATIO isyarat PWM. Untuk mengubah nisbah tugas, kita perlu mengubah nilai OCR0. Apabila kita menukar nilai OCR0 ini, penghitung memerlukan masa yang berbeza, untuk mencapai OCR0. Oleh itu pengawal menarik output tinggi pada masa yang berbeza.
Jadi untuk PWM dari kitaran tugas yang berbeza, kita perlu mengubah nilai OCR0.
Di litar kami mempunyai dua butang. Satu butang adalah untuk meningkatkan nilai OCR0 dan jadi DUTY RATIO isyarat PWM, yang lain adalah untuk menurunkan nilai OCR0 dan begitu juga DUTY RATIO isyarat PWM.