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


8

De acuerdo a esto :

La biblioteca Servo admite hasta 12 motores en la mayoría de las placas Arduino y 48 en el Arduino Mega. En placas que no sean Mega, el uso de la biblioteca deshabilita la funcionalidad analogWrite () (PWM) en los pines 9 y 10, ya sea que haya o no un Servo en esos pines. En el Mega, se pueden usar hasta 12 servos sin interferir con la funcionalidad PWM; El uso de 12 a 23 motores deshabilitará PWM en los pines 11 y 12.

Sin embargo, de acuerdo con esto :

Pines de E / S digital 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?

Respuestas:


4

Aunque no he mirado la fuente yo mismo, en este tipo de situaciones usualmente usan el temporizador de interrupción 1 , que en modo PWM se hubiera asociado con los pines 9 y 10. Esto explicaría por qué no puede usar la modulación de ancho de pulso en esos alfileres De hecho, puede usar cualquiera de los tres temporizadores para PWM en cualquier pin digital, aunque no es tan bueno como las opciones PWM incorporadas .


(fuente: bansky.net )

( Fuente )

La imagen de arriba describe con precisión cómo se envían las señales al servomotor. Tal forma de onda es similar a un PWM estándar. La biblioteca de servos puede traducir un grado a una forma de onda que el IC del servo podrá usar para ajustar la posición del motor con su motor y potenciómetro.


1
Entonces, ¿esencialmente simula PWM? ¿Cuál es el punto de los pines digitales con canales PWM entonces?
user1265

@ user1265 Más o menos ... está usando los temporizadores que manejan PWM. En cuanto al punto de PWM, IIRC, el ATmega328 tiene circuitos para hacer que PWM sea más eficiente.
Anonymous Penguin

2
@ user1265, el hardware PWM es "gratuito", es decir, no afecta el rendimiento del resto de su programa (solo ata un temporizador, o al menos parte del mismo). El mantenimiento de rutinas de interrupción para PWM emulado es relativamente costoso. Sin embargo, en este caso, la frecuencia PWM es solo de aproximadamente 50Hz, por lo que esto no es demasiado trágico (la frecuencia PWM estándar de Arduino es 31 / 62kHz, hacer PWM para, por ejemplo, aplicaciones de iluminación a 50Hz probablemente sería bastante parpadeante).
microtherion

What is the point of the digital pins with PWM channels then?- puede obtener frecuencias mucho más altas (hasta 8 MHz) y ciclos de trabajo muy precisos. Esto no es posible cuando confía en una interrupción para hacer esto por usted.
Nick Gammon
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.