Вы находитесь на странице: 1из 15

Control de motores paso a paso sin ser un experto programador.

Una investigacin por Juan Antonio Molina Tondop.

Hablaremos en los temas siguientes acerca de la fuente libre y abierta Grbl un software de
alto rendimiento para controlar el movimiento de mquinas, que hacen las que las cosas
se muevan, y que se ejecuten desde el Arduino a travs de Motores paso a paso.
La mayora de las impresoras 3D de cdigo abierto tienen Grbl en sus corazones. Ha sido
adaptado para su uso en cientos de proyectos, incluyendo cortadoras lser, mquinas
CNC, escritores de mano automtico, los perforadores de agujeros, pintores de grafiti y
mquinas de dibujo excntricos. Debido a su requisito de hardware frugal rendimiento,
simplicidad, el Grbl ha crecido poco a poco hasta convertirse en un fenmeno de cdigo
abierto.
En 2009, El autor original del firmware GRBL es el noruego Simen Svale ^_
Skogsrud (http://bengler.no/grbl) apareci en la comunidad de cdigo abierto con la
liberacin de las primeras versiones de Grbl (inspirados por el intrprete GCode en el
Arduino de Mike Ellery ). Desde 2011, Grbl sigue adelante como un proyecto de cdigo
abierto impulsado por la comunidad bajo la direccin pragmtica de Sungeun K. Jeon.
La teora 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 ms que tener
nuestra propia mquina controlada por ordenador. Quiero mi CNC =)

ndice

Lenguaje G-CODE

GRBL aparece en la escena del Arduino

Porqu deberas usar GRBL


Qu proyectos usan GRBL?

Quieres una aceleracin suave? Este es tu firmware


Qu es el Look Ahead Planning y porqu lo necesitas
Adaptive Multi-Axis Step Smoothing
Linux y Mquinas CNC
Marlin para la Impresora 3D
Ahora te toca Instalar GRBL
Compilar GRBL
Compilar GRBL desde lnea de comandos (para usuarios expertos)
Cmo Configurar GRBL
Qu es y cmo configurar el Homing
Conectando los drivers a mano
Cmo Hackear el GRBL y hacer tus propios comandos
Ahora te toca a ti

Lenguaje G-CODE
La teora de los motores paso a paso es sencilla. Cuando el Arduino manda
un pulso al driver del motor, este avanza un pasito. La tcnica es muy
popular en las mquinas robotizadas porque como sabes cuantos pulsos
has enviado, sabes cunto ha avanzado la mquina. Lo que necesitas es
pasar de un lenguaje de pulsos, a algo ms 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 difcil saber lo que va
a hacer la mquina exactamente. Lo que queremos es decir avanza 10
centmetros. Mucho ms til.
La forma ms o menos estndar de comunicarse con un robot es usando el
lenguaje G Code. Es un sencillo sistema de texto con los movimientos de la
mquina. Es uno de los formatos ms veteranos, ya que su primera versin
se remonta a los aos 50.
Las mquinas robotizadas se denominan CNC, y viene de Computador de
Control Numrico. El lenguaje universal de las mquinas CNC se llama GCode. Es un fichero de texto con todos los movimientos de la mquina.
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 posicin 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 rpido.
Avanza todos los ejes de tal forma que llegue lo antes posible.
Qu ocurre en ese caso? Que la velocidad de movimiento es la mxima,
pero los movimientos no van en lnea recta. Si los motores X e Y avanzan
la velocidad mxima (por ejemplo, a 200 mm por minuto) la mquina hace
una lnea 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 posicin concreta, y no nos importa la ruta que tome, slo
la velocidad.
G01 es avance en lnea recta. Se usa cuando estamos cortando y s que
nos importa la ruta que tome la mquina.
Si queremos que la mquina haga una lnea recta, uno de los motores tiene
que ir ms lento que el otro, para que se mantenga por el rumbo que
queremos.
Lo mejor es verlo con esta infografa (no seis muy malos conmigo):

La buena noticia es que no tenemos que escribir el G Code a mano. La


mayora de programas tienen formas de exportar y generar G Code por
nosotros.
Puedes disear sus logotipos en Adobe Illustrator, Corel Draw o Inkscape
(si quieres tener todo Open Source) y exportar a G-code usando un plugin.
Si ests 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 fcil encontrar ayuda.

Asi que, con un Arduino, una placa preparada para CNC (hablaremos de
esto en muy poco tiempo!), unos drivers como los Pololu A4988 o los ms
potentes DRV8825, y unos motores paso a paso, ya tienes toda la
electrnica 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 mquina
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 principio del movimiento, el firmware va subiendo la velocidad 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.

Este es el ncleo del algoritmo de GRBL. Despedazar los movimientos en


