¿Cómo puede Arduino Uno admitir hasta 12 servos si solo tiene 6 pines PWM digitales?

7

Según esto :

  

La biblioteca Servo admite hasta 12 motores en la mayoría de las placas Arduino y   48 en el Arduino Mega. En tableros distintos al mega, uso de la   la biblioteca deshabilita la funcionalidad analogWrite () (PWM) en los pines 9 y 10,   Si hay o no un Servo en esos pines. En la mega, hasta 12.   Los servos se pueden usar sin interferir con la funcionalidad PWM; uso de   12 a 23 motores desactivarán PWM en los pines 11 y 12.

Sin embargo, de acuerdo con esto :

  

Pines de E / S digitales 14 (de los cuales 6 proporcionan salida PWM)

Entonces, ¿cómo puede el Uno controlar más de 6 servos si solo tiene 6 pines de E / S digitales que pueden proporcionar salida PWM?

    
pregunta user41158

2 respuestas

6

La biblioteca Servo no usa PWM. Cuando llama a write () , calcula el ancho de un pulso en microsegundos y lo almacena en una matriz global. Luego hay un solo temporizador que regularmente activa una interrupción que cambia las señales de salida de acuerdo con el ancho de pulso deseado de cada canal.

Puede encontrar el código fuente a continuación: enlace de Github

    
respondido por el Grapsus
2

Los 6 pines PWM utilizan el UART integrado en el ATmega328P para producir su salida. Esto hace que los pulsos sean muy rápidos para una salida "analógica" de mayor calidad. Debido a que los servos se comunican a una velocidad suficientemente lenta, pueden manejarse utilizando interrupciones de software. Las interrupciones de software desaparecen del código que está ejecutando y ejecutan el código incluido con la biblioteca de servos. Este código utiliza medios estándar para cambiar el estado de los pines. Al hacerlo usando interrupciones en lugar de usar el UART, pierdes algo de tiempo de procesamiento pero obtienes la capacidad de conducir más servos.

    
respondido por el John Dood

Lea otras preguntas en las etiquetas