GPIO'yu darbe genişlik modülasyonu çıkışı olarak kullanabilir miyim ?
Öyleyse, bunu nasıl yapacağım ve kaç tane eş zamanlı, farklı PWM çıkışına sahip olabilirim?
GPIO'yu darbe genişlik modülasyonu çıkışı olarak kullanabilir miyim ?
Öyleyse, bunu nasıl yapacağım ve kaç tane eş zamanlı, farklı PWM çıkışına sahip olabilirim?
Yanıtlar:
Alex Chamberlain tarafından önerildiği gibi , WiringPi kütüphanesi, modele bağlı olarak bir veya iki GPIO pininde donanım PWM çıkışını ve diğer GPIO pinlerinden herhangi birinde PWM yazılımını desteklemektedir . Bu arada RPIO.PWM kütüphanesi herhangi bir GPIO pimi üzerinde DMA tarafından PWM yapar . Bu, WiringPi's Software PWM [1] ile 100 µs ile karşılaştırıldığında 1 µs zamanlama çözünürlüğü sağlayan, donanım ve yazılım PWM arasındaki yarı yoldur .
Bunlardan hangisinin uygulamalarınız için uygun olduğu, kaç PWM çıkışına ihtiyacınız olduğuna ve bu çıkışlardan hangi performansta olmasını istediğinize bağlıdır.
Uygulamanız düşük zamanlama çözünürlüğüne ve yüksek titreşime toleranslıysa, bir yazılım veya DMA destekli zamanlama döngüsü kullanabilirsiniz. Daha yüksek hassasiyet / daha düşük jitter PWM istiyorsanız, donanım desteğine ihtiyacınız olabilir.
Yumuşak gerçek zamanlı yanıt gereklilikleri olan farklı insan görünür bölgeleri (hertz'un 10'u) ile birlikte bir grup LED'i yakmak istiyorsanız , yazılım döngüsü GPIO pinleriniz kadar çok PWM'leri kullanabilir.
Gerçek zamanlı yanıt gereklilikleri olan bir servo motoru kontrol etmek istiyorsanız, donanım PWM kullanmanız gerekecektir. O zaman bile, enkoder girişini PWM çıkışına bağlayan servo döngüsü için gerçek zamanlı bir cevap sağlamada problem yaşayabilirsiniz.
Sabit bir servo döngüsünün enkoderleri düzenli bir oranda (düşük titreşimli) okuması, revize edilmiş PWM çıkış değerlerini düzenli bir oranda yazması gerekir ve bunlar arasındaki gecikme sabit olmalıdır (genel olarak düşük titreşimli). Bunu yapamazsanız, yük altında dengesiz hale gelmesini önlemek için motorunuzu zayıflatmanız (yumuşak ayar) yapmanız gerekir. Düşük seviye desteği olmayan çoklu görevli bir işletim sistemiyle yapmak zordur.
Donanım PWM çıkışlarına sahip olduğunuzdan daha fazla servo döngüsü çalıştırmanız gerekiyorsa, zor gerçek zamanlı performans sağlamak için Raspberry Pi'nizi yumuşak bir gerçek zamanlı süpervizör olarak atamak için muhtemelen onları başka bir cihaza boşaltmanız gerekecektir .
Bir seçenek, Adafruit 16-Kanallı 12-bit PWM / Servo Sürücü - I²C Arabirimi - PCA9685 gibi bir şey olabilir; bu, 16 PWM çıkışını I²C veri yolu için sadece birkaç pin GPIO ile kontrol etmenize izin verir. Kullanımına ilişkin bir örnek olarak, Raspberry Pi forumlarında I²C 16 Kanal PWM / Servo Breakout - Working post'a bakın.
1. Öneri için dm76 sayesinde , ancak heather RPIO.PWM'nin daha yeni pi modelleri için çalışmayabileceğini söylüyor.
Evet, Raspberry Pi'de P1-12'ye (GPIO18) bağlı bir donanım PWM çıkışı var. Ayrıca, PWM çıkışları bir I²C veya SPI arayüzü kullanılarak eklenebilir ; bazı insanlar bu konuda başarılı olmuşlardır ( forum mesajı ).
PWM pinini kontrol etmek için WiringPi kütüphanesini kullanabilirsiniz ; kütüphanenin tamamını dahil etmekten kaçınmak için koda bakabilirsiniz.
Raspberry Pi, Linux gerçek zamanlı bir işletim sistemi olmadığı için herhangi bir ciddi yazılım PWM için uygun değildir.
Son Pis'in iki donanım PWM kanalı var. Ek olarak, donanım zamanlamalı PWM darbeleri, 40 pinli genişletme başlığına bağlı tüm GPIO'larda bağımsız olarak üretilebilir.
Uygulamada bu, iki tane yüksek hassasiyetli PWM kanalı olduğu ve diğer tüm GPIO'ların Arduino stili PWM'ye sahip olabileceği anlamına gelir (800 Hz, 0 kapalı - 255 tamamen açık).
Örneğin servoblaster ve domuzcuklarım vb.
Tam olarak gerçek zamanlı bir işletim sistemi değil, ancak Raspberry Pi için RISC işletim sistemi işbirlikçi çoklu görevlerdir, böylece zamanlamalarınızı daha iyi yönetebilmeniz için% 100 CPU'ya sahip bir uygulamayı kolayca çalıştırabilirsiniz. Sadece kendi kodunuz dışında başka bir şey yapmayı beklemeyin.
"Son derece verimli: CPU'yu kullanmıyor ve çok kararlı darbeler veriyor" diyen bu kitaplığı ( pi-blaster ) buldum .
Henüz test etmedim, ancak en kısa sürede güncellenecektir (muhtemelen bugün)