Archivo de la categoría: CNC

Prototipo PCB de doble cara con CNC

Estos días he estado perfeccionando cómo hacer un prototipo de PCB con la fresadora CNC.

Antes que nada he tenido que implementar el auto-probe para compensar la nivelación superficial de la placa donde quiero fresar. Este proyecto requiere la máxima precisión. El tema del auto-probe fue especialmente rápido y fácil de conseguir, cosa rara pues las cosas fáciles normalmente se complican de forma inesperada… Está documentado en [1].

Una vez el auto-probe está funcionando, ya puedo mirar de hacer las placas de doble cara. El principal reto está en girar la placa y que los agujeros en una capa y en la otra coincidan exactamente. Como se ve en la foto, esto se ha conseguido bastante bien, y la buena noticia es que hay margen para centrar bien los agujeros en la capa top (pues en la foto se ve que los agujeros no están exactamente centrados). Todo está bien documentado en el enlace [2]

Ahora que ya tengo el proceso bastante claro, ya puedo afrontar un pequeo proyecto que requiere una placa de doble cara. Consiste en montar un mini-ordenador, con finalidad puramente académica, con un microprocesador Z80 [3]. Pero antes de hacerlo, primero vendrá el programador de EEPROM [4], pues al ordenador se le ha de meter un programa en una EEPROM. No sé si todo estará listo antes de vacaciones.

En el pasado había hecho placas con el método UV y con el método de la plancha. Hay que decir que siempre he tenido dificultades varias en consegur placas con cualidad óptima. Ahora, con la CNC, estoy buscando una manera rápida de hacer prototipos. En gran medida creo que lo he conseguido. Ahora bien, el proceso, aunque satisfactorio, es más lento de lo que me pensaba.

Juego del Simon. Extraescolar de Robótica en el Balmes

Ya hemos acabado la extraescolar de Robótica al Balmes. Este año hemos programado el juego del Simon con una Raspberry Pi. Toda la documentación (y la programación didáctica) está en la wiki [1].

Durante estas 13 sesiones hemos ido trabajando sobre diferentes temas, que nos llevaban al objetivo final de hacer un prototipo de Simon:

  • Hemos programado el script con Python, viajando por las diferentes versiones a medida que necesitábamos incorporar nuevas funcionalidades.
  • Hemos conectado botones y LEDs a los pines GPIO de la RPi.
  • Hemos visto cómo, utilizando transistores, podemos disparar desde los pines GPIO señales de 12V para encender tiras de LEDs blancos.
  • Hemos discutido sobre la alimentación de todo el sistema, y alternativas.
  • Hemos discutido sobre cómo producir el sonido y su amplificación.
  • Hemos diseñado el mueble final, utilizando herramientas de fabricación digital como la impresora 3D y la fresadora CNC.

Al final ha sido un curso muy multidisciplinar, hemos tocado muchas cosas, aunque por falta de tiempo, conocimientos e infraestructura, muchas cosas las ha implementado el professor y las ha mostrado en clase. Pero al final la experiencia ha sido enriquecedora para todos.

El resultado final se puede ver en la foto y en este video:

Referencias:

CNC: Del dxf al G-Code. Optimización de caminos

El workflow del CNC consta de tres pasos:

  1. Diseño del modelo o pieza. Se hace con software CAD, como por ejemplo LibreCAD, y el formato de salida estandar es dxf
  2. Generar el G-Code (de lo que va este post). Necesitas un programa que sepa leer el formato dxf (donde están definidas líneas, arcos, polilínies, splines, etc.) y genere el código (G-code) que entienden las fresadoras CNC.
  3. El software que sepa interpretar el G-Code y sepa enviar los comandos a la máquina CNC a través del puerto paralelo. Por ejemplo, LinuxCNC o EMC.

De tota esta tool chain el proceso más complicado es el segundo. Concretamente la optimización de los caminos que hará la máquina CNC tiene mucha importancia en el resultado final.

