Fazendo placas de circuito em uma CNC Arduino

Intro

Algum tempo atrás, estava navegando na internet quando acredito que vi uma ad de uma máquina CNC Arduino da gearbest. Estava com 30% de desconto na época (140$, mais 40$ de envio para o Brasil) o que pareceu ser um bom negócio.  Acabei por comprá-la, mas porque eu precisaria de uma máquina assim em primeiro lugar?

A CNC T8

 

Tenho eletrônica como hobby e provavelmente como profissão no futuro. Estudo Engenharia Elétrica, mas nunca gostei de sistemas elétricos de potência. Então, gasto mais meu tempo programando, em design de circuitos, eletrônica analógica, etcetera etcetera.

De qualquer forma, nunca tive uma maneira confiável de prototipar projetos. Geralmente, como pode ser visto em muitos posts aqui no Dragão, eu frequentemente uso veroboards pra montar circuitos. Mas há muitos problemas nisso:

  • Muita solda, e consequentemente, vapores;
  • Pode ficar muito bagunçado quando se usa muitos fios;
  • Geralmente são usados apenas componentes through-hole.

 

Um leitor de pocketstation construído em uma veroboard

Tudo bem, eu poderia usar o método transferência térmica, mas:

  • Não tenho acesso a uma impressora laser, e nem tenho interesse em comprar uma, visto que essas são muito caras;
  • Componentes químicos. Um prazer de se usar, limpar e se livrar;
  • Ainda é preciso fazer furos manualmente.

Por isso, uma cnc pareceu uma boa opção, mas eu sabia que ela tinha desvantagens:

  • Pó. Os materiais que compõe a placa de circuito podem ser perigosos de se inalar.
  • O design e fresa de uma placa podem ser demorados, não é uma forma rápida de se prototipar.

Eu comprei a cnc por impulso. E quando chegou no Brasil eu fui taxado os 60% . Ainda assim, não tive a chance de me arrepender, pois ainda pareceu um bom negócio. Não encontrei máquinas dessa no Brasil, nem dos aproveitadores que importam e vendem a preços absurdos.

70 dias depois do envio, sim 70 dias, eu recebi a máquina em casa. Não era o modelo que comprei originalmente, mas parecia de melhor qualidade (bom pra mim).

Eu recebi a CNC em Janeiro, mas apenas agora pude terminar esse artigo. Primeiro, me tomou muito tempo descobri como usar ela da forma mais eficiente. Segundo por causa da faculdade.

A CNC

Essa CNC é vendida como uma máquina de gravação. Sua estrutura é feita de alumínio, então é bastante rígida. Algumas pessoas tiveram a sorte de conseguir fazer PCIs com ela, e eu posso confirmar que funciona perfeitamente. Eu acho ela pequena, no entanto.

  • Área de trabalho: em torno de 10*13cm, se você conseguir segurar a placa, sua própria mesa de trabalho é menor que isso.
  • Tecnicamente, o pacote vem com tudo que você precisa (menos o software), incluindo as fontes. Sim, duas delas. Eu fiz algumas pequenas mudanças no entanto.
  • Vem com GRBL 0.9 rodando na placa arduino UNO mais barata possível, também inclusa. Já configurada, no meu caso.
  • GRBL e o CNC shield possuem suporte a auto level.
  • A  velocidade da fresa não pode ser controlada. Ou está ligada ou desligada.

Montagem

Há muitos tutoriais sobre a parte da montagem online. Eu não tenho uma câmera boa de qualquer forma, então vamos pular essa parte. Irei deixar alguns links no final do artigo, mesmo assim.

Ah, não há manuais ou algo do tipo, apenas as peças. De qualquer forma, é como um lego pro, apenas junte as peças :)

Ajustes

A página do produto diz:

“Modification and customization of the 3D printer is strictly forbidden. We will take no responsibility for any problems resulting from modifications.”

Engraçado. Continue.

