Bir RC servoyu nasıl kontrol edebilirim?


26

Python üzerinden küçük bir RC servoyu (5 V, 500 mA) GPIO pinlerinden kontrol etmek istiyorum .

Donanım

  • Gerekli elektrik bağlantıları nelerdir?
  • Raspberry Pi'ye birden fazla servo bağlayabilir miyim?
  • Mevcut herhangi bir sınırlama var mı? Çıkış pimini bir transistörle tamponlamak zorunda mıyım?
  • Servoyu doğrudan Raspberry Pi'den çalıştırabilir miyim, yoksa harici bir güç kaynağı kullanmalı mıyım? Servisteki sarsıntılı güç çekişini düzeltmek için kapasitöre ihtiyacım var mı?

Yazılım

  • Hangi yazılıma / Python koduna ihtiyacım var? 20 ms darbeye ihtiyacım olduğunu biliyorum, bunu nasıl başarabilirim?
  • Raspberry Pi'yi bu şekilde kullanmaktan ne tür bir CPU yükü bekleyebilirim?

Bu başlamanıza yardımcı olabilecek benzer bir soru: raspberrypi.stackexchange.com/questions/27/…
Andrew Larsson

Yanıtlar:


9

Gereken elektrik bağlantıları sahip olduğunuz servise bağlıdır. GPIO 3.3 V sağlar ve 16 mA kadar bir transistörü ile tampon gerekir, böylece servo için yetersizdir.

Genişleme başlığında 8 GPIO pimi vardır , ancak diğer pimler toplamda 17 GPIO pini verecek şekilde yeniden yapılandırılabilir. Daha fazlasına ihtiyacınız olursa, bir çeşit çoklayıcı eklemek zorunda kalacaksınız.

Kesin olarak zamanlanmış sinyaller almak, Ahududu Pi'de veya gerçek zamanlı olmayan herhangi bir işletim sisteminde zorlaşacaktır, çünkü kesintiler ve görev anahtarları her an gerçekleşebilir. Doğru zamanlanmış sinyaller sağlamak için muhtemelen harici elektroniklere ihtiyacınız olacak.

Andrew sizi bir yazılıma yönlendirdi. CPU yükü ne yaptığınıza bağlı olarak değişebilir, ancak GPIO'nun kendisi herhangi bir yük eklemez.


2
Öte yandan - 20 ms, Ahududu Pi'nin CPU terimleri için bile, UZUN bir zamandır. RC servolar için zaman hassasiyeti konusunda fazla endişelenmem.

2
@Tibor: 20ms, en.wikipedia.org/wiki/Servo_control#Pulse_duration genişliğini değil, servo bakliyat süresidir . Çözünürlük gereksinimi bundan çok daha kötü - 8 bit çözünürlük elde etmek için 2 milisaniyede 256 adım gerekir , yani ~ 8us.
Martin Thompson,

8

Ahududu Pi'nizde gerçek zamanlı bir işletim sistemi kullanıyorsanız, bu gerçekten mümkün. Diğerlerinin dediği gibi, servoların harici bir güç kaynağına ihtiyacınız olacak ancak bunun dışında başka bir ek donanıma ihtiyacınız yok.

Eğer Xenomai (Linux için gerçek zamanlı yama) kullanıyorsanız, tamamen tanıdık bir Linux sistemi çalıştırabilir, ancak gerçek zamanlı yetenekler ekleyebilirsiniz.

Ahududu Pi'den servoları kontrol etmek amacıyla küçük bir C kütüphanesi yazdım. Aynı anda 3 servoyu kontrol etmeyi denedim, ancak bunun neden daha fazla çalışmaması gerektiğine dair hiçbir neden yok.

Küçük kütüphanemi burada bulabilirsiniz: https://github.com/simonfi/pi-servo Bunun için bir Python sarmalayıcısı eklemek önemsiz olmalı. Ahududu Pi için Xenomai burada bulabilirsiniz: http://powet.eu/2012/07/25/raspberry-pi-xenomai/

Üç servo için ihtiyaç duyulan sinyalleri üretmek temel olarak ihmal edilebilir miktarda işlemci harcıyor. Henüz üçten fazla test etmedim.


5

Bir Linux Çekirdek sürücüsü kullanmak sakıncası yoksa, servoları bir karakter aygıtı olarak gösteren servoblaster vardır.

