Bagaimana saya bisa mengendalikan servo RC?


26

Saya ingin mengontrol servo RC kecil (5 V, 500 mA) dari pin GPIO melalui Python .

Perangkat keras

  • Apa saja sambungan listrik yang dibutuhkan?
  • Bisakah saya menghubungkan beberapa servos ke Raspberry Pi?
  • Apakah ada batasan saat ini? Apakah saya perlu buffer pin output dengan transistor?
  • Dapatkah saya menyalakan servo langsung dari Raspberry Pi, atau haruskah saya menggunakan catu daya eksternal? Apakah saya perlu kapasitor untuk melicinkan imbang daya servo?

Perangkat lunak

  • Perangkat lunak / kode Python apa yang saya butuhkan? Saya tahu saya membutuhkan pulsa 20 ms, bagaimana saya bisa mencapai ini?
  • Seperti apa beban CPU yang dapat saya harapkan dari penggunaan Raspberry Pi dengan cara ini?

Ini adalah pertanyaan serupa yang dapat membantu Anda memulai: raspberrypi.stackexchange.com/questions/27/…
Andrew Larsson

Jawaban:


9

Koneksi listrik yang dibutuhkan tergantung pada servo yang Anda miliki. The GPIO menyediakan 3,3 V dan sampai 16 mA , yang tidak cukup untuk servo Anda, sehingga Anda akan perlu untuk penyangga dengan transistor.

Ada 8 pin GPIO pada header ekspansi , meskipun pin lain dapat dikonfigurasi ulang untuk memberikan hingga 17 pin GPIO secara total. Jika Anda membutuhkan lebih banyak, Anda harus menambahkan semacam multiplexer.

Mendapatkan sinyal yang tepat waktu akan sulit pada Raspberry Pi, atau pada OS non-waktu nyata, karena interupsi dan pengalihan tugas dapat terjadi kapan saja. Anda mungkin akan membutuhkan elektronik eksternal untuk memberikan sinyal dengan waktu yang akurat.

Andrew telah mengarahkan Anda ke beberapa perangkat lunak. Beban CPU akan tergantung pada apa yang Anda lakukan, tetapi GPIO itu sendiri tidak menambahkan beban apa pun.


2
Di sisi lain - 20 ms adalah waktu yang PANJANG, bahkan untuk istilah CPU Raspberry Pi. Saya tidak akan terlalu khawatir tentang ketepatan waktu untuk servo RC.

2
@Tibor: 20ms adalah periode pulsa servo, bukan lebarnya en.wikipedia.org/wiki/Servo_control#Pulse_duration . Dan persyaratan resolusi jauh lebih buruk dari itu - untuk mendapatkan 8 bit resolusi, Anda perlu 256 langkah dalam 2 milidetik, jadi ~ 8us.
Martin Thompson

8

Jika Anda menjalankan sistem operasi waktu nyata pada Raspberry Pi Anda, ini memang mungkin. Seperti yang telah dikatakan orang lain, Anda akan membutuhkan sumber daya eksternal untuk servos tetapi kecuali untuk itu Anda tidak memerlukan perangkat keras tambahan lainnya.

Jika Anda menjalankan Xenomai (tambalan waktu nyata untuk Linux), Anda dapat menjalankan sistem Linux yang benar-benar akrab, tetapi dengan menambahkan kemampuan waktu nyata.

Saya telah menulis perpustakaan C kecil untuk tujuan mengendalikan servos dari Raspberry Pi. Saya telah mencoba mengendalikan 3 servos secara bersamaan dengan itu, tetapi benar-benar tidak ada alasan mengapa itu tidak bekerja dengan lebih banyak.

Anda dapat menemukan perpustakaan kecil saya di sini: https://github.com/simonfi/pi-servo Menambahkan pembungkus Python untuk itu harus sepele. Xenomai untuk Raspberry Pi dapat ditemukan di sini: http://powet.eu/2012/07/25/raspberry-pi-xenomai/

Menghasilkan sinyal yang dibutuhkan untuk tiga servo pada dasarnya mengkonsumsi jumlah cpu yang dapat diabaikan. Saya belum menguji dengan lebih dari tiga.


5

Jika Anda tidak keberatan menggunakan driver Kernel Linux ada servoblaster yang mengekspos servos sebagai perangkat char.

