Bagaimana Arduino Uno mendukung hingga 12 servos jika hanya memiliki 6 pin PWM digital?

8

Menurut ini :

Perpustakaan Servo mendukung hingga 12 motor di sebagian besar papan Arduino dan 48 di Arduino Mega. Pada board selain Mega, penggunaan library menonaktifkan fungsionalitas analogWrite () (PWM) pada pin 9 dan 10, terlepas dari apakah ada Servo pada pin tersebut. Pada Mega, hingga 12 servo dapat digunakan tanpa mengganggu fungsi PWM; penggunaan 12 hingga 23 motor akan menonaktifkan PWM pada pin 11 dan 12.

Namun, menurut ini :

Digital I / O Pins 14 (dimana 6 menyediakan output PWM)

Jadi bagaimana Uno dapat mengontrol lebih dari 6 servos jika hanya memiliki 6 pin I / O digital yang dapat memberikan output PWM?

pengguna1265
sumber

Jawaban:

4

Meskipun saya belum melihat sumbernya sendiri, dalam situasi seperti ini mereka biasanya menggunakan timer interrupt 1 , yang dalam mode PWM akan dikaitkan dengan pin 9 dan 10. Ini akan menjelaskan mengapa Anda tidak dapat menggunakan modulasi lebar pulsa pada pin-pin itu. Bahkan, Anda dapat menggunakan salah satu dari tiga timer untuk PWM pada pin digital apa pun, meskipun itu tidak sebagus opsi PWM bawaan .


(sumber: bansky.net )

( Sumber )

Gambar di atas secara akurat menjelaskan bagaimana sinyal dikirim ke motor servo. Bentuk gelombang seperti ini mirip dengan PWM standar. Pustaka servo dapat menerjemahkan derajat ke bentuk gelombang yang dapat digunakan IC servo untuk menyesuaikan posisi motor dengan motor dan potensiometernya.

Penguin Anonim
sumber
1
Jadi pada dasarnya mensimulasikan PWM? Apa gunanya pin digital dengan saluran PWM?
user1265
@ user1265 Kurang lebih ... itu menggunakan timer yang menggerakkan PWM. Sejauh titik PWM, IIRC ATmega328 memiliki sirkuit untuk membuat PWM lebih efisien.
Penguin Anonim
2
@ user1265, PWM perangkat keras adalah "gratis", artinya tidak mempengaruhi kinerja program Anda sama sekali (ini hanya mengikat timer, atau setidaknya bagian daripadanya). Melayani rutinitas interupsi untuk emulasi PWM relatif mahal. Namun, dalam hal ini, frekuensi PWM hanya sekitar 50Hz, jadi ini tidak terlalu tragis (Frekuensi standar PWM Arduino adalah 31/62 kHz, melakukan PWM untuk mis. Aplikasi penerangan pada 50Hz mungkin akan agak berkedip-kedip).
microtherion
What is the point of the digital pins with PWM channels then?- Anda bisa mendapatkan frekuensi yang jauh lebih tinggi (hingga 8 MHz) dan siklus tugas yang sangat tepat. Ini tidak mungkin ketika Anda mengandalkan selingan untuk melakukan ini untuk Anda.
Nick Gammon