PWM kullanarak Raspberry Pi'ye bağlı bir LED'in parlaklığını nasıl kontrol edeceğinizi öğrenin.
PWM, bilmesek bile hepimizin her gün kullandığı bir şeydir. Bu, çeşitli uygulamalarda basit ve inanılmaz derecede faydalı bir tekniktir. En iyisi de bu, Raspberry Pi'nizin hiç zorlanmadan yapabileceği bir şeydir. Nasıl? Hadi bir bakalım.
PWM Nedir?
Terminolojiye göre "Darbe Genişliği Modülasyonu" kulağa oldukça hoş geliyor. Ancak burada aslında bahsettiğimiz tek şey, bir elektrik sinyalini son derece hızlı bir şekilde kapatıp tekrar açmaktır. Bunu neden yapmak isteyebiliriz? Bunun nedeni, değişken bir analog sinyali simüle etmenin çok kolay bir yolu olmasıdır. Raspberry Pi HAT'ler, eklentilerveya ekstra devre. Sobayı ısıtmak, motoru çalıştırmak veya bir LED'i karartmak gibi belirli uygulamalar için, PWM sinyali kelimenin tam anlamıyla "gerçek" analog voltajdan ayırt edilemez.
Görev Döngüleri
Yani, bir yüke (sürdüğümüz şeye) beslenen bir dizi darbemiz var. Bu tek başına o kadar da yararlı değil; ta ki bu darbelerin genişliğini değiştirmeye (veya modüle etmeye) başlayana kadar. Belirli bir açma-kapama periyodunun "açık" aşaması, toplam döngünün %0 ila %100'ü arasında herhangi bir yeri kaplayabilir. Bu yüzdeye biz diyoruz
görev döngüsü.Örneğin, görev döngüsü %50 olan 3V'luk bir PWM sinyalimiz olduğunu varsayalım. LED'den geçen ortalama güç miktarı, her zaman açık olan 1,5V sinyaline eşdeğer olacaktır. Görev döngüsünü artırdığınızda LED daha parlak hale gelir; çevirin ve LED kararır. Aynı yöntemi kullanarak ses üretebiliriz; bu nedenle PWM'yi başka şeyler için kullanıyorsanız Raspberry Pi'nizdeki ses çıkışı çalışmayı durdurabilir.
Raspberry Pi'de PWM
Raspberry Pi'nin her GPIO pininde PWM yazılımını kullanabilirsiniz. Ancak donanım PWM yalnızca GPIO12, GPIO13, GPIO18, Ve GPIO19.
Fark ne? Peki, sinyali üretmek için yazılım kullanacaksanız CPU döngülerini tüketeceksiniz. Ancak CPU'nuzun, bir LED'e saniyede birkaç yüz kez açılıp kapanmasını söylemekten daha iyi işleri olabilir. Aslında, diğer görevler nedeniyle dikkati dağılabilir ve çıkmaza girebilir, bu da PWM zamanlamalarınızı ciddi şekilde bozabilir.
Sonuç olarak, görevi özel devrelere devretmek genellikle daha iyi bir fikirdir. Raspberry Pi'de bu devre içeride yaşıyor Çip Üzerindeki Sistem CPU'yu barındırır. Donanım PWM'si genellikle çok daha hassas ve kullanışlıdır ve bu nedenle çoğu durumda tercih edilen seçenektir. Raspberry Pi 4'ün Broadcom BCM2711 yongasında kaputun altında neler olup bittiğine dair bir fikir istiyorsanız, o zaman şu adrese bakabilirsiniz: BCM2711 belgeleri. Bölüm 8 PWM olaylarını kapsıyor!
Bir LED'i karartma
LED'imizin Raspberry Pi'mizle çalışmasını sağlamak için biraz devre tahtası yapmamız gerekecek. Bu, iki bileşen anlamına gelir: LED'in kendisi ve ona seri olarak bağlayacağımız akım sınırlayıcı direnç. Direnç olmadan, içinden çok fazla akım geçmesi durumunda LED'iniz kötü kokulu bir duman bulutu içinde ölme riskiyle karşı karşıyadır.
Direnç Değerinin Hesaplanması
Direnci LED'in hangi ucuna bağladığınız önemli değildir. Önemli olan direncin değeridir. Raspberry Pi 4, pin başına yaklaşık 16 miliamper sağlayabilir. O zaman yapabiliriz Ohm yasasını kullan Gerekli direncin değerini hesaplamak için.
Söz konusu yasa, direncin akım üzerindeki gerilime eşit olması gerektiğini belirtir. Pi'nin GPIO pininden (3,3V) çıkan voltajı biliyoruz ve akımın ne olması gerektiğini (16 miliamper veya 0,016 amper) biliyoruz. İlkini ikincisine bölersek 206,25 elde ederiz. Şimdi bu değerde direnç bulmakta zorlanacağınız için onun yerine 220 ohm'u tercih edelim.
LED'in anotunu (uzun bacak) GPIO18 (Raspberry Pi'deki fiziksel pin 12'dir). Katodu (kısa bacak) Pi'nin toprak pinlerinden herhangi birine bağlayın. Yolun herhangi bir yerindeki direnci unutmayın. Artık gitmeye hazırsınız!
Raspberry Pi'de PWM'nin Uygulanması
Donanımsal PWM'nin Raspberry Pi üzerinde çalışmasını sağlamak için şunları kullanacağız: Cameron Davidson-Pilon'dan rpi-donanım-pwm kütüphanesi, dan uyarlandı Jeremy Impson'ın kodu. Bu, şu alanda kullanılmıştır: Pioreaktör (Pi tabanlı bir biyoreaktör) — ama bizim amaçlarımız için yeterince basit.
İlk önce hadi config.txt dosyasını düzenleyindosyasında bulunan /boot dizin. Sadece bir satır eklememiz gerekiyor: dtoverlay=pwm-2chan. 18 ve 19 dışındaki GPIO pinlerini kullanmak isteseydik buraya bazı ek argümanlar ekleyebilirdik. Şimdilik işleri basit tutalım.
Pi'nizi yeniden başlatın ve çalıştırın:
lsmod | grep pwm
Bu komut, işletim sisteminin çekirdek adı verilen orta kısmına yüklenen tüm modülleri listeler. Burada, yalnızca PWM öğelerini bulmak için bunları filtreliyoruz. grep (bu "genel düzenli ifade yazdırma"dır) komutunu kullanın.
Eğer pwm_bcm2835 listelenen modüller arasında görünüyorsa doğru yoldayız demektir. Hazırlıklarımız neredeyse bitti! Geriye kalan tek şey gerçek kütüphaneyi kurmak. Terminalden şunu çalıştırın:
sudo pip3 install rpi-hardware-pwm
Artık başlamaya hazırız.
PWM LED Devresinin Kodlanması
Biraz ellerimizi kirletme zamanı Python'da kodlama. Thonny'yi çalıştırın ve aşağıdaki kodu kopyalayın. Sonra vur Koşmak.
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()
Her şey yolundaysa, LED'in giderek daha parlak hale geldiğini göreceksiniz. Ben sayaç değişkeni 100'e ulaşır. Daha sonra kapanacaktır. Burada neler oluyor? Üzerinden geçelim.
Donanım PWM kütüphanesinin ilgili kısmını içe aktarıyoruz (ile birlikte) zaman modülü) ve yeni bir değişken bildirmek. Ayarlayabiliriz pwm_channel Pi'deki GPIO pinleri 18 ve 19'a sırasıyla karşılık gelen 0 veya 1'e.
hz değeri istediğimiz frekansa ayarlayabiliriz (gerçi sonuçta Pi'nin saat hızıyla sınırlıyız). 60Hz'de herhangi bir PWM titremesi görmemeliyiz. Ancak çok düşük bir değerle (10 gibi) başlayıp yavaş yavaş yukarıya doğru ilerlemek iyi bir fikir olabilir. Bunu yapın ve aslında nabızların gerçekleştiğini görebileceksiniz. Sadece bizim sözümüze güvenmeyin!
Görev döngümüzde çalışıyoruz (Ben) 0'dan 100'e kadar Python for döngüsü kullanma. ayarlayabileceğimizi belirtmekte fayda var. Uyku zamanı Argümanımızı istediğimiz kadar uzatabiliriz; PWM donanımda yönetildiği için, biz programa beklemesini söylediğimiz süre boyunca perde arkasında çalışacaktır.
PWM ile Öğrenecek Daha Çok Şey Var
Tebrikler! İlk PWM programınızı yazdınız. Ancak Raspberry Pi'de sıklıkla olduğu gibi, bu şeylerle yapabileceğiniz çok şey var, özellikle de Raspberry Pi'nizi doğru PWM HAT ile güçlendirirseniz. O yüzden küçük bir LED ile yetinmeyin. Bu yeni gücü motorları kontrol etmek, mesajları kodlamak ve sentezleyici tonları oluşturmak için kullanabilirsiniz. Modülasyon dünyası sizi bekliyor!