Você está na página 1de 11

Uma introdução aos comandos G-Code

Até agora mostramos muitos exemplos de código e mesmo falamos alguns comandos,
mas não dissemos o sentido deles.

O G-Code foi criado no MIT na década de 1950, com as primeiras CNCs. Nasceu para
ser usado principalmente por cartões perfurados — somente mais tarde sendo feita em
texto comum - que passavam instruções pontuais para as máquinas executarem: vá para
a posição X "tal", a posição Y "tal", com velocidade "tal", e baixe o instrumento;
percorra mais 20 unidades positivas no eixo X na mesma velocidade; suba o
instrumento e o desligue.

Não era essencial que humanos entendessem a "linguagem" e portanto, diferente das
linguagens de programação que usamos hoje em dia que usam mnemônicos em inglês
para nos lembrarmos das palavras-chave ("print", "echo", "for", "while", "read", etc.), os
comandos são compactos e representados por uma letra seguida de um número: "G";
por exemplo, G28.

Os comandos "G", aliás, foram os primeiros comandos do G-Code. São chamados de


"comandos preparatórios". Diferentemente de outras linguagens com padronização
oficial e comitês de decisão, o G-Code é uma linguagem extraordinariamente variada,
com comandos e até a sintaxe dependendo muito de implementação específica. Nas
impressoras 3D de mercado, por exemplo, os comandos "G" são usados para operações
herdadas das CNCs, e as outras operações são implementadas por comandos "M", como
“M117”. Os comandos "M" também são chamados de "funções miscelâneas". Nosso
extrusor ou bico não tem esse nome no G-Code; nas CNCs, era uma ferramenta como
broca ou serra, e ferramenta em inglês é "Tool"; o comando de G-Code que seleciona
ferramentas é "T" seguido da numeração da ferramenta, começando por 0 (o primeiro
extrusor é selecionado com T0, o seguindo com T1, etc.).

A sintaxe do G-Code é uma única linha de qualquer tamanho, no seguinte formato:

<número de linha opcional> <comando> <parâmetros do comando> <checksum>


<comentário>

Os espaços são opcionais e ignorados, inclusive no meio de comandos. Uma linha


como G1_X100.500_Y109.500_E0.9516_F369 (com "_" no lugar de espaço para
melhor visualização) será interpretada exatamente como
G1X100.500Y109.500E0.9516F369 ou ainda
G_1X10_0._500Y109.5_00E0.9516_F36_9.

 Número de linha: normalmente nos códigos de impressoras 3D não são usados,


mas são suportados pela maioria dos softwares apesar de desencorajados. O
número tem que ser o primeiro campo da linha e precedido de "N", além de
sequencial: se a primeira linha começa com "N1", a segunda deve ser "N2". A
utilidade desses números é primariamente para estruturas de loops e
condicionais, que os firmwares de impressora 3D atualmente nem mesmo
suportam. Por isso não trataremos os comandos IF, GOTO, WHILE, os
registradores e as expressões condicionais de G-Code.
 Comando: É a palavra-chave que vai declarar a ação a ser tomada, com ou sem
argumentos. O G-Code não aceita mais de um comando por linha. Nas
impressoras 3D, estamos limitados a três comandos: G, M e T.
 Parâmetros: Assim como os comandos, os parâmetros são dados por uma letra
seguida por um número (positivo ou negativo; os negativos, obviamente,
começam com o sinal de "-"). Os tipos de parâmetro mais comuns passados para
comandos são:
o S era usado originalmente em CNCs para designar a velocidade (speed)
de rotação, mas em impressoras 3D este parâmetro não tem esta função.
Ele é usado como um parâmetro genérico para distância ou temperatura,
sendo usado em comandos de retração e ajuste de hotend e mesa.
o R de retract, velocidade adicional ligada à retração, usada em poucos
firmwares.
o F de taxa de alimentação (feedrate), sendo usado nas impressoras 3D
para designar velocidade. A unidade utilizada dependerá do comando e
da configuração do firmware.
o T é em poucos firmwares usado para feedrate de recuperação da retração.
Note que aqui T é parâmetro, não comando.
o X, Y e Z: coordenadas/distâncias. X10 Y5 Z30*, por exemplo, significa 10
unidades em X, 5 em Y, 30 em Z. O significado dessas coordenadas
dependerá da configuração e do comando — por exemplo, podem ser
coordenadas absolutas ou relativas à posição atual da ferramenta.
o E: quantidade de filamento do extrusor.
o A, B e C: coordenadas/distâncias angulares ou rotacionais. Não usadas em
impressoras 3D.
o P: parâmetro de uso geral, sem significado predefinido, para comandos
variados.
 Checksum: É um campo que contém um asterisco seguindo de um número de 0
