Bisakah saya menggunakan GPIO sebagai output modulasi lebar-pulsa ?
Jika demikian, bagaimana cara saya melakukannya dan berapa banyak output PWM bersamaan yang dapat saya miliki?
Bisakah saya menggunakan GPIO sebagai output modulasi lebar-pulsa ?
Jika demikian, bagaimana cara saya melakukannya dan berapa banyak output PWM bersamaan yang dapat saya miliki?
Jawaban:
Seperti yang disarankan oleh Alex Chamberlain , pustaka WiringPi tampaknya mendukung output PWM perangkat keras pada satu atau dua pin GPIO tergantung pada model, dan PWM perangkat lunak pada salah satu pin GPIO lainnya. Sementara itu perpustakaan RPIO.PWM melakukan PWM oleh DMA pada pin GPIO apa pun. Secara efektif ini adalah setengah jalan antara perangkat keras dan perangkat lunak PWM, memberikan resolusi waktu 1 μs dibandingkan dengan 100 μs dengan Perangkat Lunak PWM WiringPi [1] .
Yang mana yang cocok untuk aplikasi Anda tergantung pada berapa banyak output PWM yang Anda butuhkan dan kinerja apa yang Anda inginkan dari output tersebut.
Jika aplikasi Anda toleran terhadap resolusi timing rendah dan jitter tinggi, maka Anda dapat menggunakan perangkat lunak atau loop timing berbantuan DMA. Jika Anda ingin presisi tinggi / PWM jitter yang lebih rendah maka Anda mungkin memerlukan bantuan perangkat keras.
Jika Anda ingin mem-flash sekelompok LED dengan irama manusia yang terlihat berbeda (10's dari hertz) dengan persyaratan respons real-time lunak maka loop perangkat lunak dapat menangani PWM sebanyak yang Anda miliki dengan pin GPIO.
Jika Anda ingin mengendalikan motor servo dengan persyaratan respons waktu nyata yang keras, maka Anda harus menggunakan PWM perangkat keras. Bahkan kemudian Anda mungkin memiliki masalah memastikan respon real-time untuk loop servo yang mengikat input encoder ke output PWM.
Servo loop yang stabil perlu membaca encoders dengan kecepatan reguler (jitter rendah), menuliskan nilai-nilai output PWM yang direvisi pada laju reguler dan latensi di antaranya harus diperbaiki (keseluruhan jitter rendah). Jika Anda tidak dapat melakukan ini, maka Anda harus menjalankan (soft tune) motor Anda untuk mencegahnya menjadi tidak stabil di bawah beban. Ini sulit dilakukan dengan sistem operasi multi-tasking tanpa dukungan level rendah.
Jika Anda perlu menjalankan lebih banyak servo loop daripada yang Anda miliki dengan output PWM perangkat keras, maka Anda mungkin perlu melepasnya ke perangkat lain untuk memastikan kinerja real-time yang sulit, menurunkan Raspberry Pi Anda menjadi supervisor real-time yang lembut .
Satu opsi, akan menjadi seperti Driver Adafruit 16-Channel 12-bit PWM / Servo - antarmuka I²C - PCA9685 yang memungkinkan Anda untuk mengontrol 16 output PWM hanya dengan beberapa pin GPIO untuk bus I²C. Untuk contoh penggunaannya, lihat I²C 16 Channel PWM / Servo Breakout - Postingan kerja di forum Raspberry Pi.
1. Terima kasih kepada dm76 untuk sarannya, namun heather mengatakan bahwa RPIO.PWM mungkin tidak lagi berfungsi untuk model pi yang lebih baru.
Ya, ada satu output PWM perangkat keras pada Raspberry Pi, yang terhubung ke P1-12 (GPIO18). Selanjutnya, output PWM dapat ditambahkan menggunakan antarmuka I²C atau SPI ; beberapa orang telah sukses dengan ini ( posting forum ).
Anda dapat menggunakan perpustakaan WiringPi untuk mengontrol pin PWM; Anda bisa melihat kode untuk menghindari menyertakan seluruh perpustakaan.
Raspberry Pi tidak cocok untuk PWM perangkat lunak serius karena Linux bukan sistem operasi waktu-nyata.
Pis terbaru memiliki dua saluran PWM perangkat keras. Selain itu, pulsa PWM berwaktu perangkat keras dapat dihasilkan secara independen pada semua GPIO yang terhubung ke header ekspansi 40 pin.
Dalam praktiknya ini berarti ada dua saluran PWM yang sangat akurat dan semua GPIO lainnya mungkin memiliki PWM gaya Arduino (800 Hz, 0 off - 255 sepenuhnya aktif).
Misalnya servoblaster dan pigpio saya , dll.
Bukan OS real-time, tetapi RISC OS untuk Raspberry Pi adalah multitasking yang kooperatif, sehingga Anda dapat dengan mudah menjalankan aplikasi yang memiliki 100% CPU sehingga Anda dapat mengatur timing Anda dengan lebih baik. Hanya saja, jangan berharap untuk melakukan hal lain selain kode Anda sendiri.
Saya telah menemukan perpustakaan ini ( pi-blaster ) yang mengklaim sebagai "sangat efisien: tidak menggunakan CPU dan memberikan pulsa yang sangat stabil."
Saya belum mengujinya, tetapi akan memperbarui segera setelah saya lakukan (mungkin hari ini)