Tudo bem, acho que consegui montar a máquina da forma que os criadores imaginaram, mas fiz “algumas” modificações pra torná-la melhor.

Primeiramente, o mais problemático, o eixo Z:

  • No kit haviam espaçadores para segurar as peças onde o motor é montado. Porém estas eram mais finas que os buracos onde encaixam. Isso acabou causando desalinhamento. Eu substitui os espaçadores por parafusos, como pode ser visto abaixo.  Usei um pedaço de metal pra ter certeza que as placas estavam perfeitamente alinhadas, apenas inserindo-o entre as duas placas e ajustando os parafusos de acordo.
  • Havia uma quantidade significativa de folga no eixo Z, isso era causado por imperfeiçoes nas buchas no mesmo eixo. Felizmente,  eu tinha algumas buchas na sucata, de impressoras jato de tinta que eu desmontei anteriormente, então substituí as originais com essas. Ficou ótimo.
Bucha reciclada e bucha original
Três parafusos seguram as duas placas da parte do motor

Área de trabalho:

  • A mesa da CNC é minúscula. Na verdade, é menor do que a distancia que o eixo pode ir. Eu coloquei um pedaço de madeira sobre a mesa de alumínio, segurando-o com os parafusos originais da mesa. Eu recomendo que madeira seja usada, pois ela pode ser perfurada sem grandes problemas se algo der errado. Além disso, essa isola a PCB da estrutura metálica quando é feito o auto level.

Adição do auto-level:

  • GRBL tem suporte ao auto level, mas a máquina não o usa por padrão. Eu simplesmente conectei cabos jumper aos pinos A5 e GND e usei cabos boca de jacaré para estendê-los. É importante ter certeza de que o fio positivo está conectado à placa e o negativo a broca. Do contrário, a máquina irá registrar contatos falsos.

Configuração do motor de passo:

  • Todos os meus motores de passo pareciam exatamente iguais, mas um deles tinha etiqueta diferente dos outros dois. Felizmente eu notei isso antes de montar a máquina. Assim, usei o motor diferente no eixo Z. Mais tarde, notei que este motor estava movendo apenas metade do que foi dito pelo software, então eu tive que dobrar o número atual de passos por milímetro. Isso foi bem simples, primeiro é só abrir o IDE Arduino e usar o terminal serial em 115200bps  (você pode usar outro terminal também, sinta-se a vontade).

Digite $$ para ver as configurações atuais do GRBL, as minhas estavam assim:

$0=10 (step pulse, usec)
$1=25 (step idle delay, msec)
$2=0 (step port invert mask:00000000)
$3=3 (dir port invert mask:00000011)
$4=0 (step enable invert, bool)
$5=0 (limit pins invert, bool)
$6=0 (probe pin invert, bool)
$10=3 (status report mask:00000011)
$11=0.010 (junction deviation, mm)
$12=0.002 (arc tolerance, mm)
$13=0 (report inches, bool)
$20=0 (soft limits, bool)
$21=0 (hard limits, bool)
$22=0 (homing cycle, bool)
$23=0 (homing dir invert mask:00000000)
$24=25.000 (homing feed, mm/min)
$25=500.000 (homing seek, mm/min)
$26=250 (homing debounce, msec)
$27=1.000 (homing pull-off, mm)
$100=800.000 (x, step/mm)
$101=800.000 (y, step/mm)
$102=800.000 (z, step/mm)
$110=400.000 (x max rate, mm/min)
$111=400.000 (y max rate, mm/min)
$112=400.000 (z max rate, mm/min)
$120=200.000 (x accel, mm/sec^2)
$121=200.000 (y accel, mm/sec^2)
$122=200.000 (z accel, mm/sec^2)
$130=200.000 (x max travel, mm)
$131=200.000 (y max travel, mm)
$132=200.000 (z max travel, mm)

Então eu tinha que dobrar o valor da variável 102 para compensar o motor diferente, isso foi feito simplesmente digitando-se “$102=1600.000” no terminal. Recebi um “ok” como resposta. Digitando $$ novamente, retornou o seguinte:

