Tutorial · Intermediário · 30 min

Referenciamento e fins de curso: coordenadas de trabalho

Entenda o referenciamento de uma máquina CNC, a busca em três fases, os limites de software e a diferença entre o zero da máquina e o do trabalho.

O problema que o referenciamento resolve

Um eixo com motor de passo operando em circuito aberto registra corretamente todos os comandos de movimento que recebe, mas não sabe de fato onde está. Ao ligá-lo, o contador interno de posição mostra zero — não porque o carrinho esteja na posição zero, mas porque é esse o valor inicial de um contador.

Pior ainda, o contador pode estar errado mesmo enquanto a máquina está funcionando. Um passo perdido é silencioso: o driver continua contando pulsos, o firmware continua acreditando neles e o carrinho fica permanentemente deslocado por um múltiplo de quatro passos completos. Nada no laço de controle perceberá isso, porque não existe laço de controle.

O referenciamento é a resposta para os dois problemas. É o único momento da operação de uma máquina em que a posição é medida no mundo físico, em vez de acumulada por contagem — e tudo o que vem depois depende disso.

A busca em três fases

Vá até o interruptor, pare quando ele for acionado e considere essa posição zero. O método funciona, mas a repetibilidade fica em torno de meio milímetro, o que é inutilizável. Toda máquina real faz isso em três passadas:

Posição do eixo em milímetros contra o tempo em segundos, mostrando um ciclo de referenciamento. A primeira fase, uma busca rápida, vai de 46 milímetros até a linha de acionamento do interruptor, em 2,4 milímetros. A segunda fase recua até 7 milímetros. A terceira fase se aproxima novamente lentamente e aciona o interruptor outra vez, em 2,55 milímetros, onde o traço se estabiliza. Uma linha tracejada vermelha marca onde o interruptor é acionado, uma linha sólida em zero marca o zero da máquina G53, e uma linha pontilhada em 18 milímetros marca um zero de trabalho G54 escolhido como deslocamento.
Rápido, recuo, lento. A primeira passada só precisa encontrar o interruptor; a segunda aproximação é a que define a posição, e ela é lenta precisamente para que o ponto de acionamento do interruptor seja repetível. Baixar SVG
  1. Busca rápida. Avance em direção ao interruptor a uma velocidade que priorize rapidez, não precisão. Esta passada existe apenas para se aproximar e pode percorrer todo o comprimento do eixo.
  2. Recuo. Recue alguns milímetros até que o interruptor seja liberado. Isso torna possível a terceira passada e também confirma que o interruptor está funcionando, e não travado.
  3. Nova busca lenta. Aproxime-se novamente a uma velocidade que seja uma pequena fração da primeira e registre o ponto de acionamento. Este é o valor medido.

A importância da passada lenta decorre da mecânica. Um microinterruptor de alavanca é acionado quando o pino atuador percorre uma distância específica, mas o carrinho continua se movendo enquanto o firmware reage e enquanto o eixo desacelera. A 50 mm/s, com latência de detecção de 2 ms, o carrinho percorre 0,1 mm além do ponto de acionamento antes de o sistema detectar a mudança. A 2 mm/s, percorre 0,004 mm. A aproximação lenta converte a repetibilidade do próprio interruptor — alguns micrômetros em um bom microinterruptor — na repetibilidade do posicionamento da máquina, em vez de deixar a distância percorrida durante a desaceleração dominar o resultado.

Ajustes típicos parecem com isto:

Parâmetro Valor típico Motivo
Avanço da busca rápida 30–50 mm/s Rápido o suficiente para não ser impraticável
Distância de recuo 3–5 mm Suficiente para liberar totalmente o interruptor
Avanço da busca lenta 1–3 mm/s Torna desprezível a distância percorrida durante a desaceleração
Afastamento após o referenciamento 1–5 mm Mantém o interruptor liberado para que também possa atender como limite

Fiação de um fim de curso

O interruptor é o mesmo microinterruptor de alavanca que um robô usa como para-choque, e a regra de fiação é a mesma:

