Pelajari cara mengontrol kecerahan LED yang terhubung ke Raspberry Pi menggunakan PWM.

PWM adalah sesuatu yang kita semua gunakan setiap hari, meskipun kita tidak menyadarinya. Ini adalah teknik yang mudah dan sangat berguna dalam berbagai aplikasi. Yang terbaiknya lagi, ini adalah sesuatu yang dapat dilakukan Raspberry Pi Anda tanpa bersusah payah. Bagaimana? Mari lihat.

Apa itu PWM?

Menurut terminologi, "Modulasi Lebar Pulsa" terdengar cukup mewah. Namun yang sebenarnya kita bicarakan di sini hanyalah mematikan dan menghidupkan kembali sinyal listrik—dengan sangat cepat. Mengapa kita ingin melakukan ini? Hanya karena ini adalah cara yang sangat mudah untuk mensimulasikan sinyal analog variabel, tanpa harus melakukannya Topi Raspberry Pi, tambahan, atau sirkuit tambahan. Untuk aplikasi tertentu, seperti memanaskan kompor, menggerakkan motor, atau meredupkan LED, sinyal PWM secara harfiah tidak dapat dibedakan dari tegangan analog "nyata".

Siklus Tugas

Jadi, kita mempunyai serangkaian pulsa yang dimasukkan ke dalam suatu beban (benda yang kita kendarai). Ini saja tidak terlalu berguna—sampai kita mulai mengubah (atau memodulasi) lebar pulsa tersebut. Fase "hidup" pada periode hidup-mati tertentu dapat berlangsung antara 0–100% dari total siklus. Kami menyebut persentase ini sebagai

instagram viewer
siklus.

Misalnya, kita memiliki sinyal PWM 3V dengan siklus kerja 50%. Jumlah rata-rata daya yang melewati LED akan setara dengan sinyal selalu aktif sebesar 1,5V. Tingkatkan siklus tugas, dan LED menjadi lebih terang; turunkan, dan LED meredup. Kami dapat menghasilkan audio menggunakan metode yang sama—itulah sebabnya audio yang keluar di Raspberry Pi Anda mungkin berhenti berfungsi jika Anda menggunakan PWM untuk hal lain.

PWM di Raspberry Pi

Anda dapat menggunakan software PWM di setiap pin GPIO Raspberry Pi. Namun PWM perangkat keras hanya tersedia pada GPIO12, GPIO13, GPIO18, Dan GPIO19.

Apa bedanya? Nah, jika Anda akan menggunakan perangkat lunak untuk menghasilkan sinyal, maka Anda akan menghabiskan siklus CPU. Namun, CPU Anda mungkin memiliki hal yang lebih baik untuk dilakukan daripada memerintahkan LED untuk mati dan menyala beberapa ratus kali per detik. Faktanya, perhatiannya mungkin terganggu dan terhambat oleh tugas-tugas lain, yang dapat mengacaukan pengaturan waktu PWM Anda.

Oleh karena itu, seringkali merupakan ide yang lebih baik untuk mendelegasikan tugas tersebut ke sirkuit khusus. Dalam kasus Raspberry Pi, sirkuit ini ada di dalamnya Sistem pada Chip yang menampung CPU. PWM perangkat keras seringkali jauh lebih tepat dan nyaman, sehingga merupakan pilihan yang lebih disukai dalam banyak kasus. Jika Anda ingin gambaran tentang apa yang terjadi pada chip Broadcom BCM2711 Raspberry Pi 4, Anda dapat melihatnya dokumentasi BCM2711. Bab 8 membahas hal-hal PWM!

Meredupkan LED

Agar LED kita berfungsi dengan Raspberry Pi, kita perlu melakukan beberapa breadboarding. Artinya ada dua komponen: LED itu sendiri, dan resistor pembatas arus, yang akan kita sambungkan secara seri dengannya. Tanpa resistor, LED Anda berisiko mati dalam kepulan asap berbau busuk jika terlalu banyak arus yang melewatinya.

Menghitung Nilai Resistor

Tidak masalah ujung LED mana yang Anda sambungkan dengan resistor. Yang penting adalah nilai resistornya. Raspberry Pi 4 dapat menyediakan sekitar 16 miliampere per pin. Jadi kita bisa menggunakan hukum Ohm untuk mengetahui nilai resistor yang diperlukan.

Hukum tersebut menyatakan bahwa hambatan harus sama dengan tegangan terhadap arus. Kita mengetahui tegangan yang keluar dari pin GPIO Pi (3.3V), dan kita mengetahui berapa arus yang seharusnya (16 miliampere, atau 0.016 ampere). Jika kita membagi angka pertama dengan angka kedua, kita mendapatkan 206,25. Sekarang, karena Anda akan kesulitan menemukan resistor dengan nilai ini, mari kita pilih 220 ohm saja.

