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


10

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?

Réponses:


8

La bibliothèque Servo n'utilise pas PWM. Lorsque vous appelez write (), il calcule une largeur d'impulsion en microsecondes et la stocke dans un tableau global. Ensuite, il y a un seul temporisateur qui déclenche régulièrement une interruption qui modifie les signaux de sortie en fonction de la largeur d'impulsion souhaitée de chaque canal.

Vous pouvez trouver le code source ci-dessous: Lien Github


1
Donc, il simule essentiellement PWM? Quel est alors l'intérêt des broches numériques avec des canaux PWM?
user41158

2
En général, les impulsions d'asservissement durent environ 1 ms. Par conséquent, ils doivent être pilotés par des fréquences autour de 1 kHz, ce qui est très facile à générer par logiciel sur n'importe quelle sortie avec un micro fonctionnant à plusieurs MHz. Les sorties AVR PWM sont générées par du matériel dédié et peuvent atteindre la fréquence du processeur mais le nombre de canaux est limité. Je suppose que les auteurs du module Servo ont décidé d'utiliser une seule minuterie afin de gérer autant de canaux que de broches et d'économiser le matériel PWM pour d'autres utilisations.
Grapsus

1
Le PWM des sorties Arduino est destiné aux sorties à puissance variable avec des rapports cycliques compris entre 0 et 100%. La commande "PWM" de style RC a une plage de cycle de service très limitée - 1000 us à 50 Hz soit 5%, 2000 us à 50 Hz est 10%. Considérez le RC PWM comme un "train d'impulsions" plutôt que comme un "PWM" traditionnel.
Jon Watte

@ user41158 Si vous avez un temps CPU illimité, vous pouvez utiliser n'importe quelle sortie numérique comme PWM et les contrôler dans le logiciel, pas seulement PWM, en théorie, vous pouvez créer n'importe quel système de communication numérique en écrivant un programme et en basculant ces sorties, cela s'appelle " bit- cogner ". Mais en pratique, le temps CPU n'est pas illimité et il est préférable de résoudre les tâches matérielles par matériel. Pour la servocommande, la fréquence PWM est assez faible, il est donc pratique de bang-bang le PWM dans le logiciel pour créer des sorties supplémentaires.
比尔 盖子

2

Les 6 broches PWM utilisent l'UART intégré sur l'ATmega328P pour produire leur sortie. Cela rend les impulsions très rapides pour une sortie "analogique" de meilleure qualité. Parce que les servos communiquent à une vitesse suffisamment lente, ils peuvent être pilotés à l'aide d'interruptions logicielles. Les interruptions logicielles s'éloignent du code que vous exécutez et exécutent le code inclus dans la bibliothèque de servomoteurs. Ce code utilise des moyens standard pour changer l'état des broches. En le faisant en utilisant des interruptions plutôt qu'en utilisant l'UART, vous perdez du temps de traitement mais gagnez la capacité de piloter plus de servos.


Pouvez-vous expliquer (ou créer un lien vers) plus? Comment l'UART est-il utilisé pour PWM?
Martin Thompson

Je pense qu'il serait préférable de dire que la bibliothèque PWM peut utiliser les broches d'E / S UART si vous le souhaitez. la bibliothèque PWM n'utilisera pas l'UART elle-même, mais les broches utilisées par l'UART peuvent également être utilisées comme E / S numériques standard si elles ne sont pas requises pour l'UART.
Peter Bennett
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.