const int X_MIN_PIN = 9;

void setup() {
  pinMode(X_MIN_PIN, INPUT_PULLUP);   // NO to ground, pin pulled up
}

bool endstopTriggered() {
  return digitalRead(X_MIN_PIN) == LOW;
}

Conecte COM ao terminal terra e NO ao pino, com o pull-up interno habilitado. Assim, um fio rompido é lido como “não acionado”. Para um interruptor de referenciamento, esse é o estado seguro: a máquina não encontra o zero e para, em vez de concluir que já está na posição correta.

Essa configuração é oposta à de uma parada de emergência, na qual o contato normalmente fechado deve fazer com que um fio cortado pare a máquina. Um interruptor de referenciamento e uma parada de emergência exigem estados seguros opostos; ligar os dois da mesma maneira é um erro real, não uma questão de estilo.

Dois detalhes causam a maior parte dos problemas com fins de curso:

  • Trate as oscilações do contato. Uma única pressão produz cerca de nove transições em 4,7 ms. Durante o referenciamento, a entrada é consultada em um laço muito rápido; por isso, a primeira borda é a que interessa, e tudo o que vier depois deve ser ignorado por alguns milissegundos. Nunca conecte uma rotina de interrupção que conte bordas.
  • Afaste o fio do interruptor de fim de curso dos fios dos motores. Um fio longo e sem blindagem, paralelo a um cabo de motor de passo com chopping, capta exatamente o tipo de ruído que simula o fechamento do interruptor. Se o referenciamento funciona com os motores desativados e falha quando eles estão em funcionamento, esta é a causa provável.

Coordenadas da máquina e coordenadas do trabalho

Depois do referenciamento, a máquina conhece com precisão uma única informação: a posição do interruptor de fim de curso. Esse ponto, somado a um deslocamento fixo, define o zero da máquina — no G-code, o sistema de coordenadas G53. Essa posição é uma propriedade do referencial: não se move e é a mesma após cada ciclo de referenciamento.

Quase nunca é desse ponto que você quer medir o trabalho. Por isso, as máquinas mantêm uma segunda origem, móvel: o sistema de coordenadas de trabalho, G54 a G59, definido como um deslocamento do zero da máquina.

Característica Coordenadas da máquina (G53) Coordenadas do trabalho (G54…)
Origem Fixada pelos fins de curso e pelo referencial Onde você a definir
Definida por Referenciamento Você, a cada peça
Sobrevive a uma reinicialização Sim, após um novo referenciamento Sim, pois fica armazenada no controlador
Usada para Limites de software, trocas de ferramenta e posições de estacionamento Cada linha do trabalho real
Muda quando a peça é fixada novamente Não Sim — esse é o objetivo

Essa separação é útil assim que você executa o mesmo trabalho duas vezes. O G-code diz “desenhe um quadrado de 50 mm começando em X0 Y0”. Fixe o papel em um lugar conveniente, desloque o carrinho até o canto, faça o zeramento das coordenadas do trabalho ali e execute. Mova o papel, repita o zeramento e execute o mesmo arquivo. O programa não mudou; o deslocamento mudou.

O zero da máquina pertence ao referencial; o zero do trabalho, à peça. Mantê-los separados é o que permite mover uma peça sem editar o arquivo.

Limites de software

Com uma origem de máquina conhecida, o firmware pode recusar movimentos que saiam do volume de trabalho — antes de o carrinho alcançar essa posição. Esses são os limites de software, estritamente superiores aos de hardware porque param a máquina em uma desaceleração planejada, e não por colisão.

; GRBL
$20=1        ; soft limits on
$130=200.0   ; X max travel, mm
$131=200.0   ; Y
$132=60.0    ; Z

Uma máquina com limites de software ativados, mas sem ciclo de referenciamento, tem limites de software que não consegue aplicar, porque o volume de trabalho é medido a partir de uma origem que ela ainda não tem. Por isso, a maioria dos firmwares se recusa a executar antes do referenciamento. Nesse caso, a mensagem de erro não é um incômodo: é o intertravamento operando como deve.

