Instituto Polit�cnico Nacional
Instituto Politécnico Nacional
"La Técnica al Servicio de la Patria"

 

Boletín No. 37
1o. de mayo de 2013

 CONTROL AUTOMÁTICO DE TRES POSICIONES DE UN SERVOMOTOR UTILIZANDO VHDL Y LA TARJETA DE DESARROLLO NEXYS II

Juan Antonio Jaramillo Gómez*
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. , Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. , Ext. 56850.
Mirna Salmerón Guzmán*
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. , Ext. 56862
Rafael Santiago Godoy*
Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. , Ext. 56866
*UPIITA-IPN

Resumen

Se presenta un sistema para el control automático (cíclico) de tres posiciones de un servomotor, empleando el ISE de Xilinx, el lenguaje de descripción de hardware (VHDL), la tarjeta de desarrollo Nexys II, un servomotor Futaba (S3003) y una tarjeta de acoplamiento diseñada en UPIITA-IPN.

Abstract

We present an automatic control system to move a servo into three positions, using the Xilinx ISE software, a hardware description langue (VHDL), the Nexys II development board, a Futaba servomotor and an interface board designed at UPIITA-IPN.

Introducción

Como se ha mencionado en artículos anteriores, un servomotor es la integración de un motor eléctrico (por lo general de CD), engranes de plástico y/o acero, y un circuito de control con realimentación, algunos son de movimiento continuo (no tienen tope ni potenciómetro acoplado al eje de movimiento) y otros son de posición (i.e. 0-180°, tienen tope y potenciómetro acoplado al eje).

Un servomotor tiene típicamente tres terminales: Vcc (i.e. cable rojo), Gnd (i.e. cable negro) y el control (i.e. cable blanco). Dependiendo del tipo de servo será la acción que realizará este al recibir una señal del PWM en la terminal de control:

  1. Si el servo es de posición (con topes), dependiendo del tiempo en alto, será la posición que tendrá.
  2. Si es de movimiento continuo, entonces controlará la velocidad y el sentido de giro, ver tabla 1.
Tiempo en alto del PWM
(considerando una señal a 100Hz)
Ángulo de posición para un servomotor con tope
Sentido de giro para un servomotor sin tope
1ms
Horario
1.5ms
90°
Parado
2ms
180°
Antihorario

Tabla 1. Valores genéricos para los servomotores con tope y sin tope.

La figura 1, muestra los dos tipos de servomotores.

Figura 1. Fotos de servomotores (a) con tope, (b) sin tope. Disponibles en www.digilentinc.com.

En general, los servomotores tienen una señal de control de una frecuencia entre 50 a 100Hz, y el tiempo en alto puede ser 1ms a 2ms, lo anterior depende de la marca del servomotor.

Al analizar la señal del PWM como valor promedio (ver figura 2 (a, b y c)), se tiene:

  1. Si el tiempo en el valor en alto (VH) es pequeño y el tiempo en el valor en bajo (VL) es grande, el valor promedio tendera a cero (GND), ver figura 2(a).
  2. Si el tiempo en el valor en alto (VH) es igual al tiempo en el valor en bajo (VL) -50% del ciclo de trabajo-, el valor promedio tendera a la mitad de Vcc, ver figura 2(b).
  3. i el tiempo en el valor en alto (VH) es grande y el tiempo en el valor en bajo (VL) es pequeño, el valor promedio tendera al valor de la fuente Vcc, ver figura 2(c).

Pero para un servomotor, la señal de control tiene un tiempo en alto menor que el tiempo en bajo y la variación del tiempo en alto es lo que le da la posición o en sentido de giro. Un ejemplo de dichos tiempos se presenta en la figura 2 (i, ii e iii).

Figura 2. Señales del PWM: a) talto < tbajo , b)  talto = tbajo, c)talto > tbajo.; i) posición a 0°, ii) posición en 90° y iii) posición en 180°.

La señal de control utilizada para la posición de los servomotores, puede servir para otras aplicaciones como el control de velocidad de los motores (DC y servomotores), la intensidad de un foco incandescente o un LED, etc.

Desarrollo

Para implementar el control de posición del servomotor:

  1. Se requiere tener los elementos físicos con los que se va a trabajar, incluyendo los datos del servomotor.
  2. Se escriben los programas para controlar la posición.
  3. Se realizan las pruebas que demuestren que el servomotor se posiciona en los puntos deseados.