a 255. Este número é calculado a partir de todos os caracteres da linha atual até
antes do asterisco, e serve para em conexões com ruído fazer uma verificação
simples se todos os caracteres chegaram corretamente. Não é usado em
impressoras 3D modernas.
 Comentário: Um campo que começa com ponto-e-vírgula (;) e é totalmente
ignorado pelo interpretador de G-Code. Serve simplesmente para humanos
entenderem o código. Uma linha de G-Code pode ser composta somente de
comentário, sem comandos.

Note que alguns comandos podem retornar uma mensagem que pode consistir de uma
ou mais linhas no mesmo "terminal controlador", como um comando que peça a versão
do firmware ou o estado atual do extrusor.

Considerando que na prática não usaremos números de linhas e checksums e que


usaremos espaços para ficarem mais legíveis, os comandos de g-code são assim:

Comando parâmetros ; comentário

Exemplo:

G1 E-0.5 F1200 ; ooze retract


O G1 é um comando de movimentação. O que ele vai movimentar, neste caso, será
determinado pelos parâmetros. Neste caso, o parâmetro “E” nos diz que é 0,5mm do
filamento, mas com o sinal de menos, significando que ele está retornando e não
avançando com o filamento; e com a velocidade dada por F1200, que é 1200 mm/min
(20 mm/s). O comentário nos esclarece que isto é um "ooze retract", ou seja, uma
retração para evitar escorrimento.

Agora que entendemos a sintaxe, portanto, vamos aos comandos. Comecemos pelos
comandos G mais básicos.

 G0 e G1 — são os comandos de movimento. Em seu passado de CNC, o G0 era


movimento "rápido" (na velocidade máxima suportada pela máquina,
equivalente ao travel) enquanto o G1 era o movimento linear controlado. Em
quase todos os firmwares de impressoras 3D de mercado, no entanto, o G0 e o
G1 são exatamente o mesmo comando, implementados como sinônimos e tendo,
obviamente, os mesmos parâmetros (curiosamente, fatiadores como Cura e
MatterControl ainda geram g-code que para alguns movimentos usa G0, para
outros G1). O comando tem 6 parâmetros possíveis; nem todos precisam ser
colocados, mas é preciso providenciar pelo menos um. São eles, onde n é o valor
numérico (inteiro ou racional) que segue:
o Xn: A posição para a qual mover o eixo X.
o Yn: A posição para a qual mover o eixo Y.
o Zn: A posição para a qual mover o eixo Z.
o En: A quantidade de plástico a extrudar entre o ponto inicial e final do
movimento, por default em unidade de comprimento de filamento que
entra (mm, por exemplo).
o Fn: A velocidade (por minuto) deste movimento.
o Sn: flag para ativar a verificação do endstop. Com S0 (default), o endstop
é ignorado, isto é, o firmware não vai parar se o fim de curso for ativado.
Com S1, o movimento pára quando o fim de curso de qualquer eixo for
detectado.

Se você já se perguntou sobre a denominação de "5D firmware" nas opções de G-Code


do Simplify3D, ela se refere a este comando — os 5 parâmetros ou "dimensões" X, Y, Z,
E e F. Implementações velhas dos comandos usavam menos parâmetros e o movimento
era quebrado em duas partes. Quase todo firmware existente hoje em dia é 5D.

O movimento do G0/G1 é "interpolado" entre os pontos. O que isso quer dizer é que ele
calcula uma linha reta no espaço entre a origem e o destino (a menor distância entre dois
pontos). Devido ao modo como a impressão 3D funciona, no entanto, com camadas
horizontais, comandos G0/G1 que envolvem o eixo Z são raros, a maioria funcionando
em um plano — nesse caso o Z é simplesmente omitido.

Exemplos:

G1 X20 Y20 F180 ; vai para X 20, Y 20 na velocidade de 180 unidades


; por minuto sem extrudar.
G0 X30 Y30 Z30 F180 E0.8 ; vai para X 30, Y 30, Z 30 na velocidade
; de 180 unidades por minuto extrudando
; 0,8 unidades de comprimento de filamento
; nesta trajetória.
Parece um comando simples o suficiente, não? Mas existem algumas peculiaridades a se
notar, que valem também para outros comandos:

