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:
- 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.
- 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.
- 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