PWM: a pin that can only be on or off, faking an in-between
Ya da tüm dersleri gör.
- 503parça tezgahta
- 44kart şu an çalışıyor
- 1.00xgerçek zamanlı, her kartta
Dijital bir çıkış pininin tam olarak iki durumu vardır. Bir LED'i yarı parlaklıkta yakmak için 2.5 V'ta duramaz. Darbe genişlik modülasyonu aynı etkiyi başka yolla elde eder: pini yeterince hızlı aç ve kapat ve her döngünün ne kadarını açık geçirdiğini değiştir; aşağı akıştaki, anahtarlama kadar hızlı tepki veremeyen her şey yalnızca ortalamayı görür ve bu da gerçek bir ara gerilim gibi davranır.
Yukarıdaki devre, Arduino Uno'nun hazır fade programıdır, gerçekten çalışıyor. Pin 9'daki analogWrite() timer 1'i 64 ön bölücülü 8 bit faz düzeltmeli PWM'e sokar; bu, 16 MHz bölü 64 çarpı 510, yaklaşık 490 Hz eder. Bu sayı bir tahmin değildir; zamanlayıcı donanımının o ön bölücü ve modda gerçekte ürettiği sayıdır ve ayarlandıktan sonra zamanlayıcı görev oranını kendi başına tutar. Kod yalnızca karşılaştırma yazmacını saniyede otuz kez değiştirir, (1 - kosinüs) bölü 2'nin bir döngüsü biçimli 64 girişli bir tabloda ilerler; ışığın düz bir çizgide yükselmek yerine nefes alıyor gibi görünmesinin nedeni budur: göz parlaklığı kabaca logaritmik okur, bu yüzden doğrusal bir rampa üst ucu aceleyle geçiyor gibi görünür.
Donanım PWM'i budur: zamanlayıcı yapılandırıldığında CPU güncellemeler arasında başka bir şey yapmakta özgürdür ve kod kısa süre meşgul olsa bile pindeki dalga biçimi asla aksamaz. Arkasında zamanlayıcı olmayan bir pindeki yedek olan yazılım PWM'inde ise CPU pini bir programa göre kendisi çevirir; bu, frekansla orantılı CPU zamanı harcar ve işlemciye yanlış anda ihtiyaç duyulursa titreşebilir.
LED'de gördüğün şey anlık açma kapama da değildir. Mokxi'nin LED probu kendi parlaklığının, zaman sabiti 8 milisaniyeye yakın olan kısa ömürlü bir ortalamasıdır; bu, gözün kendi tepkisinin bir değişikliğe verdiği sürenin aralığındadır. 490 Hz'de her PWM döngüsü yaklaşık 2 milisaniyedir, bu ortalamanın izleyebileceğinden rahatça hızlıdır; bu yüzden LED döngü başına bir kez titremek yerine görev oranını birkaç yüzde içinde bildirir. Bu, bir bulanıklığın yerini tutan bir çizim hilesi değildir; gerçek bir retinanın yaptığı aynı ortalamadır ve aynı şekilde hesaplanır.
Devreyi aç ve nefesin ritmine oturmasını izle. Sonra yapılacak karşılaştırma, aynı nefesi iki yolla sunan ESP32-C3'tedir: fade bunu yazılımla bit-bang yapar ve pwmfade onu altı sabit pin yerine herhangi bir pinde, çipin kendi PWM denetleyicisi LEDC'ye bırakır. İkisi de kart simülatör sayfalarında.
Bunu gerçekten kur
Düzenleyiciyi aç, bir değeri değiştir ve sayının onunla birlikte oynadığını izle. Kurulacak bir şey yok ve hesap gerekmez.