....mas vou tentar desenhar um esquema.
Aguardarei.
Já curto circuitei as entradas dos fins de curso do arduino e continua a interferência. Interessante que só ocorre quando é acionado os motores. Quando o motor começa a rodar aciona os fins de cursos. Mesmo com os cabos dos fins de cursos desconectados no arduino também aciona. Mas quando eu desconecto os cabos dos motores, o software funciona normalmente. Tudo indica que é ruído emi, mas tudo que tinha que fazer isolação eu penso ter feito.
Com relação ao mesmo ponto de conexão 0v, tá dificil fazer isto porque com isto tudo eu fiz duas caixas metálicas aterradas e distantes uma em cada lado da máquina (uma para o arduino e outra para a fonte).
Já fiz anteriormente uma cnc grande de 3x2metros com computador e ficou perfeita. Desta vez estou fazendo esta pequena e resolvi inventar usar arduino.
Mas na minha leiga opinião, o arduino cnc shield é montado os drives encaixando em cima da placa do arduino conforme a foto. Sendo que entre os drives e o arduino não há optoacopladores. Estou pensando em separar os drives da placa arduino e adicionar optoacopladores. Mas já tá dando trabalhos este arduino............ e acho que nem compensa. Tenho aqui um osciloscópio digital de 50mhz, mas para achar esta interferência nem sei por onde começar com ele.
Para resolver problemas de ruído e interferência,
menos é mais. Ou seja, deve-se matar a causa, sem muitas "magias" aterramentos, conexões e cabos excessivos e desnecessários. Evidentemente, identificar a causa é essencial, para não "dar tiros à esmo", gastar tempo, dinheiro e o pior, sem acertar...
A construção do Arduino e do Servo Shield não é lá muito boa, considerando que possui vários conectores finos para conduzir correntes eventualmente elevadas dos motores (até 2,5A com o drv8825), além disso, o lay-out deficiente, o pequeno calibre (largura e espessura) da trilhas e longo comprimento, resulta numa indutância relativamente elevada para a operação em frequências de dezenas de kHz do drv8825. Ou seja, a alta frequência presente no circuito de alimentação dos motores poderia ser uma das causas.
Ligue seu osciloscópio nas conexões de alimentação do drv8255 (+ e -), com acoplamento AC (para medir as componentes de alta frequência - ruído) e retire (desligue) quaiquer filtros de baixa frequência no osciloscópio. Ajuste no osciloscópio uma base de tempo de 1 milissegundo por divisão, ou menos. Meça a amplitude do ruído com motor ligado e desligado, na escala de 1Volt por divisão ou menor.
Experimente colocar alguns (2 a 3) capacitores de poliéster de 0.1uF e de cerâmica em paralelo, junto à conexão de alimentação para os motores na placa Servo Shield. Meça o ruído após colocar os capacitores.
Além disso:
(1) A fonte dos motores deve ser bem estável e independente da fonte do Arduino.
(2) Experimente alimentar o Arduino com fonte externa. A alimentação através do PC, via cabo USB, pode não conferir a estabilidade e a imunidade a ruído necessárias. Você pode inclusive medir o ruído na alimentação do Arduino (entre os pinos +5 e 0V da placa) ao ligar o motor.
(3) Muita atenção às conexões de retorno (0V), que pode acoplar ruído entre partes de seu sistema. Não adianta "sair aterrando tudo" se a montagem é precária!!
Você mencionou usar fotoacopladores, ao invés disso, eu instalaria o Shield longe do Arduino, junto à fonte dos motores, levando apenas os sinais de pulso e direção através de cabo blindado. Não conheço este shield, mas poderia ter uma construção ou lay-out deficientes e com poucos planos de terra. Podendo induzir correntes significativas na placa do Arduino devido à pequena distância. Note que as entradas de um Arduino possuem alta impedância (prato cheio para fontes interferentes), por isso, use resitores de pull-up de 1K ou até menores. Que em seu caso parecem não ter resultado (um curto não inibe o ruído).