1. Pra começar, preste atenção que o parâmetro de velocidade toma como entrada a
unidade por minuto de movimento. Isto está em contraste com a configuração da
maioria dos fatiadores, que coloca tais velocidades em comprimento por
segundo. É comum o usuário que começa a usar g-code manualmente se
esquecer de converter e não entender o resultado.
2. Qual comprimento, afinal, ele usa? A maioria dos firmwares usa como default o
sistema métrico para comprimento (milímetros), que pode ser mudado para o
sistema imperial (polegadas) com o comando G20, e mudado de volta para
milímetros com G21. Essa mudança fica somente na RAM da impressora, e volta
ao default quando desligada.
3. Se você não colocar a velocidade, qual valor o firmware adota? A maioria dos
softwares adota a política "pegajosa" (sticky), isto é, retém o último valor usado
para o comando. Se você especificar, sem mais nenhum parâmetro, G0 F600 e
logo depois G1 X40 Y10 (lembre-se, G0 e G1 são o mesmo comando), ele vai
para a posição X 40, Y 10 a 600 milímetros por segundo.
4. As coordenadas dadas são em relação à posição que o extrusor está ou em
relação ao ponto (0,0,0) da impressora, que definimos em seção anterior?
Assim que é ligada, o default dos firmwares é usar a coordenada absoluta, isto
é, se você manda G1 X40 Y10 Z20, o extrusor sairá de qualquer coordenada em
que estiver para ir à coordenada (40, 10, 20) em relação à origem. Para mudar
este comportamento, você usa o comando G91, que interpretará as próximas
coordenadas como relativas, isto é, em relação ao ponto atual; se seu extrusor
estiver na coordenada (10,10,10) e você enviar G91 e depois G1 X40 Y10 Z20,
ele vai ser dirigir a (10+40, 10+10, 10+20) = (50, 20, 30). No entanto, isto só
funciona se a origem tiver sido determinada, pelo procedimento chamado de
homing (dado pelo comando G28); se você mandar o comando de coordenada
absoluta antes do homing, o comportamento é indeterminado e dependente de
configuração e firmware. Em deltas com Marlin, por exemplo, por segurança o
extrusor não se move nessas condições. Para voltar ao modo absoluto, se usa
G90. Veja que tais modos não valem para as coordenadas do extrusor — ele tem
seu próprio status, ajustado para absoluto com o G-Code M82 (default) e para
relativo com o M83.
Figure 3. O movimento relativo no comando G1. Estando na coordenada espacial X=2,
Y=7, Z=5, o comando G1 X7.0 Y-2.0 Z-2.0 se desloca para a coordenada X=9, Y=5,
Z=3. Os pontos decimais não são necessários mas é considerado boa prática. Para se
chegar ao mesmo destino usando coordenadas absolutas (G90), bastaria usar G1 X9.0
Y5.0 Z3.0.

 G2 e G3 são comandos de movimentação como G0/G1 mas para arcos, como


descritos na seção sobre o problema dos círculos.
 O G4 é um comando de pausa por tempo. Para uso interativo de G-Code não tem
realmente utilidade, mas inserido em um arquivo .gcode de impressão pode
servir para permitir que um elemento esfrie ou aqueça, ou até dar tempo para
haver intervenção do operador (apesar que, neste caso, se a máquina tiver um
painel interativo, serão preferíveis os comandos M226 ou M600). Parâmetros do
G4:
o Pn — tempo em milissegundos para a pausa.
o Sn — tempo em segundos para a pausa.

G4 P10000 é equivalente a G4 S10.

 G10: comando para retração de firmware, por default não usado pelos fatiadores
(que implementam a retração usando G1). Usa os ajustes colocados pelo
comando M207.
 G11: "unretract" (volta da retração) por firmware, por default não usado pelos
fatiadores (que implementam o unretract usando G1). Usa os ajustes colocados
pelo comando M208.
 G20: passa a interpretar as unidades usadas nos parâmetros como polegadas. A
configuração é perdida quando a impressora é desligada.
 G21: passa a interpretar as unidades usadas nos parâmetros como milímetros. A
configuração é perdida quando a impressora é desligada.
 G28: Implementa o homing. Quando a impressora 3D é ligada, ela não "sabe" em