$0=10 (step pulse, usec)
$1=25 (step idle delay, msec)
$2=0 (step port invert mask:00000000)
$3=3 (dir port invert mask:00000011)
$4=0 (step enable invert, bool)
$5=0 (limit pins invert, bool)
$6=0 (probe pin invert, bool)
$10=3 (status report mask:00000011)
$11=0.010 (junction deviation, mm)
$12=0.002 (arc tolerance, mm)
$13=0 (report inches, bool)
$20=0 (soft limits, bool)
$21=0 (hard limits, bool)
$22=0 (homing cycle, bool)
$23=0 (homing dir invert mask:00000000)
$24=25.000 (homing feed, mm/min)
$25=500.000 (homing seek, mm/min)
$26=250 (homing debounce, msec)
$27=1.000 (homing pull-off, mm)
$100=800.000 (x, step/mm)
$101=800.000 (y, step/mm)
$102=1600.000 (z, step/mm)
$110=400.000 (x max rate, mm/min)
$111=400.000 (y max rate, mm/min)
$112=400.000 (z max rate, mm/min)
$120=200.000 (x accel, mm/sec^2)
$121=200.000 (y accel, mm/sec^2)
$122=200.000 (z accel, mm/sec^2)
$130=200.000 (x max travel, mm)
$131=200.000 (y max travel, mm)
$132=200.000 (z max travel, mm)

Após isso, eu pude mover o eixo Z na distância correta mostrada pelo bCNC.

Arduino e GRBL

Depois eu também troquei o Arduino por um melhor e atualizei o GRBL para 1.1, pois tive alguns problemas com a máquina pulando alguns passos, mas acho que pode ter sido simplesmente um mal contato do shield com a placa Arduino.

Em seguida, vou usar um projeto meu como exemplo, uma espécie de tutorial. Vou criar os arquivos gerber no eagle e depois exportar o gcode correspondente para usar com o bCNC, explicando todos os passos.

Eagle e Flatcam

Eu uso  GNU / Linux, mas acredito que o software mencionado aqui está disponível para outros sistemas, como ridiculamente caro e simplesmente horrível. Em seguida, explicarei como obter os arquivos gcode para fresamento.

Eu tenho usado o Eagle, principalmente porque é fácil, tem boas bibliotecas de componentes disponíveis on-line (veja as da adafruit e sparkfun), e também é gratuito para pequenas placas. Eu uso a versão 7, que é a última antes de ter sido comprado pela autodesk, que estragou tudo. Eu pretendo mudar para o KiCad quando tiver tempo para estudar, no entanto.

 

Esquema

 

Layout da Placa

 

Depois de criar a placa, exporto os arquivos gerber (File > CAM Processor).

Eu irei fresar a parte de baixo da placa, então a opção mirror será usada. Caso fosse o layer de cima, isso não seria necessário, claro.

Para exportar o arquivo gerber com as trilhas, escolha os layers Bottom (ou Top), Pads e Vias. também escolha GERBER_RX274X em device e clique em Process Job para gerar o arquivo.

Para exportar o arquivo com os furos (excellon), escolhar os layers Drills e Holes e então escolha EXCELLON_24 em device:

Agora as opções de fresa são configuradas no flatcam.

Flatcam

O Flatcam é usado para criar os arquivos gcode. Primeiramente, precisamos abrir ambos os arquivos gerber e excellon.

Eu gosto de colocar a placa o mais próximo possível da origem. Isso é útil quando se usa uma placa de cobre um pouco maior que o seu design, mas não é obrigatório. Para isso, a opção offset é usada. Neste caso, movi o design  -10 unidades para baixo, em ambos arquivos.

Agora ambos arquivos estão próximos da origin:

Agora, para o arquivo com as trilhas. Clique duas vezes no arquivo gerber e a guia Selected será exibida. Aqui eu configuro para uma broca 0.1mm, com uma única passada. Você verá que funcionou bem, mas é recomendado aumentar o número de passadas, caso contrário você provavelmente terá curto-circuitos ao soldar a placa.

