Bu projede 1 Watt LED'in parlaklığını ayarlamak için ATmega32A'nın özelliklerinden birini kullanacağız. LED'in hızını ayarlamak için kullanılan yöntem PWM'dir (Darbe Genişliği Modülasyonu). Bu AVR Mikrodenetleyici PWM öğreticisi, PWM konseptini ve PWM üretimini ayrıntılı olarak açıklamaktadır (Bu basit PWM jeneratör devresini de kontrol edebilirsiniz). Şekilde gösterildiği gibi basit bir devre düşünün.
Şimdi, yukarıdaki şekildeki anahtar bir süre boyunca sürekli olarak kapatılırsa, o zaman ampul bu süre boyunca sürekli olarak yanacaktır. Anahtar 8 ms süreyle kapatılırsa ve 10 ms'lik bir döngü boyunca 2 ms süreyle açılırsa, ampul yalnızca 8 ms'lik sürede AÇIK olacaktır. Şimdi 10 ms'lik bir süre boyunca ortalama terminal = Açma süresi / (Açma süresi + Kapatma süresi), buna görev döngüsü denir ve% 80'dir (8 / (8 + 2)), yani ortalama çıkış voltajı akü voltajının% 80'i olacaktır.
İkinci durumda, anahtar 5 ms için kapatılır ve 10 ms'lik bir süre boyunca 5 ms için açılır, bu nedenle çıkıştaki ortalama terminal voltajı akü voltajının% 50'si olacaktır. Akü voltajının 5V ve görev döngüsünün% 50 olup olmadığını ve bu nedenle ortalama terminal voltajının 2,5V olacağını söyleyin.
Üçüncü durumda, görev döngüsü% 20'dir ve ortalama terminal voltajı, akü voltajının% 20'sidir.
ATMEGA32A'da OC0, OC1A, OC1B ve OC2 olmak üzere dört PWM kanalımız var. Burada LED'in parlaklığını değiştirmek için OC0 PWM kanalını kullanacağız.
Gerekli Bileşenler
Donanım:
ATmega32 mikrodenetleyici
Güç kaynağı (5v)
AVR-ISP Programcısı
100 uF kondansatör, 1 Watt LED
TIP127 transistör
Düğmeler (2 adet)
100nF (104) kondansatör (2 adet), 100Ω ve 1kΩ dirençler (2 adet).
Yazılım:
Atmel stüdyo 6.1
Progisp veya flaş büyü
Devre Şeması ve Çalışma Açıklaması
Yukarıdaki şekil, AVR Mikrodenetleyicili LED dimmerin devre şemasını göstermektedir (Bu basit LED dimmer devresini de kontrol edebilirsiniz).
ATmega'da dört PWM kanalı için dört pim belirledik. Sadece bu pinlerde sadece PWM çıkışı alabiliyoruz. PWM0 kullandığımız için OC0 pininden (PORTB 3. PIN) PWM sinyali almalıyız. Şekilde gösterildiği gibi, güç LED'ini sürmek için transistörün tabanını OC0 pinine bağlıyoruz. Burada başka bir şey dört PWM kanalı, ikisi 8 bit PWM kanalı. Burada 8 bitlik bir PWM kanalı kullanacağız.
Sıçramayı önlemek için her bir düğmeye bir kapasitör bağlanmıştır. Bir düğmeye her basıldığında, pimde biraz gürültü olacaktır. Bu gürültü milisaniye cinsinden stabilize olmasına rağmen. Bir kontrolör için, stabilizasyondan önceki keskin zirveler tetikleyici görevi görür. Bu etki, programın basit olması için yazılım veya donanımla ortadan kaldırılabilir. Debounce kondansatörü ekleyerek donanım yöntemini kullanıyoruz.
Kapasitörler, düğmelerin sıçrama etkisini ortadan kaldırır.
ATMEGA'da PWM oluşturmanın birkaç yolu vardır, bunlar:
1. Faz doğru PWM
2. Hızlı PWM
Burada her şeyi basit tutacağız, bu yüzden PWM sinyalini oluşturmak için FAST PWM yöntemini kullanacağız.
İlk önce PWM frekansını seçmek, bu genellikle uygulamaya bağlıdır, bir LED için 50Hz'den büyük herhangi bir frekans bunu yapacaktır. Bu nedenle 1MHZ sayaç saatini seçiyoruz. Bu yüzden hiçbir prescalar seçmiyoruz. Prescalar, daha düşük bir sayaç saati elde etmek için bu şekilde seçilen bir sayıdır. Örneğin, osilatör saati 8Mhz ise, sayaç için 1MHz'lik bir saat elde etmek için bir '8' ön katmanı seçebiliriz. Prescalar, frekansa göre seçilir. Daha fazla zaman periyodu darbesi istiyorsak, daha yüksek preskalar seçmeliyiz.
Şimdi ATMEGA'dan FAST PWM 50Hz saatini elde etmek için, " TCCR0 " yazmacındaki uygun bitleri etkinleştirmemiz gerekiyor. Bu, 8bit FAST PWM elde etmek için uğraşmamız gereken tek kayıttır.
Buraya, 1. CS00, CS01, CS02 (SARI) - sayaç saatini seçmek için ön skalayı seçin. Uygun preskalar için tablo aşağıdaki tabloda gösterilmektedir. Yani birini önceden ölçeklendirmek için (osilatör saati = karşı saat).
yani CS00 = 1, diğer iki bit sıfırdır.
2. WGM01 ve WGM00, hızlı PWM için aşağıdaki tabloya göre dalga formu oluşturma modlarını seçmek üzere değiştirilmiştir. WGM00 = 1 ve WGM01 = 1 var;
3. Artık PWM'nin farklı görev oranına veya farklı AÇMA ve KAPATMA sürelerine sahip bir sinyal olduğunu biliyoruz. Şimdiye kadar PWM'nin sıklığını ve türünü seçtik. Bu projenin ana teması bu bölümde yatmaktadır. Farklı görev oranı elde etmek için 0 ile 255 (8 bit nedeniyle 2 ^ 8) arasında bir değer seçeceğiz. Sayaç 0'dan saymaya başladığında ve 180 değerine ulaştığında, 180 değerini seçtiğimizi varsayalım, çıkış yanıtı tetiklenebilir. Bu tetikleyici ters dönebilir veya tersine çevrilemez. Yani çıktının sayıma ulaşıldığında yukarı çekilmesi söylenebilir veya sayıma ulaşıldığında aşağı çekilmesi söylenebilir.
Bu yukarı veya aşağı çekme seçimi CM00 ve CM01 bitleri tarafından seçilir.
Tabloda gösterildiği gibi, karşılaştırmada çıkışın yüksek olması ve çıkışın maksimum değere kadar yüksek kalması için (alttaki şekilde gösterildiği gibi) Bunu yapmak için ters çevirme modunu seçmeliyiz, yani COM00 = 1; COM01 = 1.
Aşağıdaki şekilde gösterildiği gibi, OCR0 (Çıkış Karşılaştırma Kaydı 0) kullanıcının seçtiği değeri depolayan bayttır. OCR0 = 180'i değiştirirsek, kontrolör, sayaç 0'dan 180'e ulaştığında değişikliği (yüksek) tetikler.
Şimdi LED'in parlaklığını değiştirmek için PWM sinyalinin GÖREV ORANINI değiştirmemiz gerekiyor. Görev oranını değiştirmek için OCR0 değerini değiştirmemiz gerekiyor. Bu OCR0 değerini değiştirdiğimizde, sayacın OCR0'a ulaşması farklı zaman alır. Böylece kontrolör, çıkışı farklı zamanlarda yükseğe çeker.
Bu nedenle, farklı görev döngülerinin PWM'si için OCR0 değerini değiştirmemiz gerekir.
Devrede iki düğmemiz var. Bir düğme OCR0 değerini ve dolayısıyla PWM sinyalinin GÖREV ORANINI artırmak içindir, diğeri ise OCR0 değerini ve dolayısıyla PWM sinyalinin GÖREV ORANINI düşürmek içindir.