Os interruptores de fim de curso de hardware na extremidade de cada eixo constituem uma barreira de proteção separada e mais básica para os casos em que os limites de software estão incorretos. Muitas máquinas pequenas os omitem e dependem apenas dos limites de software, uma escolha razoável quando nenhum componente da máquina possa causar ferimentos.

A máquina de estados

O referenciamento é naturalmente uma pequena máquina de estados finita. Implementá-lo como uma permite tratar explicitamente os tempos-limite:

enum HomeState { IDLE, SEEK_FAST, BACK_OFF, SEEK_SLOW, HOMED, FAILED };
HomeState state = IDLE;
long stateStartedAt = 0;

void homingStep() {
  switch (state) {
    case SEEK_FAST:
      if (endstopTriggered()) { stopNow(); enter(BACK_OFF); }
      // an axis that never finds its switch must give up, not grind
      else if (travelled() > AXIS_LENGTH_MM + 10) enter(FAILED);
      break;

    case BACK_OFF:
      if (!endstopTriggered() && travelled() >= BACKOFF_MM) enter(SEEK_SLOW);
      break;

    case SEEK_SLOW:
      if (endstopTriggered()) {
        stopNow();
        machinePosition = HOME_OFFSET_MM;   // the one real measurement
        enter(HOMED);
      } else if (travelled() > BACKOFF_MM * 2) enter(FAILED);
      break;
  }
}

Os ramos FAILED são a parte que vale copiar. Um eixo que procura o interruptor, mas nunca o aciona, pode ter um interruptor desconectado, um carrinho travado ou estar perdendo todos os passos que recebe. Nos três casos, a resposta correta é parar e informar a falha. Uma rotina de referenciamento sem tempo-limite pode manter o carrinho pressionado contra a estrutura por um período indeterminado.

Quando dá errado

Sintoma Causa Correção
O referenciamento termina em um ponto ligeiramente diferente a cada execução Não há uma segunda busca lenta, ou ela é rápida demais Adicione a nova busca e reduza a velocidade para 1–3 mm/s
O eixo avança na direção errada e colide A direção do referenciamento ou do motor está invertida Inverta a configuração de direção ou reverta um par de bobinas
“Fim de curso acionado” antes de qualquer movimento O interruptor está ligado normalmente fechado ou travado Verifique NO versus NC e confirme que o pino é lido como alto quando liberado
Funciona com os motores desligados, mas falha com eles em funcionamento O fio do fim de curso está captando ruído do driver Afaste-o dos cabos dos motores e adicione um capacitor de 100 nF à terra
O referenciamento é preciso, mas todos os movimentos ficam deslocados HOME_OFFSET ou afastamento incorretos Meça a distância do interruptor até a posição em que você quer o zero
A máquina se recusa a se mover após ser ligada Limites de software ativados sem referenciamento Faça o referenciamento: trata-se do intertravamento, não de uma falha
O ciclo se repete corretamente, mas a peça termina no lugar errado Deslocamento de trabalho incorreto, e não referenciamento Faça o zeramento do G54 na posição real do trabalho
O eixo Z faz o referenciamento contra a mesa Direção do Z invertida ou deslocamento da sonda não definido Verifique a direção antes de confiar em qualquer deslocamento

Onde isso se encaixa

O referenciamento é como uma máquina em circuito aberto recupera a única informação que ela estruturalmente não consegue medir. Vale deixar claro o que ele corrige — e o que não corrige: torna a posição da máquina correta no início de um trabalho, e nada mais. Se o eixo está perdendo passos no meio do trabalho por causa do limite de corrente incorreto ou do perfil de aceleração inadequado, fazer o referenciamento entre execuções apenas redefine o erro como zero a cada vez, sem corrigir a causa.

O diagnóstico é simples: uma máquina que faz o referenciamento com precisão, mas termina o trabalho no lugar errado, tem um problema de movimento, não de referenciamento.

Explore o grafo

Faz parte destas montagens

Projetos e caminhos de aprendizagem que incluem este tutorial.

Leitura complementar

Referências