¿Cómo se puede determinar el ancho de pulso de un servomotor?

Recientemente comencé a jugar con un kit Arduino UNO R3 que compré hace algún tiempo, y me emocioné tanto que decidí construir un brazo robótico.

Este brazo robótico que encontré en Thingiverse requiere el uso de 4 servomotores. Conseguí algunos motores SG90 baratos en Amazon. Dado que estos servos requieren una corriente bastante grande para funcionar, voy a usar una fuente de alimentación externa para alimentarlos al mismo tiempo y un servocontrolador PCA9685 de 16 canales.

Ahora... he llegado a la conclusión de que la posición de la bocina de un servomotor se puede elegir utilizando modulación de ancho de pulso (PWM) a 50 Hz, con anchos de pulso de 1 ms correspondientes a 0 ° y 2 ms a 180 °, según la hoja de datos de mi servo SG90.

Sin embargo , he visto que dado que mi motor es bastante barato, podría ser que las posiciones de los servos correspondan a anchos de pulso ligeramente diferentes de la hoja de datos.

¿Cómo puedo determinar con certeza qué ancho de pulso corresponde a 0 ° y 180 ° usando Arduino?

Además, si enviara un ancho de pulso inferior al correspondiente a 0° al servo, ¿dañaría el motor?

¡Muchas gracias!

#Andrea Angella, las cosas de ancho de pulso Servo PWM son las mismas para Arduino y Rpi. Puede encontrar útiles los conocimientos generales y los trucos en mis respuestas a las siguientes preguntas y respuestas de RpiSE: (1) ¿Cómo puede Rpi mover un servomotor usando un pin GPIO en modo PWM? - RpiSE, Preguntado hace 1 año, 11 meses Activo hace 1 año Visto 2k veces, raspberrypi.stackexchange.com/questions/98467/… , / para continuar, ...
/ continuación, ... (2) RPi4B PCA9685 PWM Controlling Many Servos - RpiSE, Preguntado hace 1 año, 7 meses Activo hace 1 año, 2 meses Visto 587 veces, raspberrypi.stackexchange.com/questions/102269/… , (3) ¿Cómo usar los pines GPIO de Python Rpi en el modo de salida PWM para crear señales PWM? - RpiSE, Preguntado hace 2 meses Activo hace 25 días Visto 128 veces, raspberrypi.stackexchange.com/questions/120452/… . Salud.

Respuestas (2)

¿Cómo puedo determinar con certeza qué ancho de pulso corresponde a 0 ° y 180 ° usando Arduino?

No puedes. Para empezar, ningún servo de hobby, incluso los más caros, tiene un recorrido exacto de 180°. Servos baratos casi garantizados para tenerlo diferente. Además, algunos servos electrónicos baratos dependen de la frecuencia, por lo que la posición 0 a 60 Hz puede ser diferente de 0 a 65 Hz.

si enviara un ancho de pulso inferior al correspondiente a 0° al servo, ¿dañaría el motor?

No debería, al menos no inmediatamente. Pero lo más probable es que el servo intente llegar allí, consumiendo una corriente de bloqueo bastante alta y calentándose.

Para abordar ambas preguntas, debe calibrar los ciclos de trabajo mínimo y máximo para cada servo individualmente. Hay una buena descripción de este procedimiento en el sitio de Adafruit. Cuando tenga datos de calibración, puede escalar el comando de control proporcionalmente para que cada servo llegue a la posición deseada.

En caso de duda, consulte la hoja de especificaciones.

0 grados = 1,5 ms
-90 grados = 1 ms
+90 grados = 2 ms

¿Informó el % de error a una frecuencia de 50 Hz? Mostrar errores reales. El error se puede calcular o clasificar como compensación y/o ganancia , sujeto a las tolerancias de los componentes (sin especificar).