que coordenadas o extrusor está posicionado. Quando o comando G28 é enviado
para a impressora 3D cartesiana, ela vai até o fim de curso de cada eixo,
deixando no final do procedimento o extrusor na coordenada X=0, Y=0, Z=0 — 
a "origem". No caso das impressoras 3D delta, o G28 leva os braços até o topo de
cada torre, terminando com o effector no centro da mesa no plano XY e na maior
altura alcançável da impressora (Z máximo) — (0,0,Zmax). De ambos os modos,
a impressora passa a "saber" em que coordenada está, e se os próximos
movimentos do extrusor ou effector forem dados por ela, ela continuará tendo
esta referência.
O G28 não necessariamente vai até o fim de curso de todos os eixos. Se forem
passados parâmetros de eixos, ele vai até o fim de curso dos parâmetros (o valor
numérico do parâmetro é ignorado). Por exemplo, G28 X0 Y0 vai até o fim de
curso do eixo X e Y. É importante notar que o comportamento do G28 não é
muito padronizado e existem firmwares que podem fazer o homing completo
mesmo quando se especificam os eixos — o que torna um risco colocar esse
código na configuração de G-Code de fim de impressão. Alguns firmwares usam
"flags" de compilação para alterar o comportamento do homing — por exemplo,
o Marlin tem uma flag Z_SAFE_HOMING que faz com que o comando primeiro
faça homing em X e Y, então vá ao centro da mesa, baixe a sonda de
autonivelamento e a use para o homing em Z. Reiterando os parâmetros:
o Xn — vai até o fim de curso do eixo X. n é ignorado.
o Yn — vai até o fim de curso do eixo Y. n é ignorado.
o Zn — vai até o fim de curso do eixo Z. n é ignorado.
Figure 4. Homing de uma impressora 3D cartesiana (Prusa Mendel, à esquerda) e uma
delta (Kossel Mini, à direita). Enquanto na cartesiana o homing referencia o ponto
mínimo de todos os eixos, na delta o Z achado é a altura máxima, pois o fim de curso é
no topo. Se a delta não tiver autocalibração de mesa, a configuração de um "Zmax" com
valor errado a fará ficar com posicionamento vertical igualmente errado. A delta sempre
faz homing em todos os postes, não faz homing “por eixo” como uma cartesiana.

 G29, G32, G33 e os vários modos de autonivelamento de mesa — Neste ponto o


leitor já deve estar razoavelmente confortável com a noção de autonivelamento
de mesa: uma chave ligada ao extrusor detecta a distância dele à mesa em vários
pontos, calcula a inclinação da mesa e compensa, via software, no cálculo das
coordenadas passadas ao G-Code. Certo? A princípio sim, e este procedimento
surgiu nos firmwares através do comando G29. No entanto, enquanto o Marlin
continuou a estender esse comando para suas extensões de autonivelamento, o
Repetier Firmware deixou nele só a funcionalidade mais básica, reservando o
comando G32 para a avançada, e ainda passou a utilizar o G33 (utilizado no
Marlin para calibração automática de deltas) para sua "distortion correction",
equivalente à mesh leveling do Marlin. Já o Smoothieware usa G32 para
autocalibração de parâmetros de delta, e G31 e G30 para o autonivelamento, nem
mesmo tendo o G29.
Confuso? Você não é o único! Mas, colocando de maneira tabulada:
o O Smoothieware não tem o comando G29.
o O Repetier Firmware tem o comando G29, mas ele não faz
autonivelamento verdadeiro — ele apenas mede Z em 3 pontos e tira um
valor médio, não inclinando a impressão subsequente.
o O Marlin Firmware tem o comando G29 mais sofisticado e configurável
de todos. E na versão 1.1.0 ele tem ainda um novo modo chamado de
"Nivelamento de Mesa Unificado" que, se ligado, redefine o G29 e
adiciona *muito* mais parâmetros e configurabilidade ao comando.

Sonda de autonivelamento

O autonivelamento é associado a uma sonda (chave) no extrusor. Essa sonda é que


vai sentir a distância a que estará da mesa em cada um dos pontos. Se a sonda fica
abaixo do nível do bico, ela precisará ser abaixada somente durante a sondagem e
recolhida no final, para não bater na mesa quando a impressão começar. Ela pode
também estar acima do nível do bico e não precisar ser recolhida, como os sensores
Note
indutivos. Mas em praticamente todos os casos ela não fica no nível do bico, e a
diferença de altura entre ela e o bico precisa ser informada na configuração, assim
como outros detalhes técnicos — qual o pino do microcontrolador que usa, o tipo
de sinal (positivo ou negativo), que coordenadas sondar, etc. Essas configurações
todas são definidas na compilação do firmware e geralmente também se tornam
acessíveis pela EEPROM. Esses detalhes variam enormemente com o hardware e o
firmware usado.

