Nota de aplicación AN-U001 de USBee

9
NOTA DE APLICACIÓN AN-U001 Control de un servomotor usando USBee

Transcript of Nota de aplicación AN-U001 de USBee

Page 1: Nota de aplicación AN-U001 de USBee

NOTA DE APLICACIÓNAN-U001

Control de un servomotor usando USBee

Page 2: Nota de aplicación AN-U001 de USBee

AN-U001

Naxus Sistemas InteligentesAv. 10 de Mayo vía PanceParque Tecnológico de la Umbria

Cali, Colombia

[email protected]

Revisión 1.0 Página 2

Page 3: Nota de aplicación AN-U001 de USBee

AN-U001

Índice de contenido1.INTRODUCCIÓN......................................................................................42.RECURSOS.............................................................................................43.DESCRIPCIÓN DEL MONTAJE.....................................................................54.DESCRIPCIÓN DEL SOFTWARE..................................................................65.CÓDIGO.................................................................................................76.BIBLIOGRAFÍA........................................................................................9

Revisión 1.0 Página 3

Page 4: Nota de aplicación AN-U001 de USBee

AN-U001

1. INTRODUCCIÓN

Los servomotores son ampliamente utilizados en proyectos de aeromodelismo y robótica. Su interés radica en el alto torque que llegan a brindar, la ventaja de contar con un control de posición en el mismo sistema y su fácil consecución. La imagen [1] ilustra uno de estos motores.

Figura 1: Servomotor

El control de los servomotores se realiza mediante señales PWM (Pulse Width Modulation [1]), y puede ser implementado utilizando la tarjeta de desarrollo USBee. Este documento describe la implementación de una librería que permite el control de este tipo de periféricos, de una manera genérica para adecuarla al modelo específico de servomotor.

2. RECURSOS

A continuación se describen los recursos necesarios para realizar el montaje:

• Tarjeta de desarrollo USBee.• Cable mini USB para programación de USBee.• Servomotor (algunos recomendados):

◦ Futaba S3003, S3004.◦ Hitec HS-311, HS-325HD

Revisión 1.0 Página 4

Page 5: Nota de aplicación AN-U001 de USBee

AN-U001

3. DESCRIPCIÓN DEL MONTAJE

Los servomotores por lo general cuentan con un conector de tres pines. Dos de ellos corresponden a la alimentación, y generalmente se marcan con negro (GND) y rojo (VCC). El rango de alimentación depende del servomotor, pero por lo general pueden ser alimentados de 4 a 6V. La última línea corresponde a la señal de control. La figura [2] ilustra conectores típicos de servomotores comerciales.

Figura 2: Conectores de servomotores de marcas comerciales

La señal de control, al ser una señal digital, no tiene problema en conectarse directamente a la USBee, ya que no es una línea de potencia y por lo tanto el consumo de corriente se encontrará en los límites especificados para USBee.

A continuación se muestra el esquema de conexión utilizado para conectar el servomotor a la USBee, como se muestra en la figura [3]. Este montaje es válido exclusivamente para pruebas, y se recomienda que para un diseño final se contemple alimentar el servomotor con una fuente aparte de la alimentación de la USBee. Asimismo, se recomienda utilizar un transistor

Revisión 1.0 Página 5

Page 6: Nota de aplicación AN-U001 de USBee

AN-U001

para proteger la señal de control de la tarjeta USBee.

Figura 3: Conexión del servomotor a la USBee

4. DESCRIPCIÓN DEL SOFTWARE

Para el control del servomotor se han establecido dos ejemplos. El primero de ellos es el más básico, y es el que permite familiarizar al usuario en la generación de una señal PWM. Se utilizarán retardos disponibles en la librería <util/delay.h>, disponible en avr-libc [2].

Revisión 1.0 Página 6

Page 7: Nota de aplicación AN-U001 de USBee

AN-U001

5. CÓDIGO

A continuación se presenta el código utilizado para el primer ejemplo. Los archivos se pueden conseguir en la siguiente URL: http://usbee.naxuscolombia.com/documentacion/notas-de-aplicacion. Recuerde cambiar los parámetros POSICION_MEDIA, POSICION_IZQ, POSICION_DER y PERIODO de acuerdo al servomotor que esté utilizando.

Ejemplo 1:

servo1.c

/***************************************************************SERVO1.C

Primer ejemplo de manejo del servomotor. Se utiliza el pulsador HWB (conectado al pin PD7) para definir a que posición debe ir el   servomotor.   Si   no   se   ha   presionado,   el   motor   gira   a   la posición izquierda. Si se oprime, el motor gira a la posición derecha.***************************************************************/

//Libreria indispensable para el manejo de puertos #include <avr/io.h> //libreria para generar retardos #include <util/delay.h> 

#define POSICION_MEDIA  1300 #define POSICION_IZQ  300 #define POSICION_DER  1520 #define PERIODO 20000 

void delay_us(unsigned int us); 

int main(void) { 

//variable que indica el retardo generadounsigned int pos; //puerto B de salida 

Revisión 1.0 Página 7

Page 8: Nota de aplicación AN-U001 de USBee

AN-U001DDRB = 0XFF; //colocar el pin PD7 de entrada DDRD &= ~(1<<PD7);  while(1) { 

//verificar si el pin PD7 fue oprimido if(PIND & (1<<PD7)) { 

pos = POSICION_IZQ; PORTB = 0; delay_us(pos); PORTB = 0xFF; delay_us(PERIODO ­ pos); 

} else { 

pos = POSICION_DER; PORTB = 0; delay_us(pos); PORTB = 0xFF; delay_us(PERIODO ­ pos); 

} }  return 1; 

void delay_us(unsigned int us) { 

for(int i=0;i<us;i++) _delay_us(1); 

Revisión 1.0 Página 8

Page 9: Nota de aplicación AN-U001 de USBee

AN-U001

6. BIBLIOGRAFÍA

1. "PWM, Modulación por ancho de pulso" [online] http://es.wikipedia.org/wiki/Modulaci%C3%B3n_por_ancho_de_pulsos

2. "Generación de retardos con AVR-LIBC" [online] http://www.nongnu.org/avr-libc/user-manual/group__util__delay.html

3.

Revisión 1.0 Página 9