trapecios para cada motor. Dividir los movimientos en una lista de lneas
rectas y calcular la aceleracin y frenada de cada segmento, en cada eje.
La lista de trapecios se envan a la parte ms importante del programa,
la interrupcin 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 aceleracin en un movimiento sencillo, pero el GRBL va un
paso
ms
all
y calcula
las
aceleraciones
segn
los
movimientos futuros de la mquina. Una caracterstica fundamental para
que las lneas y las curvas sean suaves y fluidas.
El G-Code nos define los movimientos lnea a lnea. Avanza tantos
centmetros a la derecha, ahora avanza en otra direccin, y as hasta
terminar de cortar nuestra pieza
Imagnate que el programa le dice que avance en linea recta a toda
velocidad durante un buen rato. El cabezal de la mquina ir a toda pastilla
hasta el final.
Entonces pueden pasar 2 cosas.
La primera opcin 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 lnea continua pero con
una mnima diferencia? Por ejemplo, si solo nos desviamos unos grados de
nuestro rumbo. Entonces no hace falta frenar, el cabezal puede mantener
la velocidad y todo ir ms suave. Incluso las marcas sern ms limpias.
Lo que hace GRBL es leer las siguientes lneas 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 lo que
le va a venir ms adelante.

Adaptive Multi-Axis Step Smoothing


GRBL usa el algoritmo de Bresenham para calcular el movimiento de los
ejes. Los que sepan algo de programacin grfica conocern 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 mnima de avance. Si tu
mquina necesita ir muy despacio (1 mm por minuto o algo asi) entonces
no podrs usar esta tcnica, pero bueno, tu movimiento ya ser suave de
todos modos

Linux y Mquinas CNC


Estoy seguro que en algn momento te has preguntado por qu no usar un
procesador ms potente para mover una CNC. Por ejemplo, por qu no usar
una Raspberry Pi para hacer los clculos.
El problema est en cmo linux maneja el tiempo.
En un procesador ms avanzado (que ejecuta linux), es el kernel quin
gestiona la interrupcin 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 interrupcin, es posible que bloquee todo. Y cuando digo
todo, digo absolutamente todo: el ratn, la tarjeta de video, la conexin 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. Segn la CPU disponible, y los recursos que estn
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 hara
que nuestro programa funcionase ms lento. Y si estamos cortando un
crculo con la CNC, puede que perdamos pasos, y el circulo se parezca ms
a un huevo.
En todo lo que tiene que ver con motores usamos un procesador tipo
Arduino. Tcnicamente lo llamamos de tiempo real, porque si programas para
que se lance una interrupcin cada 100 milisegundos, va a hacerlo
exactamente en ese momento.

Marlin para la Impresora 3D


Estoy seguro que has escuchado alguna vez sobre el firmware Marlin para
las impresoras 3D. Es el firmware ms usado para la RAMPS 1.4, por
ejemplo.
Pues si miras el cdigo, sobre todo la parte de movimientos, vers que el
Marlin no es ms que un GRBL con vitaminas.
La base es la misma. Lo que han aadido los programadores es toda la
gestin de temperaturas, lo que mantiene el extrusor caliente mientras
hacemos la pieza. Tambin han metido la parte del men y la pantalla LCD,
que es un trabajo importante.
Adems de eso, el GCODE tiene una seccin de comandos, M (de
machine). Por decirlo de alguna manera, cada mquina tiene sus
peculiaridades. Por ejemplo, una mquina puede necesitar que hagamos
un pitido. En el caso de Marlin, han programado el comando M300.
M300 S300 P1000

Aqui tienes la lista de comandos GCODE que se usan en Marlin y en los


firmwares ms comunes de impresoras 3D.

Ahora te toca Instalar GRBL


GRBL mantiene toda su configuracin en la memoria EEPROM, que es una
memoria permanente que llevan los procesadores. Puede pasar que en
algn caso, los datos que ya estaban almacenado en el arduino, afecte a la
configuracin por defecto. Si has usado el Arduino antes, es
aconsejable borrar la memoria EEPROM.

Compilar GRBL
Este proyecto est muy testeado y ya ha pasado por varias revisiones
completas. Afortunadamente, el cdigo se compila sin problema desde el
IDE de Arduino.
Lo primero de todo es descargar el cdigo fuente de GRBL
desde github.com
Lo que vamos a hacer es agregar el GRBL como una librera. Para ello,
aadimos 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 librera, te agrega automticamente 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 podremos ver si est correctamente configurado, simplemente
conectndonos al puerto serie (recuerda que la velocidad es de 115200
baudios)

Compilar GRBL desde lnea de comandos (para usuarios


expertos)
Si ests usando linux, no es necesario que compiles desde Arduino, puedes
hacerlo desde lnea de comandos, siempre que tengas instalado el avrgcc (el compilador de c para AVR) y el paquete avr-libc. Para enviar el

