Comment l'Arduino Uno peut-il prendre en charge jusqu'à 12 servos s'il n'a que 6 broches PWM numériques?

8

Selon ceci :

La bibliothèque Servo prend en charge jusqu'à 12 moteurs sur la plupart des cartes Arduino et 48 sur l'Arduino Mega. Sur les cartes autres que la Mega, l'utilisation de la bibliothèque désactive la fonctionnalité analogWrite () (PWM) sur les broches 9 et 10, qu'il y ait ou non un servo sur ces broches. Sur le Mega, jusqu'à 12 servos peuvent être utilisés sans interférer avec la fonctionnalité PWM; l'utilisation de 12 à 23 moteurs désactivera PWM sur les broches 11 et 12.

Cependant, selon cela :

Broches d'E / S numériques 14 (dont 6 fournissent une sortie PWM)

Alors, comment l'Uno peut-il contrôler plus de 6 servos s'il n'a que 6 broches d'E / S numériques pouvant fournir une sortie PWM?

user1265
la source

Réponses:

4

Bien que je n'aie pas regardé la source moi-même, dans ces types de situations, ils utilisent généralement le temporisateur d'interruption 1 , qui en mode PWM aurait été associé aux broches 9 et 10. Cela expliquerait pourquoi vous ne pouvez pas utiliser la modulation de largeur d'impulsion sur ces broches. En fait, vous pouvez utiliser l'un des trois temporisateurs pour PWM sur n'importe quelle broche numérique, bien qu'il ne soit pas aussi bon que les options PWM intégrées .


(source: bansky.net )

( Source )

L'image ci-dessus décrit avec précision la façon dont les signaux sont envoyés au servomoteur. Une telle forme d'onde est similaire à un PWM standard. La bibliothèque de servomoteurs peut traduire un degré en une forme d'onde que le circuit intégré du servomoteur pourra utiliser pour régler la position du moteur avec son moteur et son potentiomètre.

Pingouin anonyme
la source
1
Donc, il simule essentiellement PWM? Quel est alors l'intérêt des broches numériques avec des canaux PWM?
user1265
@ user1265 Plus ou moins ... il utilise les minuteries qui pilotent PWM. En ce qui concerne le PWM, IIRC l'ATmega328 a des circuits pour rendre le PWM plus efficace.
Pingouin anonyme
2
@ user1265, le PWM matériel est "gratuit", c'est-à-dire qu'il n'affecte pas du tout les performances du reste de votre programme (il bloque simplement une minuterie, ou au moins une partie de celle-ci). La maintenance des routines d'interruption pour PWM émulé est relativement coûteuse. Cependant, dans ce cas, la fréquence PWM n'est que d'environ 50 Hz, ce n'est donc pas trop tragique (la fréquence Arduino PWM standard est de 31 / 62kHz, faire du PWM pour, par exemple, des applications d'éclairage à 50Hz serait probablement plutôt flickery).
microtherion
What is the point of the digital pins with PWM channels then?- vous pouvez obtenir des fréquences beaucoup plus élevées (jusqu'à 8 MHz) et des cycles d'utilisation très précis. Ce n'est pas possible lorsque vous comptez sur une interruption pour le faire pour vous.
Nick Gammon