GRBL A FONDO.pdf
Short Description
Download GRBL A FONDO.pdf...
Description
Control d e motores paso a paso paso si n ser un experto pro gramador. Una investigación por Juan Antonio Molina Tondopó.
Hablaremos en los temas siguientes acerca de la fuente li bre y abierta Grbl un software de alto rendimiento para controlar el movimiento de máquinas, que hacen las que las cosas se muevan, y que se ejecuten desde el Arduino a través de Motores paso a paso. La mayoría de las impresoras 3D de código abierto tienen Grbl en sus corazones. Ha sido adaptado para su uso en cientos de proyectos, incluyendo cortadoras láser, máquinas CNC, escritores de mano automático, los perforadores de agujeros, pintores de grafiti y máquinas de dibujo excéntricos. Debido a su requisito de hardware frugal rendimiento, simplicidad, el Grbl ha crecido poco a poco hasta convertirse en un fenómeno de código abierto. En 2009, El autor original del firmware f irmware GRBL es el noruego Simen Svale ^_ Skogsrud (http://bengler.no/grbl) apareció en la comunidad de código abierto con la liberación de las primeras versiones de Grbl (inspirados por el intérprete GCode en el Arduino de Mike Ellery ). Desde 2011, Grbl sigue adelante como un proyecto de código abierto impulsado por la comunidad bajo la dirección pragmática de Sungeun K. Jeon. La teoría es sencilla. Necesitamos unos motores paso a paso, unas varillas, unas coples, unos drivers y un Arduino que controle todo. No hay nada que nos fascine más que tener nuestra propia máquina controlada por ordenador. Quiero mi CNC =)
Índice
Lenguaje G-CODE
GRBL aparece en la escena del Arduino
Porqué deberías usar GRBL ¿Qué proyectos usan GRBL?
¿Quieres una aceleración suave? Este es tu firmware Qué es el Look Ahead Planning y porqué lo necesitas Adaptive Adaptiv e Multi-Axis Multi-Axis Step Smoothin Smoothing g Linux y Máquinas CNC Marlin para la Impresora 3D Ahora te te toca Instala Instalarr GRBL GRBL Compilar GRBL Compilar GRBL desde línea de comandos (para usuarios expertos) Cómo Configurar GRBL Qué es y cómo configurar el Homing Conectando los drivers a mano Cómo Hackear el GRBL y hacer tus propios comandos Ahora te te toca a ti
Lengu Len guaje aje G-COD G-CODE E La teoría de los motores paso a paso es sencilla. Cuando el Arduino manda un pulso al driver del motor, este avanza un pasito. La técnica es muy popular en las máquinas máquinas robotizadas porque como sabes cuantos pulsos has enviado, sabes cuánto ha avanzado la máquina. Lo que necesitas es pasar de un lenguaje de pulsos, a algo más sencillo de explicar, como son las coordenadas de los motores. Por decirlo de alguna manera, cuando hablamos con el motor, le decimos: quiero que avances 200 pulsos . Pero así es difícil saber lo que va a hacer la máquina exactamente. Lo que queremos es decir avanza 10 centímetros. Mucho más útil. La forma más o menos estándar de comunicarse con un robot es usando el lenguaje G Code. Es un sencillo sistema s istema de texto con los movimientos de la máquina. Es uno de los formatos más veteranos, ya que su primera versión se remonta a los años 50. Las máquinas robotizadas se denominan CNC, y viene de “C omputador de Control Numérico”. El lenguaje universal de las máquinas CNC se llama G-
Code. Es un fichero de texto con todos los movimientos de la máquina. No voy a entrar en los detalles del g code, pero para que tengas una idea, un ejemplo de los comandos: G00 X0Y0Z0
Esto nos lleva a la posición 0,0,0 G01 Z1 F5
Esto avanza lentamente la altura 1 mm, a la velocidad de 5 mm/minuto (feed rate) G00 es avance rápido.
Avanza todos Avanza todos los los ejes de tal tal forma forma que que llegue llegue lo lo antes antes posible. posible. ¿Qué ocurre en ese caso? Que la velocidad de movimiento es la máxima, pero los movimientos no van en línea recta. Si los motores X e Y avanzan la velocidad máxima (por ejemplo, a 200 mm por minuto) la máquina hace una línea de 45º, hasta que uno de los motores llega al borde.
Este comando se usa cuando la CNC no está cortando, y queremos mover el cabezal a una posición concreta, y no nos importa la ruta que tome, sólo la velocidad. G01 es avance en línea recta. Se usa cuando estamos cortando y sí que nos importa la ruta que tome la máquina. Si queremos que la máquina haga una línea recta, uno de los motores tiene que ir más lento que el otro, para que se mantenga por el rumbo que queremos. Lo mejor es verlo con esta infografía (no seáis muy malos conmigo): c onmigo):
La buena noticia es que no tenemos que escribir el G Code a mano. La mayoría de programas tienen formas de exportar y generar G Code por nosotros. Puedes diseñar sus logotipos en Adobe Illustrator, Corel Draw o Inkscape (si quieres tener todo Open Source) y exportar a G-code usando un plugin. Si estás usando una impresora 3D, programas como Cura o Slic3r , precisamente lo que hacen es convertir tú modelo 3D en un programa de G-Code que luego enviamos a la impresora.
Todo el mundo tiene un Arduino cerca por hobby. Y el entorno de desarrollo es popular y muy documentado. GRBL es un firmware que está funcionando en muchos proyectos, con una base de usuarios importante. Si tienes dudas o algo no te funciona, va a ser muy fácil encontrar ayuda.
Asi que, con un Ardui Arduino, no, una placa preparada preparada para CNC (hablaremos (hablaremos de esto en muy poco tiempo!), unos drivers como los Polol Pololu u A4988 A4988 o los más potentes DRV8825, y unos motores paso a paso, ya tienes ti enes toda la electrónica para empezar. La primera vez que pensamos en mover motores paso a paso, nos imaginamos el arduino enviando un pulso para mover el motor. Pero aquí hay un problema: la inercia. Cuando el motor está parado, cuesta mucho trabajo hacer que la máquina pase de estar en reposo a estar en movimiento. Por este motivo, tenemos que ir acelerando poco a poco (igual que cuando arrancamos el coche). Al princip principio io del movim movimiento iento,, el firmwa firmware re va subien subiendo do la velocida velocidad d poco a poco hasta llegar a la velocidad deseada, y ahí se mantiene hasta que va llegando al final del movimiento. Entonces va decelerando poco a poco hasta que se para, o comienza un nuevo segmento. Lo que hace el GRBL es convertir cada movimiento en una lista de trapecios trapecios..
Este es el núcleo del algoritmo de GRBL. Despedazar los movimientos en trapecios para cada motor. Dividir los movimientos en una lista de líneas rectas y calcular la aceleración y frenada de cada segmento, en cada eje. La lista de trapecios se envían a la parte más importante del programa, la interrupción de timer , donde se transforman esos trapecios en pulsos, a una velocidad perfectamente definida para que los motores se muevan de forma coordinada. Todo esto se tiene que ejecutar de forma perfectamente sincronizada.
Qué es el Look Ahead Planning y porqué lo necesitas Hablamos de la aceleración en un movimiento sencillo, pero el GRBL va un paso más allá y calcula las aceleraciones según los movimientos futuros futuros d de e la máquina . Una característica fundamental para que las líneas y las curvas sean suaves y fluidas. El G-Code nos define los movimientos línea a línea. Avanz Avanza a tanto tantos s centímetros a la derecha, ahora avanza en otra dirección , y así hasta terminar de cortar nuestra pieza Imagínate que el programa le dice que avance en linea recta a toda velocidad durante un buen rato. El cabezal de la máquina irá a toda pastilla hasta el final. Entonces pueden pasar 2 cosas. La primera opción es que el siguiente movimiento sea un giro brusco, por ejemplo, en una esquina. El cabezal tiene que empezar a frenar mucho antes de llegar a la esquina, si no, con la inercia, se pasará de frenada y nos quedará una marca fea. ¿Pero qué pasa si la en vez de un giro brusco, la línea continua pero con una mínima diferencia? Por ejemplo, si solo nos desviamos des viamos unos grados de nuestro rumbo. Entonces no hace falta frenar, el cabezal puede mantener la velocidad y todo irá más suave. Incluso las marcas serán más limpias. Lo que hace GRBL es leer las siguientes líneas del programa, y recalcular la lista de trapecios y sus aceleraciones, teniendo en cuenta los siguientes movimientos. De esta forma, el cabezal frenará antes, porque conoce c onoce lo que le va a venir más adelante.
Adaptive Multi-Axis Step Smoothing GRBL usa el algoritmo de Bresenham para calcular el movimiento de los ejes. Los que sepan algo de programación gráfica conocerán este popular algoritmo. Lo que hace GRBL es subdividir los movimientos rectos, y suavizarlos (como el antialias de los videojuegos, pero aplicado a CNC). Esto se nota especialmente cuando un eje es dominante en el movimiento. El único problema es que ahora hay una velocidad mínima de avance. Si tu máquina necesita ir muy despacio (1 mm por minuto o algo asi) entonces no podrás usar esta técnica, pero bueno, tu movimiento ya será suave de todos modos
Linux y Máquinas CNC Estoy seguro que en algún momento te has preguntado por qué no usar un procesador más potente para mover una CNC. Por ejemplo, por qué no usar una Raspberry Pi para hacer los cálculos. El problema está en en cómo có mo linux l inux maneja el tiempo.
En un procesador más avanzado (que ejecuta linux), es el kernel quién gestiona la interrupción del timer, y bloquea el acceso al resto de programas. Y esto es algo positivo, ya que es lo que permite que podamos usar las Raspberry Pi o un ordenador normal. Si un programa logra tomar el control de esta interrupción, es posible que bloquee todo. Y cuando digo todo, digo absolutamente todo: el ratón, la tarjeta de video, la conexión de internet, etc. Por eso el kernel nos protege para que eso no ocurra. El kernel de linux asigna un tiempo a cada programa. El servidor web, el gestor de ventanas, etc. Según la CPU disponible, y los recursos que están usando en ese momento, permite ejecutar un programa u otro. Por este motivo, dependemos del resto de programas para garantizar que todo se llama a tiempo. Si un programa pide mucha CPU, el kernel haría que nuestro programa funcionase más lento. Y si estamos cortando un círculo con la CNC, puede que perdamos pasos, y el circulo se parezca más a un huevo. En todo lo que tiene que ver con motores usamos un procesador tipo Arduino. Arduin o. Técnica Técnicament mente e lo llama llamamos mos de tiempo real, porque si programas para que se lance una interrupción cada 100 milisegundos, va a hacerlo exactamente en ese momento.
Marlin para la Impresora 3D Estoy seguro que has escuchado alguna vez sobre s obre el firmware Marlin para las impresoras 3D. Es el firmware más usado para la RAMPS 1.4, por ejemplo. Pues si miras el código, sobre todo la parte de movimientos, verás que el Marlin no es más que un GRBL con vitaminas. La base es la misma. Lo que han añadido los programadores es toda la gestión de temperaturas, lo que mantiene el extrusor caliente mientras hacemos la pieza. También han metido la parte del menú y la pantalla LCD, que es un trabajo importante. Además Adem ás de eso, el GCODE tiene una secció sección n de com comandos, andos, M (de “machine”). Por decirlo de alguna manera, cada máquina tiene sus
peculiaridades. Por ejemplo, una máquina puede necesitar que hagamos un pitido. En el caso de Marlin, han programado el comando M300. M300 S300 P1000
Aqui tiene tienes s la lista lis ta de com andos GCODE GCODE que se usan en Marli Marli n y en los firmwares más comunes de impresoras 3D.
Ahora te toca Instalar GRBL GRBL mantiene toda su configuración en la memoria EEPROM, que es una memoria permanente que llevan los procesadores. Puede pasar que en algún caso, los datos que ya estaban almacenado en el arduino, afecte a la configuración por defecto. Si has usado el Arduino antes, es aconsejable bor borrar rar la l a memori a EEP EEPRO ROM M.
Compilar Compil ar GRBL GRBL Este proyecto está muy testeado y ya ha pasado por varias revisiones completas. Afortunadamente, el código se compila sin problema desde el IDE de Arduino. Lo primero de todo es descargar el código fuente de GRBL desde github.com Lo que vamos a hacer es agregar el GRBL como una librería . Para ello, añadimos la carpeta grbl desde el menú add library en el IDE de Arduino. Una vez hagamos esto, si queremos compilar el GRBL, tenemos que ir al menú de programas de ejemplo de Arduino, y buscar el grbl ( sí, al agregar la librería, te agrega automáticamente el GRBL como programa de ejemplo!)
Recordad que hay que seleccionar la placa Arduino Uno! (GRBL por defecto viene preparado para esta placa). Y antes de compilar, seleccionamos el puerto serie donde tenemos conectado el Arduino. Ya está! Le damos a compilar y upload, y nos subirá el nuevo firmware a nuestro Arduino. Ahora podre podremos mos ver si está correc correctame tamente nte confi configurad gurado, o, simple simplement mente e conectándonos al puerto serie ( recuerda q ue la veloci v eloci dad es de 115 11520 200 0 baudios )
Compilar GRBL desde línea de comandos (para usuarios expertos) Si estás usando linux, no es necesario que compiles c ompiles desde Arduino, puedes hacerlo desde línea de comandos, siempre que tengas instalado el avrgcc gc c (el compilador de c para AVR) y el paquete avr-libc . Para enviar el
binaro a nuestro arduino usaremos avrdude. La propia distribución de GRBL incluye las instrucciones para compilar todo.
Cómo Configurar GRBL Para comunicarnos con el GRBL, lo podemos hacer directamente a través de un terminal serie, como minicom. Pero si preferimos algo más gráfico, podemos usar el programa Universal-G-Code-Sender Otro programa que está muy de moda es el bCNC. En windows es algo más complicado de instalar porque funciona con python, y hay que instalar alguna libería. Te lo recomiendo sólo si eres un usuario experimentado . Si utilizas windows, para conectarte por primera vez y ver si el GRBL funciona, te recomiendo usar putty . Es un ejecutable muy sencillo que nos t enerr que inst alar nada. abre el puerto serie sin tene Esta es una aplicacion en Java que nos permite enviar ficheros gcode e interactuar con nuestra CNC de forma sencilla. GRBL interpreta directamente G-CODE, pero para configurar tu CNC, el intérprete incluye una serie de comandos especiales. $$ : Esto nos muestra una lista con todos los parámetros que podemos
configurar. Lo primero es ajusta ajustarr los pasos por milímetro . Esto es, cuantos pasos tiene que enviar el Arduino al motor para que tu CNC avance 1 mm. Vamos a hacer los cálculos. El motor stepper normalmente es de 200 pasos. Esto quiere decir que con 200 pasos, el motor da una vuelta completa. Necesitamos el paso de nuestra varilla roscada. Si es de 8mm, con 200 pasos avanzaremos esos 8 mm. Dividiendo Di vidiendo tenemos que 25 pasos avanza 1 mm. Los drivers suelen tener micropasos. Esto es, que dividen 1 paso pas o completo, en 16 pequeños avances, para que el movimiento sea más suave y fluido. Asi que, si tenemos una varilla roscada de 8mm, con un motor de 200 pasos, a 16 micropasos, la fórmula seria :
(200*16) / 8 = 400 pasos! De este modo, para configurar el eje X, escribiremos: $101 = 400
Sencillo verdad! Y además, automáticamente queda almacenado en la memoria EEPROM.
El siguiente valor que vamos a cambiar es la velocidad por defecto . Esto depende muchísimo de nuestra máquina. Si está bien engrasada, si usa husillos o patines lineales, etc. $4 es para la velocidad de avance. Imaginad que estamos cortando madera con la máquina, o metacrilato con el láser. Con este comando calibramos la velocidad máxima a la que podemos realizar este corte (el comando G1 en gcode). Esto quiere decir que, aunque el gcode diga que vamos a cortar a 1000mm por minuto, nosotros nunca pasaremos de 500mm/min. Con esto nos aseguramos que el taladro no se va a romper cuando está cortando, porque pusimos demasiada velocidad en el gcode, o que el láser va a pasar demasiado rápido sobre el metacrilato, por poner un ejemplo. $5 es la velocidad de búsqueda. Esto es el movimiento cuando la maquina no está cortando (el comando G0 en gcode). gc ode). Por ejemplo, cuando le
decimos que vaya a una posición antes de bajar para cortar. Obiamente, podemos ir más rápido cuando la maquina no está cortando, que cuando estamos cortando.
Lo mejor es bajar la velocidad, como a 50 mm/min. Probamos, y vamos subiendo. Si nos pasamos, lo que va a ocurrir es que el motor no es capaz de ir tan rápido, y se bloqueará. Asi que tenemos que ir buscando la velocidad adecuada. Si estamos cortando, lo que nos va a pasar es que se va a romper la fresa, o el láser no va a quemar suficientemente. Pero depende también del material, y de la fresa que estemos usando. A mi me ha pasado que una una máquina máquina parece parece que está está bien bien calibrada, calibrada, pero cuando se calienta, por ejemplo, o al funcionar durante una hora, la l a fricción hace que le cueste más esfuerzo a los motores moverse, y acaban bloqueados . Mi consejo personal aquí es que si estás empezando, no vayas a lo más rápido posible . Primero acostúmbrate a usar la CNC y céntrate en que el resultado del corte sea bueno y limpio. No pasa nada porque tarde una hora más en terminar. Cuando esto lo tengas dominado, ya irás subiendo velocidad. Pero tendrás un resultado anterior para comparar si te merece la pena ir más rápido .
Lista List a de comandos de GRBL GRBL $$ (mostrar los parámetros de GRBL) $# (mostrar los parametros #) $G (mostrar el estado del parseador de GCODE) $I (mostar la informacion del firmware, build, etc) $N (mostrar los bloques de inicio) $x=value (almacenar un valor el la EEPROM) $Nx=line (almacenar un bloque de inicio) $C (comprobar el modo actual de GCODE) $X (desactivar el bloqueo de alarma) $H (hacer un ciclo homing) ! (pausar el avance) ~ (reiniciar un ciclo o el continuar despues de la pausa) ? (mostrar el estado actual, posicion, etc) ctrl-x (reiniciar GRBL)
Qué es es y cómo có mo config co nfigurar urar el Homin Homing g Una de las operaciones más importantes en una CNC es el Home. Cuando encendemos la máquina, el Arduino no tiene ni idea de donde está y no sabe desde donde tiene que empezar a contar. Para poder hacer esto, tenemos que incluir unos botones que nos indican donde está exáctamente el principio del movimiento. La máquina se mueve despacio hasta que hace click en el botón, y entonces sabe que tiene que empezar desde ese punto. Por este motivo, los botones se denominan límites.
Homing es el proceso de buscar estos botones y poner la posición posic ión en cero. GRBL comienza buscando la Z máxima (para subir el cabezal si tenemos una fresadora), y asi nos podemos mover tranquilamente sin saber que vamos a tocar nada. Después buscamos el eje X y el eje Y. Si activamos el Homing, la máquina estará bloqueada hasta que hagamos el Homing! Esto es importante saberlo. Yo me pasé un buen rato enviando comandos sin recibir respuesta (forever alone!). Con esto nos defendemos de error de posicionamiento. Para activar el Homing, usaremos el comando $22=1 , para ejecutar el homing, usamos el comando $H. En una CNC casera, ajustar los límites de la X y la Y no es tan crítico, pero el límite de la Z es muy importante. Nos dice dónde está la punta de la fresa. Y tiene que estar exáctamente en la posición adecuada si quieres que los cortes tengan la profundidad que has configurado. Mi consejo es invertir un poco en un sensor inductivo (si tenemos algo de metal) o un sensor capacitivo para que detecte siempre la Z en el mismo punto. Yo he perdido incontables horas de pruebas y ajustes por culpa de esto.
Conectando Conectand o los drivers a mano Si usas una placa tipo Ar Ardu duin ino o CNC Shiel Sh ield d , no tienes más que conectar los drivers en el lugar adecuado. Pero quizás estás montando tu propio proyecto, y vas a conectar los drivers mediante cables, porque quieres probar antes, o por el motivo que sea. En ese caso, te dejo el esquema de cómo conectar los pines del Arduino Uno, al driver de los motores, limites, etc.
Esquema
de
coneexión de Arduino uno y gbrl
Cómo Hackear el GRBL y hacer tus propios comandos Si realmente quieres llevar tu proyecto al siguiente nivel, y tienes algo de conocimientos de programación, puedes ir un paso más allá y escribir comandos de GCODE específicos para tu proyecto. ¿A qué me refiero? igual que la impresora 3D tiene comandos para encender y apagar el extrusor o la cama caliente, tu robot puede necesitar un comando especial para que empiece a bailar o para que se autodestruya ¿Cómo puedes hacerlo? Muy sencillo. En el código del grbl hay un fichero de texto, gcode.c , donde se analizan los comandos que vamos recibiendo. Si miras la parte donde se analizan los comandos de tipo M (de machine), ves que tiene un gran case donde va configurando los valores. Como es muy especifico de la máquina, hay muy pocos. Ahíí es donde Ah don de meteremo met eremos s nues n uestr tras as garras gar ras..
Si quieres hacer algo especifico, tienes que asignarte un numero, por ejemplo, el 1234, y escribir: case { }
1234:
Ahi mete meteríamo ríamos s el código de lo lo que que queremo queremos s ejecuta ejecutarr cuando cuando recibi recibimos mos el G-CODE M1234 ,por ejemplo, encender un pin de Arduino, o lo que se te ocurra. (ya te veo pensando la cantidad de cosas que puedes hacer con este truco!) Como os he dicho, esto ya depende de vuestro proyecto, y de vuestra capacidad para programar. La ventaja del GRBL es que ya hace todo lo demás, como el parseado de los comandos c omandos o la lectura del puerto serie.
View more...
Comments