Darbe Genişliği Modülasyonu (PWM), dalga frekansını sabit tutarken darbenin genişliğini değiştiren bir tekniktir. PWM tekniği temel olarak LED'in parlaklığını, DC motorun hızını, bir servo motoru kontrol etmeyi veya dijital bir kaynak kullanarak bir analog sinyal üretmenin gerektiği diğer durumlarda kullanılır. PWM'yi bir önceki makalede detaylı olarak anlattık.
Bu eğitimde, ESP32 geliştirme kartının PWM (darbe genişlik modülasyonu) pinlerinden bahsedeceğiz. ESP32 geliştirme kartının tüm GPIO pinleri (Güç, GND, Tx, Rx ve EN hariç) PWM sinyalini almak için kullanılabilir. Bir ESP32 PWM örneği olarak, LED parlaklığını PWM sinyallerine göre değiştiren basit bir devre oluşturacağız.
Gerekli Bileşenler
- ESP32
- LED
- 330 Ω Direnç
- 10k Pot
- Breadboard
PWM Üretimi
ESP32'de PWM neslini açıklamadan önce, PWM ile ilgili bazı terimleri tartışalım.
TON (Açılma Süresi): Sinyalin yüksek olduğu süre.
TOFF (Off Time): Sinyalin düşük olduğu süre.
Periyot: PWM sinyalinin açık ve kapalı zamanlarının toplamıdır.
Toplam Süre = T AÇIK + T KAPALI
Görev Döngüsü: PWM sinyali süresince sinyalin yüksek olduğu zaman yüzdesi.
Görev Döngüsü = T ON / T Toplam * 100
Örneğin, toplam süresi 10 ms olan bir darbe 5 ms boyunca AÇIK (yüksek) kalırsa. Ardından görev döngüsü şöyle olacaktır:
Görev Döngüsü = 5/10 * 100 =% 50 Görev Döngüsü
Devre tek bir LED, bir direnç ve bir 10K potansiyometre içerir. Negatif LED pini ESP32'nin GND'sine 330 Ω'luk bir dirençle bağlanır. 230 Ω ile 500 Ω arasında herhangi bir direnç değerini kullanabilirsiniz. LED pozitif pinini GPIO 16'ya ve Pot'un sinyal pinini ESP32'nin ADC1 (VP) pinine bağlayın.
ESP32 PWM için Kod Açıklaması
Kodun tamamı sayfanın sonunda verilmiştir.
Bu kod herhangi bir kitaplık gerektirmez, bu nedenle kodunuza LED'in bağlı olduğu pini tanımlayarak başlayın. Benim durumumda, LED'i bağlamak için GPIO 16 kullandım.
const int ledPin = 16; // 16, GPIO16'ya karşılık gelir
Bundan sonra, sonraki satırlarda PWM sinyal özelliklerini ayarlayın. PWM frekansını 9000'e ve çözünürlüğü 10'a ayarladım, farklı PWM sinyalleri oluşturmak için değiştirebilirsiniz. ESP32 kartları 1 bit ile 16 bit arasındaki PWM çözünürlüğünü destekler. Ayrıca bir PWM kanalı seçmeniz gerekir. ESP32'de toplam 16 (0 ila 15) PWM kanalı vardır.
const int sıklık = 9000; const int ledChannel = 0; const int çözümleme = 10;
Şimdi void setup () işlevinin içinde, ledcSetup () işlevini kullanarak daha önce belirlediğiniz özelliklerle LED PWM'yi yapılandırın . Sonraki satırda, LED'in bağlı olduğu GPIO pinini tanımlayın. LedcAttachPin () işlev GPIO pim ve sinyali üreten kanalını tanımlamak için kullanılır. Benim durumumda GPIO 16 olan ledPin ve 0 kanalına karşılık gelen ledChannel kullandım.
geçersiz kurulum () {Serial.begin (9600); ledcSetup (ledChannel, frekans, çözünürlük); ledcAttachPin (ledPin, ledChannel); }
Boş döngüde, Potun bağlı olduğu Analog pini okuyun ve okumayı 'dutyCycle' adı verilen bir değişkende saklayın . LED parlaklığı potansiyometrenin dönüşüne göre artar veya azalır. LedcWrite () çok benzer analogWrite ().
geçersiz döngü () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); gecikme (15); }
ESP32 PWM Sinyallerini Test Etme
ESP32 PWM sinyallerini test etmek için, LED ve potansiyometreyi devre şemasına göre bağlayın ve kodu ESP32'nize yükleyin. Doğru panonun ve COM bağlantı noktasının seçildiğinden emin olun. Şimdi LED parlaklığını artırmak veya azaltmak için potansiyometreyi döndürün.
Aşağıda verilen videoda tam çalışma gösterilmektedir. Ayrıca, bağlantıyı izleyerek diğer ESP32 tabanlı projeleri kontrol edin.