Verilog Práctico

Capítulo 16. Brazo Robot

13 de abril de 2022

En el siguiente tutorial veremos un ejemplo de aplicación de lo aprendido en el capítulo 15. Diseñaremos un control manual mediante joystick + Alhambra FPGA, de un brazo robot accionado con motores paso a paso.


Para materializar este proyecto voy a reciclar algunos componentes empleados en tutoriales anteriores. El joystick es el mismo que utilicé en El  Juego de la Grúa. Más info aquí y aquí.

El brazo robot lo he sacado de Thingiverse y lo usé en un proyecto con Arduino.

La idea es conectar un Joystick a la Alhambra y mediante unos drivers A4988 controlar el brazo robot.

Esquema

Alimentación


Todo el circuito se alimenta con una fuente principal de 24V. Con un regulador 7812 alimentamos los microswitches del joystick y la Alhambra en el pin Vin. Con el regulador interno de +5VP de la IceZum alimentamos los drivers A4988 y la interfaz de entrada a la FPGA.


Con la fuente principal alimentamos los drivers A4988 en el pin VMOT. He utilizado 24V para que los motores desarrollen más par de giro y muevan con agilidad los ejes del brazo robot. Los motores son NEMA 17 de 1.2 amperios, pero he limitado la corriente a 1A, además he añadido un disipador y ventilación forzada a los drivers.


Interfaz


El joystick está formado por cuatro microswitches (arriba, abajo, derecha, izquierda) + 4 pulsadores (girar derecha, girar izquierda, abrir y cerrar pinza) y la interfaz con la Alhambra la he implementado mediante optoacopladores.


Con el interruptor speed_sel seleccionamos entre velocidad rápida o lenta. Este interruptor no necesita interfaz con la FPGA porque lo he situado junto a la Alhambra.


Stepper Motor Drivers


Como vimos en el capítulo 15, para controlar un driver A4988 (de manera rápida y sencilla) se necesitan únicamente dos señales: STEP y DIR. La señal STEP se conecta en los pines GP0, GP1 y GP2 de la FPGA y las señales DIR para controlar el sentido de giro las conectamos en DD0, DD2 y DD4. 


Para que el brazo robot mantenga su posición, hacemos que los drivers estén siempre habilitados, llevando la señal ENABLE a GND. De esta manera el driver alimenta las bobinas constantemente, haciendo que el eje del motor permanezca fijo en su posición.


Por último, el servo de la pinza lo conectamos en el pin D13.


Para tenerlo todo un poco ordenado, disponemos los componentes sobre una pletina y procedemos a su conexión. 

Código Verilog


El código para la Alhambra es una mezcla de lo visto en los capítulos 15 y 10


A grandes rasgos hay dos partes: 


1. Circuito de control  de los motores

Dos contadores proporcionan las señales de reloj de 50 y 20 Hz, que emplearemos para generar los pulsos.

Dos comparadores generan las señales step1 y step2 de 50 y 20 Hz respectivamente y 10 us de ancho de pulso. Esta es la señal que aplicaremos en la entrada STEP de cada driver A4988.


Con un multiplexor 2-1 seleccionamos entre step 1 / step 2 para mover los ejes a velocidad rápida o lenta.

Con una puerta XOR obtenemos la señal ena_x cuando se activan los microswitches del joystick. Esta señal aplicada en la puerta and AND, abre o cierra el paso de la señal step  hacia el driver correspondiente.

Un circuito combinacional hace la señal dir_x cero o uno para que el motor gire en un sentido u otro. 

Este código se repite para los tres motores. 

2. Circuito de control del servo 

Mediante un contador generamos una señal de 50 Hz para los pulsos PWM del servo. 

Con dos Flip-Flop memorizamos cuál de los dos pulsadores de la pinza hemos accionado: abrir o cerrar. 

Con dos puertas AND y una OR seleccionamos qué señal enviamos al servo para que abra o cierre la pinza. 

Lo ponemos todo junto y como son un cerro de líneas de código, mejor lo descargamos al final de la página.


A continuación un vídeo demostrativo de funcionamiento de brazo robot.

Links


Robot Arm MK2

Verilog Práctico. Capítulo 10. Servos

Verilog Práctico. Capítulo 15. Motores Paso a Paso



Descargas


Descarga el código Verilog y el esquema en alta resolución aquí abajo.