¿Comprobando mi comprensión de cómo funcionan los servomotores hobby?

0

¿Puede alguien decirme si mi entendimiento es correcto, por favor?

La señal de control a un servomotor hobby que está conectado a un arduino funciona de la siguiente manera:

En cada 1 s hay cincuenta ventanas de 20 ms de longitud. Así la frecuencia es de 50 Hz ¿verdad?

Continuando,

Si el eje del servo está en su centro y quiero que se desplace 90 grados a la izquierda, en cada uno de los 20 ms de 1 s, el pin PWM generará una señal PWM que tiene 1 ms de ancho de pulso hasta que el pulso se haya desplazado. para 1s y luego para el siguiente segundo generar algo así como 1.25ms?

o comenzará a 1 ms y durante ese período de 1 s y cambiará de 1 ms a un valor diferente de 1,25 ms y 1,5 ms a medida que se acerque cada vez más al ángulo deseado (disminuye en ángulo )?

    

2 respuestas

1

El servo de hobby necesita una señal como esta:

En una ventana de 20 ms, (50 veces por segundo) un pulso con un ancho de aproximadamente 1 ms y 2 ms (puede variar según el servo) con un punto medio de 1,5 ms. Entonces, en la ventana de 20 ms, hay casi el 90% del tiempo siendo "silencio" sin nivel de señal. El pulso solo es alto durante un período muy corto (relativamente).

Los pines Arduino tienen una salida predeterminada a 500Hz y 3.9Khz. No puede usar directamente el pin en modo PWM (con analogWrite), ya que recibirá los pulsos demasiado rápido y no funcionará / no funcionará.

La biblioteca Servo disponible para inclusión en un croquis de Arduino utiliza los temporizadores incorporados del ATMEGA328P (u otro chip, depende del tipo de arduino que estés usando) y de algunos software sofisticados e interrupciones para obtener el tiempo correcto de 50Hz y usos un pin de salida digital normal para enviar el pulso requerido.

Puede hacerlo usted mismo en un bucle simple, si solo controla 1 servo y tiene un programa simple, simplemente configurando un pin digital ALTO y luego retrasando (utilizando DelayMicroeconds) entre 1000 y 2000 microsegundos, dependiendo de la posición desea mover a, luego configurar el pin BAJO y retrasar (20,000 - el tiempo que retrasó para el servo).

Puede enviar la misma señal constantemente y el servo permanecerá en ese punto, o puede enviarla hasta que llegue allí y dejar de enviar una señal. El servo debe permanecer en ese punto, pero no creo que lo recuerde (puede moverlo con la mano y permanecerá en el nuevo punto hasta que se envíe una nueva señal).

Es mejor no usar las salidas de hardware PWM para que el Arduino controle un servo, incluso si logras escalar previamente los temporizadores a los 50 Hz requeridos (creo que esto sería difícil de conseguir, pero cree que puedes hacerlo!) ya que los registros de salida PWM deberán configurarse con una resolución de 8 bits en un pequeño rango de 10-20%, lo que solo te da 25 posiciones totales disponibles para el servo (eso es bastante malo, 25 posiciones) para un rango de movimiento completo de + -90 grados!). Así que ve con la Biblioteca de Servos, básicamente :)

    
respondido por el KyranF
1

Ninguno. El pulso dado determinará la posición y no tendrá que cambiar gradualmente la posición de un valor a otro.

Pasará de la posición neutral a la posición 90, a la velocidad del servo.

La biblioteca de servo de arduino estándar no cambia gradualmente los valores de un período al siguiente. Todo lo que empuje se enviará de inmediato, a menos que decida enviar valores que cambien gradualmente. Y esos valores se pueden cambiar en un solo período si lo desea.

    
respondido por el Passerby

Lea otras preguntas en las etiquetas