Cómo funciona el servomotor y cómo controlar los Servos usando Arduino

en este tutorial aprenderemos cómo funcionan los servomotores y cómo controlar los servos usando Arduino y PCA9685 PWM driver. Puede ver el siguiente video o leer el tutorial escrito a continuación.

Resumen

Hay muchos tipos de servomotores y su principal característica es la capacidad de controlar con precisión la posición de su eje. Un servomotor es un sistema de bucle cerrado que utiliza la retroalimentación de posición para controlar su movimiento y posición final.,

en los servomotores de tipo industrial, el sensor de retroalimentación de posición suele ser un codificador de alta precisión, mientras que en los servos rc o hobby más pequeños, el sensor de posición suele ser un potenciómetro simple. La posición real capturada por estos dispositivos se devuelve al detector de errores donde se compara con la posición objetivo. Luego, de acuerdo con el error, el controlador corrige la posición real del motor para que coincida con la posición objetivo.,

en este tutorial echaremos un vistazo detallado a los servomotores hobby. Explicaremos cómo funcionan estos servos y cómo controlarlos usando Arduino.

los servos Hobby son actuadores de tamaño pequeño utilizados para controlar coches, barcos, aviones, etc. de RC toys. También son utilizados por los estudiantes de ingeniería para la creación de prototipos en robótica, la creación de brazos robóticos, robots de inspiración biológica, robots humanoides y así sucesivamente.,

cómo funciona el servo RC / Hobby

dentro de un servo hobby hay cuatro componentes principales, un motor de CC, una caja de cambios, un potenciómetro y un circuito de control. El motor de CC es de alta velocidad y bajo par, pero la caja de cambios reduce la velocidad a alrededor de 60 RPM y al mismo tiempo aumenta el par.

el potenciómetro se adjunta en el engranaje final o el eje de salida, de modo que el motor gira el potenciómetro gira también, produciendo así un voltaje que está relacionado con el ángulo absoluto del eje de salida., En el circuito de control, este voltaje del potenciómetro se compara con el voltaje que proviene de la línea de señal. Si es necesario, el controlador activa un puente H integrado que permite que el motor gire en cualquier dirección hasta que las dos señales alcancen una diferencia de cero.

un servomotor se controla enviando una serie de pulsos a través de la línea de señal. La frecuencia de la señal de control debe ser 50Hz o un pulso debe ocurrir cada 20ms., El ancho de pulso determina la posición angular del servo y este tipo de servos generalmente puede girar 180 grados (tienen un límite físico de viaje).

generalmente los pulsos con 1ms de duración corresponden a 0 grados de posición, 1.5 ms de duración a 90 grados y 2ms a 180 grados. Aunque la duración mínima y máxima de los pulsos a veces puede variar con diferentes marcas y pueden ser 0.5 ms para 0 grados y 2.5 ms para 180 grados de posición.,

Arduino Servo Motor Control

vamos a poner lo anterior dicho para probar y hacer un ejemplo práctico de controlar un servo hobby usando Arduino. Utilizaré el MG996R, que es un servo de alto par con engranajes metálicos con un par de parada de 10 kg-cm. El alto par tiene un precio y esa es la corriente de pérdida del servo que es de 2.5 A. La corriente de funcionamiento es de 500mA a 900mA y el voltaje de funcionamiento es de 4.8 A 7.2 V.,

Las clasificaciones actuales indican que no podemos conectar directamente este servo al Arduino, pero debemos usar una fuente de alimentación separada para él. Aquí está el esquema del circuito para este ejemplo.

simplemente necesitamos conectar el pin de control del servo a cualquier pin digital de la placa Arduino, conectar la Tierra y los cables positivos a la fuente de alimentación externa de 5V, y también conectar la Tierra Arduino a la tierra servo.,

Usted puede obtener los componentes necesarios para este ejemplo a partir de los siguientes enlaces:

  • MG996R Motor Servo …………………………. Amazon / Banggood / AliExpress
  • o S90 Micro Servo ………..…………………… Amazon / Banggood / AliExpress
  • Placa Arduino ……………………………………. Amazon / Banggood / AliExpress
  • Fuente de alimentación 5V 2A DC …………………..….. Amazon / Banggood /AliExpress

divulgación: Estos son enlaces de Afiliados. Como Asociado de Amazon, gano de compras que califican.,

ver también

Arduino Brushless Motor Control Tutorial | ESC | BLDC

código de control del servomotor arduino

ahora echemos un vistazo al código Arduino para controlar el servomotor. El código es muy simple. Solo necesitamos definir el pin al que se conecta el servo, definir ese pin como una salida, y en la sección de bucle generar pulsos con la duración y frecuencia específicas como explicamos anteriormente.,

después de algunas pruebas, se me ocurrieron los siguientes valores para la duración de los pulsos que funcionan con mi servo. Los pulsos con 0,6 ms de duración correspondieron a 0 grados de posición, 1,45 ms a 90 grados y 2,3 ms a 180 grados.

