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?
Jawaban:
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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!
sumber
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.
sumber
Ada layanan web GPIO yang berfungsi penuh yang bisa Anda gunakan untuk menulis plugin sendiri. Tampaknya sudah memiliki dukungan untuk mengendalikan sejumlah servos. Lihat direktori "Konten" mereka untuk banyak gambar juga untuk tata letak papan.
https://bitbucket.org/PaulTechGuy/raspberrypi.dotnet.gpioweb
Tampaknya berada di C # menjalankan Mono di Pi.
sumber