Archivo de la etiqueta: stewart

Controlador para servomotores USB, con entradas y salidas digitales

Para mi proyecto de tesis (recuerdan la Plataforma Stewart?), realizado con mi compañera Natalia Gonzalez, tuvimos la necesidad de diseñar una tarjeta controladora de servos, que nos permita controlar simultáneamente hasta 8 servos, con entradas y salidas digitales adicionales, y controlado por puerto USB. Para esto, hemos utilizado un microcontrolador PIC 18F4550, que tiene el hardware para conexión USB integrado dentro del microcontrolador, y dicho puerto USB puede ser configurado como un puerto serial emulado, lo que facilita muchísimo la interfaz con el PC, al no necesitar programar drivers específicos para nuestra tarjeta electrónica.

Como conocemos, cada servomotor necesita un pulso, cuyo ancho debe variar entre 1.25 y 1.75ms (siendo 1.5ms el ancho de pulso necesario para llegar a la posición central), que debe ser refrescado cada 20ms para mantener su posición. Controlar un servo por medio de interrupciones no presenta mayor inconveniente, pero para controlar 8 simultáneos, hay que poner un poco a trabajar el cerebro.

Usando una sola interrupción para controlar los 8 servomotores, lo que debemos hacer es multiplexar al timer 0, de tal manera, que aproximadamente cada 4ms, se dispara una nueva interrupción, que indicará que salida de servo se debe activar, y el tiempo que estará activa, de acuerdo a los valores de posición que asignemos a cada servo.

Los datos de la posición de cada servo, se los enviará via comunicación serial por el puerto USB, para esto se ha definido un pequeño protocolo de comunicación con la tarjeta electrónica, que responde a los siguientes comandos:

// comandos:
// 's' muestra ok para verificar conexion
// 'd'x escribe dato de 8 bits. espera dato de salida
// 'q'x activa salida x (0-7)
// 'w'x desactiva salida x (0-7)
// 'r' devuelve un dato de 8 bits de entrada del puerto D
// 'p'xy asigna al servo x (caracter entre 0 y 7) el valor y (caracter con un código ASCII entre 0 y 255)

Con estos comandos, además de poder controlamos los servos, tenemos la posibilidad de usar las entradas y salidas digitales programadas para la tarjeta.

El esquema del circuito es bastante sencillo, tal como lo mostramos a continuación:

Algo a tomar en cuenta en el diseño de la tarjeta electrónica, es la alimentación del circuito. El microcontrolador, puede ser alimentado directamente con los +5V del puerto USB, pero los servos, dependiendo del tipo, pueden consumir mucha mas corriente de los 1000mA que puede entregar el puerto USB de un computador personal. Es por esto, que tenemos 2 lineas de alimentación: Vdd que alimenta el microcontrolador (y está enlazado a +5V del puerto USB) y V+ que es una alimentación externa para los servos (que incluso, para darles mayor torque, puede subir hasta 6V, o más, si usamos servos HV).

Para el diseño del PCB, se utilizó una placa de doble lado, con un diseño bastante sencillo. El diseño como tal no es crítico, ya que se manejan señales de baja frecuencia.

El software que corre en el microcontrolador, fué realizado en C, usando el compilador propio de Microchip. El código fuente, con todas sus librerías, puede ser descargado en este enlace y el link del driver para el puerto serie (en sí es un archivo inf, con las definiciones del puerto USB) puede ser descargado aquí.

Podemos decir que se puede mejorar un poco el software (podrían agregarse entradas analógicas únicamente cambiando el código fuente, sin modificar el hardware), pero para nuestro proyecto, esta tarjeta electrónica funcionó perfectamente.

Les dejo un video del robot, que utiliza servos 6 estandard, cuyo control es realizado por la tarjeta electrónica que presentamos acá.

Y el video final de la plataforma (el que fué presentado en la sustentación final de la tesis)

Año nuevo, a darle con ganas!

Primero desearles un muy feliz año nuevo a todos, y que este sea mucho mejor que el 2010!

Que viva el 2011! deciamos la semana pasada, pero ahora, poniendo nuevamente los pies en la realidad, y luego de unos muy merecidos dias libres (respondiendo únicamente a las emergencias tecnológicas), toca volver a las labores cotidianas con más energía y ganas que nunca.

De novedades, la principal es que el robot de mi tesis al fin se encuentra ya en movimiento. Luego de un análisis de la cinemática directa e inversa, mucha geometría, cálculo matricial, redes neuronales, matlab, scilab, visual basic, mucho red bull y una que otra bielita, al parecer todo va tomando forma.

Este robot, para los que no andan muy al tanto del proyecto, es una Plataforma Stewart fabricada enteramente en aluminio, carbono y algo de plástico. Es una plataforma movil con 6 grados de libertad, cuyo movimiento es activado por servos de alto torque (en el video solo estamos probando 3, ya que para probar el resto, tengo que conectar mi transmisor para los aviones de radiocontrol, que tiene 6 canales), pero aparte de una pequeña desviación en los ángulos de los servos de la base (por eso se ve una pequeña inclinación en uno de los ejes en lugar de un desplazamiento plano), se mueve correctamente.

detector

Ahora, para que una plataforma movil? La idea de este proyecto es que la placa movil, pueda balancear un objeto (en nuestro caso, una pequeña pelota), y para esto es necesario algún mecanismo de medición de la posición de dicha pelota en el espacio. Para esto estamos usando visión artificial.

Muchos de los proyectos realizados usando visión artificial, se basan en el reconocimiento de objetos, y con este marco hemos aplicado dicha teoría, para realizar visión artificial en tiempo real. Usando cámaras de video de alta velocidad, podemos detectar la posición de la pelota en la plataforma, y predecir su trayectoria, para con estos datos, mover la plataforma de tal manera que estabilice la pelota en el centro. Mas detalles de los algoritmos de visión artificial en los próximos días.