Nota de aplicación: DIAGNÓSTICO DE UN INTERRUPTOR DIFERENCIAL
Nota de aplicación AN-U001 de USBee
-
Upload
alepusto -
Category
Technology
-
view
370 -
download
0
Transcript of Nota de aplicación AN-U001 de USBee
NOTA DE APLICACIÓNAN-U001
Control de un servomotor usando USBee
AN-U001
Naxus Sistemas InteligentesAv. 10 de Mayo vía PanceParque Tecnológico de la Umbria
Cali, Colombia
Revisión 1.0 Página 2
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
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
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
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
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
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
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