Hubungkan anoda LED (kaki panjang) ke GPIO 18 (yang merupakan pin fisik 12 pada Raspberry Pi). Hubungkan katoda (kaki pendek) ke salah satu pin ground Pi. Jangan lupa resistornya, di suatu tempat di sepanjang jalan. Anda sekarang siap berangkat!

Menerapkan PWM pada Raspberry Pi

Agar PWM perangkat keras berfungsi pada Raspberry Pi, kami akan menggunakan perpustakaan rpi-hardware-pwm dari Cameron Davidson-Pilon, diadaptasi dari kode oleh Jeremy Impson. Ini telah digunakan di reaktor piro (bioreaktor berbasis Pi)—tetapi cukup sederhana untuk tujuan kita.

Pertama, mari edit config.txtfile, ditemukan di /boot direktori. Kita hanya perlu menambahkan satu baris: dtoverlay=pwm-2chan. Jika kita ingin menggunakan pin GPIO selain 18 dan 19, kita bisa menambahkan beberapa argumen tambahan di sini. Untuk saat ini, mari kita buat semuanya tetap sederhana.

Nyalakan ulang Pi Anda dan jalankan:

lsmod | grep pwm

Perintah ini mencantumkan semua modul yang dimuat ke bagian tengah OS, yang disebut kernel. Di sini, kami memfilternya untuk hanya menemukan barang-barang PWM, menggunakan memahami (itulah perintah "cetak ekspresi reguler global").

Jika pwm_bcm2835 muncul di antara modul yang terdaftar, maka kita berada di jalur yang benar. Kami hampir selesai bersiap! Yang tersisa hanyalah menginstal perpustakaan yang sebenarnya. Dari terminal, jalankan:

sudo pip3 install rpi-hardware-pwm

Kami sekarang siap untuk memulai.

Mengkode Rangkaian LED PWM

Saatnya mengotori tangan kita dengan sedikit pengkodean dengan Python. Jalankan Thonny dan salin kode berikut. Lalu pukul Berlari.

from rpi_hardware_pwm import HardwarePWM
import time
pwm = HardwarePWM(pwm_channel=0, hz=60) # here's where we initialize the PWM
pwm.start(0) # start the PWM at zero – which means the LED is off
for i in range(101):
pwm.change_duty_cycle(i)
time.sleep(.1) # by introducing a small delay, we can make the effect visible.
pwm.stop()

Semuanya baik-baik saja, Anda akan melihat LED semakin terang secara bertahap hingga Saya variabel counter mencapai 100. Kemudian itu akan mati. Apa yang terjadi di sini? Mari kita telusurinya.

Kami mengimpor bagian yang relevan dari perpustakaan PWM perangkat keras (bersama dengan waktu module) dan mendeklarasikan variabel baru. Kita dapat mengaturnya pwm_channel ke 0 atau 1, yang masing-masing sesuai dengan pin GPIO 18 dan 19 pada Pi.

Itu hz nilai yang dapat kita atur ke frekuensi apa pun yang kita suka (walaupun pada akhirnya kita dibatasi oleh kecepatan clock Pi). Pada 60Hz, kita tidak akan melihat kedipan PWM apa pun. Namun mungkin ada baiknya untuk memulai dengan nilai yang sangat rendah (seperti 10) dan secara bertahap menaikkannya. Lakukan ini, dan Anda akan benar-benar dapat melihat denyut nadi terjadi. Jangan hanya percaya kata-kata kami begitu saja!

Kami mengerjakan siklus tugas kami (Saya) naik dari 0 menjadi 100 menggunakan perulangan Python for. Perlu dicatat bahwa kita dapat mengaturnya waktu tidur argumen selama yang kita suka—karena PWM ditangani di perangkat keras, PWM akan berjalan di belakang layar, berapa pun lamanya kita memerintahkan program untuk menunggu.

Masih Banyak Lagi yang Dapat Dipelajari Dengan PWM

Selamat! Anda telah menulis program PWM pertama Anda. Namun, seperti yang sering terjadi pada Raspberry Pi, ada banyak hal yang dapat Anda lakukan dengan hal ini, terutama jika Anda menambah Raspberry Pi Anda dengan PWM HAT yang tepat. Jadi, jangan puas dengan satu LED kecil. Anda dapat menggunakan kekuatan baru ini untuk mengontrol motor, menyandikan pesan, dan menghasilkan nada synthesizer. Dunia modulasi menanti!