Pulse Width Modulation (PWM) adalah teknik yang memvariasikan lebar pulsa sambil menjaga frekuensi gelombang tetap konstan. Teknik PWM terutama digunakan untuk mengontrol kecerahan LED, kecepatan motor DC, mengendalikan motor servo, atau dalam kasus lain, di mana harus menghasilkan sinyal analog menggunakan sumber digital. Kami menjelaskan PWM secara detail di artikel sebelumnya.
Dalam tutorial ini, kita akan berbicara tentang pin PWM (modulasi lebar pulsa) dari papan pengembangan ESP32. Semua pin GPIO dari papan pengembangan ESP32 (Kecuali Power, GND, Tx, Rx, dan EN) dapat digunakan untuk mendapatkan sinyal PWM. Sebagai contoh ESP32 PWM, kami akan membangun sirkuit sederhana yang mengubah kecerahan LED sesuai dengan sinyal PWM.
Komponen Diperlukan
- ESP32
- LED
- 330 Ω Resistor
- 10k Pot
- Papan tempat memotong roti
Generasi PWM
Sebelum menjelaskan pembangkitan PWM pada ESP32, mari kita bahas beberapa istilah yang terkait dengan PWM.
TON (On Time): Durasi waktu sinyal tinggi.
TOFF (Off Time): Durasi waktu ketika sinyal rendah.
Periode: Ini adalah jumlah waktu hidup dan mati sinyal PWM.
TotalPeriod = T ON + T OFF
Duty Cycle: Persentase waktu ketika sinyal tinggi selama periode sinyal PWM.
Siklus Kerja = T ON / T Total * 100
Misalnya, jika pulsa dengan total periode 10ms tetap ON (tinggi) selama 5ms. Kemudian, duty cycle-nya adalah:
Siklus Tugas = 5/10 * 100 = 50% Siklus Tugas
Sirkuit berisi satu LED, resistor, dan potensiometer 10K. Pin negatif LED dihubungkan ke GND ESP32 melalui resistor 330 Ω. Anda dapat menggunakan nilai resistor apa pun antara 230 Ω dan 500 Ω. Hubungkan pin positif LED ke GPIO 16 dan pin sinyal Pot ke ADC1 (VP) pin ESP32.
Penjelasan Kode untuk ESP32 PWM
Kode lengkap diberikan di akhir halaman.
Kode ini tidak memerlukan pustaka apa pun, jadi mulailah kode Anda dengan menentukan pin, LED terpasang. Dalam kasus saya, saya menggunakan GPIO 16 untuk menghubungkan LED.
const int ledPin = 16; // 16 sesuai dengan GPIO16
Setelah itu, atur properti sinyal PWM pada baris berikutnya. Saya mengatur frekuensi PWM ke 9000, dan resolusi ke 10, Anda dapat mengubahnya untuk menghasilkan sinyal PWM yang berbeda. Papan ESP32 mendukung resolusi PWM dari 1 bit hingga 16 bit. Anda juga perlu memilih saluran PWM. ESP32 memiliki total 16 (0 hingga 15) saluran PWM.
const int freq = 9000; const int ledChannel = 0; resolusi const int = 10;
Sekarang di dalam fungsi void setup () , konfigurasikan LED PWM dengan properti yang Anda atur sebelumnya dengan menggunakan fungsi ledcSetup () . Di baris berikutnya, tentukan pin GPIO tempat LED terhubung. Fungsi ledcAttachPin () digunakan untuk menentukan pin GPIO dan saluran yang menghasilkan sinyal. Dalam kasus saya, saya menggunakan ledPin yaitu GPIO 16 dan ledChannel yang sesuai dengan saluran 0.
void setup () {Serial.begin (9600); ledcSetup (ledChannel, freq, resolusi); ledcAttachPin (ledPin, ledChannel); }
Di loop kosong, baca pin Analog tempat Pot terhubung dan simpan hasil pengukuran dalam variabel yang disebut 'dutyCycle' . Kecerahan LED akan bertambah atau berkurang sesuai dengan rotasi potensiometer. The ledcWrite () sangat mirip dengan analogWrite ().
void loop () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); penundaan (15); }
Menguji Sinyal ESP32 PWM
Untuk menguji sinyal ESP32 PWM, sambungkan LED dan potensiometer sesuai diagram sirkuit, dan unggah kode ke ESP32 Anda. Pastikan Anda memiliki papan kanan dan port COM yang dipilih. Sekarang putar potensiometer untuk menambah atau mengurangi kecerahan LED.
Pekerjaan lengkap ditunjukkan dalam video yang diberikan di bawah ini. Juga, periksa proyek berbasis ESP32 lainnya dengan mengikuti tautan.