conecté un multímetro en serie con el servo para comprobar el consumo de corriente. El consumo máximo de corriente que noté fue de hasta 0.63 A En pérdida. Bueno, eso es porque este no es el servo TowerPro MG996R original, sino una réplica más barata, que obviamente tiene peor rendimiento.,

Sin embargo, echemos un vistazo a una forma más conveniente de controlar servos usando Arduino. Eso es usar la Biblioteca de servos Arduino.

aquí solo tenemos que incluir la biblioteca, definir el objeto servo, y utilizando la función attach() definir el pin al que está conectado el servo, así como definir los valores mínimo y máximo de las duraciones de los pulsos. Luego, usando la función write (), simplemente establecemos la posición del servo de 0 a 180 grados. Con esta biblioteca podemos manejar hasta 12 servos al mismo tiempo o 48 servos usando Arduino Mega board.,

ver también

brazo Robot Arduino DIY con control de Smartphone

Arduino y PCA9685 PWM / Servo Driver

También hay otra forma de controlar los servos con Arduino, y es usando el servo driver PCA9685. Este es un PWM de 16 canales de 12 bits y servo driver que se comunica con Arduino utilizando el bus I2C. Tiene un reloj incorporado para que pueda conducir 16 servos de funcionamiento libre, o independientemente de Arduino.,

lo que es aún más genial, podemos encadenar hasta 62 de estos controladores en un solo bus I2C. Así que teóricamente podemos controlar hasta 992 servos usando solo los dos pines I2C de la placa Arduino. Los 6 pines de selección de dirección se utilizan para configurar diferentes direcciones I2C para cada controlador adicional. Solo necesitamos conectar las almohadillas de soldadura de acuerdo con esta tabla.

Aquí está el esquema del circuito y podemos notar una vez más que necesitamos una fuente de alimentación separada para los servos.,

Usted puede obtener los componentes necesarios para este ejemplo a partir de los siguientes enlaces:

  • MG996R Motor Servo …………………………. Amazon / Banggood / AliExpress
  • PCA9685 PWM Controlador de Servo ………………. Amazon / Banggood / AliExpress
  • Placa Arduino ……………………………………. Amazon / Banggood / AliExpress
  • Fuente de alimentación 5V 6A DC …………………..….. Amazon / Banggood /AliExpress

divulgación: Estos son enlaces de Afiliados. Como Asociado de Amazon, gano de compras que califican.

ahora echemos un vistazo al código Arduino., Para controlar este servo driver usaremos la biblioteca PCA9685 que se puede descargar desde GitHub.

código PCA9685 Arduino

así que primero necesitamos incluir las bibliotecas y definir el objeto PCA9685. Luego, usando la instancia Servo_Evaluator, defina la duración de los pulsos o la salida PWM del controlador. Tenga en cuenta que las salidas son de 12 bits, o que es una resolución de 4096 pasos. Por lo tanto, la duración mínima del pulso de 0.5 ms o 0 grados de posición correspondería a 102 pasos, y la duración máxima del pulso de 2.5 ms o 180 grados de posición a 512 pasos., Pero como se explicó anteriormente, estos valores deben ajustarse de acuerdo con su servomotor. En mi caso los valores de 102 a 470 correspondían a 0 a 180 grados de posición.

en la sección de configuración necesitamos definir la velocidad de reloj I2C, establecer la dirección del controlador y establecer la frecuencia a 50Hz.

en la sección de bucle, usando las funciones setChannelPWM() y pwmForAngle() simplemente configuramos el servo en el ángulo deseado.,

conecté un segundo servo al conductor, y como esperaba, no estaba posicionando el mismo que el primero, y eso es porque los servos que estoy usando son copias baratas y no son tan confiables. Sin embargo, esto no es un gran problema porque usando la instancia Servo_Evaluator podemos establecer diferentes configuraciones de salida para cada servo. También podemos ajustar la posición de 90 grados en caso de que no esté precisamente en el medio. De esa manera todos los servos funcionarán igual y se posicionarán en el ángulo exacto.,

control de muchos servos con Arduino y los controladores PCA9685

echaremos un vistazo a un ejemplo más y ese es controlar muchos servos con múltiples controladores PCA9685 encadenados.

para ese propósito necesitamos conectar los controladores entre sí y conectar las almohadillas de soldadura seleccionadas de la dirección apropiada. Aquí está el esquema del circuito:

echemos un vistazo al código Arduino ahora.,

así que debemos crear un objeto PCA9685 separado para cada controlador, definir las direcciones para cada controlador, así como establecer la frecuencia a 50Hz. Ahora simplemente usando las funciones setChannelPWM() y pwmForAngle() podemos configurar cualquier servo en cualquier controlador para posicionar cualquier ángulo que queramos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *