Soru:
GPIO'larda PWM kullanarak bir RC alıcısı ile arabirim kurma
Wyatt
2012-09-27 08:29:52 UTC
view on stackexchange narkive permalink

Birkaç gündür mücadele ediyorum ve internette pek konuşamadım. RPi'deki GPIO'lardan biri aracılığıyla RC alıcısının PWM çıkışından OKUMAK istiyorum. "Ciddi" PWM için uygun olmadığı diğer soruları okudum, ancak bunu bir çıktı olarak kullanmayı düşünmüyorum. WiringPi kütüphanesine baktığımda, PWM'yi yazmama izin veren işlevler buldum, ancak genel okumalarda bile GPIO'lardan herhangi bir şey almakta zorlanıyorum. Burada bu eğitici gibi bir şey yapabilmem gerekiyormuş gibi geliyor , ancak hiç şansım olmadı. Bu noktada herhangi bir kütüphanenin sunduklarının ötesinde bir şey mi yapmaya çalışıyorum yoksa bu şeyle arayüz oluşturmak için derleme kodu yazmaya başlamadan önce kaçırdığım aptalca basit bir şey mi var?

Beş yanıtlar:
Avio
2012-09-30 15:59:08 UTC
view on stackexchange narkive permalink

Sorunuza doğrudan cevap veremem, ancak Alex Chamberlain 'in cevabına cevap vermeye çalışabilirim.

Kesin gerçek -Linux'ta bir milisaniyenin altındaki çözünürlüğe kadar zaman yetenekleri mümkündür. Bunu yapmak için, çekirdek kaynaklarına bir yama veya bir dizi yama uygulanmalıdır. Birkaç alıntı yapmak için Ingo Molnar RT-Preempt Patch, Xenomai, RTAI veya ADEOS kullanılabilir. Daha fazla bilgiyi burada, burada ve burada bulabilirsiniz.

Alex Chamberlain
2012-09-27 12:21:15 UTC
view on stackexchange narkive permalink

Mümkün değil. Bunu yapmak için, Linux'ta mümkün olmayan doğru zamanlamaya ihtiyacınız var.

En iyi seçeneğiniz, bunu ayrı bir mikro üzerinde nasıl yapacağınızı ve Raspberry Pi ile SPI veya I2C. Bunun için mevcut bir IC bile olabilir.

veroy
2015-08-18 16:58:29 UTC
view on stackexchange narkive permalink

Bu öğretiyi takip edebilirsiniz: https://www.sparkfun.com/tutorials/348 ve tek yapmanız gereken bu verileri usb aracılığıyla ahududu pi'nize yazmaktır.Mutlu kodlama :)

Raspberry Pi'ye hoş geldiniz! Bu, teorik olarak soruyu cevaplayabilirken, cevabın temel kısımlarını buraya dahil etmek [tercih edilir] (http://meta.stackoverflow.com/q/8259) ve referans için bağlantı sağlayın. Ayrıca arduino'ya yönelik bir eğitim, OP'yi cevaplardan daha fazla soruyla bırakabilir.
WineSoaked
2015-08-18 20:54:33 UTC
view on stackexchange narkive permalink

Gerçek zamanlı olmayan sistemler için PWM sinyallerini okuma konusundaki anlayışım, onları analog voltajlar olarak ele almak olmuştur (doğru, bunu bir RC devresinden geçirin ve ardından voltajı bir analog-dijital dönüştürücü kullanarak okuyun / ADC).

Öneriler: http://www.instructables.com/id/Arduino-RC-Circuit-PWM-to-analog-DC/?ALLSTEPS

Daha fazla mühendislik çalışması, elbette, ancak bir pin değiştirme kesintisi ile PWM darbelerini gerçek zamanlı olarak okumak için bir Arduino'ya cıvatalamaktan daha ucuz: http://www.benripley.com/diy/arduino/ arduino ile pwm sinyalini okumanın üç yolu /

mapt
2019-12-09 15:26:55 UTC
view on stackexchange narkive permalink

Bu, sinyal < 50hz olduğu sürece pwm fq ve dutyCycle'ı okumak için oldukça doğru bir iş yapar:

  #! / usr / bin / python2.7 gpiofrom olarak RPi.GPIO'yu içe aktar tarih saat içe aktarma veri zamanı içe aktarma uykusundan itibaren, timegpio.setmode (gpio.BCM) gpio.setup (2, gpio.IN) global yükselenCountglobal pulseWidthglobal timeStartrisingCount = 0pulseWidth = 0timeStart = 0def edgeDetected (channel): global yükselen zamanStartStart.Gpidth (2): # yükselen kenar yükselenSayaç + = 1 zamanBaşlangıç ​​= zaman () başka: # düşen kenar if (yükselenSayar! = 0): zaman Geçti = zaman () - timeStart # darbe Genişliği ortalama bir darbeWidth = ((pulseWidth * (yükselenSayar- 1)) + timePassed) /risingCountgpio.add_event_detect (2, gpio.BOTH, callback = edgeDetected) True: uyku (1) yazdırırken "PWM = {0} hz, dutyCycle = {1}%". Format (yükselenCount, round (pulseWidth * artanCount * 100,2)) yükselenCount = 0 pulseWidth = 0  

İnanıyorum Daha büyük ortalamalar için uyku süresini artırarak doğruluğu artırabilirsiniz (hz'yi 1 / uyku süresi ile çarpmayı unutmayın).



Bu Soru-Cevap, otomatik olarak İngilizce dilinden çevrilmiştir.Orijinal içerik, dağıtıldığı cc by-sa 3.0 lisansı için teşekkür ettiğimiz stackexchange'ta mevcuttur.
Loading...