Vamos a verlo con un ejemplo simple y clarificador. Estamos utilizando el dxf2gcode, y realmente va muy bien. Está escrito en Python. Tiene una interficie gráfica, pero lo mejor es que se puede ejecutar en modo consola. Frente a un problema que he tenido y que ya está solucionado, he tenido que buscar una alternativa. Me he encontrado con el proyecto dxf2G (los nombres no son muy originales, ya veis), que está escrito en lenguaje C, son 3000 líneas de código, y se ejecuta en línea de comandos.

El segundo es un proyecto sencillo que funciona muy bien para pequeños, y del que es interesante estudiar el ódigo. Mirando qué hace y cómo lo hace, se encuentra a faltar que no separa las capas del dxf (normalmente se trabaja con capas porque asociamos las capas a un cambio de herramienta, para trabajar con diferentes diámetros de broca), y sobretodo la optimización de caminos, que sería la part difícil de implementar (se hacen tesis doctorales sobre esta materia).

Lo vemos con un ejemplo de dibujar una línea a una profundidad de 3mm, haciendo dos pasadas de 1,5mm. La manera correcta, como lo hace dxf2gcode es hacer una pasada a 1,5mm, agujerear hasta 3mm, y deshacer el camino hasta volver al inicio de la recta. El trozo de G-Code que genera el dxf2gcode es:

(*** LAYER: 0 ***)
T1 M6
S6000


(* SHAPE Nr: 0 *)
G0 X 0.000 Y 0.000
M3 M8
G0 Z 3.000
F150
G1 Z -1.500
F400
G1 X 60.000 Y 0.000
F150
G1 Z -3.000
F400
G1 X 0.000 Y 0.000
F150
G1 Z 3.000
G0 Z 15.000
M9 M5

En cambio, el dxf2G hace la implementación fácil y costosa en tiempo: vamos al origen de la recta; agujereamos a -1,5; hacemos la pasada de la recta; subimos hasta 6mm para no tocar la pieza; volvemos al origen de la recta; agujereamos hasta -3mm; volvemos a repasar la recta fresando a -3mm.

G0 X0.000000 Y0.000000
G0 Z3.000000
G1 Z0
G1 Z-1.500000
G1 X60.000000 Y0.000000
G0 Z6.000000
G0 X0.000000 Y0.000000
G0 Z3.000000
G1 Z-3.000000
G1 X60.000000 Y0.000000
G0 Z6.000000

Total, el segundo código puede tardar el doble de tiempo que el primero. I es que implementar algoritmos de optimización de caminos (toolpath optimization en inglés) no es cosa fácil.

Portátil de 13 años con puerto paralelo

Ya estoy decidido a conseguir una máquina CNC. Seguramente será la 3040T. Han pasado dos años desde que quería construirme la máquina CNC, o sea que al final me decido por la solución práctica.

He repasado todos los apuntes que tenía de hace dos años, vuelvo a mirar el proyecto LinuxCNC, y veo que las cosas no han cambiado mucho. El puerto paralelo (LPT, conector DB25) continúa siendo necesario. Para comunicarse con máquinas CNC el puerto USB no es una opción fiable, no por la velocidad, sino por la latencia y precisión en el envío de pulsos. Evidentmente hoy día existen soluciones basadas en Raspberry Pi o Arduino, pero no son soluciones estandar en el sentido de que se pueda conectar cualquier máquina CNC. Además, si utilizas una Raspberry Pi como controladora, igualmente necessites el ordenador para diseñar las piezas.

Tenía una torre preparada con LinuxCNC, de hace 2 años, pero buscando una solución más confortable, he pensado en un portátil con puerto paralelo. En el instituto tenemos unos cuantos en el taller para desmontar, y he probado uno, que ha cumplido las expectativas. He instalado LUbuntu 12.04, LinuxCNC, LibreCAD y dxf2gcode, sin especiales problemas. Es un Pentium III a 1,6GHz y 1GB de RAM, y cumple bien las expectativas, un poco lento, claro. Cuando pueda le conectaré los drivers y motores paso a paso que tengo para comprobar que todo funciona correctamente.