Nas impressoras que têm o autonivelamento, o G29 é colocado no "Start G-Code" do


fatiador. Para funcionar ele exige que a impressora já saiba as coordenadas do extrusor,
ou seja, todo comando de autonivelamento vai exigir que o homing (G28) já tenha sido
feito, então no Start G-Code haverá o G28 e depois o G29 (ou G32 no caso do Repetier).
Algumas configurações colocam o G29/G32 apenas depois de a mesa ter atingido a
temperatura-alvo, pois ela se expande ligeiramente com o aquecimento e sondá-la já
expandida evita distorções.

O autonivelamento feito desse jeito é sempre necessário em toda impressão, pois a


inclinação da mesa fica na RAM — memória volátil - do microcontrolador e não é
gravada. Adicionalmente, ela é resetada cada vez que se faz homing (G28), precisando
ser refeita.

 Modos de detecção de desnível: O autonivelamento funciona de uma entre três


formas:
1. Mede-se o Z em 3 pontos e calcula-se a média (G29 do Repetier);
2. Mede-se o Z em 3 a 8 pontos e calcula-se um plano inclinado que passa
naqueles pontos (autonivelamento padrão);
3. Mede-se o Z em vários pontos da mesa e calcula-se uma malha de planos
inclinados interligados que mapeia as "imperfeições" da mesa. Este
método se usa quando há deformação da mesa.
 Modos de correção do desnível:
1. Usa-se uma média dos níveis de Z para a primeira camada. Se a
diferença for grande entre os desníveis, poderá fazer o bico raspar na
mesa. Ou ainda fazer com que o filamento não adira o suficiente. É
usado apenas no G29 do Repetier Firmware.
2. Com o plano de desnível detectado no método 2, toma-se uma de duas
ações:
1. Calcula-se por software uma transformação de inclinação
(rotação) a ser adotada para cada coordenada, para compensar a
inclinação;
2. Usam-se motores na impressora 3D para corrigir/rotacionar a
mesa para que fique paralela à direção de impressão.
3. Com o mapa de desnivelamento do método 3,
1. faz-se uma transformação diagonal em cada paralelepípedo do
mapa; ou
2. faz-se uma transformação diagonal regressiva em cada
paralelepípedo do mapa, tornando-se mais paralela à medida que
se aproxima de uma altura H.
Figure 5. Ilustração dos métodos de correção da mesa. (1) é a mesa reta, sem
imperfeições, com a peça impressa. (2) é a mesa inclinada, seja por transformações de
software para compensar as coordenadas, seja por ajuste da mesa por motores. (3) é
transformação por distorção, para a impressão acompanhar o relevo da mesa; e (4) é a
transformação por distorção compensada até uma altura H, a partir da qual a peça segue
em dimensões normais.
Comandos M de interesse: Os comandos M são extensões do G-Code inicialmente
usadas para elementos particulares das impressoras 3D em relação às suas parentes
CNC, mas logo se tomaram mais que isso, controlando até motores. Aqui uma lista dos
mais úteis:

 M0 — parada incondicional, esvaziando o buffer e desligando motores e


elementos de aquecimento.
 M18: desabilita todos os motores de passo, que em caso contrário permanecem
ligados e prendendo o movimento. Pode ser útil, por exemplo, caso você precise
mexer no carro X manulmente e ver se está deslizando suavemente no trilho.
Para a impressora voltar a energizá-los, use M17.
 M104 Snn: ajusta a temperatura-alvo do extrusor atual para nn, sem bloquear o
prompt.
 M106 Pm Snn: ajusta a ventoinha de número m para a intensidade nn de 0 a 255.
M107 a desliga.
 M109 Snn: ajusta a temperatura-alvo do extrusor atual para nn e bloqueia o
prompt, esperando que ele chegue à temperatura para liberar.
 M114: mostra posição atual (X, Y, Z e E)
 M115: mostra versão e capacidades do firmware.
 M119: mostra status dos endstop (acionados ou não).
 M140 Snn: ajusta a temperatura-alvo da mesa para nn, sem bloquear o prompt.
 M190 Snn: ajusta a temperatura-alvo da mesa para nn, bloqueando o prompt até
que seja atingida.

Fonte: https://github.com/Patola/ebook/blob/master/guia-maker-da-impressao-3d-
gcode.adoc

Você também pode gostar