https://github.com/richardghirst/PiBits

Saya telah bercabang versi baru yang tidak mengkonsumsi semua pin gpio untuk digunakan servos. Saya saat ini menggunakan seperti pada robot servo kecil yang saya buat dan demo untuk klub robot kami menggunakan IPGamePad untuk mengendalikannya.

https://github.com/jronald/PiBits

Juga, Anda benar-benar tidak ingin daya yang servos melalui RPI tetapi gunakan catu daya terpisah. Tentu saja Anda harus mengikat alasan itu bersama-sama. Karena output RPI ke servo tidak diperlukan pengalihan tegangan, tetapi Anda harus sangat berhati-hati untuk tidak melakukan hal yang salah.


fyi - repo orang kaya nampaknya telah dipertahankan sementara garpu jronald tampaknya sudah ketinggalan zaman dan rusak. Juga, saya sarankan membaca cara mengabaikan semua kecuali dua kontrol servo pertama dan Menginstal Servoblaster
cwd

3

Servos umumnya dikendalikan menggunakan sinyal PWM; Anda harus merujuk ke GPIO sebagai output PWM .

Ada dukungan PWM pada chip, jadi kita harus dapat menggunakannya di masa depan. Pada dasarnya, semua perangkat lunak tidak memberitahu perangkat keras untuk menghasilkan pulsa pada frekuensi tertentu. Beberapa orang telah sukses menggunakan pengendali PWM eksternal melalui I2C.


3

Ada papan ekstensi yang tersedia untuk pi raspberry yang disebut gertboard yang digunakan untuk mengontrol servos dan beban lain yang tidak dapat dikendarai Pi sendiri.


Saya juga harus menambahkan bahwa karena popularitas produk ini saya percaya itu terjual habis di sebagian besar situs yang menawarkan pi raspberry dan aksesoris.
Brandon Bailey

3

Pengetahuan tentang bagaimana melakukan hal-hal pada Pi telah meningkat cukup banyak di tahun-tahun sejak pertanyaan ini diajukan.

Setidaknya ada empat cara untuk menghasilkan pulsa PWM / Servo berwaktu perangkat keras pada gpios Pi tanpa menggunakan perangkat keras eksternal.

Penggunaan modul kernel untuk melakukan hal ini sudah cukup usang, Solusi pengguna berikut tersedia.

  • Pigpio saya sendiri akan menghasilkan pulsa Servo dan PWM umum secara independen pada setiap gpios 0-31 (C, Python, soket, pipa).
  • Servoblaster akan menghasilkan pulsa Servo dan PWM umum secara mandiri hingga 21 gpios (pipa).
  • RPIO akan menghasilkan pulsa Servo dan PWM umum secara independen pada gpios 0-31 (Python).
  • pi-blaster yang berasal dari Servoblaster (pipa)

2

Saya akan terkejut jika Anda dapat mengatur waktu output dengan cukup baik saat menjalankan Linux untuk mengontrol servo secara akurat.

Denyut nadi harus dikontrol dalam rentang 2 milidetik. Bahkan jika tick scheduler memiliki resolusi 100us (yang mendorongnya - biasanya 10ms), itu hanya 20 langkah yang bisa Anda selesaikan. Dan itu tanpa mempertimbangkan jitter yang diperkenalkan oleh pengalihan tugas.

Jika ada pengatur waktu lain yang tersedia, Anda berpotensi menulis driver tingkat sangat rendah yang dapat mencegah OS bahkan untuk mendapatkan ketepatan waktu. Terdengar menyenangkan!


2

Saya berpikir bahwa mencoba menjalankan servo langsung dari port GPIO akan sulit dan menyebabkan banyak overhead CPU jika itu mungkin. Saya menggunakan pengontrol servo USB dan berfungsi dengan baik dan hampir tidak menggunakan CPU, meskipun agak sulit untuk diatur. Yang saya miliki adalah 24 saluran, tetapi mereka membuat versi 6 saluran. Saya juga melihat 2 dan 4 pengontrol saluran dari vendor lain yang menggunakan serial yang akan lebih mudah dan lebih murah daripada USB jika Anda tidak perlu mengontrol begitu banyak servos.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.