https://github.com/richardghirst/PiBits

Servoların kullanımı için tüm gpio pinlerini kullanmayan yeni bir versiyonunu seçtim. Şu anda kontrol etmek için IPGamePad kullanarak robot kulübümüz için oluşturduğum ve demonte ettiğim küçük servo tahrikli bir robot üzerinde kullanıyorum.

https://github.com/jronald/PiBits

Ayrıca, RPI üzerinden hizmet veren gücü istemiyor, bunun yerine ayrı bir güç kaynağı kullanıyorsunuz. Tabii ki bu zemini birbirine bağlaman gerekiyor. RPI servoya çıktığından, voltaj değişimi gerekmez, ancak işleri yanlış bağlamama konusunda çok dikkatli olmak isteyeceksiniz.


Bilginize - Richartghrist repo korunmuş gözüküyor, jronald çatal ise modası geçmiş ve kırılmış görünüyor. Ayrıca, nasıl okuma tavsiye tüm görmezden ama ilk iki servo kumandalar ve takma Servoblaster
cwd

3

Servolar genellikle PWM sinyalleri kullanılarak kontrol edilir; GPIO'ya PWM çıkışı olarak başvurmalısınız .

Çipte PWM desteği var, bu yüzden gelecekte kullanabilmeliyiz. Temel olarak, tüm yazılım donanıma belirli bir frekansta bakliyat üretmesini söyler. Bazı insanlar I2C üzerindeki harici PWM kontrol cihazlarını kullanarak başarı elde etmişlerdir.


3

Pi'nin tek başına kullanamayacağı servoları ve diğer yükleri kontrol etmek için kullanılan gertboard adı verilen ahududu pi için kullanılabilen bir uzatma kartı vardır .


Ayrıca, bu ürünün popülaritesi nedeniyle, ahududu pi ve aksesuarlarını sunan birçok sitede satıldığına inanıyorum.
Brandon Bailey

3

Pi'de işlerin nasıl yapılacağına dair bilgi, bu sorunun sorulmasından bu yana geçen yıllarda oldukça gelişti.

Pi'nin gpios'larında harici donanım kullanmadan donanım zamanlamalı PWM / Servo darbeleri oluşturmanın en az dört yolu vardır.

Bunu yapmak için çekirdek modüllerinin kullanımı hemen hemen kullanım dışıdır, Aşağıdaki userland çözümleri mevcuttur.

  • Kendi pigpio'm , Gpios 0-31'in herhangi birinde bağımsız olarak Servo ve genel PWM darbeleri üretecek (C, Python, soket, boru).
  • Servoblaster , 21 gpios'a (boru) kadar bağımsız olarak Servo ve genel PWM darbeleri üretecektir.
  • RPIO , gpios 0-31'in herhangi birinde (Python) bağımsız olarak Servo ve genel PWM darbeleri üretecektir.
  • Servoblaster'dan (boru) türetilen pi-blaster

2

Bir servoyu doğru bir şekilde kontrol etmek için Linux çalıştırırken, çıktıları yeterince iyi zamanlayabiliyorsanız şaşırırdım.

Darbe, 2 milisaniye aralığında kontrol edilmelidir. Zamanlayıcı kene 100us'luk bir çözünürlüğe sahip olsa bile (onu zorlayan - genellikle 10ms), çözebileceğiniz yalnızca 20 adım. Ve bu görev değiştirme ile ortaya çıkan jitter düşünmeden.

Başka bir zamanlayıcı kullanılabilir varsa, potansiyel bir yazabilirsiniz çok 's zamanlama doğru olsun bile OS önleme amaçlı olabilir düşük seviyeli sürücü. Eğlenceli gibi görünüyor!


2

Bir servoyu doğrudan GPIO portundan çalıştırmaya çalışmanın zor olacağını ve eğer mümkünse çok fazla CPU ek yükü yaratacağını düşünüyorum. Bir USB servo kontrol cihazı kullanıyorum ve harika çalışıyor ve kurulumu biraz zor olsa da neredeyse hiç CPU kullanmıyor. Sahip olduğum kanal 24 kanal, ancak 6 kanallı bir sürüm yapıyorlar. Ayrıca, çok fazla servo kontrol etmeniz gerekmiyorsa, seri kullanan diğer üreticilerin 2 ve 4 kanal denetleyicilerini USB'den daha kolay ve ucuz buldum.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.