Pulse Width Modulation (PWM) adalah teknik yang mengubah lebar nadi sambil mengekalkan frekuensi gelombang tetap. Teknik PWM digunakan terutamanya untuk mengawal kecerahan LED, kelajuan motor DC, mengendalikan motor servo, atau dalam kes lain, di mana harus menghasilkan isyarat analog menggunakan sumber digital. Kami menerangkan PWM secara terperinci dalam artikel sebelumnya.
Dalam tutorial ini, kita akan membincangkan pin PWM (modulasi lebar nadi) papan pengembangan ESP32. Semua pin GPIO papan pengembangan ESP32 (Kecuali Daya, GND, Tx, Rx, dan EN) boleh digunakan untuk mendapatkan isyarat PWM. Sebagai contoh ESP32 PWM, kami akan membina litar sederhana yang mengubah kecerahan LED mengikut isyarat PWM.
Komponen Diperlukan
- ESP32
- LED
- Perintang 330 Ω
- 10k Pot
- Papan roti
Penjanaan PWM
Sebelum menerangkan generasi PWM pada ESP32, mari kita bincangkan beberapa istilah yang berkaitan dengan PWM.
TON (On Time): Tempoh masa ketika isyarat tinggi.
TOFF (Waktu Mati): Tempoh masa ketika isyarat rendah.
Jangkamasa: Ini adalah jumlah masa waktu dan waktu isyarat PWM.
TotalPeriod = T ON + T MATI
Duty Cycle: Peratusan masa ketika isyarat tinggi semasa tempoh isyarat PWM.
Duty Cycle = T ON / T Jumlah * 100
Contohnya, jika nadi dengan jangka masa 10ms kekal HIDUP (tinggi) selama 5ms. Kemudian, kitaran tugas adalah:
Duty Cycle = 5/10 * 100 = 50% Duty Cycle
Litar mengandungi LED tunggal, perintang, dan potensiometer 10K. Pin negatif LED disambungkan ke GND ESP32 melalui perintang 330 Ω. Anda boleh menggunakan sebarang nilai perintang antara 230 Ω dan 500 Ω. Sambungkan pin positif LED ke GPIO 16 dan pin isyarat Pot ke ADC1 (VP) pin ESP32.
Penjelasan Kod untuk ESP32 PWM
Kod lengkap diberikan di hujung halaman.
Kod ini tidak memerlukan perpustakaan apa pun, jadi mulailah kod anda dengan menentukan pin, LED dipasang. Dalam kes saya, saya menggunakan GPIO 16 untuk menyambungkan LED.
const int ledPin = 16; // 16 sesuai dengan GPIO16
Selepas itu, tetapkan sifat isyarat PWM pada baris seterusnya. Saya menetapkan frekuensi PWM ke 9000, dan resolusi menjadi 10, anda boleh mengubahnya untuk menghasilkan isyarat PWM yang berbeza. Papan ESP32 menyokong resolusi PWM dari 1 bit hingga 16 bit. Anda juga perlu memilih saluran PWM. ESP32 mempunyai sejumlah 16 (0 hingga 15) saluran PWM.
const int freq = 9000; const int ledChannel = 0; resolusi int int = 10;
Sekarang di dalam fungsi setup void () , konfigurasikan LED PWM dengan sifat yang anda tetapkan lebih awal dengan menggunakan fungsi ledcSetup () . Pada baris seterusnya, tentukan pin GPIO di mana LED disambungkan. Fungsi ledcAttachPin () digunakan untuk menentukan pin GPIO dan saluran yang menghasilkan isyarat. Dalam kes saya, saya menggunakan ledPin iaitu GPIO 16 dan ledChannel yang sesuai dengan saluran 0.
batal persediaan () {Serial.begin (9600); ledcSetup (ledChannel, freq, resolusi); ledcAttachPin (ledPin, ledChannel); }
Dalam gelung kekosongan, baca pin Analog di mana Pot disambungkan dan simpan bacaan dalam pemboleh ubah yang disebut 'dutyCycle' . Kecerahan LED akan meningkat atau menurun sesuai dengan putaran potensiometer. The ledcWrite () sangat serupa dengan analogWrite ().
gelung void () {dutyCycle = analogRead (A0); ledcWrite (ledChannel, dutyCycle); kelewatan (15); }
Menguji Isyarat PWM ESP32
Untuk menguji isyarat ESP32 PWM, sambungkan LED dan potensiometer seperti rajah litar, dan muat naik kod ke ESP32 anda. Pastikan anda memilih papan papan dan COM yang betul. Sekarang putar potensiometer untuk menambah atau menurunkan kecerahan LED.
Kerja lengkap ditunjukkan dalam video yang diberikan di bawah. Juga, periksa projek berasaskan ESP32 lain dengan mengikuti pautan.