binaro a nuestro arduino usaremos avrdude. La propia distribucin de


GRBL incluye las instrucciones para compilar todo.

Cmo Configurar GRBL


Para comunicarnos con el GRBL, lo podemos hacer directamente a travs
de un terminal serie, como minicom. Pero si preferimos algo ms grfico,
podemos usar el programa Universal-G-Code-Sender
Otro programa que est muy de moda es el bCNC. En windows es algo ms
complicado de instalar porque funciona con python, y hay que instalar
alguna libera. Te lo recomiendo slo 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
abre el puerto serie sin tener que instalar nada.
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
intrprete incluye una serie de comandos especiales.
$$ : Esto nos muestra una lista con todos los parmetros que podemos
configurar.
Lo primero es ajustar los pasos por milmetro. Esto es, cuantos pasos tiene
que enviar el Arduino al motor para que tu CNC avance 1 mm.
Vamos a hacer los clculos. 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 tenemos que 25 pasos
avanza 1 mm.
Los drivers suelen tener micropasos. Esto es, que dividen 1 paso completo,
en 16 pequeos avances, para que el movimiento sea ms suave y
fluido. Asi que, si tenemos una varilla roscada de 8mm, con un motor de 200
pasos, a 16 micropasos, la frmula seria :

(200*16) / 8 = 400 pasos!


De este modo, para configurar el eje X, escribiremos:
$101 = 400
Sencillo verdad! Y adems, automticamente queda almacenado en la
memoria EEPROM.

El siguiente valor que vamos a cambiar es la velocidad por defecto. Esto


depende muchsimo de nuestra mquina. 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 mquina, o metacrilato con el lser. Con este comando calibramos la
velocidad mxima 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 lser
va a pasar demasiado rpido sobre el metacrilato, por poner un ejemplo.
$5 es la velocidad de bsqueda. Esto es el movimiento cuando la maquina
no est cortando (el comando G0 en gcode). Por ejemplo, cuando le
decimos que vaya a una posicin antes de bajar para cortar.
Obiamente, podemos ir ms rpido 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
rpido, 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 lser no va a quemar suficientemente. Pero depende tambin del
material, y de la fresa que estemos usando.
A mi me ha pasado que una mquina parece que est bien calibrada, pero
cuando se calienta, por ejemplo, o al funcionar durante una hora, la friccin
hace que le cueste ms esfuerzo a los motores moverse, y acaban
bloqueados.
Mi consejo personal aqu es que si ests empezando, no vayas a lo ms
rpido posible. Primero acostmbrate a usar la CNC y cntrate en que el
resultado del corte sea bueno y limpio. No pasa nada porque tarde una hora
ms en terminar. Cuando esto lo tengas dominado, ya irs subiendo
velocidad. Pero tendrs un resultado anterior para comparar si te merece la
pena ir ms rpido.

Lista de comandos de GRBL


$$ (mostrar los parmetros 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 y cmo configurar el Homing


Una de las operaciones ms importantes en una CNC es el Home. Cuando
encendemos la mquina, 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 exctamente el principio del movimiento.
La mquina se mueve despacio hasta que hace click en el botn, y entonces
sabe que tiene que empezar desde ese punto. Por este motivo, los botones
se denominan lmites.

Homing es el proceso de buscar estos botones y poner la posicin en cero.


GRBL comienza buscando la Z mxima (para subir el cabezal si tenemos
una fresadora), y asi nos podemos mover tranquilamente sin saber que
vamos a tocar nada. Despus buscamos el eje X y el eje Y.
Si activamos el Homing, la mquina 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 lmites de la X y la Y no es tan crtico, pero
el lmite de la Z es muy importante. Nos dice dnde est la punta de la fresa.
Y tiene que estar exctamente en la posicin 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 los drivers a mano


Si usas una placa tipo Arduino CNC Shield, no tienes ms que conectar
los drivers en el lugar adecuado.
Pero quizs ests 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 cmo conectar los pines del Arduino
Uno, al driver de los motores, limites, etc.

Esquema

de

coneexin de Arduino uno y gbrl

Cmo Hackear el GRBL y hacer tus propios comandos


Si realmente quieres llevar tu proyecto al siguiente nivel, y tienes algo de
conocimientos de programacin, puedes ir un paso ms all y escribir
comandos de GCODE especficos 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
Cmo puedes hacerlo? Muy sencillo.
En el cdigo 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 mquina, hay muy pocos.
Ah es donde meteremos nuestras garras.

Si quieres hacer algo especifico, tienes que asignarte un numero, por


ejemplo, el 1234, y escribir:
case
{
}

1234:

Ahi meteramos el cdigo de lo que queremos ejecutar cuando recibimos 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
dems, como el parseado de los comandos o la lectura del puerto serie.

Вам также может понравиться