Para el cumplimiento del punto 1, se construyo un mecanismo de soporte para el servomotor, así como, se diseño y construyo una interfaz entre la tarjeta de desarrollo, el servomotor y la alimentación.

El mecanismo de soporte se puede hacer con distintos materiales como acero, plásticos, madera, etc. Para este caso se hizo con soportes de madera, aunque también se disponía de un soporte metálico, como se muestra en la figura 3(a) y en la figura 3(b) se muestran otros soportes comerciales. Ambos sistemas mecánicos permiten el desplazamiento en dos grados de libertad para posicionarse en azimut y elevación.

Figura 3. (a) Soportes para los servos. Posiciona en azimut y elevación, (b) Soportes metálicos comerciales para los servomotores.

 

La interfaz se diseño para que permitiera unir con conectores las tres partes involucradas: 1) la alimentación, 2) el sevomotor y 3) la tarjeta de desarrollo Nexys II. El diseño se baso en el esquema de la figura 4, la forma en que quedo se muestra en la figura 5.

Figura 4. Diagrama esquemático del diseño de la interfaz.
(a) Vista superior (b) Vista inferior (pistas).


Figura 5. Modulo periférico: Interfaz para servomotor.

Una vez teniendo todos los elementos se realiza la escritura y programación de la tarjeta y se interconectan todas las partes (Soporte con servos, interfaz, fuente de alimentación y tarjeta de desarrollo), quedando conectadas como se muestra en la figura 6. También se pone a disposición un video en donde se muestra su funcionamiento.

Figura 6. Elementos conectados para el funcionamiento del servomotor (tarjeta, servos, interfaz y fuente)

A continuación se presenta el código en VHDL que permite controlar de forma automática (cíclica o secuencial) tres posiciones de un servomotor con tope. El código sintetizado sobre el ISE de Xilinx generó un archivo *.bit que sirvió para programar la tarjeta Nexys II y mostrar el movimiento con diferentes marcas de servos: Futaba S3003, un GWS, Hitec y Vigor. Los cambios de posición del servo se visualizan mediante 3 leds de la Nexys II, los cuales actúan como leds testigos.

El presente código utiliza una escritura con funciones desarrolladas para el control del servo en vez de realizar un listado para cada dato que se necesitaba. Resaltando el uso de una variable llamada “alto” que se implementa en la generación de la señal de PWM (“pwmsal”) a través de un contador de 2 bits que depende de un selector llamado “sel”. Las funciones son:

alto <= 25000 * conv_integer(sel);
pwmsal <= '1' when conta <= (50000+alto) else

De clic aquí para ver el código...

Conclusiones

Se construyó un Sistema Posicionador con dos grados de libertad, por manipulación de dos servomotores y una interfaz para que la tarjeta Nexys II controlara el movimiento de un servomotor, aunque también se pueden colocar en paralelo para probar ambos motores. El sistema implementado fue pensado para apoyar a las Unidades de Aprendizaje de Electrónica Digital, Diseño Lógico, Circuitos Lógicos y Dispositivos Lógicos Programables de los Planes de Estudio de Ing. Mecatrónica, Ing. Telemática e Ing. Biónica de la UPIITA, es posible utilizarlo con otras unidades de aprendizaje.

El sistema desarrollado puede funcionar con dos o más servomotores, lo cual permitirá realizar aplicaciones para posicionar cámaras, apuntadores, pequeños proyectores, etc.

También se mostró cómo es posible realizar un módulo periférico (interfaz) para apoyar el desarrollo de otras aplicaciones con servomotores.

Bibliografía y cibergrafía

  1. Jaramillo J. A., Salmerón M., Godoy R. “Control de posición de un servomotor utilizando la tarjeta de desarrollo Nexys II y VHDL”. Boletín UPIITA No. 29. Publicación del 30 de noviembre del 2011.
  2. Jaramillo J. A., Salmerón M., Godoy R. “Control de un servomotor con encoder mecánico rotatorio utilizando VHDL y la NEXYS II”. Boletín UPIITA No. 34. Publicación del 31 de octubre del 2012.
  3. Jaramillo J. A., Guzmán I., Molina H., VHDL Guía para mediciones eléctricas y prácticas de laboratorio, Editorial del IPN, 2011.