10 votos

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

Según este :

La biblioteca Servo soporta hasta 12 motores en la mayoría de las placas Arduino y 48 en la Arduino Mega. En las placas que no sean el Mega, el uso de la librería biblioteca desactiva la funcionalidad de analogWrite() (PWM) en los pines 9 y 10, independientemente de que haya o no un servo en esos pines. En el Mega, hasta 12 servos pueden ser utilizados sin interferir con la funcionalidad PWM; el uso de 12 a 23 motores deshabilitará el PWM en los pines 11 y 12.

Sin embargo, según este :

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

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

9voto

SomeClown Puntos 11

La servoteca no utiliza PWM. Cuando se llama a escribir() calcula un ancho de pulso en microsegundos y lo almacena en una matriz global. A continuación, hay un único temporizador que dispara regularmente una interrupción que cambia las señales de salida según el ancho de pulso deseado de cada canal.

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

1 votos

Entonces, ¿esencialmente simula el PWM? ¿Qué sentido tienen entonces los pines digitales con canales PWM?

2 votos

En general, los servopulsos tienen una duración de aproximadamente 1 ms. Por lo tanto, deben ser conducidos por frecuencias de alrededor de 1 kHz, lo que es muy fácil de generar por software en cualquier salida con un micro funcionando a varios MHz. Las salidas PWM del AVR son generadas por hardware dedicado y pueden alcanzar la frecuencia de la CPU pero el número de canales es limitado. Supongo que los autores del módulo Servo decidieron utilizar un único temporizador para poder manejar tantos canales como pines y ahorrar el hardware PWM para otros usos.

1 votos

El PWM de las salidas de Arduino es para salidas de potencia variable con ciclos de trabajo entre 0 y 100%. El control "PWM" estilo RC tiene un rango de ciclo de trabajo muy limitado -- 1000 us a 50 Hz es 5%, 2000 us a 50 Hz es 10%. Piensa en el PWM RC como un "tren de pulsos" en lugar del tradicional "PWM".

2voto

angelina Puntos 21

Los 6 pines PWM utilizan la UART integrada 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 ser manejados usando interrupciones de software. Las interrupciones de software se alejan del código que estás ejecutando y ejecutan un código incluido en la librería del servo. Este código utiliza medios estándar para cambiar el estado de los pines. Al hacerlo usando interrupciones en lugar de usar la UART pierdes algo de tiempo de procesamiento pero ganas la capacidad de manejar más servos.

0 votos

¿Puede explicar (o enlazar) más? ¿Cómo se utiliza la UART para PWM?

0 votos

Creo que sería mejor decir que la librería PWM puede utilizar los pines de E/S de la UART si se desea. la librería PWM no utilizará la UART en sí, pero los pines utilizados por la UART también pueden ser utilizados como E/S digitales estándar si no son necesarios para la UART.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X