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á.

[HTML1]

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

[HTML2]


Comments

17 respuestas a «Controlador para servomotores USB, con entradas y salidas digitales»

  1. […] needed a way to control a bunch of servos for his thesis project. He came up with a USB servo controller (Spanish, here’s the translation) powered by a 40-pin PIC 18F microcontroller. The board […]

  2. […] needed a way to control a bunch of servos for his thesis project. He came up with a USB servo controller (Spanish, here’s the translation) powered by a 40-pin PIC 18F microcontroller. The board […]

  3. […] needed a way to control a bunch of servos for his thesis project. He came up with a USB servo controller (Spanish, here’s the translation) powered by a 40-pin PIC 18F microcontroller. The board […]

  4. […] needed a way to control a bunch of servos for his thesis project. He came up with a USB servo controller (Spanish, here’s the translation) powered by a 40-pin PIC 18F microcontroller. The board […]

  5. […] needed a way to control a bunch of servos for his thesis project. He came up with a USB servo controller (Spanish, here’s the translation) powered by a 40-pin PIC 18F microcontroller. The board […]

  6. […] para hacerlo funcionar, creo que facil el arduino que he comprado resulta más barato que la placa de comando de servos que diseñé hace algun tiempo, basada en […]

  7. Avatar de francisco
    francisco

    genial, estaba buscando algo así, yo mucho no me manejo, muy lo basico de macatrónica, pero me interesa, te escribo por si me podrias porfavor mandar las especificaciones de los componentes?, porfavorrrr porfavorrrr, ¿siii?. espero respuesta entonces. CHAOOO y GRACIAS!

  8. Avatar de admin
    admin

    pues especificaciones no hay muchas! es un pic 18f4550, un cristal de 20 Mhz y 2 capacitores de 22pf. El resto es solo conexiones. Si necesitas mas info, escríbeme por acá para darte una mano

  9. Avatar de francisco
    francisco

    bueno, que bien que me respondieras, gracias, y me podrias enviar la imagen del circuito, pero no la del pbc, si no la que pusiste mas arriba, es que la que hay ahí no se ve muy bien, osea no leo las letras mas pequeñas. si puedes seria genial. chaooo.

  10. Avatar de admin
    admin

    Voy a buscar el esquema del circuito, la verdad no es nada del otro mundo, porque todos los pines del micro van a headers, y son los pines de RB0 a RB7 los que comandan los servos. En estos dias actualizo la imágen del esquema y les aviso

  11. Avatar de Gabriel
    Gabriel

    Buenas tardes! felicitaciones por el proyecto, Excelente!!!
    En mi caso debo controlar una mano con 5 servos (1 servo por cada dedo), con el mismo pic, 18f4550. Me darian una mano con el codigo en C, (utilizo el MPLAB IDE v8.30)???
    Muchas Gracias,
    Espero su aporte
    Saludos

  12. Avatar de admin
    admin

    Gracias por tu comentario. El código fuente lo puedes encontrar en el mismo post, y si necesitas alguna ayuda me avisas. Lo que traté de implementar fue un controlador genérico, que se pueda usar en varias aplicaciones; así que no creo que tengas problema en usarlo en tu mano robótica.

  13. Avatar de Lucas
    Lucas

    Hola! Estuve leyendo tu post y quiero decirte que el proyecto es muy, muy bueno… Se ve que sabes mucho del tema… Espero poder, algún día, entender bien el funcionamiento de todo lo que decís…

    Sin embargo lo de destacar, es que hayas compartido tu proyecto y hasta el código fuente.

    Gracias y espero contar con tu ayuda en caso de tener alguna duda…

    Saludos,

    Lucas

  14. Avatar de Alexander
    Alexander

    Hola.
    Muy interesante el proyecto. Tengo una pregunta; se utilizo alguno modelo matemático para modelar la plataforma de movimiento en conjugación con los servos?

  15. Avatar de RODRIGO PÉREZ SOTO
    RODRIGO PÉREZ SOTO

    Me parece muy interesante tu proyecto, quiero realizar algo similar, el problema es que el robot paralelo que tengo que construir tiene que soportar una carga de 15 kg. ¿Crees que sea muy complicado realizar este robot para una carga de este peso?

  16. Avatar de admin
    admin

    Pues mas que complicado, yo lo vería costoso, porque si vas a usar servos, necesitas servos de alto torque, con engranes metálicos, y ver que las juntas y barras de conexión soporten el peso deseado. Aparte de eso, todo funcionaría igual

  17. Avatar de admin
    admin

    Si usé un modelo cinemático para modelar la plataforma. Si quieres puedes revisar mi tesis en este enlace

    http://dspace.ups.edu.ec/bitstream/123456789/1921/14/UPS-CT002354.pdf

    No se por qué pero al pasarla a PDF tiene algunos errores en el texto, pero bueno, podrías revisar los primeros capítulos del texto, donde se explica toda la matemática de la plataforma y su proceso de constricción

Responder a admin Cancelar la respuesta