Depois de clicar em generate geometry, um arquivo com o mesmo nome, mas terminado em iso, será criado:

 

Nesta etapa, são configuradas as outras opções de fresamento. Eu uso -0.1mm como profundidade de corte; a broca sobe 5 mm acima do quadro ao se movimentar; o feed rate usado é de  150mm/s e novamente o diâmetro da broca também é 0,1mm. Eu usei 3000 rpm como velocidade do spindle, mas a máquina não tem velocidade variável na fresa, claro. Mas isso foi necessário, já que o kit foi configurado para velocidade variável e espera um valor de velocidade, caso contrário o motor não liga.

Você pode recompilar GRBL e atualizar o arduino para usar a velocidade fixa. Não é trivial, então não vou discutir isso aqui, talvez em outro post :)

Depois de clicar em Generate, nós temos o arquivo cnc.

Escolha o arquivo cnc e exporte o gcode com a extensão “.nc” .

A seguir, o arquivo excellon é configurado, clique no mesmo para abrir a aba Selected.

Neste arquivo eu só tinha dois tamanhos de furo. Usar apenas uma broca de 1mm funciona sem problemas nesse caso. Por isso, selecionei os dois tamanhos. Se você tiver vários tamanhos de furo diferentes, talvez seja necessário criar arquivos separados para as brocas correspondentes.

Eu usei 1.6mm como profundidade do furo, a espessura da placa cobre. A altura 5 mm quando em movimento e feed rate de 75mm/s. Você não deve aumentar muito a velocidade ou a broca pode quebrar. Clique em Generate para criar o arquivo cnc.

Clique no arquivo cnc e exporte-o da mesma forma. Eu usei o nome holes.nc

Similarmente, você pode criar o corte da placa. Crie a geometria a partir do arquivo gerber:

Eu não tenho a broca adequada pra cortar a placa, então uso uma broca regular em v apenas para “riscar” a placa, de forma que eu possa simplesmente dobrar a placa para destacar a parte usada. A profundidade de corte usada foi de 0.8mm,  com feed rate de 75mm/s.

Fresando com o bCNC

Primeiramente,  eu seguro a placa na mesa com fita dupla face grossa. Seja generoso, a placa pode soltar e você provavelmente vai ter que começar do zero com uma outra placa de cobre. Ah, não esqueça de usar uma placa na qual caiba o seu circuito.

O bCNC é usado para fresar e perfurar a placa usando os arquivos gcode criados anteriormente. Primeiro, abra a porta serial na qual a cnc está conectada.

A broca deve ser movida para a parte inferior esquerda da placa usando os botões de controle. O eixo Z deve estar quase tocando a superfície.

Em seguida, os três eixos são zerados clicando-se em X=0, Y=0 e Z=0:

 

Então, é aberto o arquivo gcode que se quer fresar.

Agora, o auto level é usado. Este irá definir  a qualidade da placa, se realizado corretamente, garantirá um fresamento perfeito. Eu tentei fazer com que funcionasse assim que montei a máquina. Uma CNC sem auto level pode deixar algumas partes de uma placa sem fresamento, ou furar muito fundo quando não deveria. Geralmente as placas de cobre possuem imperfeições ou são visivelmente empenadas. A rotina de Autolevel mede a altura da superfície da placa, levando essas medidas em conta ao fresar a placa.

A ponteira de auto level. O cabo vermelho está conectado em um pedaço de malha de solda, fixado na pcb com um pedaço de fita.

 

Clique na aba Probe, e então em Autolevel. Clique então no botão margin para selecionar a área de mapeamento. Você pode ajustar o número de pontos selecionando N no painel Autolevel no lado esquerdo.

Além disso, é muito importante selecionar os limites do eixo Z. Eu usei um valor mínimo de -2.0mm, então no caso da ponteira não encontrar a placa, o procedimento irá parar 2mm abaixo de zero, evitando maiores danos.

