Control de servomotor por ADC con LabVIEW

Introducción

control de servomotor

En este tutorial de control de servomotor por ADC con LabVIEW veremos lo siguiente. Diseñar un programa en LabVIEW con el cual se pueda seleccionar entre mover el servomotor con una perilla virtual en el programa de LabVIEW o con un potenciómetro con el ADC desde el Arduino solamente.

¿Que es un servomotor?

Para poder realizar el control de servomotor de manera correcta, necesitamos entender que es un servomotor. Un servomonor es un motor de DC con una caja reductora y un circuito que controla la posición mediante una retroalimentación. La retroalimentación usualmente es mediante un potenciomentro que tienen dentro del servomotor.

Usualmente, este tipo de motores suelen mantener una posición fija y no giran de manera continua. Para el control de servomotor mediante Arduino o cualquier otro sistema, es necesario el uso e implementación de una modulación por ancho de pulso (PWM, por sus siglas en inglés). El control suele ser de 0° a 180° grados. Finalmente, cabe mencionar que estos motores mantienen su posición y tienen una cantidad considerable de torque.

Funcionamento del control de servomotor mediante PWM

A continuación, se observa como es que se puede controlar el servomotor mediante la modulación por ancho de pulso. Aunque en los servomotores la realidad es que el valor que realmente importa es el pulso en alto. De hecho, la función PWM o analogWrite de Arduino no es compatible con los servomotores. Por lo tanto se usa otra función que veremos más adelante.

A continuación, se muestran tres casos de anchos de pulso para el control de servomotor.

control de servomotor
control de servomotor
control de servomotor

Materiales para control de Servomotor

Código de control de servomotor

Análisis de código

En primer lugar tenemos que agregar la biblioteca de control de servomotores, en este caso «Servo.h». Esta biblioteca nos va a gestionar el objeto y funciones de la clase Servo. A continuación vamos a crear un objeto de la clase Servo, con nombre myservo.

Primeramente, tenemos que indicarle al objeto myservo que pin va a controlar, esto lo hacemos con la función attach(), en este caso estamos eligiendo el pin 9.

Para comenzar con el proceso principal, inciamos con la comunicación, leyendo cuando haya por lo menos dos datos en el buffer serial. Esto datos van a ser comando y valor respectivamente.

Evaluamos los comandos, si el comando es el caracter L, entonces vamos a controlar el servomotor con el segundo caracter recibido del serial, este seria val. Si el comando es A, entonces vamos a controlar el servo con el valor proporcional al ADC.

Finalmente, el programa termina con un retardo de 15 mili segundos y regresamos al ciclo de control loop.

Diagrama de conexión de control de servomotor

control de servomotor

Control de servomotor en LabVIEW

El código de LabVIEW lo puedes descarga de: https://www.dropbox.com/sh/g6yb3124ampvucx/AACX-hDX5QzZ3JCglQxO0r9Ja?dl=0

control de servomotor
control de servomotor

Como se puede observar en las imagenes previas, tenemos la etapa de escritura y lectura del puerto serial. El recuadro marca el ciclo de control case. El case se controla con solo dos casos, los cuales son controlador por el evento del push button o botón.

En primer lugar, si el botón está en estado falso o desactivado, enviamos una cadena de carecteres de «AA» la cual indica que el control se realizará mediante el ADC. OJO el segudo caracter «A», puede tomar cualquier valor que ya de igualmanera se descarta desde el Arduino. Leemos el valor del serial que el Arduino manda con la posición actual.

Posteriormente, si el control de servomotor o botón booleano, esta activado, enviamos un caracter «L» concatenado con un valor que viene desde el controlador manual SERVOMOTOR. Notese que este controlador es un controlador que envía datos tipo entero de 0 a 180, estos los convertimos a un byte array para que pueda ingresar a case y posteriormente los convertimos a un string. OJO, el valor de 97 por ejemplo, corresponde a un caracter «a», pero lo que va a leer Arduino es el valor, entero, en este caso el 97.

Validación de control de servomotor mediante LabVIEW con Arduino

Escríbenos tus dudas o comentarios

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Usamos Cookies en nuestro sitio WEB

Por favor confirma, si aceptas nuestras cookies de rastreo. También puedes negar el uso de cookies de rastreo y seguir navegando sin que ninguna información sea enviada a servicios de terceros.