Quando terminar de configurar, verifique se as suas ponteiras estão conectadas corretamente e pressione a tecla Scan.

Quando o nivelamento terminar, a área de trabalho terá sido mapeada como a figura abaixo.Este é o arquivo de corte, mas a calibragem é a mesma. Eu esqueci de tirar um print com o outro arquivo.

 

Agora que tudo está certo, o arquivo pode ser fresado, mas não esqueça de remover as ponteiras! Eu esqueci uma vez e o spindle girou e rebentou o cabo de prova fazendo uma bagunça.

Para começar a fresar, basta apertar o botão play na aba Control.

fresa da pci

 

Concluída a etapa de fresa, o arquivo de perfuração pode ser aberto, mas mantendo as medições do auto level quando perguntado. Como a broca de perfuração geralmente é mais alta a broca de fresa em v, o eixo Z deve ser zerado novamente:

 

A próxima figura mostra a etapa de perfuração da placa.

Finalmente, o arquivo de corte é aberto. O eixo Z deve ser zerado novamente.

Resultado Final

A placa foi fresada sem problemas, como visto abaixo:

Depois de pronta eu percebi que deveria ter aumentado o tamanho dos pads. Mas placa funcionou perfeitamente, eu só tive que tomar cuidado na hora de soldar

A placa terminada:

Eu criei essa placa para fazer experimentos com MIDI.

É possível fazer placas smd, mesmo assim?

Nenhum problema

 

O vídeo abaixo possui partes dos processos de nivelamento, fresamento e perfuração. Pode ser visto que eu coloco óleo de máquina sobre a placa, o óleo suspende as partículas de fenolite, impedindo-as de escapar para o ar.

 

 

Conclusões

Estou muito feliz com a máquina agora, pois tenho uma maneira de criar protótipos melhores. Levei algum tempo para aprender a usá-la e corrigir alguns problemas, mas agora ela está funcionando melhor do que eu esperava.

A estrutura da máquina é bastante robusta e peças de reposição estão disponíveis, se necessário. Ele usa uma placa Arduino, que também é super fácil de atualizar ou substituir.

Ter software de excelente qualidade que funciona no Linux é uma enorme vantagem. Mas o software também está disponível para as outras paródias de sistemas operacionais.

Agora, eu só tenho que saber como fazer PCBs frente e verso :)

É isso por agora. Obrigado pela leitura!

 

Referências:

T8 CNC product page – Gearbest

Modelo mais barato – Gearbest

T8 CNC Assembly – Sreenzone

Another T8 CNC Assembly – HomoFaciens

Eagle how to – Flatcam

Conecting GRBL – GRBL Wiki

 

 

 

Robson Couto

Recentemente graduado Engenheiro Eletricista. Gosto de dedicar meu tempo a aprender sobre computadores, eletrônica, programação e engenharia reversa. Documento meus projetos no Dragão quando possível.

2 thoughts to “Fazendo placas de circuito em uma CNC Arduino”

  1. Ótimo post! Pretendo construir a minha do zero algum dia(conseguir construir ao menos um cartucho repro tb e outro projeto). Sobre o motor pular alguns passos, eu sei que isso acontece quando se usa velocidades “altas” em motores de passos, e dai ele termina perdendo precisão e pulando passos, pelo que testei nos meus e pesquisei era isso.

    1. OI Wesley

      Desculpa a demora na resposta, o site não está notificando por algum motivo.
      Minha ideia original era fazer a minha do zero também, tanto é que comprei a parte da eletrônica, mas empaquei na estrutura, já que não tinha ferramentas pra cortar a madeira etc.
      Verdade! Velociadades altas realmente podem fazer o motor pular passos, porém acho que não foi o caso pois estava operando a máquina a uma velocidade abaixo da metade da nominal. E depois isso parou de acontecer, então acho que era o arduino mesmo.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *